文献阅读—跨语言词向量—无监督
上一篇博客将了有监督的跨语言词向量训练,这篇博客将无监督的跨语言词向量《A robust self-learning method for fully unsupervised cross-lingual mappings of word embeddings》。
1. 初步构想
和
分别表示两类语言中独立训练好的词嵌入矩阵,需要自己先训练好,或者拿别人现成的。其中每行代表一个词的词向量,每一列代表词向量的第几维。
的第
行和
的第
行,没有对应关系,
的第
列和
的第
列,也没有对应关系。我们需要求一个转换矩阵
、
以使
和
在同一向量空间。并且设置一个稀疏矩阵
,
代表target语言中的第
个单词是source语言中的第
个单词的翻译。现在的问题有:
- a)怎么让
的第
行和
的第
行,有对应关系,怎么让
的第
列和
的第
列,有对应关系。
- b)我们如何初始化
以及后期如何更新
;
- c)采用什么样的目标函数,以及如何通过目标函数求出
和
;
2.词向量预处理trick
先对词向量做个预处理吧,先对每个单词的词向量做normalization,再对词向量的每一列去均值,最后再对每个单词的词向量做normalization,原因参考上一篇博客。
3.初始化
这块主要是解决第1部分中的问题a和问题b。
首先要做一个假设,source语言和target语言对应的词向量虽然是独立的,但是其分布形态却非常相似。如下图,左边红色的是英文,右边蓝色的是西班牙文,两种语言中意义一样的词在坐标上的分布非常相近。也就是说,对于英文来说,跟‘four’的相似度排序是【five,three, two,one】,跟‘cuatro(four)’的相似度排序是【cinco(five), tres(three), dos(two), uno(one)】,看出什么了吗,这个相似度排序是一一对应的哦,相应位置上是对方的翻译词,而且,这个相似度排序几乎一样,比如都是【0.9,0.75,0.4,0.2,0.15】,总是相差不大,因为单词间的距离是一样的。记住这个现象!很有用的!
这里先假设source语言和target语言的vocabulary大小一致,维度不一定一致。通过,
求相似度矩阵,
代表了target语言中第
个和第
个单词的相似度,
代表了source语言中第
个和第
个单词的相似度,分别把
和
的每一列排序,变成
和
,还记得上面说的现象吗,这时
和
的每一列就是一一对应的哦!解决了列之间的关系。那么对于
的每
行,都可以在
中找到第
行跟其相似度最高,说明他们可能是一个语义,即互为对方的翻译,那么可以初始化
,行之间的关系也解决了,
的初始化也解决了。
考虑到给做SVD,
,则
,则
更接近于原来
的本质,所以将
和
替换成
和
。
4. 整体流程
解决第一部分的问题c。使用第三部分初始化之后,循环下面1)和2)直到收敛。
1)目标函数为
求出,
,且
和
通过奇异值分解得来
,证明过程和上一篇博客类似,有小伙伴要是有问题可以私信我哦~
2)用上述求好的和
来更新
,当
,设置
,否则设置
。
5. 一些非必要trick
- 更新
的时候使用贪心算法,以一定的概率选最大值更新,其他随机抽取,为了防止陷入局部最优。
- 基于频率的vocabulary删减,还记得之前假设的source语言和target语言的vocabulary大小一致吗,是通过这个方法实现的哦,当然一方面也是为了减少计算量。
- 更新
的时候既要考虑
,也要考虑
,采用一个双向的机制防止陷入局部最优。
- CSLS retrieval没细看,不补。
- sysmmetric re-weighting没细看,不补。
6. 实验
实验还没细看,以后补。