zoukankan      html  css  js  c++  java
  • 检索问答模型

    前言

    检索回答系统一般过程: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得到匹配得分.

    6. 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分别求类别,然后在匹配两个类别是否一致呢?有空在实验吧.

  • 相关阅读:
    HDU 5213 分块 容斥
    HDU 2298 三分
    HDU 5144 三分
    HDU 5145 分块 莫队
    HDU 3938 并查集
    HDU 3926 并查集 图同构简单判断 STL
    POJ 2431 优先队列
    HDU 1811 拓扑排序 并查集
    HDU 2685 GCD推导
    HDU 4496 并查集 逆向思维
  • 原文地址:https://www.cnblogs.com/hiyoung/p/9935852.html
Copyright © 2011-2022 走看看