论文笔记-character embedding and ELMO

character embedding

Motivation

A language model is formalized as a probability distribution over a sequence of strings (words), and traditional methods usually involve making an n-th order Markov assumption and estimating n-gram probabilities via counting and subsequent smoothing (Chen and Goodman 1998). The count-based models are simple to train, but probabilities of rare n-grams can be poorly estimated due to data sparsity (despite smoothing techniques).
对语言模型的描述:语言模型是 一个单词序列的概率分布 的形式化描述(什么意思?就是比如这个句子长度为 10, 那么每个位置可能是词表中的任意一个词,而出现当前词是有一个概率的, 这个概率是依赖于之前的词的)。
在传统的方法主要是运用 n阶马尔可夫假设来估计 n-gram 的概率,通过统计计数,以及子序列平滑的方式。这种基于计数的模型虽然简单,但是在数据稀疏的情况下,对不常见的 n-gram 的概率估计会很差。

While NLMs have been shown to outperform count-based n-gram language models (Mikolov et al. 2011), they are blind to subword information (e.g. morphemes). For example, they do not know, a priori, that eventful, eventfully, uneventful, and uneventfully should have structurally related embeddings in the vector space. Embeddings of rare words can thus be poorly estimated, leading to high perplexities for rare words (and words surrounding them). This is especially problematic in morphologically rich languages with long-tailed frequency distributions or domains with dynamic vocabularies (e.g. social media).
neural language models 将词嵌入到低维的向量中,使得语义相似的词在向量空间的位置也是相近的。然后 Mikolov word2vec 这种方式不能有效的解决子单词的信息问题,比如一个单词的各种形态,也不能认识前缀。这种情况下,不可避免的会造成不常见词的向量表示估计很差,对于不常见词会有较高的困惑度。这对于词语形态很丰富的语言是一个难题,同样这种问题也是动态词表的问题所在(比如社交媒体)。

Recurrent Neural Network Language Model

给定词表为 V,之前的序列是 \(w_{1:t}=[w_1,..,w_t]\),在 RNN-LM 中通过全链接 affine transformation 计算 \(w_{t+1}\) 个词的概率分布:
\[Pr(w_{t+1}=j|w_{1:t})=\dfrac{exp(h_t\cdot p^j+q^j)}{\sum_{j'\in V}exp(h_t\cdot p^{j'}+q^{j'})}\] 其中 \(h_t\) 是当前 t 时刻的隐藏状态。也就是先通过全链接映射到词表的 V 的维度,然后通过 softmax 计算其是词表中第 j 个词的概率。

然后假设训练预料库的 sentence 是 \(w_{1:T}=[w_1,...,w_T]\),那么训练也就是最小化这个序列的 似然概率的负对数: \[NLL=-\sum_{T}^{t=1}logPr(w_t|w_{1:t-1})\]

Chracter-level Convolution Neural Network

以单词 absurdity 为例,有 l 个字符(通常会 padded 到一个固定size),通过 character embedding 映射成矩阵 \(C\in R^{d\times l}\). d 是 embedding size. 图中 embedding size 为 4.

然后使用卷积核 kernel H 做卷积运算, \(H\in R^{d\times w}\),所以得到的 feature map \(f^k\in R^{l-w+1}\). 跟之前 CNN 做文本分类其实挺像的, kernel 的长是 embedding size d, 宽度 w 分别是 2,3,4. 上图中蓝色区域为例,filter 宽度为 2 的个数是3, 那么卷积得到的 featur map 是 \(3 \times (9-2+1) = 3\times 8\). \[f^k[i]=tanh(<C^k[* ,i:i-w+1], H> +b)\] <>表示做卷积运算(Frobenius inner product). 然后加上 bias 和 非线性激活函数 tanh.

接着基于 times 维度做 max pooling. 上图中 filter 宽度为 3,2,4 的个数分别为 4,3,5.所以得到长度为 4+3+5=12 的向量。

这里每一个 filter matrix 得到一个相应的特征 feature. 在通常的 NLP 任务中这些 filter 的总数 \(h\in[100, 1000]\)

Highway Network

通过卷积层得到单词 k 的向量表示为 \(y^k\).

Highway Network 分为两层 layer.

  • one layer of an MLP applies an affine transformation: \[z=g(W_y+b)\]

  • one layer 有点类似 LSTM 中的 gate 机制: \[z=t\circ g(W_Hy+b_H)+(1-t)\circ y\] 其中 g 是非线性函数。\(t=\sigma(W_Ty+b_T)\). t 成为 transform gate, (1-t) 是 carry gate. 同 LSTM 类似, highway network 允许输出能自适应的从 \(y^k\) 中直接获取信息。

ELMo

传统的提取 word embedding 的方法,比如 word2vec 和 language model, 前者是通过词与词之间的共现,后者是 contextual,但他们都是获得固定的 embedding,也就是每一个词对应一个单一的 embedding. 而对于多义词显然这种做法不符合直觉, 而单词的意思又和上下文相关, ELMo的做法是我们只预训练 language model, 而 word embedding 是通过输入的句子实时输出的, 这样单词的意思就是上下文相关的了, 这样就很大程度上缓解了歧义的发生. 且 ELMo 输出多个层的 embedding 表示, 试验中已经发现每层 LM 输出的信息对于不同的任务效果不同, 因此对每个 token 用不同层 embedding 表示会提升效果.

个人觉得,可以从这个角度去理解。RNN 可以看做一个高阶马尔可夫链,而不同于 马尔可夫模型,RNN 中的状态转移矩阵是用神经网络来模拟的,也就是我们计算隐藏层所用的 \(h_t=tanh(w_{hh}h_{t-1}+w_{hx}x_t)\). 这个状态转移是动态的,也是不断更新的。而使用 语言模型 来训练 RNN/LSTM 目的就是得到这样的一套参数,使得它能学习到任何 合理的,自然的 sentence. 所以,这个语料库越大越好。事实上,有监督的训练也可以达到这个目的,但是有监督的数据有限,并且整个模型是有偏置的,比如文本分类的任务去训练,那么它更倾向于 局部信息。相比之下,机器翻译作为有监督的效果会更好,最好的还是语言模型呢,不仅可用的数据量很大,而且因为要预测每一个词的信息,它会努力结合每一个词的上下文去学习这个词的表示。这也正是我们需要的。ELMo 和 BERT 都是这样的道理,而 BERT 的优势前一篇 blog 说过了。

Bidirectional language models

给定 sentence \(t_1, t_2,...,t_N\), 通过前面的词 \(t_1,..,t_{k-1}\) 计算 token \(t_k\) 的概率分布:

反向:

语言模型的训练就是采用极大似然估计,最大化这个概率:

传统的方法就是 提取出对应位置的向量表示作为对应位置的词向量 context-independent token representation \(x_k^{LM}\).

ELMo

ELMo is a task specific combination of the intermediate layer representations in the biLM.

ELMo 实际上只是下游任务的中间层,跟 BERT 一样。但也有不同的是, ELMo 每一层的向量表示会获得不同的 信息。底层更能捕捉 syntax and semantics 信息,更适用于 part-of-speech tagging 任务,高层更能获得 contextual 信息,更适用于 word sense disambiguation 任务。所以对不同的任务,会对不同层的向量表示的利用不同。

在使用 ELMo 进行下游有监督训练时,通常是这样 \([x_k; ELMo_k^{task}]\). 对于 SQuAD 这样的任务,\([h_k, ELMo_k^{task}]\).

Model architecture

The final model uses L = 2 biLSTM layers with 4096 units and 512 dimension projections and a residual connection from the first to second layer. The context insensitive type representation uses 2048 character n-gram convolutional filters followed by two highway layers and a linear projection down to a 512 representation.

具体模型还是得看代码。