中科院計算所開源深度文字匹配開源工具 MatchZoo
中國科學院計算技術研究所網路資料科學與技術重點實驗室近日釋出了深度文字匹配開源專案 MatchZoo。MatchZoo 是一個 Python 環境下基於 TensorFlow 開發的開源文字匹配工具,可以應用於文字檢索、自動問答、複述問題、對話系統等多種應用任務場景。
GitHub: https://github.com/faneshion/MatchZoo
在 arxiv 上,MatchZoo: A Toolkit for Deep Text Matching 介紹了開源專案的主要結構:
據介紹,這一開源工具能夠讓大家更加直觀地瞭解深度文字匹配模型的設計、更加便利地比較不同模型的效能差異、更加快捷地開發新型的深度匹配模型。
MatchZoo主要特點
MatchZoo 基於 Keras 開發,支援 TensorFlow、CNTK 及 Theano,並能在 CPU 與 GPU 上無縫執行。MatchZoo 包括資料預處理,模型構建,訓練與評測三大模組:
資料預處理模組(data preparation)
該模組能將不同型別文字匹配任務的資料處理成統一的格式,具體包含如下的幾個檔案:
- word dictionary:每個單詞的對映符,通過預設的規則進行過濾常用詞,篩選少見詞、噪聲詞。
- corpus file:問題及回答內容檔案,每行以(id, length, word_id)格式書寫,分別表示問題或者回答的 id,文字長度,以及詞 id;
- relation file:包括訓練、驗證、測試檔案,每行以(rel,query_id, doc_id)格式書寫,分別表示問題與回答的相關度(資料中1為相關,0為不相關),問題的 id,以及答案的 id;
同時,該模組針對不同的任務需求提供了不同的資料生成器,包括有基於單文件的資料生成器、基於文件對的資料生成器、以及基於文件列表的資料生成器。不同的資料生成器可適用於不同的文字匹配任務,如文字問答、文字對話、以及文字排序等。
模型構建模組(model construction)
該模組基於 Keras 以幫助我們快速開發。Keras 中包含了深度學習模型中廣泛使用的普通層,如卷積層、池化層、全連線層等,除此之外,在 matchzoo/layers/中,研究人員還針對文字匹配定製了特定的層,如動態池化層、張量匹配層等。這些操作能夠快速高效地實現複雜的深度文字匹配的模型,在 matchzoo/models/中,研究人員實現了目前主流的深度文字匹配模型(如 DRMM, MatchPyramid, DUET, MVLSTM, aNMM, ARC-I, ARC-II, DSSM, CDSSM 等)。
訓練與評測模組(training and evaluation)
該模組提供了針對迴歸、分類、排序等問題的目標函式和評價指標函式。例如,在文字排序中常用的基於單文件的目標、基於文件對的目標、以及基於文件序列的目標。使用者可以根據任務的需要選擇合適的目標函式。在模型評估時,MatchZoo 也提供了多個廣為使用的評價指標函式,如 MAP、NDCG、Precision,Recall 等。同時,在文字排序任務中,MatchZoo 還能生成相容 TREC 的資料格式,可以方便地使用 trec_eval來進行模型評估。
執行
git clone https://github.com/faneshion/MatchZoo.git
cd MatchZoo
python setup.py install
python main.py --phase train --model_file ./models/arci_ranking.config
python main.py --phase predict --model_file ./models/arci_ranking.config
基準測試
在 Github 上,作者們以 WikiQA 資料為例來介紹 MatchZoo 的使用。
以 DRMM 為例,在 MatchZoo/matchzoo 中執行:
python main.py --phase train --model_file models/wikiqa_config/drmm_wikiqa.config
在測試時可執行:
python main.py --phase predict --model_file models/wikiqa_config/drmm_wikiqa.config
執行十個模型的結果如下:
訓練 loss 曲線圖如下:
測試 MAP 效能曲線圖如下:
論文地址:https://arxiv.org/pdf/1707.07270.pdf