nlp入门之文本表示

nlp入门之文本表示


文章目录

  • nlp入门之文本表示
  • 1 one-hot编码
  • 2 词袋模型(Bag of Words)
  • 3 n-gram模型
  • 4 TF-IDF
  • 5 对TF-IDF用于特征选择时的一点讨论
    • 5.1 TF-IDF的缺点
    • 4.1TF-IDF结合信息增益(IG)来做特征选择

https://zhuanlan.zhihu.com/p/42310942
https://www.cnblogs.com/Luv-GEM/p/10543612.html

文本表示是指将文字表示成计算机能够运算和处理的数字或向量的方法。文本表示方法可分为离散表示和分布式表示。离散表示包括one-hot、词袋模型(bag of words)、n元模型、TF-IDF、共现矩阵等。分布式表示也叫词嵌入(word embedding),包括word2vec、ELMO和BERT等。本文主要介绍离散表示方法。

1 one-hot编码

建立一个字典,对语料库中出现的所有词进行索引编码。假设词典的大小为 V V V,则每个词都可以表示成一个 V V V维的稀疏向量。
例如,假设语料库是:

我喜欢计算语言学。小许也喜欢。
我还喜欢计算机视觉

则可以得到带有索引编码的词典:

{“我”: 1, “喜”: 2, “欢”: 3, “计”: 4, “算”: 5, “语”:6, “言”: 7, “学”: 8, “小”: 9, “许”: 10, “也”:11, “还”: 12, “机”: 13, “视”: 14 “觉”: 15 }

每个词可以用one-hot方法表示为:

我: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
喜: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

  • 这样会导致每个词的向量很稀疏
  • 在表示某条文本时,总的向量维数很大且很稀疏,且长度不同的文本,向量长度不一样
  • 无法表达出词与词之间的相似程度。

2 词袋模型(Bag of Words)

词袋模型也称为计数向量表示(Count Vectors),它将每条文本表示成一个向量,具体过程为:建立一个 V V V维的全零向量,然后对于目标文本里的每个词,将向量里面该词的索引对应的位置加1.
例如,前一小节中,两条文本可以表示为:

我喜欢计算语言学。小许也喜欢。[1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
我还喜欢计算机视觉。 [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]

具体实现可以采用sklearn中的CountVectorizer

  • 这种方式相比one-hot降低某条文本的维数以及稀疏度
  • 仍然存在数据稀疏和维数灾难的问题
  • 没有考虑句中词的顺序性(如果词的顺序变化了,句子意思变化了,但是向量还是一样的)。
  • 没有考虑词的相对重要性,只管词是否在词典中出现以及文本中词出现的次数,而不管它在语料库里面出现的频率。

3 n-gram模型

与词袋原理模型类似,只不过n-gram将相邻的n个词编上索引。例如n=2时,也即bigram:

{“我喜”: 1, “喜欢”: 2, “欢计”: 3, “计算”: 4, “算语”: 5, “语言”:6, “言学”: 7, “小许”: 8, “许也”: 9, “也喜”: 10, “我还”:11, “还喜”: 12, “算机”: 13, “机视”: 14 “视觉”: 15 }
有时,bigram还会结合unigram一起来建立词典和文本向量。

  • 这种做法考虑了词的顺序问题
  • 词典大小急剧膨胀

4 TF-IDF

上面的词袋模型和n-gram模型是基于计数得到的,而TF-IDF是基于频率统计得到的。
TF-IDF由两部分组成:词语频率(Term Frequency)和逆文档频率(Inverse Document Frequency)。

TF(w)=该词在当前文档中出现的次数/当前文档中词语的总数,衡量了该词在当前文档中的重要程度。值越大代表越重要。
IDF(w)=ln(文档总数/出现该词语的文档总数+1),衡量了该词在所有文档中的文档区分能力。值越大区分能力越强.(有的文献中,分子分母同时+1,等价于有一个文档包含了所有的term且每个term只包含一次。整个式子后面还可以+1,以解决idf等于0的情况)

最后得到的TF-IDF=TF×IDF

可以使用sklearn中的TfidfVectorizer生成TF-IDF特征。

TF-IDF常用于文档相似度计算。

对句子中的所有词向量根据tfidf权重加权求和,是常用的一种计算sentence embedding的方法,在某些问题上表现很好,相比于简单的对所有词向量求平均,考虑到了tfidf权重,因此句子中更重要的词占得比重就更大。

5 对TF-IDF用于特征选择时的一点讨论

TF-IDF用于向量空间模型,进行文档相似度计算是相当有效的。但在文本分类中单纯使用TF-IDF来判断一个特征是否有区分度是不够的。

5.1 TF-IDF的缺点

https://blog.csdn.net/enter89/article/details/52538121
TF-IDF仅仅综合考虑了该词在文档中的重要程度和文档区分度。

它没有考虑特征词在类间的分布。特征选择所选择的特征应该在某类出现多,而其它类出现少,即考察各类的文档频率的差异。如果一个特征词,在各个类间分布比较均匀,这样的词对分类基本没有贡献;但是如果一个特征词比较集中的分布在某个类中,而在其它类中几乎不出现,这样的词却能够很好代表这个类的特征,而TF-IDF不能区分这两种情况。

它没有考虑特征词在类内部文档中的分布情况。在类内部的文档中,如果特征词均匀分布在其中,则这个特征词能够很好的代表这个类的特征,如果只在几篇文档中出现,而在此类的其它文档中不出现,显然这样的特征词不能够代表这个类的特征。

注:在文本分类中,一般一个句子当作一个文档来看。

4.1TF-IDF结合信息增益(IG)来做特征选择

假设有两类:正类和负类,对应的文档数分别为 N 1 , N 2 N_1,N_2 N1,N2
统计每个词的正文档出现次数 A A A,负文档出现次数 B B B,正文档不出现次数 C C C,负文档不出现次数 D D D
每个词的信息增益
I G = A + B N 1 + N 2 ( A A + B l o g ( A A + B ) + B A + B l o g ( B A + B ) ) + C + D N 1 + N 2 ( C C + D l o g ( C C + D ) + D C + D l o g ( D C + D ) ) (5-1) \begin{aligned} IG=&\frac{A+B}{N_1+N_2}\left(\frac{A}{A+B}log\left(\frac{A}{A+B}\right)+\frac{B}{A+B}log\left(\frac{B}{A+B}\right)\right)\\ +&\frac{C+D}{N_1+N_2}\left(\frac{C}{C+D}log\left(\frac{C}{C+D}\right)+\frac{D}{C+D}log\left(\frac{D}{C+D}\right)\right)\\ \tag{5-1} \end{aligned} IG=+N1+N2A+B(A+BAlog(A+BA)+A+BBlog(A+BB))N1+N2C+D(C+DClog(C+DC)+C+DDlog(C+DD))(5-1)
然后将将每个词按信息增益值从大到小排序,选取前k个词作为特征,k为特征维数
一种主流的方法是:选取出特征后,每个词的特征权重用idf来表示,在预测的时候再乘以tf权重

你可能感兴趣的:(理论学习)