文本转化为向量

假如有一句话"I am a student"。用向量来表示每个单词,采用one hot 编码表示方式:
I -> [1,0,0,0]
am -> [0,1,0,0]
a -> [0,0,1,0]
student -> [0,0,0,1]
我们会发现两个缺点:
(1)单词向量之间的内积为0,它们相互独立。这与实际情况是矛盾的,单词之间是有一定的联系,比如woman与girl,dog与dogs。
(2)one hot编码使得向量非常稀疏。每个单词向量的维度跟单词的个数有关,如果语料库中单词很多,会导致向量的维度非常高。
会出现这些问题,那么有没有更加合理的对单词用向量表达?当然有,那就是word embedding。word embedding是将高维稀疏的向量映射为低维稠密的向量。

自然语言是一套用来表达含义的复杂系统。在这套系统中,词是表义的基本单元。在机器学习中,如何使用向量表示词?顾名思义,词向量是用来表示词的向量,通常也被认为是词的特征向量。近年来,词向量已逐渐成为自然语言处理的基础知识。NLP(自然语言处理)里面,最细粒度的是 词语,词语组成句子,句子再组成段落、篇章、文档。所以处理 NLP 的问题,首先就要拿词语开刀。词语,是人类的抽象总结,是符号形式的,所以需要把他们转换成数值形式,或者说——嵌入到一个数学空间里,这种嵌入方式,就叫词嵌入(word embedding)。词嵌入是一种映射类型,它允许具有相似含义的单词具有相似的表示。

下面介绍几种word embedding方法。

1、word2vec

Word2vec,就是词嵌入 的一种。简单点来说就是把一个词语转换成对应向量的表达形式,来让机器读取数据。
1.1word2vec
word2vec的目的是把单词转化为向量。word2vec有两种模型:CBOW(continuous bag of words)和skip-gram。
详细介绍请阅读论文原文地址
1.2CBOW
CBOW模型是把一个词的上下文作为输入,来预测这个词本身。
在这里插入图片描述
1.3skip-gram
skip-gram模型是把一个词作为输入,来预测这个词的上下文。
在这里插入图片描述
虽然Word2Vec成功地处理了由独热向量引起的问题,但是它有几个限制。最大的挑战是它不能表示训练数据集中没有出现的单词。即使使用包含更多词汇的更大的训练集,一些很少使用的罕见词汇也永远无法映射到向量。

2、doc2vec

doc2vec是2014年提出的,原文地址

doc2Vec 或者叫做 paragraph2vec, sentence embeddings,是一种非监督式算法,可以获得 sentences/paragraphs/documents 的向量表达,是 word2vec 的拓展。学出来的向量可以通过计算距离来找 sentences/paragraphs/documents 之间的相似性,可以用于文本聚类,对于有标签的数据,还可以用监督学习的方法进行文本分类,例如经典的情感分析问题。
2.1 A distributed memory model
训练句向量的方法和词向量的方法非常类似。训练词向量的核心思想就是说可以根据每个单词的上下文预测,也就是说上下文的单词对是有影响的。那么同理,可以用同样的方法训练doc2vec。例如对于一个句子i want to drink water,如果要去预测句子中的单词want,那么不仅可以根据其他单词生成feature, 也可以根据其他单词和句子来生成feature进行预测。因此doc2vec的框架如下所示:
在这里插入图片描述
每个段落/句子都被映射到向量空间中,可以用矩阵的一列来表示。每个单词同样被映射到向量空间,可以用矩阵的一列来表示。然后将段落向量和词向量级联或者求平均得到特征,预测句子中的下一个单词。

这个段落向量/句向量也可以认为是一个单词,它的作用相当于是上下文的记忆单元或者是这个段落的主题,所以我们一般叫这种训练方法为Distributed Memory Model of Paragraph Vectors(PV-DM)

2.2Paragraph Vector without word ordering: Distributed bag of words
还有一种训练方法是忽略输入的上下文,让模型去预测段落中的随机一个单词。就是在每次迭代的时候,从文本中采样得到一个窗口,再从这个窗口中随机采样一个单词作为预测任务,让模型去预测,输入就是段落向量。如下所示:
在这里插入图片描述

3、TFIDF

TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TF * IDF,TF词频(Term Frequency),IDF逆向文件频率(Inverse Document Frequency)。TF表示词条在文档d中出现的频率。IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m,而其它类包含t的文档总数为k,显然所有包含t的文档数n=m+k,当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该词条t类别区分能力不强。但是实际上,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好代表这个类的文本的特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词以区别与其它类文档。这就是IDF的不足之处. 在一份给定的文件里,词频(term frequency,TF)指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(term count)的归一化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。)对于在某一特定文件里的词语来说,它的重要性可表示为:以上式子中分子是该词在文件中的出现次数,而分母则是在文件中所有字词的出现次数之和。逆向文件频率(inverse document frequency,IDF)是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。最后,计算TF和IDF的乘积。

T F = TF=\frac{在某一类中该词条出现的次数}{该类中所有的词条数目}

I D F = l o g ( + 1 ) IDF=log(\frac{语料库中文档总数}{包含该词条的文档数+1})

T F I D F = T F I D F TFIDF=TF*IDF

4、FastText

FastText是Facebook在2016年提出的Word2Vec的扩展。FastText不是将单个单词输入神经网络,而是将单词分解成几个n-grams(子单词)。例如,单词apple的三元组是app、ppl和ple(忽略单词边界的开始和结束)。“apple”的嵌入向量是所有这些n-grams的和。在对神经网络进行训练后,我们将对给定训练数据集的所有n-grams进行单词嵌入。稀有单词现在可以正确地表示了,因为它们的一些n-grams很可能也出现在其他单词中。

发布了51 篇原创文章 · 获赞 74 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/weixin_44766179/article/details/103218288
今日推荐