T5 PEGASUS:开源一个中文生成式预训练模型

©PaperWeekly 原创 · 作者|苏剑林

单位|追一科技

研究方向|NLP、神经网络

去年在文章那个屠榜的T5模型,现在可以在中文上玩玩了中我们介绍了 Google 的多国语言版 T5 模型(mT5),并给出了用 mT5 进行中文文本生成任务的例子。诚然,mT5 做中文生成任务也是一个可用的方案,但缺乏完全由中文语料训练出来模型总感觉有点别扭,于是决心要搞一个出来。

经过反复斟酌测试,我们决定以 mT5 为基础架构和初始权重,先结合中文的特点完善 Tokenizer,然后模仿 PEGASUS [1] 来构建预训练任务,从而训练一版新的 T5 模型,这就是本文所开源的 T5 PEGASUS。

Tokenizer

首先,这里介绍我们对 Tokenizer 的完善工作。mT5 使用的 Tokenizer 是 sentencepiece [2] ,这是一个 C++ 所写的分词库,具有高效轻便的特点,但是很遗憾,对于中文来说它并不是特别友好,主要体现为:

1. sentencepiece 会把某些全角符号强制转化为半角符号,这在某些情况下是难以接受的,而且还可能影响任务的评测结果;

2. sentencepiece 内置的算法虽然有能力分出中文词来,但对于中文分词来说其实还是不够智能的;

3. sentencepiece 用 C++ 写的,虽然开源了,但对于用惯 Python 的人来说 C++ 就相当于黑箱,难以阅读源码,改起来也不容易。

这些特点让我们决定将 Tokenizer 切换回 BERT 的 Tokenizer。但直接替换原始版本的中文 BERT 的 Tokenizer 是不够的,一来是我们之前的工作《提速不掉点:基于词颗粒度的中文 WoBERT》[3] 已经表明以词为单位来做生成模型能获得更好的效果。

二来哪怕只看字中文 BERT 的 vocab.txt 也是很不完善的,漏了一些常见的标点符号(如双引号)和中文字(比如“琊”等)。为此,我们选择给 BERT 的 tokenizer 加入分词功能,并进一步完善 vocab.txt。

具体来说,我们往原始中文 BERT 的 token_dict 里边加入结巴分词的前 20 万个词,然后修改 Tokenizer 的逻辑,使得它能够切分出词来,这些改动都已经内置在 bert4keras 中了,直接调用就行。接着,我们用这个修改后的 Tokenizer 去遍历切分我们准备的预训练语料,统计各个 token 的频数,最后只保留最高频的 5 万个 token,得到一个规模为 5 万的 vocab.txt 来构建我们最终的 Tokenizer。

除了用这个新 Tokenizer 来训练 T5 PEGASUS 外,我们还用它来重新训练了一版 WoBERT 模型(WoBERT+),也欢迎读者尝试。

https://github.com/ZhuiyiTechnology/WoBERT

预训练任务

对于预训练任务,我们希望更加接近自然语言生成(而不是像 T5 那样的只预测挖空部分),并且尽可能具有实用价值。为此,我们关注到了 PEGASUS࿰

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值