注:因为很喜欢一个博文,就把它部分翻译过来,原作者网名叫NSS。他的这篇博文的名字是: “An Intuitive Understanding of Word Embeddings: From Count Vectors to Word2Vec”. 原网址如下:https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/
注:这里只捡自己喜欢的部分写出来。
1 什么是Word Embeddings
我们知道计算机不认识字符串,所以我们需要将文字转换为数字。Word Embedding就是来完成这样的工作。 定义:A Word Embedding format generally tries to map a word using a dictionary to a vector。
2 Word Embeddings们
既然我们用向量来表示一个词或词语,那么这种表示一定不止有一种方式,所以在这里总结一下不同的表示。
2.1 Frequency based Embedding
在这个分类下有三个小分类.
- Count Vector
- TF-IDF Vector(不翻译,略过)
- Co-Occurrence Vector(不翻译,略过)
2.1.1 Count Vector
我们先举一个例子。先观察以下两句话,D1: He is a lazy boy. She is also lazy. D2: Neeraj is a lazy person. 这两句话一共有6个不同的单词,我们按照如下的方式来分下一下这6个单词在这两句话中的分布情况:
Fig 0.
这张表中的数字表示某个单词在某个句子中出现的次数,比如He在D1中出现1词,在D2中出现0词,如此等等。这时我们就可以看到He这个单词可以形成一个向量,[1,0],向量中的每个元素代表这个单词出现在某句话中的次数。
2.2 Prediction based Vector
2.2.1 CBOW (Continuous Bag of words)
CBOW这个模型是给定一个context的条件下,预测在该context下出现某个词的概率。假设我们有一句话:“I like Julia”,我们把context window设置为1,也就是我们只考虑一个词的前一个词或后一个词,然后这句话可以转换成Fig 1中的形式。右侧的矩阵是Input的unicode.
Fig 1. 注:原图太复杂,在这里我用了一个简单的例子。
这些数据点被传递给一个神经网络,如图Fig 2所示,输出层是一个softmax层,用来计算概率。流程是: 输入被映射到一个低维的向量,比如如Fig 3所示。得到这个二维向量后,再用一个矩阵将它转换成一个三维矩阵,这个三维矩阵经过softmax后就是我们的output。经过优化后得到的向量就是我们所求的向量。
Fig 2.
Fig 3.
注:这里的基本的思想是,一个词=它所处的环境(没有看出,这里的=是等于号)。恩,好有哲理的一句话。比如我们要判断某个人属于哪一个阶级,只需要看他的朋友圈就可以知道。比如在我们的例子中,当给我们一个context的时候,比如‘I’,那么这个context对应一个单词“like”。在这里我们的windows设置为1,也就是仅仅考虑一个词的前后词,当我们将windows设置为2的时候,Julia的context就变成了I和like,这个时候的Input就成了两个向量,也就是I向量和like向量,这两个向量分别经过W和W`两个矩阵的作用,得到两个vector,这个时候取这两个向量的平均值就是得到我们的output vector,最后经过softmax变换就可以得到最后的结果。如图Fig4所示。
Fig 4.
2.2.2 Skip – Gram model
这个方法正好和上边的方法相反,当给定我们一个word的时候,我们用这种方法来计算它的context。如Fig 5.2所示。比如我们有句话: ”Hey, this is sample corpus using only one context word.” 让我们构建training data:
Fig 5.
Fig 5.2
因为我们定义了context window=1,也就是该词的前后应该分别对应一个词,如Fig 5所示。
注意的是,在这里我们有两个输出,分别对应前后两个词。计算流程如Fig6-Fig 8所示.
Fig 6.
Fig 7.
Fig 8.