第 8 章 不良模型规范与知识获取
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
"穆拉,你的戒指丢在房间里了 为什么还要在院子里找呢?"
穆拉捋了捋胡须说道:"房间里太暗了,我看不清楚。我到院子里来找我的戒指,因为这里光线更充足。
毛拉-纳斯雷丁的经典故事
正如我们在第 5 章中所看到的,在开始构建语义模型之前,我们需要通过明确模型的要求来决定我们到底要开发什么。此外,在构建模型的过程中,我们还需要设计、实施和应用适当的知识获取机制,为我们提供满足这些要求的所有实体、关系和其他模型元素。
遗憾的是,我们常常以一种次优的方式开展这两项活动,结果导致模型价格昂贵,但对用户的价值却微乎其微。本章阐述了这些活动中存在问题的几种做法,并就如何改进这些做法提供了有益的见解。其中许多做法和见解(如数据规范和选择)适用于任何类型的数据科学项目,而不仅仅是语义模型开发。
建造错误的东西
2016 年初加入 Textkernel 时,我迫不及待地开始构建我受雇的知识图谱。 在加入公司的第一个月内,我就已经收集了知识图谱的主要需求,并明确了它应该包含的元素。然后,我又花了六个月的时间,以半自动的方式从各种资源中挖掘和整合这些元素,使知识图谱更具实质内容。这项工作的成果是建立了一个包含数千个实体的丰富知识图谱,其准确性可以接受。
我的下一项任务是将该图表集成到 Textkernel 的简历和空缺职位解析和搜索产品中,并帮助他们提高性能。可以说,集成和性能改进都非常困难,所花费的时间也比最初估计的要多得多。为什么呢?因为我没有正确地指定图表,结果构建出来的东西没人能用。如果你也遇到过这种情况,请继续阅读。
为什么我们会有糟糕的规格
我在 Textkernel 工作的第一阶段所犯的主要错误 可以总结如下:
- 我为模型指定的功能没有完全满足要求
-
例如,我在模型中实现了术语之间非常严格的同义关系,而将使用该模型的语义搜索系统实际上需要对同义关系进行更宽松的解释,以优化系统的召回率而非精确度。
- 我没有说明对使用模型至关重要的特征
-
例如,我在模型中实现了职业实体的层次结构(使用层次关系
narrowerThan),其深度远远大于使用该模型的简历解析系统所能处理的深度。 - 我指定的功能实际上对模型的使用是有害的
-
例如,我在模型的实体中添加的词法比解析系统能有效消歧的词法要多得多,从而降低了后者的精确度,而不是增加其召回率。
- 我指定了一些(尚未)有人需要或能够使用的功能
-
例如,我在模型中添加并填充了一个关系,该关系代表了就业市场中某一特定职业所需的典型技能,但当时我们的所有产品都无法有效利用这一关系。
现在回想起来,我能想到这些事情发生的几个原因。
首先,在需求收集阶段,我没有要求清晰和具体,尤其是在语义元素和现象方面。人们会告诉我,他们的应用程序需要同义词,但他们真正的意思和需要的是语义相关的术语,以便进行搜索扩展。人们会告诉我,他们希望知识图谱中的实体是有层次关系的,但他们忘了说这种层次关系需要有最大深度。还有人说他们希望在知识图谱中加入某个特定元素,但却不知道他们将如何使用这个元素。
这不是指责游戏,而是现实;我们每个人在日常工作中都带着隐含的假设、偏见和对事物的解释,因此出现这种错位是很自然的(更多例子请参见表 8-1)。在本书的前几章中,我们看到了我们在数据建模领域使用的术语是多么含糊、多变和模糊。同时,我们需要学会预测这些错位,并努力加以解决。