700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 百度开源 FAQ 问答系统(AnyQ)|FAQ数据集的添加

百度开源 FAQ 问答系统(AnyQ)|FAQ数据集的添加

时间:2020-07-09 02:42:24

相关推荐

百度开源 FAQ 问答系统(AnyQ)|FAQ数据集的添加

1.FAQ

所谓FAQ(Frequently Asked Questions)问答,指的是通过构建一个数量巨大的问题答案库来作为语料库,当输入一个问题时,通过计算该问题与语料库中的所有问题的语义相似度,给出语义最相似的问题所对应的答案。两个问题语义相似度的计算方法,有:余弦相似度、Jaccard相似度、BM25相似度等。

2.AnyQ索引(Indexing)模块

在AnyQ系统中,索引(Indexing)模块的作用是根据所给定的问题答案数据集,通过将其转换为语义索引库,从而提供检索(Retrieval)、匹配(Matching)模块进行语义相似度计算,匹配出与所提问题最相似的答案。

在最初的AnyQ系统中,所提供的问题答案数据集如下所示,该数据集位于AnyQ/build/solr_script/sample_doc。

根据/baidu/AnyQ/blob/master/docs/semantic_retrieval_tutorial.md所说,要想将该数据集添加到索引模块,提供检索(Retrieval)、匹配(Matching)模块进行语义相似度计算,首先需要将其转换为JSON格式的数据,其中每条数据(包含一个问题,答案对)的格式如下:

{"question": "XXX", "answer": "XXX", "id": XXX}

接下来,再为该JSON格式文件添加索引ID,即每一条数据前以一个ID开头。其命令如下:

awk -F "\t" '{print ++ind"\t"$0}' JSON文件 > JSON文件.index

索引ID添加完毕以后,即可对已添加完索引ID的文件JSON文件.index构建语义索引库

首先,需要分别对系统中的字典(Dict)模块,和解析(Analysis)模块设置问题解析时所用插件(路径位于AnyQ/build/example/conf/):

dict_config{name: "fluid_simnet"type: "PaddleSimAdapter"path: "./simnet"}dict_config {name: "annoy_knowledge_dict"type: "String2RetrievalItemAdapter"path: "JSON文件.index文件路径"}

analysis_method {name: "method_simnet_emb"type: "AnalysisSimNetEmb"using_dict_name: "fluid_simnet"dim: 128query_feed_name: "left" cand_feed_name: "right" embedding_fetch_name: "tanh.tmp"}

然后,再为JSON文件.index构建语义索引库(在AnyQ/build下执行):

./annoy_index_build_tool example/conf/ example/conf/analysis.conf JSON文件.index 128 10 semantic.annoy 1>std 2>err

语义索引库构建完毕后,即可在检索模块配置文件retrieval.conf中配置语义检索插件(路径位于AnyQ/build/example/conf/):

retrieval_plugin {name : "semantic_recall"type : "SemanticRetrievalPlugin"vector_size : 128search_k : 10000 index_path : "semantic.annoy文件路径"using_dict_name: "annoy_knowledge_dict"num_result : 10}

到目前为止,语义索引库已经添加完毕,此时可启动系统进行测试。

提供一个25W的问答数据集进行测试:/download/qq_28385535/10777706

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。