English | 中文
開放域產生問答模型Leveraging Passage Retrieval with Generative Models for Open Domain Question Answerin
檢索Dense Passage Retrieval for Open-Domain Question Answering
APScheduler
一個能夠部署執行的全流程對話系統
TensorFlow模型
Transformer
Seq2Seq
SMN檢索式模型
Scheduled Sampling的Transformer
GPT2
Task Dialogue
Pytorch模型
Transformer
Seq2Seq
本專案奔著建構一個能夠在線上部署對話系統,同時包含開放域和麵向任務型兩種對話系統,針對相關模型進行複現,論文閱讀筆記放置另一個項目:nlp-paper,專案中使用TensorFlow和Pytorch進行實現。
倉庫中的data目錄下放著各語料的玩具數據,可用於驗證系統執行性,完整語料以及Paper可以在這裡查看
LCCC
CrossWOZ
小黃雞
豆瓣
Ubuntu
微博
青雲
貼吧
Linux執行run.sh,專案工程目錄檢查執行check.sh(或check.py)
根目錄下的actuator.py為總執行入口,透過呼叫如下指令格式執行(執行前註意安裝requirements.txt):
python actuator.py --version [Options] --model [Options] ...
透過根目錄下的actuator.py進行執行時, --version
、 --model
和--act
為必傳參數,其中--version
為程式碼版本tf/torch
, --model
為執行對應的模型transformer/smn...
,而act為執行模式(缺省狀態下為pre_treat
模式),更詳細指令參數請參考各模型下的actuator.py
或config目錄下的對應json設定檔。
--act
執行模式說明如下:
pre_treat模式為文字預處理模式,如果在沒有分詞結果集以及字典的情況下,需要先運行pre_treat模式
train模式為訓練模式
evaluate模式為指標評估模式
chat模式為對話模式,chat模式下運作時,輸入ESC即退出對話。
正常執行順序為pre_treat->train->evaluate->chat
各模型下單獨有一個actuator.py,可以繞過外層耦合進行執行開發,不過執行時注意調整工程目錄路徑
dialogue下為相關模型的核心程式碼放置位置,方便日後進行封裝打包等
checkpoints為檢查點保存位置
config為設定檔保存目錄
data為原始資料儲存位置,同時,在模型執行過程中產生的中間資料檔案也保存在此目錄下
models為模型儲存目錄
tensorflow及pytorch放置模型建置以及各模組執行的核心程式碼
preprocess_corpus.py為語料處理腳本,對各語料進行單輪與多輪對話的處理,並規範統一介面調用
read_data.py用於load_dataset.py的資料載入格式調用
metrics.py為各項指標腳本
tools.py為工具腳本,保存有分詞器、日誌操作、檢查點保存/載入腳本等
docs下放置文件說明,包括模型論文閱讀筆記
docker(mobile)用於服務端(行動終端)部署腳本
server為UI服務介面,使用flask進行建置使用,執行對應的server.py即可
tools為預留工具目錄
actuator.py(run.sh)為總執行器入口
check.py(check.sh)為工程目錄檢查腳本
SMN檢索式對話系統使用前需要準備solr環境,solr部署系統環境推薦Linux,工具建議使用容器部署(建議Docker),並準備:
Solr(8.6.3)
pysolr(3.9.0)
以下提供簡要說明,更詳細可參考文章:搞定檢索式對話系統的候選response檢索--使用pysolr呼叫Solr
需確保solr在線上運作穩定,以及方便後續維護,請使用DockerFile部署,DockerFile取得位址:docker-solr
僅測試模型使用,可使用以下最簡建構指令:
docker pull solr:8.6.3 # 然后启动solr docker run -itd --name solr -p 8983:8983 solr:8.6.3 # 然后创建core核心选择器,这里取名smn(可选) docker exec -it --user=solr solr bin/solr create_core -c smn
關於solr中分詞工具有IK Analyzer、Smartcn、拼音分詞器等等,需要下載對應jar,然後在Solr核心設定檔managed-schema中加入設定。
特別說明:如果使用TF-IDF,還需要在managed-schema中開啟相似度設定。
在線上部署好Solr之後,在Python中使用pysolr進行連線使用:
pip install pysolr
新增索引資料(一般需要先安全檢查)方式如下。將回覆資料加入索引,responses是一個json,形式如:[{},{},{},...],裡面每個物件都建構按照你回覆的需求即可:
solr = pysolr.Solr(url=solr_server, always_commit=True, timeout=10) # 安全检查 solr.ping() solr.add(docs=responses)
查詢方式如下,以TF-IDF查詢所有語句query語句方式如下:
{!func}sum(product(idf(utterance,key1),tf(utterance,key1),product(idf(utterance,key2),tf(utterance,key2),...)
使用前需先將資料加入Solr,在本SMN模型中使用,先執行pre_treat模式即可。
Attention Is All You Need | 閱讀筆記:Transformer的開山之作,值得精讀| Ashish et al,2017
Sequential Matching Network: A New Architecture for Multi-turn Response Selection in Retrieval-Based Chatbots | 閱讀筆記:SMN檢索式對話模型,多層多粒度提取資訊| Devlin et al,2018
Massive Exploration of Neural Machine Translation Architectures | 閱讀筆記:展示了以NMT架構超參數為例的首次大規模分析,實驗為建構和擴展NMT體系結構帶來了新穎的見解和實用建議。 | Denny et al,2017
Scheduled Sampling for Transformers | 閱讀筆記:在Transformer應用Scheduled Sampling | Mihaylova et al,2019
Licensed under the Apache License, Version 2.0. Copyright 2021 DengBoCong. Copy of the license.