百度开源 FAQ 问答系统(AnyQ)|问题检索模块(Retrieval)

在AnyQ问答系统中,输入的问题通过分析模块(Analysis)对问题进行分词,词向量表示等操作后,再输入到问题检索模块(Retrieval),由该模块将问题带入到FAQ数据集中进行检索,得到前N个候选问题。
  该模块目前所提供的问题检索功能有:

1. 基于关键词的检索(Term检索,TermRetrievalPlugin); 
2. 基于语义的检索(SemanticRetrievalPlugin);
3. 人工干预检索(ManualRetrievalPlugin);

1.基于关键词的检索

基于关键词的检索,即根据已添加的数据集,通过TF-IDF,为该数据集构建倒排索引,当一个已经分词的问题输入后,匹配前N个候选问题。
检索模块的配置路径为AnyQ/build/example/retrieval.conf,通过在该文件中添加关键词索引插件:

retrieval_plugin {
    name : "term_recall_1"
    type : "TermRetrievalPlugin"
    search_host : "127.0.0.1"
    search_port : 8900
    engine_name : "collection1"
    solr_result_fl : "id,question,answer"
    solr_q : {
        type : "EqualSolrQBuilder"
        name : "equal_solr_q_1"
        solr_field : "question"
        source_name : "question"
    }
    num_result : 15
}

其中,solr_q是solr搜索服务器查询的插件,该插件所提供的搜索类型(type)有:

EqualSolrQBuilder:字段等于
BoostSolrQBuilder:字段term加权
ContainSolrQBuilder:字段包含关键词
SynonymSolrQBuilder:字段term同义词
DateCompareSolrQBuilder:日期字段比较

2.基于语义的检索

基于语义的检索,是由AnyQ中的SimNet模块根据所提供数据集训练好后的模型,来对输入问题(词向量表示)与候选问题进行计算检索。检索模块的配置路径为AnyQ/build/example/retrieval.conf,通过在该文件中添加语义索引插件:


retrieval_plugin {
    name : "semantic_recall"
    type : "SemanticRetrievalPlugin"
    vector_size : 128
    search_k : 10000
    index_path : "./example/conf/semantic.annoy"
    using_dict_name: "annoy_knowledge_dict"
    num_result : 10
}

你可能感兴趣的:(问答系统)