背景
对于13年的word2vec解决了多词一义的问题(即对于意思相近的词,词向量语义空间相似度高),但是对于一词多义问题并没有完美解决。相对于以前的word2vec或GLoVe方法,2018年的ELMo(Embeddings from Language Models,嵌入语言模型)以深度Bi-LSTM为基础,动态的学习词语的向量表示(即在不同语境下,同一词语对应不同词向量表示,解决一词多义。主要用于生成词向量,需要大量语料进行预训练)。ELMo词嵌入方法在下列几种NLP问题中能有效生成最先进(SOAT)的结果:
思想来源
核心思想:1. 以LSTM为基本单元;2. 核心思想起源于深度学习中的层次表示。其中LSTM有专门笔记进行理解,不赘述。下面讲述如何起源于深度学习的层次表示。
我们知道,在CV领域,通过卷积层提取图片特征,随着卷积层的层数增加,学习到不同层级的特征,所提取到的图像特征越来越抽象化、全局化,更能代表图像所表示的内容,如下图:
那么自然而然就会想到,对于NLP会不会有层次化的特征?如果有那应该如何提取、表示?
一般认为对于NLP问题,对于提取语言特征:浅层提取句法特征(语法树特征)、深层提取在语境中的语义特征。
ELMo网络结构
如下图:
ELMo的网络结构是双向双层LSTM,其中的每一层都包含前向和后向两个LSTM层,
l 图中的结构使用字符级卷积神经网络(convolutional neural
network, CNN)来将文本中的词转换成原始词向量(raw word vector),当然也可以使用其他方法
l 前向迭代中包含了该词以及该词之前的一些词汇或语境的信息
l 后向迭代中包含了该词之后的信息
l 这两种迭代的信息组成了中间词向量(intermediate
word vector)
l 这些中间词向量被输入到模型的下一层
l 最终表示(ELMo)是原始词向量和两个中间词向量的加权和
原理
优点
-
ELMo的假设前提一个词的词向量不应该是固定的,所以在一词多意方面ELMo的效果一定比word2vec要好。
-
word2vec的学习词向量的过程是通过中心词的上下窗口去学习,学习的范围太小了,而ELMo在学习语言模型的时候是从整个语料库去学习的,而后再通过语言模型生成的词向量就相当于基于整个语料库学习的词向量,更加准确代表一个词的意思。
-
ELMo还有一个优势,就是它建立语言模型的时候,可以运用非任务的超大语料库去学习,一旦学习好了,可以平行的运用到相似问题。
然⽽,ELMo本身也存在⼀一些问题,这也是之后为什什么出现
Self-Attention, Transformer等技术被提出的原因。
实例
一般用法:先利用大型语料进行预训练(可以直接下载训练好的),再利用下游语料进行微调,然后在进行下有任务。下面网址提供一个tensorflow版本的实例:
https://zhuanlan.zhihu.com/p/107163676?utm_source=wechat_session&utm_medium=social&utm_oi=1121841014150668288