首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Word2Vec简介

近几年的机器学习和数据挖掘会议中,时常出现各种“嵌入”(embedding)的方法,这种方法的火爆是从Word2Vec算法开始的。

Word2Vec是一种将文本中的词进行嵌入的方法,而所谓嵌入,就是将各个词使用一个定长的向量来表示。

为什么要将词表示为向量呢?因为这极大方便了计算。例如,表示为向量以后,就可以方便的计算向量之间的距离,就可以知道对应的两个词之间有多么相近。

一个直接的想法是将词做one-hot编码,举例来说,假定总共有1000个词,那么就用1000维向量来表示每个词,对于第i个词,它对应的向量的第i个位置就是1,其他位置都是0。这种方法的缺点是浪费空间和不可扩展。如果总共有1万个词,就需要1万维的向量表示,而且,出现新词的时候也难以处理。

Word2Vec的思路是,将每个词嵌入到一个定长的向量里去,至于嵌入后的向量是什么,是模型自动学习的。

Word2Vec的实现有两种方式:skip-gram和CBOW(Continuous Bag-of-Words Model),它们的图示如下。

左边是CBOW模型,它的目标是:给定一串文本,使用某个词的上下文来预测这个词。例如,对于句子“The quick brown fox jumps over lazy dog”,预测fox这个词时,可以使用quick、brown、jumps、over这四个词,它们构成了fox的上下文。这样,从文本中就可以提取一系列的训练样本。

得到上下文以后,将这些词的one-hot编码累加起来,输入神经网络,然后神经网络进行一些变换,其目标为得到fox这个词的one-hot编码。训练好之后的神经网络中,隐藏层的权重矩阵就是词嵌入后的向量了。

右边的skip-gram是类似的,它输入当前词fox,目标是变换为上下文的词汇,此处上下文词汇的处理与CBOW一样,也是将这些词的one-hot编码相加,作为训练使用的真值。

上图展示了skip-gram的具体网络结构。从input vector到hidden layer这部分矩阵就是从one-hot编码到词向量的转换。输入一个词以后,所得到的隐藏层中各神经元的数值就组成了嵌入以后的向量。

上面只是word2vec的大体原理,但直接的实现还是有很大问题,主要是因为input vector使用one-hot编码实在是太大了,因此word2vec在具体实现时使用了哈夫曼编码和采样的方法来提高计算性能,此处就不深入了。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180228A04Q7R00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券