链接:https://arxiv.org/pdf/1610.09893.pdf
动机
在NLP任务中使用RNN已经被证明是很有用的模型方法。但是传统的RNN在NLP中的应用有一个很大的限制:RNN的输出输入Embedding占用的空间太大,比如1024维10M词表大小的Embedding矩阵就要占掉40GB,这在大部分的GPU上都是不可训练的。本文的目标就是解决Embedding过大和参数过多的问题。
亮点
文章的亮点主要包括:
1. 通过二维Embedding使得参数所占空间和数量大幅减少,训练更快,使得手机甚至嵌入式训练成为可能
2. 由于单词安排的形式语义性表达更丰富,在NLP任务上能够不输于甚至超过一维的情形
概念
2-ComponentShared Embedding:维度共享的Embedding.
每个word的词向量划分为行向量和列向量,同一行的词共享行向量,同一列也如此
两个Embedding 矩阵的大小减为
,
方法
⒈ 新的RNN以适应新的Embedding形式
相较于传统RNN:
a. 在t时刻的输入拆成两个(行列向量)由于矩阵U在两个小RNN中都一样,也可以看成传统的RNN交替输入行列向量
b. 显然只有都知道当前的行列向量才能预测下一个词,所以预测的行列向量跟输入错开了一个单元。
c. 由于错开,最后一次没得原始输入,需要将最后一个预测出来的行向量接过来
行列向量的softmax.最终的概率为二者相乘.
⒉Bootstrap for Word Allocation,重新分配词表中单词的位置
a.随机分配词表中单词的位置
b.训练模型得到embedding.
c. 调整单词的位置,使得最小化训练集中所有句子的NegativeLog Likelihood.
其中lr(w,r(w))表示单词w安排在r(w)行时出现在位置r的概率. lc则是列. 现在将单词w换到其他行或者列中,得到lr(w,i), 再重新计算此NLL,比如:
位置 | 1 | 2 | 3 |
1 | I | you | dislike |
2 | NUAA | PKU | love |
3 | hate | we | ZJU |
对于I love ZJU,ZJU对应的lr(w,r(w))即为-log(3,3),其中(3,3)表示第三行出现在句子的第三个位置的概率。现在将ZJU换到第二行, 对应的lr(w,2)= -log(2,3).其实也就是改为计算I Love Love这句话的概率,而任意的概率lr(w,i)和lc(w,j)已经在RNN模型的softmax中计算过了。直接带入即可.
最后,因为ZJU占据了Love的位置,Love也要找下一个位置,所以这个问题是所有的单词全部重新排列,选取最小的NLL。这是个二分图的最小权值匹配问题.有现成的算法可以计算.
实验
⑴. 比较的指标:PPL
T是预料中的所有token数量。
⑵. 各数据集的情况:(token数和词典大小)
(3) BillonW数据集的结果:
可以看出在BillionW中不仅超越了stateof art的模型性能,而且大幅减少了训练参数的数量和空间大小.
总结
本文提出了一种可以大幅减少RNN在NLP中应用时的Embedding矩阵的大小和数量,同时又不削减性能的方法。
论文笔记整理:吴杨,浙江大学硕士,研究方向为知识图谱、自然语言处理。
OpenKG.CN
中文开放知识图谱(简称OpenKG.CN)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。
点击阅读原文,进入 OpenKG 博客。