隨著對話系統(tǒng)和推薦系統(tǒng)的快速發(fā)展,新方向——對話推薦系統(tǒng)(Conversational Recommender System,簡稱CRS)也開始了蓬勃發(fā)展,其關注于如何通過基于自然語言的對話來獲得用戶的意圖和偏好,以實現(xiàn)精準推薦。但是現(xiàn)有的CRS相關數(shù)據(jù)集和模型在建模場景、最終目標和使用技術等方面存在一定差異,使得研究者們很難對這些模型進行統(tǒng)一的評測對比。對于科研新手來說,更是難以在這些模型和數(shù)據(jù)集中抉擇并快速搭建CRS系統(tǒng)。
為幫助各位道友“快樂+快速”上手研究對話推薦任務,我們(中國人民大學AI BOX團隊)推出了開源項目CRSLab——一個用于構(gòu)建對話推薦系統(tǒng)(CRS)的開源工具包,在這里我們致力于幫您實現(xiàn)一鍵復現(xiàn),快速開發(fā),自動評測的一條龍服務,相關代碼和對應論文目前也已經(jīng)開源。
目前為止,我們支持以下幾大功能,還有更多好玩的功能正在路上!
便捷的使用方法:新手別害怕,CRSLab提供了簡單而靈活的配置,快速調(diào)用分分鐘的事;
6個數(shù)據(jù)集和18個模型:各種數(shù)據(jù)預處理已幫您完成,各種新模型也適配完畢,任君取用;
多樣的評測方式:各個自動的評測指標都已經(jīng)幫您實現(xiàn),甚至還有人機交互的接口哦;
通用和可擴展的框架:還不滿意?框架給您搭好,函數(shù)接口給您安排上,想怎么玩就怎么玩;
論文地址:https://arxiv.org/pdf/2101.00939.pdf
項目GitHub地址:https://github.com/RUCAIBox/CRSLab
懶人一鍵安裝:pip install crslab
特性介紹
CRSLab完全基于 PyTorch 實現(xiàn)、主要面向研究者使用,其具有以下四大特性。
通用和可擴展的結(jié)構(gòu)
我們設計了通用和可擴展的結(jié)構(gòu)來統(tǒng)一各種對話推薦數(shù)據(jù)集和模型,并集成了多種內(nèi)置接口和函數(shù)以便于快速開發(fā)。其具體框架如下所示:
圖片: CRSLab 的總體架構(gòu)
其中Configuration模塊提供了針對用戶的接口,用戶可以通過簡單的命令行操作或修改給出的config文件,即可實現(xiàn)快速調(diào)用不同的CRS模型!Data,Model和Evaluator模塊中集成了多個現(xiàn)有的數(shù)據(jù)集,模型和評測方案,省去了用戶自行復現(xiàn)的時間。Utilities中集成了多個常用的功能函數(shù),可以幫助用戶快速從新搭建一個新的對話推薦系統(tǒng)!
全面的基準模型和數(shù)據(jù)集
在CRSLab中,我們集成了常用的 6 個數(shù)據(jù)集和 18 個模型。這6個數(shù)據(jù)集均為常用的人工標注數(shù)據(jù)集,但是其在任務定義、領域等方面存在差異。我們對其進行了預處理以得到統(tǒng)一的格式,并努力使其支持更多的先進模型,這些預處理包括:推薦商品抽取、實體鏈接、BPE分詞等。我們提供了預處理后數(shù)據(jù)的下載鏈接以方便用戶使用,如下為這些數(shù)據(jù)集的統(tǒng)計數(shù)據(jù):
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 |
---|
我們將對話推薦任務主要拆分成三個子任務:推薦任務(生成推薦的商品),對話任務(生成對話的回復)和策略任務(規(guī)劃對話推薦的策略)。其中所有的對話推薦系統(tǒng)都具有對話和推薦任務,它們是對話推薦系統(tǒng)的核心功能,而策略任務是一個輔助任務,其致力于更好的控制對話推薦系統(tǒng),在不同的模型中的實現(xiàn)也可能不同(如TG-ReDial采用一個主題預測模型,DuRecDial中采用一個對話規(guī)劃模型等)
在CRSLab中,我們實現(xiàn)了18 個模型,覆蓋CRS、推薦、對話和策略模型四種類別,其中CRS模型是指同時對推薦和對話任務(甚至策略任務)進行建模的融合模型,其可以利用這些任務以相互增強彼此的表現(xiàn);而其他模型則只針對于某一個子任務。這些模型中還包括一些已經(jīng)在CRS任務上表現(xiàn)較好的前沿模型,如圖神經(jīng)網(wǎng)絡(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),關聯(lián)度(BLEU,Embedding)和多樣性(Distinct)的指標;由于對話推薦系統(tǒng)中的策略往往不盡相同,這里我們采用常用的Accuracy和Hit來進行評估。
此外,我們還提供了人機交互接口,用戶可以直接通過特定的接口函數(shù)和命令和自己搭建的對話推薦系統(tǒng)進行交互,進而分析其中的的bad case等,也可以幫助初學者掌握系統(tǒng)的運行流程。
便捷的使用方法
我們?yōu)樾率痔峁┝撕唵味`活的配置,以快速啟動集成在 CRSLab 中的模型。對于已經(jīng)集成的模型和數(shù)據(jù)集,可以直接使用命令行進行調(diào)用,使用以下命令,系統(tǒng)將依次完成數(shù)據(jù)的預處理,以及各模塊的訓練、驗證和測試,并得到指定的模型評測結(jié)果:
pythonrun_crslab.py--configconfig/kgsf/redial.yaml
如果您希望保存數(shù)據(jù)預處理結(jié)果與模型訓練結(jié)果,可以使用如下命令:
pythonrun_crslab.py--configconfig/kgsf/redial.yaml--save_data--save_system
總的來說,run_crslab.py有如下參數(shù)可供調(diào)用:
--config 或 -c:配置文件的相對路徑,以指定運行的模型與數(shù)據(jù)集。
--save_data 或 -sd:保存預處理的數(shù)據(jù)。
--restore_data 或 -rd:從文件讀取預處理的數(shù)據(jù)。
--save_system 或 -ss:保存訓練好的 CRS 系統(tǒng)。
--restore_system 或 -rs:從文件載入提前訓練好的系統(tǒng)。
--debug 或 -d:用驗證集代替訓練集以方便調(diào)試。
--interact 或 -i:與你的系統(tǒng)進行交互的對話。
如果希望調(diào)節(jié)模型或數(shù)據(jù)集的參數(shù)設置,可以直接對yaml文件進行更改,其提供了相比較于命令行更方便的編輯功能,具體的各項參數(shù)定義在文檔中已經(jīng)給出。
安裝與使用
CRSLab 可以在以下幾種系統(tǒng)上運行:
macOS X
CRSLab 需要在 Python 3.6 或更高的環(huán)境下運行。CRSLab 要求 torch 版本在 1.4.0 及以上,如果用戶想在 GPU 上運行 CRSLab,請確保你的 CUDA 版本或者 CUDAToolkit 版本在 9.2 及以上。
提醒:因為用戶可能會因為未正確配置PyTorch,PyTorch Geometric等環(huán)境而導致無法使用,這里我們提供了詳細的從零開始的安裝流程,確保大家能夠順利安裝。
安裝 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
系統(tǒng)將依次完成數(shù)據(jù)的預處理,以及各模塊的訓練、驗證和測試,并得到指定的模型評測結(jié)果。
結(jié)果展示
我們在 TG-ReDial 數(shù)據(jù)集上對模型進行了訓練和測試,并記錄了在三個任務上的評測結(jié)果。其中效果最好的模型是基于圖神經(jīng)網(wǎng)絡的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 |
---|
未來展望
對話推薦系統(tǒng)在未來肯定還會有更多工作,而且我們的CRSLab也有許多需要繼續(xù)完善的地方。我們AI BOX團隊將會持續(xù)開發(fā)維護CRSLab,保持版本穩(wěn)定,并不斷加入更多更新的模型和數(shù)據(jù)集。期待各位讀者能夠提供寶貴意見。
責任編輯:xj
原文標題:CRSLab:可能是最適合你的對話推薦系統(tǒng)開源庫
文章出處:【微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
-
開源
+關注
關注
3文章
3690瀏覽量
43838 -
深度學習
+關注
關注
73文章
5561瀏覽量
122800 -
對話系統(tǒng)
+關注
關注
0文章
7瀏覽量
2252
原文標題:CRSLab:可能是最適合你的對話推薦系統(tǒng)開源庫
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
開源鴻蒙應用技術組件共建計劃啟動
普華基礎軟件開源汽車操作系統(tǒng)新版本代碼上線
Open Echo:一個開源的聲納項目

評論