这一章我们来讲一下语义角色标注(Semantic Role Labeling (SRL))以及其在语音助手中的应用,主要分为4部分:什么是语义角色标注、为什么需要语义角色标注、如何实现、语音助手中的应用

1、什么是语义角色标注

        语义角色标注(Semantic Role Labeling (SRL))也叫语块分析(query chunking),是一种浅层语义分析技术。给定一个句子, SRL 的任务是找出句子中谓词的相应语义角色成分,包括核心语义角色(如施事者、受事者等) 和附属语义角色(如地点、时间、方式、原因等)。  举个例子:

nlp语义标注 语义标注是什么意思_nlp语义标注

      其中黄色的部分就是语义角色标注的结果,A0为实事者,A1为受事者,ARGM-ADV为状语。

2、为什么需要语义角色标注

        从上面可以看到,通过语义角色标注,我们可以获取一句话中最核心的部分,而这些核心的部分就可以代表这个句子的语义,利用这个特点我们就可以实现语义理解。在之前的章节中,我们讲到利用意图槽位模型来识别语义的方法,但是有些类型话术并不适合这种方法,比如:

  1. 时间+内容:此类话术需要依据内容的类型判断是否需要召回到日程,比如:明天8点开会(“开会”为动词,可以召回到日程提醒),明天8点天气(“天气”非动词,此时不应该属于日程)。这一类话术如果使用意图槽位模型则很容易误召回。
  2. 动作+内容:此类话术需要依据内容的类别判断为哪个意图,比如:打开青花瓷(应该播放音乐),打开微信(应该属于打开app),这一类话术如果使用意图槽位模型则很难准确识别到意图,因为“内容”是知识强相关的,此时可以使用语义角色标注识别到这一类话术,然后结合知识图谱判定内容类型来进一步确定意图。

        上面这两种类型的话术,都是句子中的某一成分为知识强相关的,需要结合知识图谱来进一步确定语义。

        同时,语义角色标注对于一些场景识别语义的效率远高于意图槽位模型,比如“设置”这个场景,我们知道在手机中“设置”这个app包含了很多操作,想要实现操作的控制,比如:打开手电筒,打开勿扰模式,音量调到25。这些操作多达几百,试想如果希望通过一个意图槽位模型或者分类模型来识别几百个意图,其难度是很高的。此时可以利用语义角色标注,识别出“动作”、“实体”,再结合“手机知识图谱”根据动作和实体的不同结合,确定到不同的语义。下面我们会讲这里的具体实现。

3、如何实现语义角色标注

        那么如何获取到语义角色标注的结果呢?开源的工具可以使用“LTP”,利用其“语义角色标注”的结果,或者利用其“依存句法分析”的结果二次加工,来适配自己的场景。

        当然我们也可以自己训练模型,这个模型就和“NER”模型很相似了,我们可以用BILSTM-CRF,或者Transformer,或者Bert,这里就不做展开了,关键在于数据的标注。

4、在语音助手中的应用实例

        这里我们拿“设置”场景来举例,其场景特点上面也有提到,主要为:句子短、意图多、表述方法多样。比如:”打开手电筒“,”屋里太暗了,把手电筒给我打开“,”打开闪光灯“,对应的都是同一个意图。

nlp语义标注 语义标注是什么意思_句法分析_02

        如上图,对于用户输入的query,利用语义角色标注获得句子成分,比如”打开手电筒“,拆分为”打开(动作)“和”闪光灯(实体)“,然后对动作、实体进行消歧和归一,最后结合功能图谱,获得这句话的意图。