人类,可能还有鲸鱼等一些动物能够通过语言进行交流,从而识别声音或单词的语义。语义学是与意义有关的语言学和逻辑学的分支。人类语言和人性一般都是含糊不清的:相同的词在不同的上下文中可能有不同的含义。有些专门术语只有某些人群才能理解——例如来自同一职业或行业的专业人士。难怪法学硕士模型在从企业数据库中为人类用户获取信息时会感到困惑。特别是当相同的事物在不同的数据库中有不同的名称时。当人们使用同义词时(“应用程序开发”与“软件开发”相同吗?)。或者当人们犯错时(汽车专家提示中的“Phanton”是“VW Phaeton”还是“Rolls-Royce Phantom”?)。
但有些技术可以帮助人工智能理解人类世界或其任何子世界的语义。如果您从未听说过知识图、本体或数据目录,那么您可能会在网上找到很多复杂、甚至令人困惑的技术信息。本质上:
- 数据目录是有关数据源(例如数据库)的元数据的存储。当搜索“销售”数据时,数据目录向用户提供有关数据所在位置、数据格式(例如 JSON)以及如何访问数据(例如,通过对特定 REST API 端点的 HTTP 请求)的信息。
- 本体论是描述现实生活概念之间关系的一种方式,通常基于图形,通过链接将它们连接起来。本体不仅通过包含同义词和描述,还通过关系本身为概念提供语义:继承(例如,“共同份额”继承了“金融工具”的属性)和组合(例如,“汽车”具有如下组成部分) “轮子”)关系有助于找到一个概念在其他概念中的位置,这本身就是一种语义工具。
- 知识图(KG)是一种数据模型,它在本体模式之上存储数据的真实实例。这些实例通过各种关系以相同的方式彼此连接,正如本体定义这些关系一样。 KG 中的数据点存储在图形数据库中。图数据库专门针对图数据,允许有效存储和检索链接数据,并利用图论的方法对其进行分析、遍历和聚类。
从这个简约的描述中,我们可以得出语义技术的以下最重要的属性和区别:
有些技术可以描述数据、数据的含义和关系;它们还允许使数据可被发现。本体论是关于词汇和关系的,而图数据库是关于网络分析以及连接数据的优化存储和检索的。
今年年初,Gartner 预测,到 2024 年,知识图谱将开始攀登其著名的技术成熟度曲线中的“启蒙斜坡”。我个人的主观经验是,虽然在年初我不得不花费大量时间来解释为什么语义技术将在未来几年成为一件大事,但现在同事和客户不断寻求想法和建议。我对客户的观察,结合行业的见解,告诉我,由于生成式人工智能领域的最新发展,公司确实开始意识到数据情境化的重要性。
让我们研究一下语义技术在代码现代化方面的潜力,这是一项对于 IT 运营和业务连续性都至关重要的活动。
那是一个多么美好的时代——八十年代。开发了吃豆人。世界正处于一场几乎由意外引发的核战争的边缘。人们在大型机上使用 COBOL 开发业务应用程序。
现在已经是 2024 年了,许多大型国际公司的核心关键任务运营仍然依赖于人们编写的代码,其中一些人实际上已经死了。如果这些系统发生问题,可能没有人能够执行恢复。如果这种情况发生在一家大银行怎么办——你能想象后果吗?这很好地说明了为什么 IT 是一个社会技术环境,而技术高度依赖于人们的专业知识、思维方式,甚至其自然生命周期的阶段。
难怪 COBOL 专家显然需求量很大且报酬丰厚。我什至听说过一个故事,有人进行了一项实验,在 LinkedIn 上强调 COBOL 作为他们的技能,之后他们就受到了来自招聘人员的信息轰炸。我们也可能不会忘记 COBOL 并不是最奇特的物种:我的同事必须对用 4GL 编写的代码库进行现代化改造——一种为 FAME 数据库(预测分析和建模环境)开发的语言:一个具有分析功能的时间序列数据库,例如作为财务计算、“假设”分析和 – 等等 – 💥💥💥 多色报告。在互联网上,我们正好找到了2个关于4GL的网页。
没有人喜欢使用遗留代码。尤其是几十年前开发的产品。尽管如此,随着时间的推移,公司认识到需要对这些应用程序进行现代化改造,否则它们可能会对业务运营的连续性造成真正的威胁。但即使对于不太极端的情况,代码现代化也常常成为一个重要的话题,因为技术债务的积累会导致更昂贵的维护,更新的技术可能会提供更简单的界面和更快的执行,并且随着时间的推移,可能会变得更难找到具有某些能力的人。技能组。
执行代码现代化通常涉及现代化的 7R 中的一个或多个:保留、重新托管、重新平台、重构、重新购买、重新定位和退役。这些策略提供了不同程度的改变,从简单的环境转变到彻底检修、拆除或更换。在开始现代化之前,需要分析和理解代码。这个过程包括与主题专家(SME)的访谈、搜索文档、分析日志、代码的静态分析(其中涉及直接审查源代码)以及当代码整体或部分被修改时的动态分析。在受控环境中执行,以便可以观察和分析应用程序的行为。
如今有许多工具可以简化代码现代化。当然,由人工智能驱动的生成式解决方案也在其中。
最近,我阅读了 Thoughtworks 员工撰写的案例研究“遗留现代化遇见 GenAI”,其中展示了 KG 如何帮助遗留代码现代化。他们构建了一个名为 CodeConcise 的加速器,帮助他们理解代码库,因为代码量巨大,而拥有适当专业知识的人能力有限。我建议每个想了解现代 IT 是如何完成工作的人阅读这篇非常有趣的文章。
简而言之,文章作者通过将代码转换为抽象语法树(AST),将代码视为数据。任何编程语言的任何代码都可以用迷你图的形式表示——AST。下面是一个简单的示例:
作者通过将树上传到图数据库并让 LLM 模型遍历图并向数据点(每个数据点代表一个类、函数、表达式或其他编程构造)添加解释性注释,从这些 AST 构建知识图。此外,LLM还用于回答人类用户(例如业务分析师(BA))有关代码结构和行为的请求。
正如文章作者所声称的那样,KG 被证明是一个有效的加速器,可以简化代码审查、生成图表、通过提取业务规则更好地理解代码。通过这种方式,当人类不存在或能力有限时,人工智能一代可以充当人工中小企业。我还要补充一点,gen AI 可以生成自动化测试并生成合成测试数据——这是目前流行的用例。
作者实现的一种更先进的技术是利用图形数据库提供的图形分析功能:
我们还一直在知识图谱之上尝试 GenAI……通过询问模块具有哪些关键功能,然后通过分层汇总对这些功能进行聚类和抽象。然后,这充当功能图……其中每个功能都链接到实现它的源代码模块。然后将其用于以更快的方式确定现代化范围和规划。
我想分享我对代码现代化项目中下一个逻辑步骤的想法——当然,这取决于愿景、雄心和资源。
上述报告中Thoughtworks构建的KG是一个由许多AST树组成的大图,每个AST树代表一个代码库的一个组件;因此,我们可以将代码库中的所有类和其他对象视为数据库中的数据点。尽管我们可以看到不同类之间的关系,包括继承,但我们仍然不知道这些类与实际业务概念有何关系。这就是本体论非常有用的地方。
本体的构建和维护是一项投资——那么潜在的好处是什么?
首先,本体可以充当“契约”,为跨职能沟通甚至分析奠定基础。例如,它可以作为主题专家和现代化工程师之间的合同,以确保后者正确理解中小企业。本体是一个版本化的文档,其结构是经过深思熟虑的(开源本体是由行业专家共同创建并经过时间证明的),可供工程师、非技术人员和人工智能阅读。由于本体可以可视化,因此可以将其可视化表示传递给业务分析师进行进一步分析。
还有一些与代码现代化过程直接相关的点:
- 由于本体包含代码对象的描述,这些描述(由 SME 验证)可用于让 LLM 生成测试和合成数据。
- 也可能是在如此庞大的代码库中——作者大约有 10,000 行代码,总共 1500 个模块——相同的概念在不同的地方有不同的名称。本体可以反映替代名称的使用。
- 本体可以作为 AST 的抽象(AST 对于不同的语言看起来不同),因此可以支持将代码转换为另一种语言。
- 作为一个额外的想法,您可以在本体之上添加 SHACL 格式的验证规则,从而将检查远离代码,更靠近数据。
但在架构中添加本体不仅可以改善本地活动,还有助于提高业务效率。
想象一下,有一个名为“FinancialTransaction”的类,它实现了持久保存信用卡交易数据的逻辑:它正在执行对覆盖范围、交易量等的检查。现在,对于该类管理的应用程序的用户来说,确实代表了金融交易。但对于安全部门的人员来说,相同的数据代表“活动”的概念,他们会检查这些活动是否存在可疑属性。相同的数据,不同的上下文。此外,安全同事可能不仅希望阅读事务(或活动)表,而且还想知道代码中实现了哪些检查和业务规则。如果代码库满足以下条件,他们甚至可以访问这些数据:1)表示为 AST 树,并作为从树构造的图保存在数据库中(如上所述); 2) 作为数据产品公开使用。
数据产品的概念是当前的热门话题。数据资产(例如数据库)如果在数据目录中注册,就成为数据产品,数据目录存储数据产品的元数据和沿袭(更改历史)并说明如何使用这些数据。如果您从代码库创建知识图谱,则可以将其注册为数据产品,该产品是可消耗的,并且理想情况下映射到企业范围的本体中。
本体将有助于将代码库放入企业环境中。这会产生多种后果:
- 不同人之间的共同理解。如果应用程序中编码的现实生活概念在代码中与数据库中具有不同的名称怎么办?如何将它们相互映射?本体会对此有所帮助:使用本体,您可以创建从代码中的概念表示到数据库中的概念表示的映射。
- 更好地了解公司的 IT 资产,从而可以进行更精确的影响分析;
- 更好地理解 IT 价值创造流程,更好地协调 IT 和业务战略;
- 更好地跟踪需求/来源。现有的本体论正是针对这个问题而创建的:例如,PROV-O 有助于捕获出处信息,这可以帮助回答诸如“影响 Zmitser 创建会议演讲的书的作者是谁?”之类的问题。 ”或“在运行作业失败之前最后一个访问环境的人是谁? ”。
当然,建立这样一个数据产品的投资回报率是需要提前计算的。此外,基于代码库维护和更新数据产品可能会很棘手,因此仅从选定的 AST(而不是全部)创建 KG 可能是有意义的,例如,仅从与业务概念直接相关的类的 AST 中创建 KG。
来自互联网的有关语义技术的材料可能确实令人困惑。这就是为什么我会尝试提供最简短的指导来指导如何开始与他们合作。
要创建本体,您需要执行 2 个步骤:
- 定义数据三元组,以 RDF/XML 或 Turtle 格式描述您的域中发生的情况;
- 使用 RDFS 和 Web 本体语言 (OWL) 向 RDF 数据添加额外的语义。
要可视化您的本体,请使用 TopBraid Composer 以类似 UML 的显示格式查看它;或者,gra.fo 提供了一个简单的界面,用于可视化和编辑 RDFS 中的元数据。
一旦您的本体准备就绪,您就可以将其存储在 Apache Jena 中。
您的三元组需要存储在一个特殊的基于图形的数据库中——RDF 三元组存储。 Neo4j,可能是最流行的图形数据库,也支持 RDF 。要查询 RDF 数据,您需要一种名为 SPARQL 的语言。如果要在 Neo4J 上查询非 RDF 数据,可以使用 GQL 。
如果你想让你的生活更轻松,你可以在 Ontop 中创建一个虚拟知识图谱。 Ontop 将知识图谱上表达的 SPARQL 查询转换为关系数据源执行的 SQL 查询。它依赖于 R2RML 映射并可以利用轻量级本体。
版权声明
本文为本站原创内容,转载需注明文章来源(https://www.eiefun.com),另:文中部分素材可能会引用自其他平台,如有侵权或其它,请联系 admin@eiefun.com,我们会第一时间配合删除