1. word的向量表示
最原始的1-N encoding
这种表示的缺点是无法表现出词汇之间的定量关系,比如猫和狗同属于动物类。即使把词汇做分类(clustering),也无法体现出
类别之间的关系。
于是就有了word embedding的思想。所谓word embedding,就是把每一个word都project到一个高维空间中(这里的维度
还是会明显低于1-N encoding中的空间维度)。
在上图中,具有相似语意的词汇会被映射到距离较近的地方。而且每个维度具有明确的意义。比如在上图中,横轴代表的
意思可能是“生命”,纵轴代笔的含义可能是“运动”。
2. word embedding的架构
这是一个无监督学习问题。怎么让machine知道每一个词汇的含义呢?只有让machine阅读大量的文章。
每一个词汇的含义可以根据它的context(上下文)得到
如何进行词汇上下文的挖掘呢?基本有两种不同的策略,一种是count based的方法,另一种是predicition based的方法。
在count based的方法里面,考察两个词汇w_i、w_j,如果他们两个很相近,那么他们两个词汇对应的此向量的点积应该
与他们的共现频次相接近,即v(w_i) * v(w_j) ~= N_ij,和LSI的思想类似?
而prediction based的方法,则是一个neuron network,任务是根据上一个词汇来预测下一个词汇是什么。即,该network
的input就是上一个词汇的词向量(1-N encoding),output则是一个softmax,维度是词典的size,每一维代表着下一个词是该 词汇的概率。
在这个网络中,input是原始的1-N encoding,是固定不变的,然后呢,我们把第一个hidden layer的输入拿出来作为该词汇
的此向量。(疑问:为什么是第一个hidden layer呢?)
为什么这样做是可行的呢?
在下面的例子中,“马英九”和“蔡英文”的后面都跟的是“宣誓就职”,如果在文本中大量出现这两个句子,那么在出现
”马英九“或”蔡英文“的时候自然就期待下一个出现的词汇是”宣誓就职“,要想使得在output这一层中,输出“宣誓就职”
的概率相近,那就要使得整个network中每一层流经的数据很接近!我们把第一个hidden layer里面的数据拿出来,作
为词汇的向量(之所以是第一个hidden layer,理由可能是第一层的hidden layer是input的直接表征)
上面的例子中,是用一个word去预测下一个word,给人的感觉就是太弱了,一般不会只借助于上文的一个词,而是若干
个词,以下是两个词的例子
当利用上文两个词的时候,在input端,把两个词的1-N encoding连在一起。这里有类似CNN的操作,即sharing parameters。
那怎么保证sharing parameter呢?类似于CNN里的做法
3. word embedding模型的训练
这是一个unsupervised的问题,cost function是cross entropy的形式。比如对于下面的例子,input是“潮水”、“退了”,那么你
期望的output是“就”,输入是“退了”、“就”,则期望的输出是“知道”,等等。(注:在output端,“就”、“知道”这些词也是1-N encoding的形式)。
4. 网路其他形式
5. word embedding结果的意义
6. document embedding
如果直接用bag of words,就会忽略掉词序,而词序是非常重要的
那怎么做呢?可以参考以下文献