论文浅尝 | LightRNN:存储和计算高效的 RNN

 

链接:https://arxiv.org/pdf/1610.09893.pdf

动机

在NLP任务中使用RNN已经被证明是很有用的模型方法。但是传统的RNN在NLP中的应用有一个很大的限制:RNN的输出输入Embedding占用的空间太大,比如1024维10M词表大小的Embedding矩阵就要占掉40GB,这在大部分的GPU上都是不可训练的。本文的目标就是解决Embedding过大和参数过多的问题。

亮点

文章的亮点主要包括:

1. 通过二维Embedding使得参数所占空间和数量大幅减少,训练更快,使得手机甚至嵌入式训练成为可能

2. 由于单词安排的形式语义性表达更丰富,在NLP任务上能够不输于甚至超过一维的情形

概念

  1. 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)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。

发表评论

电子邮件地址不会被公开。 必填项已用*标注