字母表示
我们一直使用one hot编码,这在之前已经记过笔记。这种表示方法的最大缺点是将每个词孤立起来,并且泛化能力不强。由于每个向量的内积都是0,所以它们之间的距离都是一样的。比如 1. I want a glass of orange juice. 2. I want a glass of apple ___. 这两个句子是很常见的句子,所以自然而然的想到划线处应该是juice。但是由于one hot编码,程序并不知道orange和apple之间的关系,也就猜不出来。
Featurized representation: word embedding
既然one hot有问题,那么自然就有人发明了新的算法。 使用特征来表示每个词。如果适应特征化来表示,那么最后发现orange和apple的特征差不多,就可以推测出划线处应该填写什么。
Visualizing word embedding
可以使用t-SNE算法将数据可视化为二维的图。
词嵌入的特性
类比
看下图中的表格,现在已知对应关系man->woman,能否推出king对应于queen?也就是说king->___,填空题。 解法是: 求出man和woman之间的差 \[ \begin{pmatrix} -1\\ 0.01\\ 0.03\\ 0.09\\ \end{pmatrix} - \begin{pmatrix} 1\\ 0.02\\ 0.02\\ 0.01\\ \end{pmatrix} \approx \begin{pmatrix} -2\\ 0\\ 0\\ 0\\ \end{pmatrix} \] 假设计算king和queen的差 \[ \begin{pmatrix} -0.95\\ 0.93\\ 0.70\\ 0.02\\ \end{pmatrix} - \begin{pmatrix} 0.97\\ 0.95\\ 0.69\\ 0.01\\ \end{pmatrix} \approx \begin{pmatrix} -2\\ 0\\ 0\\ 0\\ \end{pmatrix} \] 算法的原理就是找到一个词使得man和woman的差与king和新词的差接近。翻译为代码就是\(find\ word\ w: argmax\ sim(e_w, e_{king} - e_{man} + e _{woman})\)。但是算法的准确度只有30%-75%。
余弦相似度
余弦相似度也可以计算相似度。公式为\(sim(u,v) = \frac{u^Tv}{\parallel u\parallel_2\parallel v\parallel_2}\)
嵌入矩阵
略。大致意思是一个嵌入矩阵E乘上one hot编码可以得到一个单词的特征向量。E就是全部单词的特征矩阵。
如何train一个词嵌入矩阵
在早期深度学习的研究人员都是使用比较复杂的算法,但是随着时间的推移,这些复杂的算法被慢慢的简化。以至于现在的新手看到这些简化版的算法时,会疑惑这样简单的算法时怎么工作的。所以现在先介绍一个比较复杂的算法,再慢慢介绍简化版的。
这节好像是用来讲如何建立神经语言模型的,以后再看。之前讲了嵌入矩阵E,但是E中全部的特征向量是已经假定存在的,那么这些特征从何而来呢?就是这节讲的,去训练得来的。但是其实有已经训练好的,我们可以直接拿来用,网上有很多。
Word2Vec
负采样
词嵌入除偏
就是词嵌入中可能带有一些偏见,比如男女偏见、种族偏见等。现在的目的就是除去这种偏见。 暂且不看,其他的算法都还没学。