【学习笔记】开源中文对话预训练模型调研总结

开源中文对话预训练模型调研


总结了一下当前(截止2023年4月18日)最新的几个开源的大规模中文预训练开放域对话生成模型。

M o d e l Model Model n p a r a m s n_{params} nparams n l a y e r s n_{layers} nlayers d m o d e l d_{model} dmodel d f f d_{ff} dff n h e a d s n_{heads} nheads d h e a d d_{head} dhead n_position
E V A 2. 0 B a s e EVA2.0_{Base} EVA2.0Base 300M 12 768 3072 12 64 512
E V A 2. 0 L a r g e EVA2.0_{Large} EVA2.0Large 970M 24 1024 4096 16 64 512
E V A 2. 0 x L a r g e EVA2.0_{xLarge} EVA2.0xLarge 2.8B 24 2048 5120 32 64 512
C D i a l G P T L C C C − b a s e CDialGPT_{LCCC-base} CDialGPTLCCCbase 104M 12 768 3072 12 64 513
C D i a l G P T 2 L C C C − b a s e CDialGPT2_{LCCC-base} CDialGPT2LCCCbase 104M 12 768 3072 12 64 513
C D i a l G P T L C C C − l a r g e CDialGPT_{LCCC-large} CDialGPTLCCClarge 104M 12 768 3072 12 64 513
G P T 2 − c h i t c h a t GPT2-chitchat GPT2chitchat 88M 12 768 3072 12 64 300
dialogue-bart-base-chinese 6 768 3072 12 64 512
dialogue-bart-large-chinese 12 1024 4096 16 64 512

1. CDial-GPT

主要工作

  • Paper:A Large-Scale Chinese Short-Text Conversation Dataset
  • 开源地址:https://github.com/scutcyr/CDial-GPT
  • 主要贡献:(1)发布了一个经过严格过滤清洗后的大规模高质量中文对话语料库LCCC,base版本包括680万个对话,large版本包括1200万(12M)个对话。(2)同时发布了几个大规模预训练对话模型CDialGPT,首先在中文小说数据集上进行预训练,然后在LCCC上进行训练。

LCCC数据集

数据清洗策略

基于规则的清洗
  • 删除平台标记:Reply to @***,[dog];

  • 删除文本中的URL;

  • 大于30轮的对话分割为小于三十轮的多个对话;

  • 一个句子中重复6次以上的短语或单词只保留一份;

  • 删除回复太长或太短的对话;

  • 删除广告(A dataset for research on short-text conversations,EMNLP2013);

  • 如果回复中90%的三元语法是高频三元语法,则删除对话;

  • 如果回复是具有某些特定形式的通用回复,则删除对话;

  • 删除回复与帖子相同的对话;

  • 去除含有脏词、敏感词、方言、特殊词如左氧氟沙星、姓名、称呼或者未知的缩写、特殊符号和表情符号、平台标志如广告、图片、视频相关词语的对话。

基于分类器的清洗

(1)人工标注了十万个对话训练一个BERT,识别对话是否为噪声:

  • 文本不流利或者严重的拼写错误;
  • 回复不完整;
  • 时间敏感的;
  • 回复中出现节日、地点、性别时间等post没提到的;
  • 回复和上下文不相关的;

(2)人工标注了一万个话语训练一个BERT,识别出现外部上下文知识,超出文本,使人难以理解。

image-20230403212441322

模型

输入表征

把所有历史话语拼接成一个长文本序列,输入包括三种embedding之和,分别为word embedding,speaker embedding,position embedding。词嵌入和位置嵌入在预训练阶段学习,说话人嵌入则在后训练(微调)阶段学习。speaker embedding嵌入被用来表明不同的说话人,参考BERT,使用[CLS]和[SEP]表征一个句子的开始符和结束符。

训练

参考DialoGPT,基于Chinese-GPT(GPT-Novel),在LCCC上进行训练。对于多轮对话,将第二个到最后一个句子都作为对话历史的回复

GPT(Noval):12层GPT,104M参数;

CDialGPT(LCCC-base):12层GPT,104M参数;

CDialGPT2(LCCC-base):12层GPT2,104M参数;

CDialGPT(LCCC-large):12层GPT,104M参数;

2. GPT2-chitchat

参考了GPT2-Chinese和DialoGPT。

开源地址:https://github.com/yangjianxin1/GPT2-chitchat。

使用GPT2模型对中文闲聊语料进行训练,根据微软的DialoGPT的思想,在项目中添加了互信息。训练了两个模型:Dialogue Model与MMI Model(maximum mutual information scoring function)。首先使用Dialogue Model生成多个候选response,然后使用MMI Model从候选response中,选取loss最小的作为最终的response。

具体可见:https://zhuanlan.zhihu.com/p/101151633

3. EVA1.0

  • Paper:EVA: An Open-Domain Chinese Dialogue System with Large-Scale Generative Pre-Training
  • 主要贡献:提出了EVA,一个大规模中文预训练对话模型,参数量为2B;构建了一个严格清洗过滤的大规模中文对话数据集WDC-Dialogue,包含1.4B个对话。
  • 开源项目地址:https://github.com/thu-coai/EVA

WDC-DIalogue数据集

数据收集

社交媒体上的交互数据可以分为三类:

  • Repost:转发博客,和被转发者产生一个对话;
  • Comment:评论和回复;
  • Q&A:在线问答,在知乎这类平台多。

数据清洗

参照LCCC的数据清洗策略和方法。

模型

分词

传统的基于字符级的中文分词容易丢失汉语词汇或短语的重要于一,因此构建了一个中文的子词词表,包括中文的字和词,基于Sentencepiece的unigram language model。总共包含3万个词。

预训练细节

  • Encoder-Decoder型架构;

  • 对于n个utterance,以n-1个utterances编码,生成第n个utterance。

  • 最大编码和解码长度设置为128。

  • 为了解决短utterance被大量pad的效率瓶颈,提出了一个新的数据采样策略,将多个context-response pairs拼成一个样本,引入新的attention-mask来区分它们,确保它们不会互相干扰。

  • EVA采用和T5一样的相对位置编码。

实验

实验比较发现,EVA生成性能比CDialGPT好,主要体现在生成结果的信息性上,CDialGPT可能更倾向于生成通用回复。

4. EVA2.0

  • Paper:EVA2.0: Investigating Open-domain Chinese Dialogue Systems with Large-scale Pre-training
  • 开源项目地址:https://github.com/thu-coai/EVA

这是目前开源的参数量最大,性能最好的中文对话预训练模型,相比EVA1.0它进行了更严格的数据清洗和过滤。这篇文章讲述了如何构造一个中文开放域的大规模对话系统,并做了一些严谨的实验去研究对训练结果造成影响的因素,如模型层数设置、预训练方法、解码策略,并且说明了对话系统仍然存在一致性、知识性、安全性的问题。

5. dialogue-bart-chinese

HIT-TMG开源的基于BART的中文对话模型,模型在四个语料库上训练。Chinese Persona Chat、LCCC (CPC)、Emotional STC (ESTC)、KdConv。

详情可见:

https://huggingface.co/HIT-TMG/dialogue-bart-base-chinese

https://huggingface.co/HIT-TMG/dialogue-bart-large-chinese

猜你喜欢

转载自blog.csdn.net/m0_47779101/article/details/129960024