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

開源啦!!!基于鴻蒙ArkTS封裝的圖表組件《McCharts》,大家快來一起共創(chuàng)
摩爾線程支持DeepSeek開源通信庫(kù)DeepEP和并行算法DualPipe
摩爾線程完成DeepSeek開源庫(kù)FlashMLA和DeepGEMM適配
DeepSeek宣布開源DeepGEMM
DeepSeek扔的第二枚開源王炸是什么

評(píng)論