CoAI

大规模中文对话数据集LCCC与中文对话预训练模型CDial-GPT

  • 2020年11月22日 14:00

LCCC是一个经过严格清洗的大规模中文对话数据集,包含base和large两个版本,分别包含680万和1200万多轮对话。LCCC来源于微博对话数据和开源对话数据集,经过一个两阶段的清洗过程,从9000万原始对话数据中筛选得到。具体而言,第一阶段使用一系列规则初步过滤掉不适当内容,第二阶段使用在人工标注数据上训练的分类器来进一步过滤。CDial-GPT是一个大规模中文预训练对话模型,采用GPT结构,先后在中国小说数据集和LCCC上预训练,该模型可供研究者直接用于对话生成。


基于Transformer的大规模预训练语言模型极大地促进了开放领域对话的研究进展。然而目前这一技术在中文对话领域并未被广泛应用,主要原因在于目前缺乏大规模高质量的中文对话开源数据。为了推动中文对话领域的研究,弥补中文对话语料不足这一问题,我们发布了一个包含1200万对话的大规模中文对话数据集LCCC,并开源了在LCCC上预训练的大规模中文对话生成模型CDial-GPT。

开源地址:https://github.com/thu-coai/CDial-GPT

LCCC-base下载:https://cloud.tsinghua.edu.cn/f/f131a4d259184566a29c/

LCCC-large下载:https://cloud.tsinghua.edu.cn/f/8424e7b9454c4e628c24/

CDial-GPT_LCCC-large下载:https://cloud.tsinghua.edu.cn/f/4dfb8c6c22ae47fbbe98/

LCCC数据集的构建


LCCC(Large-scale Cleaned Chinese Conversation)数据集有LCCC-base与LCCC-large两个版本,其中LCCC-base和LCCC-large中各包含6.8M和12M对话。这些数据是从90M原始对话数据中经过严格清洗得到的,也是目前所开源的规模最大、清洗最严格的中文对话数据集。数据统计信息展示在表1中。

1606718640956482.png

表1. 数据集统计信息LCCC-base(左)和LCCC-large (右)

原始数据收集

我们的数据获取流程分为两个阶段。在第一个阶段,我们挑选了微博上由专业媒体团队运营的新闻媒体账号,然后收集了一批在这些新闻媒体下留言互动的活跃用户。在第二个阶段中,我们收集了这些活跃用户微博下的留言互动,并将其作为我们的原始数据。微博下的留言回复一般以一个树形结构展开,我们将这一树形回复结构中每一条从根节点到叶子节点的路径作为一个完整对话,最终共收集到了79M对话数据。除了爬取微博对话,我们还在搜集了目前网络上开源的多个对话数据集总计1100多万个对话。

数据清洗

1606718775567772.png


图1. 数据清洗过程

为了保证数据质量,我们对收集到的原始对话数据进行了两个阶段的清洗。

第一阶段的清洗主要基于手工规则。这一阶段的主要目的是为了过滤掉对话数据中的明显噪声,如脏话、特殊符号、病句、复读机句式、广告、违法暴力信息等。在这一阶段中,我们花费了数周时间使用人工排查的方式优化规则。

第二阶段的清洗主要基于分类器过滤。在这一阶段中,我们基于BERT训练了两个文本分类器,第一个分类器主要用于甄别那些无法通过规则检测的噪音,如:1、语义模糊、语法错乱或有严重拼写错误的语句;2、时效性太强的对话;3、与上下文语义不相关的回复。第二个分类器主要用于甄别那些需要依赖额外上下文信息,如图片或视频等,才能理解的对话。这两个分类器均使用人工标注数据训练,我们为其标注了共计11万对话数据,最终的分类器在人工标注的测试集上分别达到了73.76%和77.60%的准确率。我们通过F1-score选择阈值来过滤得到高质量的对话数据。

中文对话预训练模型CDial-GPT


模型

为促进中文对话预训练模型的发展,我们基于LCCC数据集预训练了大规模中文对话生成模型CDial-GPT。该模型的训练过程包含两个阶段,首先,我们在总计5亿字符、包含各类题材的小说数据上训练得到了一个中文小说GPT预训练模型,然后在该模型的基础上,我们使用LCCC中的对话数据继续对模型进行训练,最终得到了中文对话预训练模型CDial-GPT。

该模型拥有12层Transformer结构,我们按字分词,字典大小13088,字向量维度768,最长上下文长度为513。我们沿用TransferTransfo的方式对对话进行建模,即把对话历史拼接为长文本,并使用段分割向量加以区分。具体来说:我们使用[CLS]字符标志文本起始,在段落后使用[SEP]字符表示段落结束,在段落中对相邻轮次对话使用[speaker1]、[speaker2]交替分割,并在segment embedding中使用[speaker1]、[speaker2]进行编码。

评测

为了评估对话预训练模型的质量,我们在440万规模的中文对话数据集STC上对其进行了评测实验,并对比了现有的中文对话预训练模型和一些经典的非预训练对话模型。我们主要通过PPL这一指标来反映模型的拟合能力,PPL越低表示模型的拟合能力越强。我们通过基于n-gram重合度的指标BLEU和基于Embedding相似度的指标Greedy Matching 和Embedding Average来衡量对话回复与真实回复的相关性,并通过Dist-n指标来衡量生成回复的多样性。实验结果展示在表2中。可以看到我们的模型在绝大多数指标上达到了最好的效果。由于自动指标无法完全反映生成对话的质量,于是我们对各模型生成的对话进行了人工评测。

1604054973636262.png

表2. 在STC数据集上自动评测结果

1604054990919416.png

表3. 在STC数据集上人工评测结果

在人工评测中我们主要考虑3个方面:1、语法性,也就是生成语句的流畅性;2、相关性,即生成语句与对话上文的相关性;3、信息量,即生成结果自身含有的信息量。具体来说,不符合语法性或与对话上文不相关的生成结果我们给予0分;语句流畅、和对话上文相关但信息量不足的生成结果给予1分;语句流畅、和对话上文相关并且信息量充足的生成结果给予2分,我们将人工评测结果展示在表3中。实验结果显示,我们的预训练模型拥有出色的生成质量,可以在生成信息量充足的回复的同时,保持较高的流畅性与相关性,优于其他基线模型,一些生成例子展示在表4中。

1604055026323093.png

表4. 在STC数据集上生成样例