隨着對話系統和推薦系統的快速發展,新方向——對話推薦系統(Conversational Recommender System,簡稱CRS)也開始了蓬勃發展,其關注於如何通過基於自然語言的對話來獲得用戶的意圖和偏好,以實現精準推薦。但是現有的CRS相關數據集和模型在建模場景、最終目標和使用技術等方面存在一定差異,使得研究者們很難對這些模型進行統一的評測對比。對於科研新手來說,更是難以在這些模型和數據集中抉擇並快速搭建CRS系統。
爲幫助各位道友“快樂+快速”上手研究對話推薦任務,我們(中國人民大學AI BOX團隊)推出了開源項目CRSLab ——一個用於構建對話推薦系統(CRS)的開源工具包,在這裏我們致力於幫您實現一鍵復現,快速開發,自動評測的一條龍服務,相關代碼和對應論文目前也已經開源。
目前爲止,我們支持以下幾大功能,還有更多好玩的功能正在路上!
便捷的使用方法:新手別害怕,CRSLab提供了簡單而靈活的配置,快速調用分分鐘的事;
6個數據集和18個模型:各種數據預處理已幫您完成,各種新模型也適配完畢,任君取用;
多樣的評測方式:各個自動的評測指標都已經幫您實現,甚至還有人機交互的接口哦;
通用和可擴展的框架:還不滿意?框架給您搭好,函數接口給您安排上,想怎麼玩就怎麼玩;
論文地址:https://arxiv.org/pdf/2101.00939.pdf
項目GitHub地址:https://github.com/RUCAIBox/CRSLab
懶人一鍵安裝:pip install crslab
特性介紹
CRSLab完全基於 PyTorch 實現、主要面向研究者使用,其具有以下四大特性。
通用和可擴展的結構
我們設計了通用和可擴展的結構來統一各種對話推薦數據集和模型,並集成了多種內置接口和函數以便於快速開發。其具體框架如下所示:
圖片: CRSLab 的總體架構
其中Configuration模塊提供了針對用戶的接口,用戶可以通過簡單的命令行操作或修改給出的config文件,即可實現快速調用不同的CRS模型!Data,Model和Evaluator模塊中集成了多個現有的數據集,模型和評測方案,省去了用戶自行復現的時間。Utilities中集成了多個常用的功能函數,可以幫助用戶快速從新搭建一個新的對話推薦系統!
全面的基準模型和數據集
在CRSLab中,我們集成了常用的 6 個數據集和 18 個模型。這6個數據集均爲常用的人工標註數據集,但是其在任務定義、領域等方面存在差異。我們對其進行了預處理以得到統一的格式,並努力使其支持更多的先進模型,這些預處理包括:推薦商品抽取、實體鏈接、BPE分詞等。我們提供了預處理後數據的下載鏈接以方便用戶使用,如下爲這些數據集的統計數據:
Dataset | Dialogs | Utterances | Domains | Task Definition | Entity KG | Word KG |
---|---|---|---|---|---|---|
ReDial | 10,006 | 182,150 | Movie | -- | DBpedia | ConceptNet |
TG-ReDial | 10,000 | 129,392 | Movie | Topic Prediction | CN-DBpedia | HowNet |
GoRecDial | 9,125 | 170,904 | Movie | Action Prediction | DBpedia | ConceptNet |
DuRecDial | 10,200 | 156,000 | Movie, Music | Goal Planning | CN-DBpedia | HowNet |
INSPIRED | 1,001 | 35,811 | Movie | Strategy Prediction | DBpedia | ConceptNet |
OpenDialKG | 13,802 | 91,209 | Movie, Book | Path Generation | DBpedia | ConceptNet |
我們將對話推薦任務主要拆分成三個子任務:推薦任務(生成推薦的商品),對話任務(生成對話的回覆)和策略任務(規劃對話推薦的策略)。其中所有的對話推薦系統都具有對話和推薦任務,它們是對話推薦系統的核心功能,而策略任務是一個輔助任務,其致力於更好的控制對話推薦系統,在不同的模型中的實現也可能不同(如TG-ReDial採用一個主題預測模型,DuRecDial中採用一個對話規劃模型等)
在CRSLab中,我們實現了18 個模型,覆蓋CRS、推薦、對話和策略模型四種類別,其中CRS模型是指同時對推薦和對話任務(甚至策略任務)進行建模的融合模型,其可以利用這些任務以相互增強彼此的表現;而其他模型則只針對於某一個子任務。這些模型中還包括一些已經在CRS任務上表現較好的前沿模型,如圖神經網絡(GCN)和預訓練模型(BERT 和 GPT-2)。下表爲這些模型的相關信息:
類別 | 模型 | Graph Neural Network | Pre-training Model |
---|---|---|---|
CRS 模型 | ReDial KBRD KGSF TG-ReDial |
× √ √ × |
× × × √ |
推薦模型 | Popularity GRU4Rec SASRec TextCNN R-GCN BERT |
× × × × √ × |
× × × × × √ |
對話模型 | HERD Transformer GPT-2 |
× × × |
× × √ |
策略模型 | PMI MGCG Conv-BERT Topic-BERT Profile-BERT |
× × × × × |
× × √ √ √ |
多樣的標準評測
我們支持一系列被廣泛使用的評估方式來測試和比較不同的 CRS。針對對話推薦中包含的各個子任務(推薦,對話,策略),我們分別設計了對應的評測方法,供直接用戶使用,如下表所示:
類別 | 指標 |
---|---|
推薦任務 | Hit@{1, 10, 50}, MRR@{1, 10, 50}, NDCG@{1, 10, 50} |
對話任務 | PPL, BLEU-{1, 2, 3, 4}, Embedding Average/Extreme/Greedy, Distinct-{1, 2, 3, 4} |
策略任務 | Accuracy, Hit@{1,3,5} |
這裏的推薦任務的若干指標均爲常用的基於排序的指標;對話任務的指標包括評估概率分佈(PPL),關聯度(BLEU,Embedding)和多樣性(Distinct)的指標;由於對話推薦系統中的策略往往不盡相同,這裏我們採用常用的Accuracy和Hit來進行評估。
此外,我們還提供了人機交互接口,用戶可以直接通過特定的接口函數和命令和自己搭建的對話推薦系統進行交互,進而分析其中的的bad case等,也可以幫助初學者掌握系統的運行流程。
便捷的使用方法
我們爲新手提供了簡單而靈活的配置,以快速啓動集成在 CRSLab 中的模型。對於已經集成的模型和數據集,可以直接使用命令行進行調用,使用以下命令,系統將依次完成數據的預處理,以及各模塊的訓練、驗證和測試,並得到指定的模型評測結果:
python run_crslab.py --config config/kgsf/redial.yaml
如果您希望保存數據預處理結果與模型訓練結果,可以使用如下命令:
python run_crslab.py --config config/kgsf/redial.yaml --save_data --save_system
總的來說,run_crslab.py
有如下參數可供調用:
--config
或-c
:配置文件的相對路徑,以指定運行的模型與數據集。--save_data
或-sd
:保存預處理的數據。--restore_data
或-rd
:從文件讀取預處理的數據。--save_system
或-ss
:保存訓練好的 CRS 系統。--restore_system
或-rs
:從文件載入提前訓練好的系統。--debug
或-d
:用驗證集代替訓練集以方便調試。--interact
或-i
:與你的系統進行交互的對話。
如果希望調節模型或數據集的參數設置,可以直接對yaml文件進行更改,其提供了相比較於命令行更方便的編輯功能,具體的各項參數定義在文檔中已經給出。
安裝與使用
CRSLab 可以在以下幾種系統上運行:
Linux
Windows 10
macOS X
CRSLab 需要在 Python 3.6 或更高的環境下運行。CRSLab 要求 torch 版本在 1.4.0 及以上,如果用戶想在 GPU 上運行 CRSLab,請確保你的 CUDA 版本或者 CUDAToolkit 版本在 9.2 及以上。
提醒:因爲用戶可能會因爲未正確配置PyTorch,PyTorch Geometric等環境而導致無法使用,這裏我們提供了詳細的從零開始的安裝流程,確保大家能夠順利安裝。
安裝 PyTorch
使用 PyTorch 本地安裝命令或者先前版本安裝命令安裝 PyTorch,比如在 Linux 和 Windows 下:
# CUDA 10.1
pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
# CPU only
pip install torch==1.6.0+cpu torchvision==0.7.0+cpu -f https://download.pytorch.org/whl/torch_stable.html
安裝完成後,如果你想在 GPU 上運行 CRSLab,請確保如下命令輸出True
:
$ python -c "import torch; print(torch.cuda.is_available())"
>>> True
安裝 PyTorch Geometric
確保安裝的 PyTorch 版本至少爲 1.4.0:
$ python -c "import torch; print(torch.__version__)"
>>> 1.6.0
找到安裝好的 PyTorch 對應的 CUDA 版本:
$ python -c "import torch; print(torch.version.cuda)"
>>> 10.1
安裝相關的包:
pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-sparse -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-cluster -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-spline-conv -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-geometric
其中${CUDA}
和${TORCH}
應使用確定的 CUDA 版本(cpu
,cu92
,cu101
,cu102
,cu110
)和 PyTorch 版本(1.4.0
,1.5.0
,1.6.0
,1.7.0
)來分別替換。比如,對於 PyTorch 1.6.0 和 CUDA 10.1,輸入:
pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.6.0+cu101.html
pip install torch-sparse -f https://pytorch-geometric.com/whl/torch-1.6.0+cu101.html
pip install torch-cluster -f https://pytorch-geometric.com/whl/torch-1.6.0+cu101.html
pip install torch-spline-conv -f https://pytorch-geometric.com/whl/torch-1.6.0+cu101.html
pip install torch-geometric
安裝 CRSLab
git clone https://github.com/RUCAIBox/CRSLab && cd CRSLab
pip install -e .
快速測試
從 GitHub 下載 CRSLab 後,可以使用提供的腳本進行簡單的測試:
python run_crslab.py --config config/kgsf/redial.yaml
系統將依次完成數據的預處理,以及各模塊的訓練、驗證和測試,並得到指定的模型評測結果。
結果展示
我們在 TG-ReDial 數據集上對模型進行了訓練和測試,並記錄了在三個任務上的評測結果。其中效果最好的模型是基於圖神經網絡的KGSF和基於預訓練的TG-ReDial模型。
推薦任務
Model | Hit@1 | Hit@10 | Hit@50 | MRR@1 | MRR@10 | MRR@50 | NDCG@1 | NDCG@10 | NDCG@50 |
---|---|---|---|---|---|---|---|---|---|
SASRec | 0.000446 | 0.00134 | 0.0160 | 0.000446 | 0.000576 | 0.00114 | 0.000445 | 0.00075 | 0.00380 |
TextCNN | 0.00267 | 0.0103 | 0.0236 | 0.00267 | 0.00434 | 0.00493 | 0.00267 | 0.00570 | 0.00860 |
BERT | 0.00722 | 0.00490 | 0.0281 | 0.00722 | 0.0106 | 0.0124 | 0.00490 | 0.0147 | 0.0239 |
KBRD | 0.00401 | 0.0254 | 0.0588 | 0.00401 | 0.00891 | 0.0103 | 0.00401 | 0.0127 | 0.0198 |
KGSF | 0.00535 | 0.0285 | 0.0771 | 0.00535 | 0.0114 | 0.0135 | 0.00535 | 0.0154 | 0.0259 |
TG-ReDial | 0.00793 | 0.0251 | 0.0524 | 0.00793 | 0.0122 | 0.0134 | 0.00793 | 0.0152 | 0.0211 |
生成任務
Model | BLEU@1 | BLEU@2 | BLEU@3 | BLEU@4 | Dist@1 | Dist@2 | Dist@3 | Dist@4 | Average | Extreme | Greedy | PPL |
---|---|---|---|---|---|---|---|---|---|---|---|---|
HERD | 0.120 | 0.0141 | 0.00136 | 0.000350 | 0.181 | 0.369 | 0.847 | 1.30 | 0.697 | 0.382 | 0.639 | 472 |
Transformer | 0.266 | 0.0440 | 0.0145 | 0.00651 | 0.324 | 0.837 | 2.02 | 3.06 | 0.879 | 0.438 | 0.680 | 30.9 |
GPT2 | 0.0858 | 0.0119 | 0.00377 | 0.0110 | 2.35 | 4.62 | 8.84 | 12.5 | 0.763 | 0.297 | 0.583 | 9.26 |
KBRD | 0.267 | 0.0458 | 0.0134 | 0.00579 | 0.469 | 1.50 | 3.40 | 4.90 | 0.863 | 0.398 | 0.710 | 52.5 |
KGSF | 0.383 | 0.115 | 0.0444 | 0.0200 | 0.340 | 0.910 | 3.50 | 6.20 | 0.888 | 0.477 | 0.767 | 50.1 |
TG-ReDial | 0.125 | 0.0204 | 0.00354 | 0.000803 | 0.881 | 1.75 | 7.00 | 12.0 | 0.810 | 0.332 | 0.598 | 7.41 |
策略任務
Model | Hit@1 | Hit@10 | Hit@50 | MRR@1 | MRR@10 | MRR@50 | NDCG@1 | NDCG@10 | NDCG@50 |
---|---|---|---|---|---|---|---|---|---|
MGCG | 0.591 | 0.818 | 0.883 | 0.591 | 0.680 | 0.683 | 0.591 | 0.712 | 0.729 |
Conv-BERT | 0.597 | 0.814 | 0.881 | 0.597 | 0.684 | 0.687 | 0.597 | 0.716 | 0.731 |
Topic-BERT | 0.598 | 0.828 | 0.885 | 0.598 | 0.690 | 0.693 | 0.598 | 0.724 | 0.737 |
TG-ReDial | 0.600 | 0.830 | 0.893 | 0.600 | 0.693 | 0.696 | 0.600 | 0.727 | 0.741 |
未來展望
對話推薦系統在未來肯定還會有更多工作,而且我們的CRSLab也有許多需要繼續完善的地方。我們AI BOX團隊將會持續開發維護CRSLab,保持版本穩定,並不斷加入更多更新的模型和數據集。期待各位讀者能夠提供寶貴意見。
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關於PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公衆號後臺點擊「交流羣」,小助手將把你帶入 PaperWeekly 的交流羣裏。