一文理解Word2Vec-part1

前言

首先推荐一个英文版的Word2Vec的教程,从原理到实现都讲得十分透彻和清晰。它分为了几个部分讲,当时我也是看的这个教程入门的,建议英文比较好的同学可以参考一下。本文创作的目的也是想写一个类似这样的教程,达到一文理解Word2Vec的目的。

为什么要表示词(Why Embdding?)

在进行自然语言处理方面的研究时,特别时在使用深度学习方法的时候,我们几乎不可能直接将每个词输入到模型中,因为计算机看不懂一个一个的字符串,因此需要将词用数字表示(通常是向量),以让机器能够读懂,理解自然语言。表征得是否易懂,信息是否足够等都是Embedding需要考虑的因素。下面介绍两种表示词的方法以加深理解。

词嵌入的两种方式

我这里标题使用了词嵌入的说法,我认为是指将每个词背后的语义信息嵌入到了词向量中,所以叫嵌入,还是很形象的 :)。

One-Hot表示

估计是每个NLPer最先接触到的表征方式了。
它是这么做的:

  1. 统计一下语料库里一共有多少不重复的词(假设为N个词)。
  2. 初始化一个N维的0向量(每一维代表一个词)。
  3. 哪一维为1,表示这个向量代表哪个词。

十分简单,但问题也十分明显。
1.维度太大,又很稀疏,一个几万维的向量只有一个1,感受一下。
2.没有啥信息量,只能简单区分出两个单词。

Word2Vec

Word2Vec在13年横空出世,几乎那以后的所有文章都以Word2Vec为基础,这篇文章的引用在今天(18年11月)已经有8318了:)。足以说明它有多强悍。
先看一眼Word2Vec训练出来的词向量:

Word2Vec.png

稠不稠?密不密?除了解决了稠密性问题,而且这些向量的维度也一般控制在低维。(50-300维这样)因此在输入到后续模型时不需要太担心性能问题。
此外这些词还包含了丰富的语义信息,相似的词的词向量一般距离会比较近,还有就是那个经典的例子:

Queen - Woman = King - Man

总之,Word2Vec学到了词语的稠密低维表示,又蕴含有较多的语义信息。

Word2Vec原理

Word2Vec有两种实现方式,Skip-gram 和 CBOW。本文以Skip-gram为例进行讲解,CBOW其实和Skip-gram的区别很小,理解了Skip-gram,CBOW也就理解了。
很多文章都以一个三层的神经网络来介绍Word2Vec的原理,本文尝试以另外一个视角进行理解,但其实质都是一样的。

任务

首先明确一下Word2Vec的任务是什么。为了使得相似的词有相似的词向量,而相似的词往往有相似的语境,因此Skip-gram采用了预测背景词作为任务。
例如,当输入词“York”,与“New”,“Slow”, "Flower"这些词比较的时候,我的模型需要告诉我“New”与"York"一起出现的可能性较大,而与“Slow”和"Flower"同时出现的可能性较小。
Skip-gram使用了很简单的方式来完成这个任务。

构造数据集

以上面的句子为例,给出了"York"希望模型预测"New"的概率要大一些。"York"就是输入,"New"就是label,标签。我们首先需要在给定的语料中构建这样的数据集。
Skip-gram字面上就是跳过gram,这里跳过的是模型的输入,即中心词,需要预测的是附近(window size内的)的词。


Skip-gram

上图中的window size设为了2,表示将前2和后2的词作为标签,中心词作为输入,来构建数据集。

训练

先提出一个假设:

每个词有两个词向量,一个称为中心词向量,一个称为背景词向量

如果有N个词,为每个词随机初始化两个词向量,因此最终我们有2*N个词向量需要训练。
再提出一个规则:

同一个词,作为输入(中心词)时,使用中心词向量,作为输出(背景词)时,使用背景词向量。

现在我们来看输入一个样本(New, York)时的训练过程:

训练

训练时,将New的中心词向量,分别与所有词的背景词向量进行点积。假设有N个词,那么这一步操作将会产生N个值,然后再将这N个值进行Softmax归一化。最终将N个值转换为输入New,输出每个词的概率。
例如:假设Dot("New", "Man")=42,归一化后P("New", "Man")=0.001,意味着输入“New”,输出“Man”的概率是0.001。
Softmax

但是别忘了,输入的训练样本是("New", "York"),因此我们希望提升P("New", "York"),打压P("New", “其他所有词”)。这样,这个样本就训练完了。需要强调的是,此时"New"用的是它的中心词向量,而“其他所有词”使用的是背景词向量。

后续

到目前为止,本文介绍了Word2Vec是什么,能做什么,以及它是怎么训练的。但是一些训练中的细节还未涉及到,而这些细节也是Word2Vec能够work的关键,比如这么大的模型怎么才能train起来?10000个词的200维词向量就需要有200100002 = 4000000个参数。这些细节将在一文理解Word2Vec-part2会进行介绍。其实这样的训练方式不止Google想到了,甚至可能有其他的研究人员在他们之前想到这样的做法,但是只有Google把细节做到了极致,才有了今天的Word2Vec。

参考资料

部分图片来自Word2Vec Tutorial - The Skip-Gram Model

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

推荐阅读更多精彩内容

  • 最近新接触文本分类问题,对于我来数第一个问题就是Word Embedding这个词到底是什么意思,因此也就开始学习...
    小松qxs阅读 24,719评论 2 27
  • NLP(Natural Language Processing),也就是人们常说的「自然语言处理」,就是研究如何让...
    知识学者阅读 1,247评论 0 1
  • 一、如何表示一个词语的意思 在计算机中如何表示一个词的意思 过去几个世纪里一直用的是分类词典。计算语言学中常见的方...
    DataArk阅读 3,777评论 0 8
  • 1. 导入   这是语言表示系列的第1篇,主要讲述了分布式表示里的Word2vec方法。该系列目前暂定有4篇语言的...
    brucep3阅读 3,169评论 0 5
  • 1.NLP当前热点方向 词法/句法分析 词嵌入(word embedding) 命名实体识别(Name Entit...
    __Aragorn阅读 5,900评论 1 9