前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Deep contextualized word representations

Deep contextualized word representations

作者头像
张凝可
发布2019-08-22 16:15:49
6610
发布2019-08-22 16:15:49
举报
文章被收录于专栏:技术圈技术圈

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_27717921/article/details/89053988

传统word embeding

在读这篇论文之前,首先我们要了解word embeding存在的问题。通常word embeding是通过大型语料库预训练得出的一个v*m的大表,v是词的个数,m是用维度为m的向量来表示词。

word embeding的好处就在于可比较词的相似度,相近的两个词,它们的embeding越相近。

但是word embeding是一个静态的词表,也就是说一旦预训练完成,这个词的embeding就是确定的,但是在实际应用中,往往是需要结合语境的,尤其是一词多义,如单词bank

而在很长一段时间里,静态的word embeding都是非常重要的word表示方式,直到Elmo的出现,终于提供了一种deep contextualized word representation。

1. 可以表示句法和语法

2. 可以表示一词多义,对一词多义建模

不同于传统的word embeding, elmo representations are deep, in the sense that they are a function of all of the in- ternal layers of the biLM. More specifically, we learn a linear combination of the vectors stacked above each input word for each end task, which markedly improves performance over just using the top LSTM layer.

从paper中,我们可以了解到elmo结合了每层的表示,基于大规模语料训练后的双向语言模型内部隐状态特征的组合,并且在特定任务中可以微调。这篇论文还指出bilstm的high-level提取出了语境相关的含义,可以用于语义理解的任务,而low-level捕捉到了词性和句法,可以应用于一部分的语音标注中。

ELMO:Embeding from Language Models

在了解ELMO之前,首先需要了解下语言模型

给定一句话,这句话最终分词分为N个token,如s = (t1, t2, ..., tN ),则建立前向语言模型,s是一句话的概率可以表示为:

对tk, lstm的每层都会输出一个语境相关的表示

,j=(1,····L),

表示最高层的输出,可以利用最高层,经过softmax层表示预测下一个tk+1。

前向语言模型的流程如下图:

同理,后向语言模型,s是一句话的概率可以表示为:

和前向语言模型类似,这里就不再重复描述。

将前向语言模型和后向语言模型结合起来就形成biLM。

其中两个方向的LSTM的参数不是共享的,

\Theta_x
\Theta_x

就是一开始输入的词向量,

\Theta_s
\Theta_s

就是softmax层参数。因此,双向语言模型的结构图如下:

对于每一个词

t_k
t_k

,一个L层的biLM可以计算出

2L + 1
2L + 1

个表达如下,

R_k = \{x_k^{LM}, \overrightarrow{h}_{k,j}^{LM}, \overleftarrow{h}_{k,j}^{LM} | j = 1,...L\}
R_k = \{x_k^{LM}, \overrightarrow{h}_{k,j}^{LM}, \overleftarrow{h}_{k,j}^{LM} | j = 1,...L\}

如果我们统一用

h_{k,j}^{LM} = [\overrightarrow{h}_{k,j}^{LM};\overleftarrow{h}_{k,j}^{LM}]
h_{k,j}^{LM} = [\overrightarrow{h}_{k,j}^{LM};\overleftarrow{h}_{k,j}^{LM}]

来表示biLM的每一层输出,

h_{k,0}^{LM}
h_{k,0}^{LM}

来表示第一层向量,其实就是传统的word embeding,那么整个表达可以统一表示为

R_k = \{h_{k,j}^{LM} | j = 0,...L\}
R_k = \{h_{k,j}^{LM} | j = 0,...L\}

而前面也说了,ELMO本质上就是一个任务导向的,双向语言模型(biLM)内部的隐状态层的组合。通用的表达式如下

其中,参数

s
s

,原论文说softmax-normalized weights,其实可以理解为L+1层的权值,类似于归一化处理。而

\gamma
\gamma

是用来控制ELMO模型生成的向量大小,该系数对于后续的模型优化过程有好处(在附件中,作者强调了这个参数的重要性,因为biLM的内核表达,与任务需要表达,存在一定的差异性,所以需要这么一个参数去转换。并且,这个参数对于就是只取最后一层尤其重要。

biLM在有监督的NLP任务中的使用

给定一个预训练好的elmo和某个有监督的nlp任务的网络结构,利用elmo提高当前任务的效果是非常简单的,首先在当前比较小的语料库中跑elmo,记录每个token在每一层的表示,然后让具体下游任务学习这些token表示的线性表示方式,其实就是学习参数

s
s

和参数

\gamma
\gamma

,然后再和原有的词向量层x拼接。以token = stick为例,正如下图所表示:

(To add ELMo to the supervised model, we first freeze the weights of the biLM and then concatenate the ELMo vector ELMo task with k xk and pass the ELMo enhanced representation[x ; ELMotask ] into the task RNN.)

在实验部分,作者实验了elmo的使用方式和使用位置

使用方式: 只用elmo的最后一层或者用多层的线性组合

使用位置:和传统的word embeding拼接在一起,作为输入

,或者将放在和hk

拼接作为下一层的输入。

ELMO中不同的层,能从不同的纬度表达一个词,作者经过实验发现,低层的输出能更好的从句法语法的层面表达一个词,而高层的输出能更好的从语意的层面表达一个词。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年04月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 传统word embeding
  • ELMO:Embeding from Language Models
  • biLM在有监督的NLP任务中的使用
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档