在本文中,我将简要介绍自然语言处理(NLP)中的语义建模概念。
语义建模通常与语言建模进行比较。现在,我们将从两者定义和差异的角度来探讨语义建模。
语言语法和语义语法都定义了理解和处理自然语言句子的方法。语言语法涉及名词、动词等语言类别。而语义语法是一种语法,其非终端节点不是名词或动词等常规语言类别,而是人或公司等语义类别。
语言建模和语义建模在20世纪70年代几乎同时出现。作为计算语言学的一部分,语言建模一直备受关注,并成为整个NLP发展的基础。
语义建模起初受到欢迎,但由于技术复杂性,很快遇到了困难。然而,近年来,语义建模经历了一次复兴,现在几乎成为Google、Cortana、Siri、Alexa等所有商业NLP系统的基础。
了解语言语法和语义语法之间的区别最简单的方法是通过以下示例:
虽然两个句子的语言特征相似,但它们的语义完全不同。仅用语言语法处理这种歧义将需要非常复杂的上下文分析——即使在这种上下文可用的情况下,也无法完全确定地解决这个问题。
另一方面,语义语法能够以简单且完全确定的方式清晰地处理这种歧义。使用适当的语义语法,Friday和Alexy这两个词将被归类为不同的类别,从而避免产生混淆。
请注意,除了具有相同的词性标注外,这些词语还具有不同的命名实体解析。但在更复杂的现实生活中,命名实体解析的效果往往不如预期。
请看下图:
尽管两句话的语言特征基本相同,但它们的语义却完全不同。仅仅依靠语言语法来处理这种歧义将需要极其复杂的上下文分析,而在许多情况下,这几乎是不可能的。
相比之下,语义语法能够以简单且完全确定的方式处理这种歧义。使用设计合理的语义语法,Friday和Alexy这两个词会被归类为不同的类别,从而避免产生歧义。
我们来看一下语义语法的一个简单定义。
无论具体的语法配置如何,语法通常被定义为一组语义实体,每个实体至少有一个名称和一组同义词,可以通过这些名称和同义词识别该实体。
例如,以下是网站和用户实体及其同义词的简单定义:
根据这种语法,以下句子将被分解为相同的两个语义实体:
语义实体序列可以进一步绑定到用户定义的意图,以便最终采取行动。这种用户定义意图的集合通常构成了完整的NLP流程。
当然,在实际应用中,系统支持更复杂的语法定义。同义词的定义有许多不同的方式,因为同义词本身也有多种类型;语义实体可以有数据类型,并且可以组织成分层组来帮助短期记忆处理——不幸的是,所有这些都超出了本文的讨论范围。
上述语义语法方法强调了其确定性。虽然语言和语义语法的具体实现可以是确定性的或概率性的,但语义语法几乎总是导致确定性处理。
原因在于语义语法的本质,它基于简单的同义词匹配。正确定义的语义语法允许对语义实体进行完全确定性的搜索。没有任何“猜测”——语义实体要么被明确找到,要么没有找到。
由此产生的语义语法的确定性是一个显著的优势。虽然概率方法可以在许多著名的场景中工作,比如情感分析、支持聊天机器人或文档理解,但它不适合驱动NLP/NLU的业务数据报告和分析。例如,Twitter的反馈是85%还是86%是正面的并不重要,只要它朝着正确的方向发展。然而,另一方面,报告销售数字必须精确无误,必须与会计系统的数据完全匹配。即使像“你上一季度的总销售额是1亿美元,概率是97%”这样的高概率结果在任何情况下都是毫无价值的。
虽然语义语法有许多优点,但一个明显的限制阻碍了它的发展(至少在最后阶段),即它只能应用于狭窄的数据领域。
虽然语言语法适用于所有数据领域(因为它处理动词和名词等通用语言结构),但语义语法及其基于同义词匹配的应用仅限于特定的、通常非常狭窄的数据领域。原因是,为了创建语义模型,需要详尽地列出一个实体的所有同义词。
对于特定的数据领域,这是一项可管理的任务,并且在很大程度上受益于复杂的实际系统。对于一般的NLU来说,它和通用人工智能(AGI)一样,基本上不起作用。
在过去十年中,许多研究致力于推进具有闭环人类管理和监督式自学习能力的语义建模,但事实上,语义建模在处理特定的、定义明确和可理解的数据领域时效果最佳。
有趣的是,流行的NLP/NLU深度学习(DL)方法对于特定的数据领域几乎没有足够的效果。这是因为缺乏足够的大型预训练数据集,这正是传统的闭环人类管理和自学ML算法在语义建模系统中流行的原因。
人类管理(或人类切换)和监督式自学习算法是两种相互关联的技术,有助于在开发新的语义模型时减少为语义实体提供详尽同义词集的问题。
这两种技术的工作原理如下:首先创建语义模型,其中包含语义实体的基本同义词集,这可以较快完成。一旦使用此模型的NLP/NLU应用程序开始遇到模型无法自动“理解”的用户语句,就会进入固化阶段。在人类管理中,用户句子将被修正以适应模型,并且自学习算法将“学习”这一修正,并在下次自动执行该修正,而无需人工干预。
在这个过程中有两个关键特性:
在这整个过程中,重要的是监督机制允许在语义建模“进一步学习”时保持其确定性。通过监控和有监督的自我学习,语义模型每次都会学到更多,最终可以比初始状态学到更多的知识。因此,这个模型可以从一个小规模开始,通过人的交互来学习——这个过程与许多现代人工智能应用并没有什么不同。