本文继续围绕工业级业务对话平台和框架Rasa对DAG图中的核心组件DIETClassifier的源码进行解析,另外从Transformer的角度来解析意图分类任务和实体识别任务是如何实现的。
一、DIETClassifier组件源码解析
DIETClassifier的作用是完成意图识别和实体提取这两大任务。这个组件使用了模型DIET(Dual Intent and Entity Transformer),意图识别和实体提取共享一个Transformer,Transformer通过注意力机制对输入信息进行编码处理,之后把输出的tokens传给CRF内部的前馈神经网络(CRF不同位置之间存在Transition Matrix,从而可以表达信息之间的关系)进行处理,CRF把处理结果与ground truth(正确的entity labels)进行比较,从而计算出Entity Loss。 代表全局信息的token ”__CLS__”经过Transformer处理后的输出和intent labels被编码进同一个语义级别的向量空间(vector space)。通过计算loss来最大化与target label的相似度,而最小化负样本的相似度。
- 关于class “DIETClassifier”
DIETClassifier实现了GraphComponent接口,并继承自IntentClassifier和EntityExtractorMixin。
IntentClassifier目前没有具体实现,这是为了将来可以进行扩展:
EntityExtractorMixin提供了实体提取需要使用的一些公共的方法,譬如find_entity:等: