随着对话系统和推荐系统的快速发展,新方向——对话推荐系统(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)。
多样的标准评测:我们支持一系列被广泛使用的评估方式来测试和比较不同的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}
此外,我们还提供了人机交互接口,用户可以直接通过特定的接口函数和命令和自己搭建的对话推荐系统进行交互,进而分析其中的的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:从文件读取预处理的数据。
或:保存训练好的CRS系统。或:从文件载入提前训练好的系统。或:用验证集代替训练集以方便调试。或:与你的系统进行交互的对话。
如果希望调节模型或数据集的参数设置,可以直接对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下:安装完成后,如果你想在GPU上运行CRSLab,请确保如下命令输出:安装PyTorch Geometric:确保安装的PyTorch版本至少为1.4.0:找到安装好的PyTorch对应的CUDA版本:安装相关的包:其中和应使用确定的CUDA版本(# 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 True $ python -c "import torch; print(torch.cuda.is_available())" >>> True $ python -c "import torch; print(torch.__version__)" >>> 1.6.0 $ 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},,,,)和PyTorch版本(,,,)来分别替换。
比如,对于PyTorch 1.6.0和CUDA 10.1,输入:安装CRSLab:快速测试:从GitHub下载CRSLab后,可以使用提供的脚本进行简单的测试:系统将依次完成数据的预处理,以及各模块的训练、验证和测试,并得到指定的模型评测结果。
cpu cu92 cu101 cu102 cu110 1.4.0 1.5.0 1.6.0 1.7.0 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 git clone https://github.com/RUCAIBox/CRSLab && cd CRSLab pip install -e . 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 HERD 0.120 0.0141 0.00136 0.000350 0.181 0.369 0.847 1.30 0.697 Transformer 0.266 0.0440 0.0145 0.00651 0.324 0.837 2.02 3.06 0.879 GPT2 0.0858 0.0119 0.00377 0.0110 2.35 4.62 8.84 12.5 0.763 KBRD 0.267 0.0458 0.0134 0.00579 0.469 1.50 3.40 4.90 0.863 KGSF 0.383 0.115 0.0444 0.0200 0.340 0.910 3.50 6.20 0.888 TG-ReDial 0.125 0.0204 0.00354 0.000803 0.881 1.75 7.00 12.0 0.810策略任务: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,保持版本稳定,并不断加入更多更新的模型和数据集。期待各位读者能够提供宝贵意见。