百度開源 FAQ 問答系統(AnyQ)---FAQ資料集的新增
阿新 • • 發佈:2018-12-20
1.FAQ
所謂FAQ(Frequently Asked Questions)問答,指的是通過構建一個數量巨大的問題答案庫來作為語料庫,當輸入一個問題時,通過計算該問題與語料庫中的所有問題的語義相似度,給出語義最相似的問題所對應的答案。兩個問題語義相似度的計算方法,有:餘弦相似度、Jaccard相似度、BM25相似度等。
2.AnyQ索引(Indexing)模組
在AnyQ系統中,索引(Indexing)模組的作用是根據所給定的問題答案資料集,通過將其轉換為語義索引庫,從而提供檢索(Retrieval)、匹配(Matching)模組進行語義相似度計算,匹配出與所提問題最相似的答案。 在最初的AnyQ系統中,所提供的問題答案資料集如下所示,該資料集位於AnyQ/build/solr_script/sample_doc。
{"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: 128
query_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 : 128
search_k : 10000
index_path : "semantic.annoy檔案路徑"
using_dict_name: "annoy_knowledge_dict"
num_result : 10
}