笔记:读Character-Aware Neural Language Models

笔记:读Character-Aware Neural Language Models

作者:Kim Y et al.,AAAI 2016.

目录

  • Major Work
  • Model
  • Experiments
  • Conclusion

1 Major Work

本文作者提出了一种利用subword子词信息的LM,子词信息主要通过一个字符级别的CNN提取,CNN的输出(character-level word embedding)作为使用LSTM建模的语言模型即RNN-LM的输入,进行预训练得到最终的word embedding。

2 Model

为了便于理解先简单说明一下标识符,如下图截取的原文说明。

笔记:读Character-Aware Neural Language Models

2.1 整体结构

模型整体结构如下图Figure1所示。

笔记:读Character-Aware Neural Language Models

2.2 RNN-LM

“LM语言模型: 给出一句话的前t个词(\(w_{1:t} = [w_1,...,w_t]\)),希望它可以预测第t+1个词\(w_t\)是什么,即给出一个第t+1个词可能出现的概率的分布,\(p(w_{t+1}|w_1,...,w_t)\)。\(^{[2]}\)”, 本文使用RNN建模LM进而计算此概率分布,RNN-LM通过对隐藏层的hidden state做softmax线性变换来实现此概率计算,具体如下公式Eq (3)。

笔记:读Character-Aware Neural Language Models

其中,\(p^j\)代表\(P\epsilon{R^{m\times{\mathcal{|V|}}}}\)的第j列(m为词嵌入列向量维度,V代表词汇表,\(\mathcal{|V|}\)即所有词类别数,其实就是输出embedding表或者lookup table的第j个单词向量,为了方便作者将词索引化了),\(q^j\)代表偏置项。进而训练模型,通过神经网络反向传播机制最大似然估计概率Pr,即最小化负的似然概率(negative log-likelihood, NLL),如下Eq (4)。详见原文描述。

笔记:读Character-Aware Neural Language Models

2.3 Character-level CNN

如图Figure 1的CNN部分,Figure 1有详细注释,更加详细过程见原文描述。

大致流程:如absurdity这个词,首先从character lookup table获取absurdity中每个字符维度为4的embedding(一般初始字符lookup table随机初始化的),拼接成一个character embedding二维矩阵;之后使用了12个卷积核(宽为2的三蓝,宽为4的四黄,宽为5的五个红卷积核),就类似CNN卷积每个卷积核卷积得到一个局部特征,如三个蓝卷积核最后得到3个维度为8的一维张量;最后使用最大池化层获得一个固定维度的可以说是全局特征向量,作为highway network的输入。具体卷积池化如下公式Eq (5)为一个卷积局部特征的计算公式,Eq(6)为最大池化操作,其中C为字符embedding矩阵,H为卷积核,f为卷积得到的局部特征向量,k代表第k个词,卷积核数与局部特征向量数一一对应。

笔记:读Character-Aware Neural Language Models

笔记:读Character-Aware Neural Language Models

2.4 Highway Network

“从ImageNet竞赛的几个前几名的模型来看,神经网络的深度对模型效果确实有很大的作用。可是传统的神经网络随着深度的增加,训练越来越困难,这篇paper基于门机制提出了Highway Network,使用简单的SGD就可以训练很深的网络,而且optimization更简单,甚至收敛更快!\(^{[3]}\)”

本文作者实验表明对于字符级CNN得到的词表示使用Highway Network很适合,可能将每个kernel得到的局部特征进一步集合起来了,使其包含一些上下文语义相关的信息。原理公式详见原文。

3 Experiments

本文作者没有将LM输出的embedding作为特定任务的序列标注器的输入或特征加入针对特定nlp任务做实验评估embedding的表现,而是使用perplexity(PPL)单纯的衡量LM的性能。具体实验结果参数设置详见原文,总之,尽管使用字符级CNN参数更少(因为使用word-level的话由于词种类很多,初始word embedding输入也是参数就相比字符级多一些吧应该),但性能比baseline 的LM性能好。

4 Conclusion

此方法可以结合到多处,如使用character-level的CNN得到的词表示作为输入或者将此word embedding与其他的embedding结合为fianl embedding等。

虽然此方法叫字符级的LM,但其本质本不算字符级的LM,只是使用字符级CNNs获取了字符或子词的信息如前后缀等,最后还是字符级CNN获得的包含子词信息的word-level 词表示作为LM的输入本质还是词级别的LM只是输入的word embedding通过字符级CNN获得了子词信息。

不同于Akbik A et al.,COLING 2018这篇是真正的字符级LM,把字符embedding作为LSTM-LM的输入,训练的也是字符的embedding即每个字符对应一个hidden state,最后输出也是character embedding,至于word embedding也可以说是string embedding是字符embedding的组合如dog词表示为g和d的前后先character embeding组合。而本文LM中其实预训练的仍是词的嵌入,每个词对应一个hidden state,最后LM输出也是word embedding。

参考

[1] Yoon Kim.Yacine Jernite.David Sontag.Alexander M. Rush.Character-Aware Neural Language Models.AAAI 2016.

[2] Joy_shen.语言模型评价指标Perplexity.CSDN 2017.https://blog.csdn.net/index20001/article/details/78884646.

[3] yyHaker.Paper阅读笔记《Highway Networks》-神经网络上高速不是梦.知乎 2018.https://zhuanlan.zhihu.com/p/35019701.

[4] Alan Akbik.Duncan Blythe.Roland Vollgraf.Contextual String Embeddings for Sequence Labeling.COLING 2018.

上一篇:谷歌浏览器chrome怎么设置成中文


下一篇:【性能测试】Jmeter基础