word2vector的原理,结构,训练过程

之前用word2vector模型,上网找原理,出现各种CSDN上的解答。看了一下,都是copy某个人写的东西,而且什么CBOW,什么Skip-Gram,什么哈夫曼树,层次softmax,概念很多,绕都给绕晕了。
看了很多遍,只知道个大概,具体还是没看懂。今天重新整理关于word2vector的原理。以一个好的脉络把这个模型理清楚。


原型:NNLM(Neural Network Language Model)

大家看原理一定看过下面这张图


NNLM模型

这个模型其实就是一个结构简单的神经网络,MLP模型。输入层,隐藏层(也许有两层,看个人设计),接softmax输出。它的作用是通过前 N-1 个词,推测出第 N 个词是什么

举个栗子,有一句话 “我今天中午吃的涮羊肉”。这个词要输出模型的话得把它先分词,分词成
”我“, ”今天“,”中午“,”吃的“,”涮羊肉“。要做的事情就是通过”我“, ”今天“,”中午“,”吃的“这四个词,来推测”涮羊肉“这个词。

怎么把这个场景建立模型呢。

输入层

首先建立一个词典,假设有30000个词,那么把”我“, ”今天“,”中午“,”吃的“用one-hot表示的话,每个词向量为 300001。那个图片里面的C是什么呢,这里叫做投影矩阵,投影到词空间的矩阵*。

到这里很多人就搞不清楚这个到底是个啥了。
换个方式理解,我们用word2vec的时候,最后每一个词是不是都会用一个向量表示,而表示方法是

[0.31343242, 0.65464122, 0.12343425, ..., -1.324344]

如果一个词是这样表示,那么整个词典是什么样的,是不是一个矩阵?这个矩阵就是投影矩阵训练完成,迭代得到的最后结果。

如果我们设定的矩阵维度D(超参数),那个这个投影矩阵的维度就是 D * V, C * 词向量(one-hot表示既在投影矩阵中取第n列来表示对应的词),维度表示是 D * V * V * 1 = D * 1

隐藏层

假设只有一个隐藏层,把 上一层中的词向量乘投影矩阵输入到这一层中,就是有一个权重矩阵H,(BP过程需要更新投影矩阵C和投影矩阵H),在通过tanh激活输出到下一层中。

输出层

这里接的是一个softmax,有多少个类呢,30000个。从词典中预测出现"涮羊肉"的概率。这就导致了一个问题,如果词典特别大,那么这一层的参数直接爆炸。2003年只有CPU用,这导致了模型效果并不好。巨神Bengio也在论文里说了这个模型要从最后一层进行改进。具体流程和计算公式可以看论文原文。

训练过程

这里我用的一句话, “我今天中午吃的涮羊肉”,去前4个词推第5个词。如果我取3个词,推第4个词,那么就是用”我“, ”今天“,”中午“,推"吃的", ”今天“,”中午“,”吃的“,推“涮羊肉”。相当于有一个滑动窗口不断在移动,逐渐训练模型的参数。


word2vecor

时间到了2013年,google另一位巨神Mikolov掏出了word2vector。而我们知道的CBOW(Continuous Bag-of-Words Model)和Skip-gram (Continuous Skip-gram Model),是word2vec的两种训练模式

负采样(Negative Sample)和层次softmax(Hierarchical Softmax)则是两种加速训练的方法

CBOW / Skip-gram

CBOW的意思就是用上下文来预测当前词,如下图所示:


CBOW模型

而Skip-gram就是用当前词来预测上下文,如下图所示:


Skip-gram模型

两种形式大体上其实差不多,这里讲一下CBOW。
还是刚才那个句子,“我今天中午吃的涮羊肉”,而现在我需要用”我“, ”今天“,”吃的“,”涮羊肉“,来推出“中午”这个词。为什么要这样做呢,因为之前那个模型只考虑了前文,并没有后文的信息加入到预测中,word2vec把前后文信息也加入了。

这里的输入层处理方式和NNLM里是一样的,也是乘一个投影矩阵,最后我们需要的也是那个投影矩阵。

需要说一下的是隐藏层处理。这4个词得到4个词向量,在CBOW里,我们需要的是将这4个词向量做一个SUM操作,成为一个向量。

然后接一个softmax输出,还是类别数还是词典的大小。
结构如下图所示:


cbow

具体例子可以看对CBOW具体理解 这篇博客。

而Skip-gram就是从一个词推多个词,结构类似。具体可以看对Skip-gram的举例理解 这篇博客。

那么到这里,模型解决了,但是还是面临着softmax有太多参数,所以需要优化,加速训练。这里采用层次softmax和负采样的办法。

层次softmax

Hierarchical Softmax,层次softmax是一种加速训练的技巧,要解决的问题是原来softmax的参数太多的问题,所以不管是层次softmax也好,还是负采样也好,都是对最后的softmax做一个处理

层次softmax的核心内容是哈夫曼树(Huffman Tree),树的核心概念是 出现概率越高的符号使用较短的编码(层次越浅),出现概率低的符号则使用较长的编码(层次越深)。

比如说一个二叉树结构,“我”肯定是第一层叶子节点,“涮羊肉”肯定是在最后一层的叶子节点。如下图:
哈夫曼树

如果把哈夫曼结构替换掉之前的softmax,是不是在做一层层的二分类,最后分类需要的参数也会减少非常多。

这里可以看基于层次softmax的CBOW

负采样

这里还有一种解决问题的思路,我们最后的softmax分出来的类是整个词袋的大小,那么是不是可以把词袋大小减小,因为有些出现概率低的词我们根本可以不考虑。这就是负采样的核心思想。

那么怎么选取频率较高的词,构成最后softmax要分的类呢。可以看这篇负采样具体做法。 (实在不想复制粘贴)

以上就是word2vector的全部内容。现在除了word2vector,还有GloVe做embedding,最后的结果类似。
word2vector存在的问题是,因为只考虑同时出现的概率,没有考虑到语意,所以对于多义词来说,word2vector就不好处理了。当然也有相关的改进,比如说加入人工标注等等。
推荐一个博客,讲的很透彻负采样
今天就到这,下次进行RNN/LSTM。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容