Skip to content

Latest commit

 

History

History

retrieval_QA

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

基于检索式的问答

提供了最常见的几种模型,也是实际工程上非常适用的模型。(因实践数据是公司内部的,暂无法提供实例数据)

  • unsupervised_method:提供了两种无监督式的相似度计算方法来实现FAQ,tfidf和编辑距离。
  • dnn_dssm:基于tf-idf + dnn的dssm模型。
  • lstm_dssm:基于词向量 + lstm的dssm模型。
  • lstm_siamese:基于词向量 + lstm的siamese模型。

总结下一般FAQ的做法:

  1. 对于问答对比较少的情况时,比如只有几十个问答对的情况下,使用tf-idf或者编辑距离等无监督的算法也能取得很好的效果。 因为此时数据量少,问答对之间独立性较强,通过字面的判断就可以很好的计算相似度。

  2. 对于问答对比较多的情况下,且每个问题都会有大量的相似问,此时可以使用语义相似度模型,建议使用dssm或者siamese,复杂的 语义相似度模型在实际中的效果很多时候都不太好。通常的整个系统的做法是先用tf-idf或者编辑距离从问答对中选择一些候选的问答 对出来,比如从几万个问答对中选择32个,这个值可以你自己根据实际的效果去定,然后基于语义相似度模型来对这32个候选集排序。

  3. 通常情况下在FAQ中建议使用推荐回复的形式来回答,比如你可以通过一个阈值来控制80%的问题会给出具体的回答,而另外20%的问题 可以给出几个你认为可能能回答用户问题的回答。实践中显示这种方法能极大的提高正确回答的命中率。

  4. 以上的方法都需要预先将问答对加载到内存中,这样在预测时速度才会比较快,但是当数据量非常大时,比如 几百万的问答对的情况下,我们需要借助ES检索来得到候选集,再进入到语义相似度模型。总之,具体的设计 ,或者说用什么模型,都要根据自己的数据来定。


具体的模型介绍见模型文件中的README