一.前言
先回答下,为什么会出现word2vector这个算法。首先来看one-hot的不足。黑色加粗部分,导致word2vector出现的原因。
最基本的也是最简单的把word转换成vector的办法就是通过计数word在文档中出现的次数,这样的表达方式称为one hot或者count vectorizing。假设词典共有V个词,那么每一个单词都有一个V维度的向量来表示,向量中只有一个位置为非0(可以是1,也可以是出现次数),表示该词的编号,其余为0。这样的表示很容易带来维度灾难,而且表示非常的稀疏,一个普通的词典中可能就包含上百万个词。借助sklearn可以轻松的实现该表达。运行下面的代码,得到一个非常稀疏的矩阵,每行表示一个Document,每一列表示一个Word。
#word 2 vector
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
corpus = [
'Text of first document.',
'Text of the second document make longer.',
'Number three.',
'This is number four.',
]
# store CountVectorizer sparse matrix in X
# The column of matrix is words, rows are documents
X = vectorizer.fit_transform(corpus) #(4, 13)
print(vectorizer.get_feature_name())
print(X.toarray())
# Convert a new document to count representation
vectorizer.transform(['This is a new document'])
#结果X.toarray()
[[1 1 0 0 0 0 0 1 0 1 0 0 0]
[1 0 0 0 1 1 0 1 1 1 1 0 0]
[0 0 0 0 0 0 1 0 0 0 0 0 1]
[0 0 1 1 0 0 1 0 0 0 0 1 0]]
<1x13 sparse matrix of type '<type 'numpy.int64'>'
with 3 stored elements in Compressed Sparse Row format>
二.Word2Vec主要思想
Word2vec是在Google Tomas Mikolov在2013年提出来的,作用同样是将word转换成vector表达,但是这样的vector是低维度的实数值。学习到的这个vector就是Embedding/词嵌入向量。
word2vec背后的关键原则:一个词的含义可以从它的上下文语境中推断出来 。 更抽象的,文本实际上只是一个单词序列,一个单词的含义可以从这个单词之前和之后的几个单词中提取出来。
研究人员发现,在线用户活动的时间序列和从上下文推断单词的含义一致:当用户浏览并与之交互时,可以从用户前后交互的内容推断出一条抽象内容。 因此,ML团队可以应用词向量模型来学习产品,内容和广告等内容的向量表示。word2vec(或者其他词向量模型)相比过去的方法能提供更好的单词的向量表示,使得NLP发生重大的变革
Word2Vec包括两种模型,CBOW(continuous bag of words )与Skip-gram(continuous skip-gram words)。前者利用上下文预测单词,后者利用单词预测上下文。本文主要关注CBOW模型。
训练word2vec的过程中有很多工程技巧,比如用negative sampling或Hierarchical Softmax减少词汇空间过大带来的计算量,对高频词汇进行降采样避免对于这些低信息词汇的无谓计算等。
简单说下这两个优化框架,公式就不写了,是在有点记不住,先大致理解下原理。

探讨了词向量的概念,对比了one-hot编码的不足,深入解析了Word2Vec算法,包括CBOW和Skip-gram模型的工作原理,以及Hierarchical Softmax和Negative Sampling等优化方法。
最低0.47元/天 解锁文章
651

被折叠的 条评论
为什么被折叠?



