今天,在开源最强nlp模型bert的tensorflow代码和预训练模型的基础上,谷歌ai团队再次发布一个多语言模型和一个中文模型。
上周,谷歌ai团队开源了备受关注的“最强nlp模型”bert的tensorflow代码和预训练模型,不到一天时间,收获3000多星!
今天,谷歌再次发布bert的多语言模型和中文模型!
bert,全称是bidirectionalencoderrepresentations fromtransformers,是一种预训练语言表示的新方法。
bert有多强大呢?它在机器阅读理解顶级水平测试squad1.1中表现出惊人的成绩:全部两个衡量指标上全面超越人类!并且还在11种不同nlp测试中创出最佳成绩,包括将glue基准推至80.4%(绝对改进7.6%),multinli准确度达到86.7% (绝对改进率5.6%)等。
新智元近期对bert模型作了详细的报道和专家解读:
nlp历史突破!谷歌bert模型狂破11项纪录,全面超越人类!
狂破11项记录,谷歌年度最强nlp论文到底强在哪里?
解读谷歌最强nlp模型bert:模型、数据和训练
如果你已经知道bert是什么,只想马上开始使用,可以下载预训练过的模型,几分钟就可以很好地完成调优。
戳这里直接使用:
https://github.com/google-research/bert/blob/master/multilingual.md
模型
目前有两种多语言模型可供选择。我们不打算发布更多单语言模型,但可能会在未来发布这两种模型的bert-large版本:
bert-base, multilingual:102 languages, 12-layer, 768-hidden, 12-heads, 110m parameters
bert-base, chinese:chinese simplified and traditional, 12-layer, 768-hidden, 12-heads, 110m parameters
多语言模型支持的语言是维基百科上语料最大的前100种语言(泰语除外)。多语言模型也包含中文(和英文),但如果你的微调数据仅限中文,那么中文模型可能会产生更好的结果。
结果
为了评估这些系统,我们使用了xnli dataset,它是multinli的一个版本,其中dev集和test集已经(由人类)翻译成15种语言。需要注意的是,训练集是机器翻译的(我们使用的是xnli提供的翻译,而不是google nmt)。
以下6种主要语言的评估结果:
前两行是xnli baseline的结果,后三行是使用bert的结果。
translate train表示multinli的训练集是从英语用机器翻译成外语的。所以训练和评估都是用外语完成的。遗憾的是,由于是用机器翻译的数据进行训练,因此无法量化较低的精度在多大程度上归因于机器翻译的质量,多大程度上归因于预训练模型的质量。
translate test表示xnli测试集是从外语用机器翻译成英语的。因此,训练和评估都是用英语进行的。但是,由于测试评估是在机器翻译的英语上进行的,因此准确性取决于机器翻译系统的质量。
zero shot表示多语言bert模型在英语multinli上进行了微调,然后在外语xnli测试集上进行了评估。在这种情况下,预训练和微调的过程都不涉及机器翻译。
请注意,英语的结果比multinli baseline的84.2要差,因为这个训练使用的是multilingual bert模型,而不是english-only的bert模型。这意味着对于语料资源大的语言,多语言模型的表现不如单语言模型。但是,训练和维护数十种单语言模型是不可行的。因此,如果你的目标是使用英语和中文以外的语言最大限度地提高性能,那么从我们的多语言模型开始,对你感兴趣的语言数据进行额外的预训练是有益的。
对于中文来说,用multilingualbert-base和chinese-onlybert-base训练的中文模型的结果比较如下:
跟英语类似,单语言模型比多语言模型好3%。
fine-tuning 示例
多语言模型不需要任何特殊考虑或更改api。我们在tokenization.py中更新了basictokenizer的实现以支持汉字的tokenization,但没有更改 tokenization api。
为了测试新模型,我们修改了run_classifier.py以添加对xnli数据集的支持。这是multinli的15种语言版本,其中dev/test 集已经经过人工翻译的,训练集已经经过机器翻译。
要运行 fine-tuning 代码,请下载xnli dev/test set和xnli机器翻译的训练集,然后将两个.zip文件解压缩到目录$xnli_dir中。
在xnli上运行 fine-tuning。该语言被硬编码为run_classifier.py(默认为中文),因此如果要运行其他语言,请修改xnliprocessor。
这是一个大型数据集,因此在gpu上训练需要花费几个小时(在cloud tpu上大约需要30分钟)。要快速运行实验以进行调试,只需将num_train_epochs设置为较小的值(如0.1)即可。
export bert_base_dir=/path/to/bert/chinese_l-12_h-768_a-12 # or multilingual_l-12_h-768_a-12export xnli_dir=/path/to/xnli python run_classifier.py --task_name=xnli --do_train=true --do_eval=true --data_dir=$xnli_dir --vocab_file=$bert_base_dir/vocab.txt --bert_config_file=$bert_base_dir/bert_config.json --init_checkpoint=$bert_base_dir/bert_model.ckpt --max_seq_length=128 --train_batch_size=32 --learning_rate=5e-5 --num_train_epochs=2.0 --output_dir=/tmp/xnli_output/
使用 chinese-only 模型,结果应该是这样的:
***** eval results ***** eval_accuracy = 0.774116 eval_loss = 0.83554 global_step = 24543 loss = 0.74603训练细节
数据源和采样
我们选择的语言是维基百科上语料最大的前100种语言。将每种语言的整个wikipedia转储数据(不包括用户页和讨论页)作为每种语言的训练数据。
然而,对于特定语言,维基百科的语料大小差异很大,而在神经网络模型中,低资源语言可能是“代表性不足”的(假设语言一定程度上在有限的模型容量中“竞争”)。
维基百科的语料大小也与该语言的使用者人数有关,而且我们也不想为了一种特定语言在很小的数据集上执行数千个epochs,造成过度拟合模型。
为了平衡这两个因素,我们在训练前数据创建(以及wordpiece词汇创建)期间对数据进行了指数平滑加权。换句话说,假设一种语言的概率是p(l),例如p(english) = 0.21,表示在将所有维基百科总合在一起之后,21%的数据是英语的。我们通过某个因子s对每个概率求幂,然后重新规范化,并从这个分布中进行采样。
在这个示例中,我们使s = 0.7。因此,像英语这样的高资源语言会被抽样不足,而像冰岛语这样的低资源语言会被过度采样。比如说,在原始分布中,英语比冰岛语采样率高1000倍,但在平滑后,英语的采样率只高100倍。
tokenization
对于tokenization,我们使用110k共享的wordpiece词汇表。单词计数的加权方式与数据相同,因此低资源语言的加权会增大。 我们故意不使用任何标记来表示输入语言(以便zero-shot训练可以工作)。
因为中文没有空白字符,所以在使用wordpiece之前,我们在cjk unicode范围内的每个字符周围添加了空格。这意味着中文被有效地符号化了。请注意,cjk unicode block仅包含汉字字符,不包括朝鲜文/韩文或日语片假名/平假名,这些与其他语言一样使用空格+ wordpiece进行标记化。
对于所有其他语言,我们应用与英语相同的方法:(a)字母小写+重音删除,(b)标点符号分割,(c)空白标记化。 我们知道口音标记在某些语言中具有重要意义,但认为减少有效词汇的好处可以弥补这一点。一般来说,bert强大的上下文模型应该能弥补删除重音标记而引入的歧义。
支持的语言
多语言模型支持维基百科上语料量最大的前100种语言。
但我们不得不排除的唯一一种语言是泰语,因为它是唯一一种不使用空格来划分单词的语言(除了汉语),而且每个单词的字符太多,不能使用基于字符的tokenization。
我国的5G专利数已占到了全球的30.3%
AMD推出基于Zen+架构和12nm工艺的第二代锐龙处理器
华为P10今天开启预订 资料泄露国行价格 老外眼红不已
博泽与Vayyar携手配备自动驾驶汽车门传感器
半桥DC-DC转换器设计方案降低数据中心功耗
谷歌再次发布BERT的多语言模型和中文模型
明年至少有两款新iPhone将配备LTO OLED面板
探索长三角产业数智化发展新出路
鸿蒙2.0发布会 2021华为将会很精彩
百炼智能店店通(餐饮版)亮相2021第二届食品饮料数字营销峰会
如何用Word调用Protel For DOS绘制的图形
国行版HomePod怎么样 值不值得买
放大倍数可调的放大器的设计
热升华打印原理
楼道清洁机器人的系统设计方案,很酷很时尚有木有
双音和WCDMA调制阻塞的有效IM2分量评估
该如何把浮点切换到16bit的定点来呢?
敬自由:破壁人华为,开启PC的无界探索
如何判断是否需要使用分立式晶振和振荡器呢?
PLC控制系统实际使用的注意事项