分享热点新闻
打造优质自媒体!

飞桨让你知道:基于百科数据训练的ELMo中文预训练模型

飞桨让你知道:基于百科数据训练的ELMo中文预训练模型 科学快报 第1张

在NLP世界

有一个非常重要的家庭

英语叫做LARK(LAnguage Representations Kit),

翻译成中文是一种语言表示工具箱

LARK家族最新,最重要的三种算法

它们分别称为ELMo,BERT和ERNIE

你一定不知道

这三个常用名称

它包含一个有趣的秘密

真相,将揭晓!

让我们首先从算法模型的名称中寻找一些线索

第一位,ELMo

英语嵌入语言模型的缩写

该论文称为深度语境化词语表示

第二位,BERT:

变形金刚英语双向编码器表示的缩写

该论文被称为深度双向变换器的预训练,用于语言理解。

第三位,ERNIE:

英语增强表示通过kNowledge IntEgration的缩写)

该论文被称为通过知识整合的增强表征。

读它

是的

还是有雾的水

秘密在哪里?

飞桨让你知道:基于百科数据训练的ELMo中文预训练模型 科学快报 第3张

不要直接在地图上卖掉!

飞桨让你知道:基于百科数据训练的ELMo中文预训练模型 科学快报 第4张

什么?

回头看看

你还记得三种算法的名字吗?

ELMo,BERT,ERNIE

原来是美国经典漫画

《Sesame Street(芝麻街)》里面的卡通人物!!!

好的,如果你说

我没见过这幅漫画,我感觉不到。

那么让我举个例子

如果将《芝麻街》与中文《舒克和贝塔》进行比较

然后

第一篇论文将模型称为“Shook”

第二段爱情被称为“beta”

第三篇文章叫做“皮皮鲁”

也许下一个模型很快就会被命名为“Roussie”

谁说科学家很无聊

它也非常像孩子一样吗?

好的,它很遥远。

今天

让我们向您介绍LARK家族的ELMo!

提交论文以获得2018年NAACL的最佳论文,

它在NLP领域有一个众所周知的名字,请告诉我们!

ELMo模型简介

ELMo(嵌入式语言模型)是重要的通用语义表示模型之一。双向LSTM是网络的基本组成部分。训练模型用作训练目标。预训练用于获得一般语义表示,一般语义表示用作特征迁移。在下游NLP任务中,下游任务的性能得到显着提高。

飞桨让你知道:基于百科数据训练的ELMo中文预训练模型 科学快报 第5张飞桨让你知道:基于百科数据训练的ELMo中文预训练模型 科学快报 第6张

ELMo模型的核心是双层双向LSTM网络。与传统word2vec算法中的单词向量相比,ELMo根据上下文改变语义嵌入。

一个简单的例子是“Apple”的单词vector

句子1:“我买了1公斤苹果”

句子2:“我买了一个新的Apple X”

在word2vec算法中,“Apple”的单词向量是固定的,并且两个句子之间的差异无法区分。 ELMo可以解决语言中的歧义问题,从而可以显着提高性能。

ELMo项目的飞桨(PaddlePaddle)实现

为了方便大多数开发人员,PaddlePaddle完成了ELMo的开源实现(取决于PaddlePaddle 1.4.0),发布的要点如下。

注意,以下要点!!!

飞桨让你知道:基于百科数据训练的ELMo中文预训练模型 科学快报 第7张

下一步

让我们看看它有多快

在我们的项目中使用ELMo!

ELMo培训流程简介

(1)数据预处理

按期间,问号,感叹号和内容分词对文档进行预处理。预处理的数据文件,每个句子经过一次分词。下面给出了用于训练数据数据/训练和测试数据数据/开发的数据的示例:

本书介绍了中国经济发展的内外平衡,亚洲金融危机十周年的回顾与反思,实践中城乡协调发展,中国未来十年需要研究的重大问题,科学发展和新的工业化。

吴敬连曾提出过中国股市的“赌场理论”。他主张维护市场规则,保护基层民生。他被誉为“中国经济学界的良知”,并且在媒体和公众眼中成为学术明星。

(2)模型训练

使用提供的示例训练数据和测试数据执行单机多卡预训练。在开始预训练之前,需要将动态库路径(如CUDA,cuDNN,NCCL2)添加到环境变量LD_LIBRARY_PATH,然后运行.sh以启动独立的多卡预训练。 run.sh文件的内容如下:

导出CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7

Python train.py \

–train_path=’data/train/sentence_file_ *’\

–test_path=’data/dev/sentence_file_ *’\

–vocab_path data/vocabulary_min5k.txt \

–learning_rate 0.2 \

–use_gpu True \

–all_train_tokens 35479 \

–local True $ @

其中,all_train_tokens是由train和dev计算的令牌总数。在训练过程中,在每个纪元之后,将模型参数写入检查点路径,该路径可用于迁移到下游NLP任务。

(3)ELMo模型迁移

以LAC任务为例,将ELMo预训练模型的语义表示迁移到LAC任务的主要步骤如下:

#step 1:加载LAC网络结构后,加载ELMo预训练模型参数

来自bilm import init_pretraining_params

Init_pretraining_params(exe,args.pretrain_elmo_model_path,fluid.default_main_program())

#step 2:基于ELMo字典将输入数据转换为word_ids并使用elmo_encoder接口获取ELMo嵌入

来自bilm import elmo_encoder

Elmo_embedding=elmo_encoder(word_ids)

#step 3: ELMo嵌入和LAC原始word_embedding拼接以获得最终嵌入

Word_embedding=fluid.layers.concat(input=[elmo_embedding,word_embedding],axis=1)

好的,这里,模型的迁移已经完成,

让我们回顾一下加入ELMo后的绩效改进,

心脏不如行动

快速使用它!

飞桨让你知道:基于百科数据训练的ELMo中文预训练模型 科学快报 第8张

ERNIE模型简介

在学习了ELMo之后,让我们来看看LARK家族中最优秀的成员ERNIE,他在许多NLP中国任务中表现出色。

ERNIE通过对海量数据中实体概念的先前语义知识建模来学习现实世界的语义关系。具体而言,ERNIE模型使模型能够通过屏蔽诸如单词和实体之类的语义单元来学习完整概念的语义表示。与BERT学习原始语言信号相比,ERNIE直接对先前的语义知识单元进行建模,增强了模型的语义表示。

ERNIE已经验证了许多公开可用的中文数据集的效果,包括语言推理,语义相似性,命名实体识别,情感分析,问答匹配以及其他自然语言处理任务。 BERT模型效果的语义表示。

飞桨让你知道:基于百科数据训练的ELMo中文预训练模型 科学快报 第9张

有关详细信息,请参阅:

https://github.com/PaddlePaddle/LARK