其他分享
首页 > 其他分享> > 对话机器人学习篇(四)--意图识别

对话机器人学习篇(四)--意图识别

作者:互联网

意图识别

 

 

意图识别是通过分类的办法将句子或者我们常说的query分到相应的意图种类。

词嵌入:将词语转换为数值形式,或者说,嵌入到一个数学空间,Word2vec是词嵌入的一种;

 

 

基于词向量的意图识别:

将词向量作为词法特征进行意图分类—基于词向量的意图分类方法对不同分类内容的表征能力和领域扩展性更好;

词向量语义信息不全,可利用语义词汇字典的信息来丰富词向量,从而提高意图文本的语义表示,通过构建BLSTM模型进行意图识别。

 

 

基于CNN的意图识别:

采用CNN提取文本向量表示作为查询分类特征来识别用户搜索查询的意图,与传统人工特征提取方法相比,不仅减少了大量的特征工程,而且可以得到更深层次的特征表示(但CNN只能提取到意图文本的局部语义特征,不能保持语义的连贯性)

 

 

基于RNN的意图识别:

RNN表示的是一个词序列,可根据上下文学习词序语义信息;梯度爆炸或梯度消失等问题,不能很好模拟长期依赖关系;

LSTM 在RNN结构中引入一个内存单元解决梯度爆炸或梯度消失等问题,同时可控制要保留和遗忘的信息;

GRU LSTM的一种改进,具有在长序列上保留信息的能力,而且可以学习上下文语义信息;

 

 

例子:

举一个简单的例子,我想听周杰伦的歌,这个query的意图便是属于音乐意图,我想听郭德纲的相声便是属于电台意图。做好了意图识别以后对于很多nlp的应用都有很重要的提升,比如在搜索引擎领域使用意图识别来获取与用户输入的query最相关的信息。

举个例子,用户在查询"生化危机"时,我们知道"生化危机"既有游戏还有电影,歌曲等等,如果我们通过意图识别发现该用户是想玩"生化危机"的游戏时,那我们直接将游戏的查询结果返回给用户,就会节省用户的搜索点击次数,缩短搜索时间,大幅提高用户的体验。

再进一步说,做好意图识别以后,我们可以将一个用户的query 限定到一个垂直领域比如通过意图识别以后发现该用户输入的生化危机就是想找"生化危机"的游戏进行下载,那么我们在游戏这个领域下进行搜索可以得到更高质量的搜索结果,进一步提高搜索体验。

 

 

意图识别的前提:

1.首先得想好意图的划分问题,这种划分业界有很多叫法,

如技能:

   若聊天机器人有30个技能,即我们的意图有30类;(2018年的CES上,Google Assistant 号称有100万个技能)

另一种通用叫法,如领域:(domain)

   搜索引擎的垂域搜索,即把用户的query分为很多特定的领域,如电台领域,音乐领域。

(搜索时根据意图识别认为这个query属于电台领域,便在电台领域进行搜索。若意图识别的准确率比较高,可大大加快搜索的速度和准确性)

业界一直有个观点,意图识别虽然是聊天机器人非常重要的一个部分,但是解析用户的语义已经慢慢不再成为对话机器人的核心,识别用户的意图以后提供的服务开始成为对话机器人的产品差异化的核心

 

2.其次是要想好意图识别的可扩展能力:随意图覆盖范围增加,保证意图识别准确率不下降甚至提升;

可扩展能力另一方面,体现在简单技能的自动化生成,复杂技能的半自动化生成或第三方开发者的开发技能的快速接入;

 

3.技能的评价问题,完成一个技能模型开发后,需要符合一定的标准才可以接入到搜索引擎或对话系统中;

技能评价包括两个方面:

(1)效果上的:若用precision和recall来评价,每一个接入的domain或者技能 的F1值必需大于某个值才可以接入;

(2)工程上的:每个接入的技能需要考虑,访问量大了不能宕机;

(访问量或者qps大了,结果可能会造成整体服务超时)

 

 

意图识别的基本方法:

1.基于词典及模版的规则方法

不同的意图有不同的领域词典,如书名,歌曲名,商品名等。当一个用户的意图来了以后,我们根据意图和词典的匹配程度或者重合程度来进行判断,最简单一个规则是哪个domain的词典重合程度高,就将该query判别给这个领域。这个工作的重点便是领域词典便须得做的足够好。

 

2.基于查询点击日志

搜索引擎等类型业务场景,可通过点击日志得到用户的意图;

 

3.基于分类模型对用户意图进行判别

使用paddle作为模型的基本框架以CNN外接softmax 和LSTM外接softmax来进行意图识别方面工作;

使用LSTM+softmax来进行文本分类

用CNN 外接softmax来进行文本分类

 

难点:

标注数据获取;(来源:一. 数据标注团队进行数据标注;二. 通过半监督自动生成标注数据)

 

 

 

 

词向量:

将语言数学化,因为机器不是人,机器只认数学符号。向量是人把自然界的东西抽象出来交给机器处理的东西,基本上可以说向量是人对机器输入的主要方式。

词向量是将语言中的词进行数学化的一种方式,词向量就是把一个词表示成一个向量。

表示方法:

(1) one-hotrepresentation,用一个很长的向量来表示一个词,向量的长度为词典的大小,向量的分量只有一个 1,其他全为 0, 1 的位置对应该词在词典中的位置;

词袋模型中,每个文本的向量长度都是词典的大小,向量中每个位置的元素代表词典中该位置的词在文本中出现的次数;

优点:简洁

缺点:1.维数灾难;2.不能刻画词与词之间的相似性(词汇鸿沟,任意两个词之间是孤立的,从向量看不出两个词是否有关系);3.未保留词序;

 

(2)DistributedRepresentation,用一个普通向量表示一个词,这种向量一般长成这个样子:[0.792, −0.177, −0.107, 0.109, −0.542, …],即普通的向量表示形式,维度以50维和100维较常见。

一个词如何表示成这样的一个向量需要经过训练,训练方法如word2vec等。

(注:每个词在不同的语料库和不同训练方法下,得到的词向量可能不一样)

word embedding表示的是一种“降维”的嵌入,通过降维避免维度灾难,降低计算复杂度;

 

词向量的空间意义:

用向量表示,而且用较好的训练算法得到的词向量的向量一般是有空间上的意义的,也就是说,将所有这些向量放在一起形成一个词向量空间,而每一向量则为该空间中的一个点,在这个空间上的词向量之间的距离度量也可以表示对应的两个词之间的“距离”。所谓两个词之间的“距离”,就是这两个词之间的语法,语义之间的相似性。

计算机计算这个词的词向量跟其他词的词向量一一计算欧式距离或者cos距离;

google的word2vec模型是训练词向量的一种方法;

 

什么是word2vec?你可以理解为word2vec就是将词表征为实数值向量的一种高效的算法模型,其利用深度学习的思想,可以通过训练,把对文本内容的处理简化为 K 维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似。

Word2vec输出的词向量可以被用来做很多 NLP 相关的工作,比如聚类、找同义词、词性分析等等。如果换个思路, 把词当做特征,那么Word2vec就可以把特征映射到 K 维向量空间,可以为文本数据寻求更加深层次的特征表示 。

 

Word2vec 使用的词向量是 Distributed representation 的词向量表示方式。其基本思想是 通过训练将每个词映射成 K 维实数向量(K 一般为模型中的超参数),通过词之间的距离(比如 cosine 相似度、欧氏距离等)来判断它们之间的语义相似度.其采用一个 三层的神经网络 ,输入层-隐层-输出层。有个核心的技术是 根据词频用Huffman编码 ,使得所有词频相似的词隐藏层激活的内容基本一致,出现频率越高的词语,他们激活的隐藏层数目越少,这样有效的降低了计算的复杂度。

 

这个三层神经网络本身是 对语言模型进行建模 ,但也同时 获得一种单词在向量空间上的表示 ,而这个副作用才是Word2vec的真正目标。

 

Word2Vec实际上是两种不同的方法:Continuous Bag of Words (CBOW) 和 Skip-gram。CBOW的目标是根据上下文来预测当前词语的概率。Skip-gram刚好相反:根据当前词语来预测上下文的概率(如下图所示)。这两种方法都利用人工神经网络作为它们的分类算法。起初,每个单词都是一个随机 N 维向量。经过训练之后,该算法利用 CBOW 或者 Skip-gram 的方法获得了每个单词的最优向量。

 

  

LSTM+Softmax文本分类:

整体流程:

 

 

语料预处理:去除标点符号,去除停用词

生成词向量:将语料从文字转化为数值,方便程序后续处理,词嵌入如word2vec

特征提取:使用多层LSTM提取特征,进行训练

 

 

意图分类:使用Softmax完成分类

 

优化网络结构?使用LSTM单层网络结构,在迭代15 次以后训练准确率已经可以达到96%以上。进一步思考一下,叠加LSTM网络,是否可以达到更高的训练准确率,其他的部分不变,我们仅仅修改我们的网络定义部分。

 

 

 

 

CNN +Softmax文本分类:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:识别,--,机器人,语义,用户,意图,文本,向量
来源: https://www.cnblogs.com/xiaowa/p/15397561.html