大型中文短文本对话数据集
写在前面:
研究用,原创翻译,转载请标明出处;第一次译文,之后会跟进完善。侵删。
今年暑假末,清华大学公开了大型对话数据集及预训练模型。该数据集融合各大社交媒体对话数据库,经过两轮严格的清洗,生成一套较为权威的对话数据集,开创了中文大型数据集的先河,具有十分高的研究价值。
摘要
生成式对话的神经网络模型在建立短文本对话模型方向上取得了可喜的结果。然而,通过训练得到这样的模型通常需要大规模高质量的对话语料,而这种语料是很难获取的。在本文中,我们提供了大规模已清洗中文对话数据集LCCC,其中包含了基础版本(680万条语料)和大规模版本(共1200万条语料)。我们使用一组规则以及11万条人工标注的对话对训练的分类器,这是该数据集质量的保证。我们同时也分别针对LCCC-base库和LCCC-large库发布了对话的预训练模型。已清洗的数据和预训练模型将会促进短文本对话模型的研究。所有的模型和数据将公布在以下链接:https://github.com/thu-coai/CDial-GPT。
关键词:深度学习、对话生成、数据集、预训练
1 简介
预训练模型的成功极大的促进了自然语言处理方面的研究。BERT推动了不同自然语言的理解任务,与此同时GPT展示了在自然语言生成方面的最新性能。最近,预训练模型已经成功应用到对话生成任务并且已取得了最新的成果。
除了基于Transformer的高效模型架构之外,语料也在开放领域对话模型的成功中起到了举足轻重的作用。现有的工作已经采纳了大量的英文对话语料,这些语料来自于推特、Reddit、OpenSubtitles等其他公开的资源,这使得预训练模型具有了能够与人类在开放域对话的能力。
然而,由于现阶段缺少大规模的中文对话语料,中文对话生成的预训练模型的发展已经被搁置许久。我们认为,建立高质量的大规模中文对话语料库是非常有必要的,这能更有效的推动中文的预训练模型的发展。目前,我们面临的最大挑战是对话数据的质量管控。一方面,由于现存工作表明,预训练模型所需要的数据量是十分巨大的,因此我们不能单纯的依赖众包服务;另一方面,如果我们主要从群众自愿获取数据,例如一些社交媒体(微博、推特、Reddit等等),数据的质量将会很难保证。事实上,网络社交媒体包含了许多负面的言行,包括有害评论(注:一些非常粗鲁的、不尊重的或者其他类似引起其他人反感的不良言论)、威胁、侮辱、歧视、色情内容及其他。这些因素能够显著的降低对话生成模型的生成能力,并且会导致严重的不可预料的后果,这将本质上地限制对话模型的实际应用。
本次工作中,我们建立了一个已清洗大规模中文对话数据集,其命名为LCCC。该数据集有LCCC-base和LCCC-large两个版本。LCCC-base是根据从微博爬取的7900万对话中过滤出来的,而LCCC-large是从微博数据以及其他中文语料库的组合中过滤出来的。我们设计了一种两个阶段的清洗流程来清洗该语料。尤其是第一阶段利用了一组启发式规则来过滤包含不当内容的对话内容,并且在第二阶段,我们使用了几个已在人工标注的数据基础上的已训练的分类器,通过使用这些分类器来让过滤更加彻底。之后,我们推出了针对中文对话生成的预训练模型,该模型首先使用了中文小说数据集预训练,并在LCCC数据集上进行再训练。所有的预训练模型和数据集均已发布来方便接下来的研究。
我们的贡献总结如下:
- 我们建立了大规模已清洗的中文对话数据集LCCC。它可以作为研究中文开放域对话生成的基准。
- 我们公开了中文对话生成的预训练模型。同时,我们进行了实验来演示该模型在中文对话生成任务上的效果。模型和数据均已发布以便公开使用。
2 相关工作
数据集: 我们对现有的数据驱动对话系统的数据集做了简要概述,其中大部分都是根据公开和众包资源建立的。
作为一个非常重要的开源对话语料库,像OpenSubtitles这样的电影脚本也在建立对话数据集的过程中起到了重要的作用。对话内容通常取决于电影的场景。另外一个公开的资源是社交媒体。其中,我们采用了推特、Reddit、微博以及技术论坛等社交媒体来建立语料库。公开的资源语料库是非常丰富的,因此从这些资源中爬取的数据的规模通常十分庞大然而,他们也包含了许多噪音点,这些噪音点需要格外小心地处理。
其他的研究者通过众包资源来构建高质量的对话数据集,这些数据集都是服务于更高级的对话任务而建立的。例如维基百科向导(WoW)、基于文档的对话(DoG),用于基于知识的对话生成,针对角色PERSON-CHAT对话生成,以及DailyDialog用于情感对话生成。这些数据集通常比公共资源中获取的更干净,但是数量很少。
对话生成的预训练模型: 由于GPT模型已经分别在不同文本生成任务上达到了最先进的性能,最近的工作中已经把与训练模型应用到了对话生成当中。DialoGPT呈现了一个英语开放域的预训练模型,它基于147M的Reddit对话语料上将GPT-2进行再训练。Meena用2.6B的英文社交媒体对话数据集的参数训练了进阶版Transformer。通过在一些小的对话数据集上微调中文GPT来研究对话的产生,其中中文GPT在混合了中文Wikipedia2(1.7B个单词)和Chinese News(9.2B个单词)的中文语料库上进行了预训练。
3 数据集
我们从微博上爬取了7900万条对话。首先,通过严格的清理过程,我们构建了清理后的微博数据集(LCCC-Base)。 然后,将7900万个会话与几个公共中文会话数据集混合,并通过更宽松的清洁条件获得更大的中文会话数据集(LCCC-large)。 清理过程包括基于规则和基于分类的过滤。
3.1 数据收集
LCCC-base 我们使用两阶段数据收集的方案用于构建我们的原始对话。 在第一阶段,收集了一组种子用户。具体来说,我们手动选择了一批跟随专业大众媒体致力于发布新闻的微博帐号。 然后,我们将在这些新闻下发表评论的用户视为“高质量”用户,因为机器人帐户通常不会过多关注这些日常新闻。
在第二阶段,我们收集了这些种子用户的对话。具体来说,我们将按照树状组织结构的下方评论来收集这些用户的微博帖子。需要注意的是,从根到叶的任何路径都可以视为对话的一部分。我们使用“深度优先搜索”流程重建了这些会话,并构建了7,900万个原始会话。接着,我们使用3.2节中所述的清洗方法构建了一个已清洗的微博数据集。
LCCC-large 我们从多个开源存储库中收集了语料库,包括中国Chatterbot语料库,PTT闲话语料库,OpenSubtitles语料库和小黄鸡语料库。这些数据集与青云语料库和贴吧语料库一起被清洗,并处理为单轮对话数据集。此外,我们还收集了多轮对话数据集,包括豆瓣对话语料库,电子商业对话语料库和中文聊天语料库。然后,我们将这些数据集与7900万对话进行了混合。虽然这里我们使用相同的清洗过程,但通过放宽下面描述的分类器阈值,我们获得了规模更大的数据集(LCCC-large)。
3.2 清洗过程
基于规则的噪音过滤 我们通过规则过滤掉许多类型的噪音,包括:(1)删除在对话中的平台标签,例如“ Reply to @ ***”,“ [dog]”;(2)从网址字符串中删除文本;(3)将对话数超过30的会话拆分为多轮对话数少于30的会话[28];(4)在一个句子中仅保留重复超过6次的短语或单词;(5)如果回答太长或太短,则删除对话;(6)如果通过中的方法将该回复识别为广告,则删除对话;(7)如果回复中90%的三元组是高频三元组,则删除对话;(8)如果回复具有某些特定形式的通用回复,则删除对话;(9)删除回复与帖子相同的对话。
我们还构建了包含以下噪声的黑名单:(1)脏话,敏感词和方言;(2)类似左氟沙星等专业术语;(三)名称,称谓和未知缩写;(4)特殊符号和表情符号;(5)平台标志,例如与广告,图片和视频相关的单词。如果对话中包含出现在黑名单中的单词,则该对话将被删除。某些情况在表1(顶部)中显示。
基于分类器的过滤 除了基于规则的方法外,我们还介绍了基于分类器的过滤。与语义和语法以及一些上下文相关的对话很难用规则过滤。因此,我们构建了两个BERT分类器,以进行更精细的过滤。我们用不同的置信度评估了精度,召回率和F,以选择最佳置信度阈值。
第一个BERT分类器使用了手动标记的100,000个会话进行训练。如果对话具有上述噪声或以下噪声,则标记为嘈杂:(1)回复不流畅或句中有严重的错别字;(2)回复的信息不完整;(3)对话的主题是有时效性的,(4)帖子中未提及的节日,地点,性别和时间出现在回复中(5)帖子和回复无关。表1中显示了某些情况(底部)。测试集的分类精度达到73.76%。
在社交媒体中,许多对话不可避免地依赖于文本之外的上下文[27,33],从而使其难以理解[9]。为了缓解此问题,第二个BERT分类器在包含10,000个发音的手动标记数据集上进行了训练。在测试集上,分类器准确率达到77.60%
3.3 统计和结果
表2中显示了有关数据集的统计信息。Avg.words表示每句话的平均单词数,文本使用Jieba 进行分词。我们还通过黑名单估算了STC数据集中的噪声水平。 结果表明,STC中60%的会话包含脏话,敏感词,特殊符号等。在STC上训练的模型生成的黑名单单词比在LCCC上训练的黑名单单词多五倍。在表3中,我们对现有的中文对话数据集和本文提供的的数据集进行了较清晰的比较。
4 模型
模型建立 本文使用的模型结构是基于基于Transformer的GPT 。Transformer解码器由多个隐性的多头自我注意模块组成。在每个时间步长中,自注意力机制只能观察左侧的信息。
给定一个完美回复y =(y1,…,yL)和对话的历史话语U = {u0,…,un},其中每条会话ui =(u1i,…,uLii)由第Li个词组成 ,我们的目标是在给定U值并具有已生成的U1n + 1,…,uj-1n + 1条件下,通过最大似然估计(MLE)P(y | U)= QLj = 1 P(yj | y1,…,yj-1,U)来生成ujn + 1,直到使用一个终止符来生成整个回复。
输入表示法 我们将所有历史话语连接为一个序列,如中所述的长文本。模型的输入是词嵌入、话者嵌入和位置嵌入的总和。在重新训练阶段学习词嵌入和位置嵌入,而在后训练或微调阶段学习话者嵌入。话者嵌入用于指示不同的说话者,我们使用speaker符号作为分隔符。在BERT之后,我们还将[CLS]添加到序列的开头,并使用[SEP]作为序列结束标记。
训练 在DialoGPT 的工作之后,我们在收集到的会话数据集的基础上,根据预先训练的中文GPT模型(GPTNovel)对模型进行了后训练。对于Dial-GPT之后的多轮对话实例,我们将对话中从第二句到最后一个句子的每个句子作为历史句子的回复。我们分别在LCCC-base和LCCC-large(LCCC-base更加干净)上训练了几种模型,总结如下:
- GPTNovel是一个12层GPT,在最新的中文数据集上经过70轮的预训练,该数据集由各种流派(喜剧,浪漫,推理)和大约5亿个标签组成。
- CDialGPTLCCC-base是一个12层GPT,在最新的中文数据集上预训练了70轮,并在LCCC-base数据集上进行了30轮后训练。
- CDialGPT2LCCC-base是一个12层GPT2,在最新的中文数据集上预训练了70轮,并在LCCC-base上进行了30轮后训练。
- CDialGPTLCCC-large是一个12层GPT,在最新的中文数据集上进行了70轮预训练,在LCCC-large上进行了30轮后训练。
所有模型都通过AdamW 优化器和Noam 学习速率衰减方法进行了优化。我们所有模型的层数均设置为12,头数设置为12。词嵌入纬度设置为768,位置嵌入的纬度设置为513。预热轮数设为1,最大学习率为6.25e-5。批大小设置为8,梯度累积的数量设置为64。所有模型都在四个RTX 2080ti GPU上,以13088个汉字的词汇进行了训练。我们的实现基于Transformers 14和TransferTransfo 15的开源代码。
5 实验
5.1 微调设置和实施细节
为了评估模型,我们对STC数据集第4节中提到的所有模型进行了微调。STC数据集包含4.4M对话对。我们将数据集随机分为训练,验证和测试集。验证集和测试集具有20,000个会话对,每个会话对之间没有任何交集。
baseline 首先,我们选择唯一的中文对话预训练模型GPT2-chitchat 16作为一个基线,该模型在基于GPT2模型的50万汉语对话中进行了预训练。然后,我们选择瓦尼拉Transformer作为Baseline之一。该模型广泛应用于机器翻译和会话生成中。我们还使用注意力机制(Attn-Seq2Seq)评估了经典的序列到序列模型,该模型已广泛用于会话生成中。
训练详细信息 GPTNovel最多可以微调30轮。所有其他模型都可以在相同的批次大小和梯度累积数量的情况下微调多达10轮。其他超参数也与后训练的过程保持相同。对Transformer和Attn-Seq2Seq进行训练,直到STC不进行预训练即可达到收敛。为了公平比较,Attn-Seq2Seq由6层具有Bahdanau 注意机制的GRU组成,并且隐藏状态的纬度设置为768。Transformer的层数也设置为6。因此,这两个模型具有可与预训练模型比较的参数。我们将GPT2-chitchat的参数设置为与原始存储库相同。对于所有模型,我们使用AdamW优化器将学习率从6.25e-5线性降低至0。
案例研究 表5提供了一些CDialGPTLCCC-large生成的案例,这些案例已在STC上进行了微调。这些样本表明该模型具有生成信息性回复的能力。在DialoGPT 的工作之后,我们在Tabel 3(a)和Tabel 3(b)中提供了一个交互式对话示例和一个自我演示对话示例。以上所有样本均通过TEMPERATURE为0.7的top-p采样进行解码。
自动度量 我们首先采用BLEU 和不同的n-gram 作为我们的自动度量。由于BLEU不能完美地反映生成结果的质量,因此我们采用贪婪匹配来评估单词级别的帖子与生成的回复之间的相关性以及句子级别的平均嵌入。 除了GPT2-chichat词汇表与其他词汇表不同之外,我们还介绍了不同模型的困惑。
如表6所示,在LCCC上训练的这个模型比Transformer达到了更好的困惑度(PPL),但BLEU-2值表现较差差,这与以前的工作是一致的。 [1]显示了困惑度和人类评价之间的强烈关联,因此我们的模型具有争论性。在LCCC上训练的模型在贪婪匹配和嵌入平均值上也优于其他模型。 GPT2-chitchat得分最高,但生成质量较差,我们将其归因于模型的小规模。
人工评估 我们还采用人工评估来评估生成模型的性能。 将每个模型的200个样本(总共1000个样本)随机呈现给3个评委,以基于2/1/0评分模式按照以下方面进行评估:
- 流畅性和相关性 如果回复在语法上正确,逻辑上一致并且与帖子相关,则将得到1。否则,将得到0。
- 大信息量 如果回答流畅,与帖子内容相关且内容丰富,则得分为2。
结果显示在表7中。我们可以看到,在LCCC上训练的模型优于其他模型。尽管CDialGPTLCCC-base在自动度量方面不如Transformers好,但CDialGPTLCCC-base在手动评估中的性能略优于Transformer。并且我们计算了Fleiss kappa来衡量人群工作者的注释一致性。值范围在0.39-0.44之间,表示中等程度的一致性。
6. 总结
本文介绍了使用我们的过滤流程精准清洗的大规模已清洗中文会话数据集。我们提供了两个版本:一个是具有680万个会话的LCCC-base版本,另一个是具有1200万个会话的较大版本。为了获得高质量的对话数据,我们设计了基于规则和基于分类器的过滤程序。我们还介绍了用于中文对话生成的预训练模型,该模型在1200万开放域对话中进行了训练。我们所有的预训练模型和数据集已发布供公众使用。
7. 鸣谢
这项工作得到了中国国家重点研发计划(批准号2018YFC0830200)和国家自然科学基金项目(重点项目号61936010和编号为61876096的常规项目)的共同支持。感谢THUNUS NExT联合实验室的支持。