1. 程式人生 > >百度開源 FAQ 問答系統(AnyQ)---FAQ資料集的新增

百度開源 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。 在這裡插入圖片描述

{"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
}