当前位置:   article > 正文

意图识别项目笔记_意图识别与实体识别区别

意图识别与实体识别区别

意图识别分为两个模块:意图分类的识别和当前意图中slot(槽位)的识别。其中槽位的识别可以参考实体的识别,但又与之不同。槽位识别可以看做是对每个意图所需条件的识别,比实体的识别更加多元化。比如有一句话:显示从北京到上海的航班。

意图:航班查询。

槽位标记:北京(from-city),上海(to-city)

实体标记:北京(city),上海(city)。

1.项目流程

样本格式:采用BIO标记策略,句子+EOS+句子中每个字对应的槽位标签+意图。

1.数据预处理阶段:。将句子,槽位标签,意图id化并保存至文件中

2.模型输入:句子的列表,每个句子长度的列表,槽位列表,意图列表。

3.模型架构:通过模型预测槽位列表、意图列表。

4.损失计算:通过NLLLoss()函数(只接收log_softmax后的数据)计算槽位、意图和实际的损失。

5.模型优化:使用Adam函数优化损失。

2.模型架构

下面来详细介绍上述流程中的模型架构。

模型结构图:

 

该模型是基于seq2seq+attention对齐机制的架构,分为Encoder和Decoder两个阶段。

Encoder:   加载预训练的语言模型,对输入的数据进行字嵌入得到字向量,通过torch中的pack_padded_sequence将字向量按照句子长度降序、padding、打包作为LSTM的输入,通过双向LSTM进行特征提取。返回每个时刻隐藏层的输出结果hiddens和最后一个时刻隐藏层输出的(h,c)的二元组state。

Decoder:   该阶段通过Encoder阶段的输出来预测意图和槽位。

1.将Si-1为decode阶段上一个时刻的输出,将Si-1赋值n份(n为Encoder阶段中的时刻数,也就是句子长度)与hiddens进行加权求和获取Encoder中的权重参数,再与hiddens相乘获取文本向量Ci,并将其添加到一个文本向量列表Cn。

2.Si为decoder阶段当前时刻的输出状态:Si=Si-1 + yi-1 + Ci。将Si和当前时刻对应Encoder中的时刻的输出ht做拼接,使用单向LSTM提取特征,通过log_softmax提取概率最大的作为yi,并添加值预测槽位列表中。

3.将文本向量列表Cn与Encoderhiddens拼接,做取均值降维,再使用log_softmax作为输出结果并添加到预测意图列表中。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/350455
推荐阅读
相关标签
  

闽ICP备14008679号