百度开源 FAQ 问答系统(AnyQ)---问题匹配模块(Matching)

版权声明:由于我主要研究问答系统,因此本博客仅更新NLP及问答相关内容,最近创了一个群,如果大家感兴趣可加q群号:376564367,如需转载,请注明出处 https://blog.csdn.net/qq_28385535/article/details/85014238

在AnyQ问答系统中,通过检索模块(Retrieval)从索引库中得到N个候选问题以后,需要带入到问题匹配模块(Matching),依次对每个候选问题与输入问题计算其相似度。对于同一个候选问题-输入问题对来说,可以同时计算多种类型的相似度。
  该模块目前所提供的相似度计算功能有:

1.编辑距离相似度:EditDistanceSimilarity;
2.Cosine相似度:CosineSimilarity
3.Jaccard相似度: JaccardSimilarity
4.BM25相似度: BM25Similarity
5.Paddle SimNet匹配模型相似度: PaddleSimilarity
6.Tensorflow匹配模型相似度: TFSimilarity

1.对候选问题进行分词

将候选问题与输入问题带入到问题匹配模块(Matching)以后,为了能够与输入问题进行相似度计算,首先需要对候选问题进行分词,其配置路径为:AnyQ/build/example/rank.conf。配置插件为:

# 对候选切词
matching_config {
    name : "wordseg_process"
    type : "WordsegProcessor"
    using_dict_name: "lac"
    output_num : 0
    rough : false
}

2.相似度计算

在该模块中,对候选问题与输入问题进行相似度计算主要分为两种:传统的距离度量学习的方法(Cosine相似度、Jaccard相似度等)和深度学习的方法(语义相似度计算)。其配置路径为:AnyQ/build/example/rank.conf。配置插件为:

# Jaccard相似度
matching_config {
    name : "jaccard_sim"
    type : "JaccardSimilarity"
    output_num : 1
    rough : false
}

# Paddle SimNet匹配模型相似度
matching_config {
    name: "fluid_simnet_feature"
    type: "PaddleSimilarity"
    using_dict_name: "fluid_simnet"
    output_num : 1
    rough : false
    query_feed_name: "left"
    cand_feed_name: "right"
    score_fetch_name: "cos_sim_0.tmp"
}

# Tensorflow匹配模型相似度
matching_config {
    name : "tf_qq_match"
    type : "TFSimilarity"
    using_dict_name: "tf_qq_match"
    output_num : 1
    rough : false
    tfconf : {
        pad_id : 0
        sen_len: 32
        left_input_name: "left"
        right_input_name: "right"
        output_name: "output_prob"
    }
}

需要注意的是,在该模块配置文件中,如果配置了多种相似度计算插件,则对于一个问题对来说,将对其分别计算相应插件的相似度,最终得到多个相似度,每一个相似度可看作该问题对的一个特征,这多个特征最终需要带入到问题打分模块(rank)来对该问题对进行综合的打分。

展开阅读全文

没有更多推荐了,返回首页