简述四大类文本分析中的“词向量”

Submitted by huzhenda on Sat, 07/14/2018 - 14:24

词向量类型:

一个词一列向量:Hash算法,word2vec。hash把词打散成(01010101110)的数值,word2vec则打散同时定义成了向量,参考文献中验证了将词向量加起来的确是一个有效的方法;延伸:word2vec考虑了上下语义,doc2vec还考虑了上下语句顺序,用在段落中较好。

一个词一个值:bow算法+词权重,LDA主题-词语矩阵。两者有递进关系,bow进化到LDA,当然LDA超级耗时,所以业界不喜欢用。

由词向量到句向量:

如果是一词一列向量一般用简单相加(相加被证明是最科学)来求得;

一个词一值的就是用词权重组合成向量的方式;

谷歌的句向量sen2vec可以直接将句子变为一列向量。

词向量的额外效果

消除歧义:LDA的主题-词语向量;

结合上下文语境:word2vec;

文档与文档之间的关系:bow+TFIDF(TFIDF能够较好区分文档差别的指标,而互信息较为有利于文档中核心词的提取)

一般来说,hash值效果会稍差一些,其他三类都很不错,有着很多可能性,一般有以下几个课题:

  • 文本分类方面,会用BOW+TFIDF词向量(TFIDF较好区分文档之间)、LDA主题-词语向量(发觉潜在语义)、word2vec
  • 文本相似性方面,用词向量来度量相似性简直再好不过,一般会用word2vec(结合了上下文语境,短文本非常优异,百分点已经成功践行)、LDA主题-词语向量(比较多的考虑了词语的歧义问题)
  • 文本主题建模方面,LDA模型。

1、BoW算法衍生——One-hot Representation

(1)词频做向量值

Bag-of-words model (BoW model)最早出现在自然语言处理(Natural Language Processing)和信息检索(Information Retrieval)领域。该模型忽略掉文本的语法和语序等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立的。BoW使用一组无序的单词(words)来表达一段文字或一个文档。基于文本的BoW模型的一个简单例子如下:

首先给出两个简单的文本文档如下:

                                 John likes to watch movies. Mary likes too.

                                 John also likes to watch football games.

基于上述两个文档中出现的单词,构建如下一个词典 (dictionary):

                           {"John": 1, "likes": 2,"to": 3, "watch": 4, "movies": 5,"also": 6, "football": 7, "games": 8,"Mary": 9, "too": 10}

上面的词典中包含10个单词, 每个单词有唯一的索引, 那么每个文本我们可以使用一个10维的向量来表示。如下:

                               [1, 2, 1, 1, 1, 0, 0, 0, 1, 1]

                               [1, 1,1, 1, 0, 1, 1, 1, 0, 0]

该向量与原来文本中单词出现的顺序没有关系,而是词典中每个单词在文本中出现的频率。

Distributed Representation是一个稠密、低维的实数限量,它的每一维表示词语的一个潜在特征,该特征捕获了有用的句法和语义特征。其特点是将词语的不同句法和语义特征分布到它的每一个维度上去表示。

2.1

(2)词权重做向量值(TFIDF/CHI/MI)

TFIDF等term weighting来当做词向量。会搭配着BOW模型使用,比如先定位了每句话出现的词,然后填上的不是频数,而是每个词的向量。比如python中的词典就是非常好的存储这个内容的过程。

2.2

第一列的8表示类别编号,其余的每一列是词及其权重,使用冒号分隔,例如“9219:0.24673737883635047”表示编号为9219的词,对应的TF-IDF值为0.24673737883635047。如果特征向量有N个,那么每条记录就对应着一个N维向量。

2、hash算法衍生——simhash算法——One-hot Representation

先用hash算法把每一个词打成一系列的0,1点,再每个词的hash值相加,然后附上词权重。

2.3

 

 

为了便于理解,我们尽量不使用数学公式,主要分为以下几步:

  • 分词,把需要判断的文本分词形成这个文章的特征单词。最后形成去掉噪音词的单词序列并为每个词加上权重,我们假设权重分为5个级别(1~5)。比如:“ 美国“51区”雇员称内部有9架飞碟,曾看见灰色外星人 ” ==> 分词后为 “ 美国(4) 51区(5) 雇员(3) 称(1) 内部(2) 有(1) 9架(3) 飞碟(5) 曾(1) 看见(3) 灰色(4) 外星人(5)”,括号里是代表单词在整个句子里重要程度,数字越大越重要。

  • hash,通过hash算法把每个词变成hash值,比如“美国”通过hash算法计算为 100101,“51区”通过hash算法计算为 101011。这样我们的字符串就变成了一串串数字,文章开头说过,要把文章变为数字计算才能提高相似度计算性能,现在是降维过程进行时。

  • 加权,通过 2步骤的hash生成结果,需要按照单词的权重形成加权数字串,比如“美国”的hash值为“100101”,通过加权计算为“4 -4 -4 4 -4 4”;“51区”的hash值为“101011”,通过加权计算为 “ 5 -5 5 -5 5 5”。

  • 合并,把上面各个单词算出来的序列值累加,变成只有一个序列串。比如 “美国”的 “4 -4 -4 4 -4 4”,“51区”的 “ 5 -5 5 -5 5 5”, 把每一位进行累加, “4+5 -4+-5 -4+5 4+-5 -4+5 4+5” ==》 “9 -9 1 -1 1 9”。这里作为示例只算了两个单词的,真实计算需要把所有单词的序列串累加。

  • 降维,把4步算出来的 “9 -9 1 -1 1 9” 变成 0 1 串,形成我们最终的simhash签名。 如果每一位大于0 记为 1,小于0 记为 0。最后算出结果为:“1 0 1 0 1 1”。

3、word2vec词向量延伸 

(1) word2vec

word2vec是谷歌提出基于上下文语境来获取的词向量。如图是百分点公司的训练词向量的模型图。

2.4

(2) 句向量

最直观的思路,对于phrase和sentence,我们将组成它们的所有word对应的词向量加起来,作为短语向量,句向量。在参考文献中,验证了将词向量加起来的确是一个有效的方法,但事实上还有更好的做法。

4、主题模型中的topic-word向量

主题模型建立之后,会得到两个矩阵,一个是主题-词语向量矩阵;一个是文档-主题向量矩阵。其中的主题-词语矩阵,可以用来代表每个词。实际上,其是代表每个词在每个主题下的频率,但是作为潜在语义的判别也十分有效,业界会开发使用,来作为了解文档词语相关性的判别。

这个概率公式可以用矩阵表示:

2.5

其中“文档-词语”矩阵表示每个文档中每个单词的词频,即出现的概率;“主题-词语”矩阵表示每个主题中每个单词的出现概率;“文档-主题”矩阵表示每个文档中每个主题出现的概率。

(本文转载自:素质云博客)

Tags