您现在的位置是:主页 > 数据库技术 > 数据库技术

中文预训练模型ERNIE该如何使用

IDCBT2022-01-05服务器技术人已围观

简介本篇文章为大家展示了中文预训练模型ERNIE该如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 最近在工作上处理的都是中文

本篇文章为大家展示了中文预训练模型ERNIE该如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

最近在工作上处理的都是中文语料,也尝试了一些最近放出来的预训练模型(ERNIE,BERT-CHINESE,WWM-BERT-CHINESE),比对之后还是觉得百度的ERNIE效果会比较好,而且使用十分方便,所以今天就详细地记录一下。希望大家也都能在自己的项目上取得进展~

1、A Glance at ERNIE

关于ERNIE模型本身的话这篇不会做过多介绍,网上的介绍文档也很多了,相信从事NLP的同学们肯定都非常熟悉啦。

2、ERNIE源码浅尝

Okay,当我们了解了ERNIE模型的大体框架及原理之后,接下来就可以深入理解一下具体的实现啦。ERNIE是基于百度自己的深度学习框架飞桨(PaddlePaddle)搭建的,(百度推这个飞桨的力度还是蛮大的,还开放了免费算力),大家平时炼丹用的更多的可能是TensorFlow和Pytorch,这里关于运行ERNIE的飞桨环境安装可以参考快速安装指南(https://www.paddlepaddle.org.cn/#quick-start)。

2.1 关于输入

模型预训练的输入是基于百科类、资讯类、论坛对话类数据构造具有上下文关系的句子对数据,利用百度内部词法分析工具对句对数据进行字、词、实体等不同粒度的切分,然后基于 tokenization.py中的 CharTokenizer 对切分后的数据进行 token 化处理,得到明文的 token 序列及切分边界,然后将明文数据根据词典 config/vocab.txt 映射为 id 数据,在训练过程中,根据切分边界对连续的 token 进行随机 mask 操作。经过上述预处理之后的输入样例为:

1 1048 492 1333 1361 1051 326 2508 5 1803 1827 98 164 133 2777 2696 983 121 4 19 9 634 551 844 85 14 2476 1895 33 13 983 121 23 7 1093 24 46 660 12043 2 1263 6 328 33 121 126 398 276 315 5 63 44 35 25 12043 2;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55;-1 0 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 -1 0 0 0 1 0 0 1 0 1 0 0 1 0 1 0 -1;0

一共有五个部分组成,每个部分之间用分号;隔开:

    token_ids:输入句子对的表示;

    sentence_type_ids:0或者1表示token属于哪一个句子;

    position_ids:绝对位置编码

    seg_labels: 表示分词边界信息,0表示词首、1表示非词首、-1为占位符

    next_sentence_label:表示该句子对是否存在上下句的关系(0为无1为有)

    reader.pretraining.py中的parse_line函数.

    2.2 关于mask策略 batching.py

    我们知道,相较于BERT,ERNIE最大的改进就是中文 + 短语/实体掩码(这个短语掩码的操作后来也被BERT采用训练出了WWM-BERT),所以我们首先来看看ERNIE的掩码机制是怎么样实现的。

    标签:

    很赞哦! ()

本栏推荐