前言
检索回答系统一般过程:1)构建好候选回答索引集,2)收到quary后,初步选出一些候选回答,3)quary和回答做matching,然后reranking,4)最后返回topk个回答.
排序reranking根据不同任务类型有不同方法.
matching操作有如下模型使用:
单轮问答
1. DSSM( Deep Structured Semantic Models ) 深度结构语义模型
DSSM结构图原理:将quary和document(使用document的标题)转换成bow向量形式,然后通过word hash变换得到低维向量,喂给MLP后得到的向量就代表quary和document的语义向量,然后计算两个向量的相似度,最后一层使用softmax做归一化计算概率,说白了就是用神界网络得到quary和document的表示向量,然后计算相似度.(相当于阿里小蜜比赛用的模型).
2. CLSM(convolutional latent semantic model) 卷积潜在语义模型
CLSM结构图原理:为了改进DSSM输入向量没有词序特征这一问题,CLSM的输入使用了n-gram,然后对n-gram后的bow做hashword降维操作,得到 letter-trigram 向量形式,然后使用卷积+maxpool+tanh将 letter-trigram 转变为一维固定维度的向量,表示该文本的语义向量.(个人感觉跟TextCNN的原理相同,TextCNN是使用n-gram size的卷积,这里是先取n-gram,然后在对各个 letter-trigram做卷积)
3. DeepMatch 深度匹配A Deep Architecture for Matching Short Texts
DeepMatch结构图通过使用LDA模型查看两个文本的共现情况,从而得出两个文本的匹配score.用于短文本匹配.
4. An Information Retrieval Approach to Short Text Conversation
用于短文本匹配或者检索系统,通过多特征进行matching,常用的特征如下:
1)Query-ResponseSimilarity;2)Query-Post Similarity;3)Query-Response Matching in Latent Space;4)Translation-based Language Model;5)Deep MatchingModel;6)Topic-Word Model;7)其它匹配特征。
(作者阿里小蜜比赛就是这么做的,除了文本本身的词向量,还提取了120+的特征)
5. A Large Dataset for Research in Unstructured Multi-Turn Dialogue Systems
对偶encoder结构图原理:使用对偶rnn对quary和response编码成语义向量,然后通过M矩阵计算向量相似度,最后通过softmax得到匹配得分.
多轮问答
1. Multi-view model
图1该模型是从单轮扩展出来的,他的办法就是将所有历史对话收尾相连合成一个大的单轮对话,这里将每轮对话的文本使用'__SOS__'相连,以每轮对话的文本为单轮对话中的word(通常nlp任务中是以词word为单位构成词向量,这里我们使用句子构成向量),使用CNN+Pooling将对话文本句转为语义向量,将得到的所有轮对话的语义向量合在一起,这样就有个类似Embedding的矩阵,其中矩阵的每一列表示每个历史对话文本的语义向量.
图2这个矩阵的每一列是有时序关系的(因为都是历史对话按时序合在一起的),所以接下来使用RNN模型(GRU/LSTM)处理,过滤掉无用的对话语义向量,最后一个时刻也就是最后一句对话的隐状态就是我们要的context embedding,接着将该向量与response的语义向量做matching,计算matching得分.
总结与猜想:
以上是对https://zhuanlan.zhihu.com/p/26879507和https://zhuanlan.zhihu.com/p/44539292这两篇文章学习的一些记录,不过发现很多模型的思想都是一样的,只不过是顺序或者方法改变了一下,比如CLSM我个人就觉得是用TextCNN分别对quary和response构建语义向量,然后匹配两个语义向量.所以我在想是不是可以用fasttext对quary和response分别求类别,然后在匹配两个类别是否一致呢?有空在实验吧.
网友评论