隨著對話系統和推薦系統的快速發展,新方向——對話推薦系統(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分詞等。我們提供了預處理后數據的下載鏈接以方便用戶使用,如下為這些數據集的統計數據:
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 |
Dataset | Dialogs | Utterances | Domains | Task Definition | Entity KG | Word KG |
---|
我們將對話推薦任務主要拆分成三個子任務:推薦任務(生成推薦的商品),對話任務(生成對話的回復)和策略任務(規劃對話推薦的策略)。其中所有的對話推薦系統都具有對話和推薦任務,它們是對話推薦系統的核心功能,而策略任務是一個輔助任務,其致力于更好的控制對話推薦系統,在不同的模型中的實現也可能不同(如TG-ReDial采用一個主題預測模型,DuRecDial中采用一個對話規劃模型等)
在CRSLab中,我們實現了18 個模型,覆蓋CRS、推薦、對話和策略模型四種類別,其中CRS模型是指同時對推薦和對話任務(甚至策略任務)進行建模的融合模型,其可以利用這些任務以相互增強彼此的表現;而其他模型則只針對于某一個子任務。這些模型中還包括一些已經在CRS任務上表現較好的前沿模型,如圖神經網絡(GCN)和預訓練模型(BERT 和 GPT-2)。下表為這些模型的相關信息:
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 |
× × × × × |
× × √ √ √ |
類別 | 模型 | Graph Neural Network | Pre-training Model |
---|
多樣的標準評測
我們支持一系列被廣泛使用的評估方式來測試和比較不同的 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 中的模型。對于已經集成的模型和數據集,可以直接使用命令行進行調用,使用以下命令,系統將依次完成數據的預處理,以及各模塊的訓練、驗證和測試,并得到指定的模型評測結果:
pythonrun_crslab.py--configconfig/kgsf/redial.yaml
如果您希望保存數據預處理結果與模型訓練結果,可以使用如下命令:
pythonrun_crslab.py--configconfig/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 可以在以下幾種系統上運行:
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 下:
#CUDA10.1 pipinstalltorch==1.6.0+cu101torchvision==0.7.0+cu101-fhttps://download.pytorch.org/whl/torch_stable.html #CPUonly pipinstalltorch==1.6.0+cputorchvision==0.7.0+cpu-fhttps://download.pytorch.org/whl/torch_stable.html
安裝完成后,如果你想在 GPU 上運行 CRSLab,請確保如下命令輸出True:
$python-c"importtorch;print(torch.cuda.is_available())" >>>True
安裝 PyTorch Geometric
確保安裝的 PyTorch 版本至少為 1.4.0:
$python-c"importtorch;print(torch.__version__)" >>>1.6.0
找到安裝好的 PyTorch 對應的 CUDA 版本:
$python-c"importtorch;print(torch.version.cuda)" >>>10.1
安裝相關的包:
pipinstalltorch-scatter-fhttps://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html pipinstalltorch-sparse-fhttps://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html pipinstalltorch-cluster-fhttps://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html pipinstalltorch-spline-conv-fhttps://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html pipinstalltorch-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,輸入:
pipinstalltorch-scatter-fhttps://pytorch-geometric.com/whl/torch-1.6.0+cu101.html pipinstalltorch-sparse-fhttps://pytorch-geometric.com/whl/torch-1.6.0+cu101.html pipinstalltorch-cluster-fhttps://pytorch-geometric.com/whl/torch-1.6.0+cu101.html pipinstalltorch-spline-conv-fhttps://pytorch-geometric.com/whl/torch-1.6.0+cu101.html pipinstalltorch-geometric
安裝 CRSLab
gitclonehttps://github.com/RUCAIBox/CRSLab&&cdCRSLab pipinstall-e.
快速測試
從 GitHub 下載 CRSLab 后,可以使用提供的腳本進行簡單的測試:
pythonrun_crslab.py--configconfig/kgsf/redial.yaml
系統將依次完成數據的預處理,以及各模塊的訓練、驗證和測試,并得到指定的模型評測結果。
結果展示
我們在 TG-ReDial 數據集上對模型進行了訓練和測試,并記錄了在三個任務上的評測結果。其中效果最好的模型是基于圖神經網絡的KGSF和基于預訓練的TG-ReDial模型。
推薦任務
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 | Hit@1 | Hit@10 | Hit@50 | MRR@1 | MRR@10 | MRR@50 | NDCG@1 | NDCG@10 | NDCG@50 |
---|
生成任務
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 | BLEU@1 | BLEU@2 | BLEU@3 | BLEU@4 | Dist@1 | Dist@2 | Dist@3 | Dist@4 | Average | Extreme | Greedy | PPL |
---|
策略任務
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 |
Model | Hit@1 | Hit@10 | Hit@50 | MRR@1 | MRR@10 | MRR@50 | NDCG@1 | NDCG@10 | NDCG@50 |
---|
未來展望
對話推薦系統在未來肯定還會有更多工作,而且我們的CRSLab也有許多需要繼續完善的地方。我們AI BOX團隊將會持續開發維護CRSLab,保持版本穩定,并不斷加入更多更新的模型和數據集。期待各位讀者能夠提供寶貴意見。
責任編輯:xj
原文標題:CRSLab:可能是最適合你的對話推薦系統開源庫
文章出處:【微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
-
開源
+關注
關注
3文章
3363瀏覽量
42532 -
深度學習
+關注
關注
73文章
5504瀏覽量
121222 -
對話系統
+關注
關注
0文章
7瀏覽量
2186
原文標題:CRSLab:可能是最適合你的對話推薦系統開源庫
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論