1.word2vec中中文训练集训练成了英文是怎么回
准备工作为了训练语料库,当然需要去下载。
英文wiki语料库(11。9G) 中文wiki语料库(1。
2G)然后就是准备好编译环境,语言选择的是python,使用了gensim的库,该库是由Radim ?eh??ek博士基于google发布的C语言版本的word2vec编写的Python库。 如何安装该库就不多说了。
处理流程1、英文wiki训练首先需要将xml的文件转换成txt文件,主要通过process_wiki。py这个脚本来进行,在参考文考网页中提出了注意“wiki = WikiCorpus(inp, lemmatize=False, dictionary={})“将lemmatize设置为False避免使用Pattern来讲英文单词词干化处理,以免变得很慢,于是就华丽丽的接受。
整个过程大概用了5个小时左右,共有差不多400W的articles。执行命令为:python3 process_wiki。
py enwiki-latest-pages-articles。xml。
bz2 wiki。en。
text生成了wiki。 en。
text,生成的效果如下:文/howe_howe(简书作者)原文链接:/p/05800a28c5e4著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
2.word2vec是如何得到词向量的
假设每个词对应一个词向量,假设:
1)两个词的相似度正比于对应词向量的乘积。即:sim(v1,v2)=v1?v2sim(v1,v2)=v1?v2。即点乘原则;
2)多个词v1~vnv1~vn组成的一个上下文用CC来表示,其中C=∑ni=1viC=∑i=1nvi。C|C|C|C|称作上下文C的中心向量。即加和原则;
3)在上下文CC中出现单词AA的概率正比于能量因子e?E(A,C),whereE=?A?Ce?E(A,C),whereE=?A?C。即能量法则(可参看热统中的配分函数)。
因此:
p(A|C)=e?E(A,C)∑Vi=1e?E(vi,C)=eA?C∑Vi=1evi?C (1)p(A|C)=e?E(A,C)∑i=1Ve?E(vi,C)=eA?C∑i=1Vevi?C (1)
其中VV是整个词汇空间。
ref1ref1的分母计算是非常耗时的,下面推导比较方面快速的计算ref1ref1的方法。
把整个词汇空间分成两部分GG和HH,同时在下面的公式中GG和HH也表示各自的词向量中心,并且设AA存在于GG中,则:
p(A|C)=p(A|G,C)?p(G|C) (2)p(A|C)=p(A|G,C)?p(G|C) (2)
where,
p(G|C)=eG?CeG?C+eH?C=11+e(H?G)?C (3)p(G|C)=eG?CeG?C+eH?C=11+e(H?G)?C (3)
and,
p(A|G,C)=eA?C∑w∈Gew?C (4)p(A|G,C)=eA?C∑w∈Gew?C (4)
引入sigmoidsigmoid函数σ(x)=1/(1+e?x)σ(x)=1/(1+e?x),则
p(G|C)=σ(?(H?G)?C)=σ((G?H)?C)p(G|C)=σ(?(H?G)?C)=σ((G?H)?C)
p(G|C)p(G|C)只是简单的计算两部分向量之差,不能再简化了。
另外,根据上述定义,很容易得到这个关系p(G|C)=1?(H|C)p(G|C)=1?(H|C),因为CC要么落在GG要么落在HH。
观看ref4ref4,则知p(A|G,C)p(A|G,C)是另一个版本的p(A,C)p(A,C),只是词汇空间从V→GV→G而已。然后我们继续拆分GG递归的计算下去,最后只需要计算各兄弟部分的向量差而已。这是一个典型的二叉树,划分规则在开始就可确定,如果考虑查询效率的话,就是一个霍夫曼树。其中每个叶子节点表示一个单词,每个中间节点G or HG or H的向量为所有子向量的中心。
展开来就是:
p(A|C)=∏σ((Gi?Hi)?C)p(A|C)=∏σ((Gi?Hi)?C)
那么问题来了,这个词向量是怎么搞出来了?学习词向量哪家强?
现在我们这里有一堆的语料,一行一行分好词的,语料那是相当的多,以至于它涵盖了自然语言中的所有正确句子,每个单词在它所在的位置都是恰到好处。现在每个单词我们有一个对应的词向量,我们怎么来衡量这批词向量的好坏呢。
这批词向量张成一个自然语言的空间(从线性代数来说这样描述可能不太准确),它自己规定的自然语言空间,在这个空间中,它可以导出给定语料在它的空间中出现的概率。熟悉吧,这就是语言模型。
我们可以根据词向量计算出来每个单词在它的位置出现的概率,然后这整个语料在这个向量空间中出现的概率就等于每个词在其位置出现概率的乘积。
即,
p(T)=∏p(wi|Contexti) (5)p(T)=∏p(wi|Contexti) (5)
TT为整个语料样本,ContextiContexti为单词ii的上下文,理论上是扣除该单词后剩下的所有单词包括位置。当然了,我们只考虑它的前后cc个邻居。
我们的目标是使ref5ref5最大化,实际中是加loglog加负之后的最小化。怎么以高效率优化这个目标函数呢,这是一个典型的运筹学问题,而且还是非线性规划。我要翻一下运筹学的教材了。
3.word2vec算出的词向量怎么衡量好坏
作者:Fiberleif
链接:/question/37489735/answer/73314819
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
目前常用的衡量word embedding质量好坏的task主要分为两类:
word analogy & document classification
1.word
analogy task
假设给了一对单词 (a , b) 和一个单独的单词c,
task会找到一个单词d,使得c与d之间的关系相似于a与b之间的关系,举个简单的例子:(中国,北京)和 日本,应该找到的单词应该是东京,因为北京是中国的首都,而东京也是日本的首都。 在给定word
embedding的前提下,task一般是通过在词向量空间寻找离(b-a+c)最近的词向量来找到d。
2.document
classification task
这是一种通过使用词向量来计算文本向量(可以被用来进行文本分类的工作)的方法,为了得到文本向量,task通常采用了一种很简单的方法:取文本中所有词的词向量的平均值来代表该文本的文本向量,进而通过文本分类的准确度来反向评价训练出的词向量的质量。
对于给定的word embedding,以上的方法确实可以大致地评价词向量的质量好坏,但我们不应该局限于它们,就像楼上所言,我们应该以word embedding对于实际任务的收益为评价标准,如果脱离了实际任务,很难讲不同的word embedding谁比谁更“好”,因为word embedding更像是一个解决问题所使用的工具而不是一个问题的终点。
4.如何用 word2vec 计算两个句子之间的相似度
计算A,B句子里每两个词的距离 i.e. D = dist(A_i, B_j) over all i,j(这里用Euclidean distance b/t the word embeddings, from w2v)。
生成optimal transport (也叫earth mover's distance a.k.a. EMD)problem,给solver(网上有很多各种语言的EMD solver)。输入是D, A所有词的词频(A_BOW i.e. bag of words), B所有词的词频(B_BOW)。
EMD基本概念就是把两个句子看成两个probability distribution的histogram,A的是山,B的是坑,用A的山填B的坑,每两个histogram格之间搬运一个词频单元需要做的功是两词间的距离。EMD返回的就是A,B的距离,1,2,3对每两篇文章可以CPU平行。