论文:Enriching Word Vectors with Subword Information
作者:Piotr Bojanowski∗, Edouard Grave∗, Armand Joulin,Tomas Mikolov
时间:2016
我感觉好多人讲错了,大家可以看看我这样解释是否有问题?
这篇文章介绍的内容大部分和我对2012年一篇名为Efficient Estimation of Word Representations in Vector Space的论文分析基本一致,唯一不同的是这里利用subword model考虑了词形态,在这篇博客中只简要介绍一下subword model,有关详细点击如下链接查看
[CBOW and Skip-gram]论文实现:Efficient Estimation of Word Representations in Vector Space
一、算法实现
1.1 完整代码
# 有时间再搞,能导包为什么要实现?
1.2 fastText包实现
安装:
$ pip install fasttext
使用:
import fasttext # data.txt 是一个英文文本文件 model = fasttext.train_unsupervised('data.txt', model='skipgram') # 输出where的词向量表示 model['where'] # 验证词表示 word = 'where' ids = model.get_subwords(word)[1] a = model.get_input_vector(ids[0]) for id in ids[1:]: a += model.get_input_vector(id) a = a/min(a) b = model['where'] b = b/min(b) ### a和b相等:即最终的词表示舍弃掉了word dictionary # 获得subwords model.get_subwords('whereareyou') ### 这里是不包含本身的
使用参数:
二、论文解读
2.1 一般的模型
普通的模型首先构建一个词表,然后通过词表对词生成一个one-hot编码,最后这个one-hot编码通过投影层进行初始化,也就是我们要的词向量;这样做可以是可以,但是有两个缺点,分别是Out of Vocabulary(OOV) Words 和 Morphology;
- Out of Vocabulary(OOV) Words :
假设 Word2Vec
的词汇表中只包含“tensor”和“flow”等词没有包含“tensorflow”。试图为复合词“tensorflow”嵌入,就会得到一个词汇错误;
- Morphology:
在普通模型中这几个词都有一个特定的向量并且各个向量之间毫无关系;
2.2 subword model
subword model
可以有效的解决一般模型的缺点,其在构建词表示的时候,将词前后添加尖括号并利用n-grams拆解,例子如下:
以3-grams为例,一共有27*26*27=18,954种可能的形式,而论文中以所有n大于等于3,小于等于6的grams组成一个集合,如eating的subwords有:eating,<ea,<eat,,<eati,<eatin,eat,eati,eatin,eating,ati,atin,ating,ating>,tin,ting,ting>,ing,ing>,ng>
按这样形式,其数量就会格外的大,这里可以通过hashmap的方式去减小数目进去优化,但这不是论文主要考虑的内容,论文中把这个数量固定为2000000
;
现在我们有2000000个subword集合,一个word可以分解为多个subword,那么我们可以用多个subword的向量和去代表word;这一点很容易处理,但是如何去训练呢?
从论文中可以知道,所有的模型其softmax层类似于如下:
而 ,利用subwords表示 wc可以得到
其中 z i z_i zi表示subword的投影向量,而在训练时要注意的是在projection中训练时subwords集合中是包含其本身的,而在ouputs计算loss时,如果word能在word dictionary中找到word的表示是不含n-grams的,是单one-hot投影的向量,如果不能找到,就需要subwords通过n-gram生成;
模型流程如下:
其outputs利用softmax对应vocabulary中word的位置,相当于one-hot编码位置;
2.3 Dictionary of n-grams
对n-grams ,论文把n设置为 3≤n≤6,生成n-grams集合,n-grams集合的大小设置为2000000;
论文中P指的是word dictionary的维度,不包含n-grams的维度;较小的P值会使模型更加关注n-gram特征,所以P值用于控制模型对n-gram特征的重视程度,从而提高模型的性能。为什么会提高计算量呢?因为词如果不在P这个维度的word dictionary中,就只能从subwords中去生成(这里的subwords是不包含本身的),这样生成会涉及到大量的计算,而P值越小,表示不在word dictionary中的词越多,计算量也就非常大,应此在P的选择上有一个权衡,因为较小的值意味着更高的计算成本,但更好的性能。所以当P=W时,模型类似于2013年Mikolov等人提出来的模型;
三、整体总结
这里重要的难点是P的概念,其实P的概念搞懂,模型一下子就懂了;
论文中P指的是word dictionary的维度,不包含n-grams的维度;较小的P值会使模型更加关注n-gram特征,所以P值用于控制模型对n-gram特征的重视程度,从而提高模型的性能。为什么会提高计算量呢?因为词如果不在P这个维度的word dictionary中,就只能从subwords中去生成(这里的subwords是不包含本身的),这样生成会涉及到大量的计算,而P值越小,表示不在word dictionary中的词越多,计算量也就非常大,应此在P的选择上有一个权衡,因为较小的值意味着更高的计算成本,但更好的性能。所以当P=W时,模型类似于2013年Mikolov等人提出来的模型;
四、参考
A Visual Guide to FastText Word Embeddings