论文原文:Word Embeddings based on Fixed-Size Ordinally Forgetting Encoding
EMNLP刚刚结束,在浏览accepted paper后,选择了几篇作为近期的论文阅读。之前一直看的都是句子建模的文章,这次换了换口味,看看词向量建模的最近工作。通读全文下来,这是一篇组合了前人的方法利用单词的上下文(context)来学习词向量的文章,并且意外发现了Fixed-Size Ordinally Forgetting encoding(FOFE)这个序列建模方法。
作者是基于distributional hypothesis进行一系列设计的。首先,为了能够完整体现distributional hypothesis,作者对目标词的上下文(文章中称为focus word的left context和right context)进行了完全的编码。其次作者认为,距离目标词越近的单词在编码目标词的上下文时越重要。
在本文中,作者直接将Fixed-size ordinally-forgetting encoding(FOFE)方法作为唯一编码方法对所有由离散单词组成的不定长序列进行编码。
给定词表大小(vocabulary size)为K,FOFE使用one-hot编码来表示,每一个单词,即一个K维向量来表示单词。FOFE使用下列公式对不定长序列进行编码:
zt=α∗zt−1+et(1≤t≤T)
其中, zt 表示从输入序列中由第一个单词 w1 直到第t个单词 wt 组成的子序列的FOFE编码(假设 z0=0 ), α 是forgeting factor(常数), et 是单词 wt 对应的one-hot向量。
那么, zT 就可以看作是对序列 w1,w2,...,wT 的一种向量表示。
举例来说,如果词表为
A=[1,0,0]
B=[0,1,0]
C=[0,0,1]
那么,通过计算可以得到
ABC=[α2,α,1]
ABCBC=[α4,α+α3,1+α2]
根据文献Zhang et al., 2015b,FOFE编码具有一些很好的性质:
1. 如果 0<α≤0.5 ,那么FOFE对任意K和T都是唯一的。
2. 如果 0.5<α<1 ,那么FOFE对于大多数K和T都是唯一的,只有有限个 α 的取值是例外。
也就是说,FOFE几乎可以唯一地编码任意序列,并且做到无损。
上图很好的说明了使用FOFE编码目标单词上下文的过程。
对于目标单词bank,其left context被编码成left FOFE code L,right context被编码成right FOFE code R(和left context不同,方向是从右往左编码)。如果目标单词在文章中多次出现,那么就会对应多个上下文向量,作者通过计算平均值的方式进行了处理。最终,对于此表中的每一个单词 wt 都会有对应的 Lwt 和 Rwt ,从而形成一个K行2K列的word-context矩阵(wa, 维度爆炸),即FOFE矩阵。
机器学习相关文献里面,经常会用到点互信息PMI(Pointwise Mutual Information)这个指标来衡量两个事物之间的相关性。
作者使用PMI对FOFE矩阵进行权重分配。这一部分作者没有细说,我猜想是计算每一行的L和R的PMI然后值越高对应单词的权重的就越大。通过该操作,最终得到weighted FOFE matrix。
我们的目的是得到词向量矩阵,作者为了能从加权之后的FOFE矩阵中得到最终的词向量矩阵,采用了对FOFE矩阵进行奇异值分解的方式(truncated SVD),经过奇异值分解之后会得到三个矩阵:
U,Σ,VT
如果 Σ 的秩(rank)为d,那么 Ud 就是词向量矩阵,每一行对应一个单词,词向量的维度为d。
训练数据集: standard enwiki9(约1.3亿个单词)
测试数据集: WordSim353, MEN, Mechanical Turk, Rare Words以及SimLex-999
最终实验结果记录如下(表中展示的是Spearman rank correlation coeffiecient):
从斯皮尔曼系数来看,确实有了提高。
整个实验唯一需要更新的参数就是实验用的训练集合了。要是能用更大的集合,说不定有更好的效果。不过,由于使用了one-hot表示,维度是个问题啊。
之前一直在看句子建模的文章,这次看单词建模的文章,一下子觉得方法好简单。同时,就文中一些不懂的内容,邮件询问的作者,希望能得到回音。不过意外收获是知道了FOFE这个序列建模的方法,最近要好好学习一下了。