信息检索IR与学习排序LTR(1)Learning to Rank在QA系统中的应用

1.简述IR与Learning to Rank
    信息检索IR (Information Retrieval)即信息查询(Information Search),像什么搜索引擎、论文检索,很是常见;
    学习排序LTR(Learning to Rank)是一种监督学习排序方法, 使用的是机器学习方法,但是我感觉近年来似乎进展不大。
    近期工作中实验了学习排序Learning to Rank,现在来总结一下下。

2.场景说明
  2.1 大致过程为;
      该实验主要用于一个检索式闲聊问答系统,
          a.准备高质量问答语料
          b.然后输入问题,粗检索获取候选集(编辑距离、关键词等,获取最相似的top30)
          c.top30排序获取最优解
      其中,学习排序(Learning to Rank)主要应用于步骤C中,对top30排序。
      
3.学习排序(Learning to Rank)与实际使用分析
  3.1 学习排序LTR
      Ranking 模型可以分为两大类,基于相关度的和基于重要性的,
          其中,相关度的是基于q-doc(放在这里也就是用户问题-候选集的相关性,例如二者间的余弦相似度、编辑距离、J...)
      LTR可以分成3类:PointWise、PairWise和ListWise
      
  3.2 PointWise: 
      可以直接看成一个2分类了,该场景下,就是求用户输入问题与任一个候选集的相似度.
      举个例子,例如用户输入问题:    "你叫什么名字"
                然后候选集返回top30:【你的名字叫什么呀, 你的花名叫什么, 你妹妹的名字是, 你们都叫什么名字......】
                那我们就直接使用2分类,就是求以下两两的相似度【你叫什么名字,你的名字叫什么呀】、【你叫什么名字,你的花名叫什么】、【你叫什么名字,你妹妹的名字是】...,获取相似度最优的候选项
      
      QA系统中PointWise优点:
        1、标记和训练数据简单些,人工标注(构建高质量问答语料中问题的同义句)速度也可以接受;
        2. 相似语料也有公开集,比如蚂蚁金融NLP竞赛——文本语义相似度赛题,又如CCKS 2018 微众银行智能客服问句匹配大赛,这里有许多语料、模型和方案可以参考;
        3. 短文本分类尤其是二分类,也有很多成熟的方案,无论是机器学习的,还是深度学习的;
      当然缺点也是有的:
        1. LTR中pointwise固有缺陷,没有考虑候选集之间的关系,当然我们考虑的是top1,这个似乎问题不大
        2. 如果只是计算两个句子间的同义句的话,似乎问题很大,机器学习的方法似乎不太可行,想同领域的语料质量效果似乎也不大好
        3. pointwise没有利用同一query与对应候选集问题间的内部依赖性,位置信息,top1重要性等也没有考虑
        4. 整个QA系统中似乎也有说不通的地方:
              4.1  如果候选集的质量高,top30候选集不是很相似的问题,那么候选集的算法就行了,似乎用不上分类算法了;
              4.2  如果候选集的质量低,top30候选集都是特别相似的问题,那么LTR算法,对于短文本分类问题,还是很相似的句子,分类效果似乎很不佳;
              
  3.3 PairWise: 
        也是一个二分类问题,该场景下,求的是候选集之间差值的二分类。
        以SVMRanking为例,例如用户输入问题:    "你叫什么名字"
                然后候选集返回top30:【你的名字叫什么呀, 你的花名叫什么, 你妹妹的名字是, 你们都叫什么名字......】
                再分别求出【你叫什么名字,你的名字叫什么呀】两个问句的特征fea1 [TDIDF, TD, same_word_count, cosim, Edit_Distance]、【你叫什么名字,你的花名叫什么】两个问句的特征的特征fea2 [TDIDF, TD, same_word_count, cosim, Edit_Distance]、【你叫什么名字,你妹妹的名字是】两个问句的特征fea3 [TDIDF, TD, same_word_count, cosim, Edit_Distance]...直到fea30
                然后再两两相减,fea1-fea2为正例子,-(fea1-fea2)为负例子;fea1-fea3为正例子,-(fea1-fea3)为负例子;fea2-fea3为正例子,-(fea2-fea3)为负例子;就是任意一个候选集的特征两两相减,构建正负样本。
                可以得到C30取2的组合,也就是29*30/2=435个用例,这样训练样本就变得很大,再根据新构建的样本数据,训练就可以求出了。
            这种PairWise做法可以学到求出候选集中两两的位置关系,当然TOP1也就可以求出了。
            QA系统中PairWise优点:
                1、标记和训练数据比较复杂,人工标注需要标注top30,每个query都要标注top30个问题,而且相对位置不能错。当然如果只有top1也可以了;
                2. 利用了候选集问题间的内部依赖性,相对位置信息;
                3. 短文本分类尤其是二分类,也有很多成熟的方案,无论是机器学习的,还是深度学习的。
            当然缺点也是有的:
                1. 相似语料也有公开集似乎没有,我没有找到这种数据集,在QA领域,反倒是搜索引擎领域有很多;
                2. query与对应候选集如果不平衡,会有比较大的影响,举个例子,就是说有一个问题候选集有20个,另外一个问题候选集有30个,这就是不平衡;
                3. PairWise没有利用同一query候选集的top1重要性等也没有考虑,这个可以根据修改loss权重改变;
                4. 机器学习的重要假设,独立同分布(IID)不太符合。
                5. PairWise对噪声标注更敏感,即一个错误标注会引起多个训练样本错误(30个)
                6. 如果采用的标注是候选集的相关度、整体排序,那么就会丢失部分信息,毕竟PairWise获取的只有相对位置信息,没有相关度了。
                
  3.4 ListWise:
        场景下:
            输入是所有候选集top30,输出是所有top30类别,也就是说是整体输入;
            这种方法没有使用过测试,主要是训练语料比较难获取,自己标注也需要很大的人力;
            PairWise效果就不佳了,需要改进测试;ListWise就更加不靠谱了。
        评价指标:
            这里NDCG与MAP两个排序的评价指标就没有那么好评价了,如果要用,就直接
            可以直接计算真实label[1,2,3,4,5]与预测label[2,1,3,4,5]的loss
        ListWise优点:
            1.  loss最接近,应用了各种信息,理论上应该是最好的
        缺点:
            1.  数据标注困难、loss复杂计算困难
            2.  感觉在QA系统里边的排序应用还是比较困难吧        

4.未来展望
    希望有所突破吧
    
    
 

猜你喜欢

转载自blog.csdn.net/rensihui/article/details/88528365