文档分词与词汇权重
- 1、文档分词
- 2、词汇权重(TF-IDF)
1、文档分词
文本分类主要做的是如何提取文本中的主要信息。那么,如何衡量哪些信息是主要信息呢?
我们知道,一篇文档是由若干词汇组成的,也就是文档的主要信息是词汇。从这个角度来看,我们就可以用一些关键词来描述文档
这种处理文本的方式叫做词袋(Bag of Words)模型,该模型会忽略文本中的词汇出现的顺序以及相应的语法,将文档看做是由若干单词组成的,且单词之间相互独立,没有关联
要想提取文档中的关键词,就需要对文档进行分词。分词的方法一般是:基于统计和机器学习,需要人工标注词性和统计特征,训练分词模型
值得注意的是,分词后词汇中必定存在一些普遍使用的停用词(详见:传送门),这些停用词对文档分析作用不大,因此,在文档分析之前需要将这些词去掉
另外,分词阶段还需要处理同义词,很多时候一个事物有多个不同的名称,例如,番茄和西红柿等
中文分词与英文分词是不同的,它们需要不同的分词库进行处理:
- 中文分词:jieba
- 英文分词:NLTK
关于jieba中文分词库和NLTK英文分词库的介绍与使用详见文章:传送门
2、词汇权重(TF-IDF)
有了分词,那么,哪些关键词对文档才是重要的呢?
例如,可以通过词汇出现的次数,次数越多就表示越重要。更为合理的方法是计算词汇的TF-IDF值
TF-IDF(Term Frequency-Inverse Document Frequency,词频-逆文档频率)是一种统计方法,用来评估一个词汇对一篇文档的重要程度。词汇的重要性随着它在文档中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降
-
TF(Term Frequency):即词频,指某个特定的词汇在该文档中出现的次数
T F ω = 词汇 ω 出现的次数 文档中的总词汇数 \mathrm{ TF_\omega=\frac{词汇\omega出现的次数}{文档中的总词汇数}} TFω=文档中的总词汇数词汇ω出现的次数 -
IDF(Inverse Document Frequency):即逆向文档频率,指一个词汇在文档中的类别区分度。它认为一个词汇出现在文档的数量越少,这个词汇对该文档就越重要,就越能通过这个词汇把该文档和其他文档区分开
I D F ω = log 语料库中的文档总数 包含词汇 ω 的文档数 + 1 \mathrm{ IDF_\omega=\log \frac{语料库中的文档总数}{包含词汇\omega的文档数+1}} IDFω=log包含词汇ω的文档数+1语料库中的文档总数
IDF是一个相对权重值, log \log log的底数可以自定义。其中分母加1是为了避免分母为0(有些单词可能不在文档中出现)
某一特定文档内的高频词汇,以及该词汇在整个文档集合中的低频率文档,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词汇,保留重要的词汇
T F − I D F ω = T F ω × I D F ω \mathrm{ TF\!-\!IDF_\omega = TF_\omega×IDF_\omega} TF−IDFω=TFω×IDFω
以下是一个示例:
假设一篇文章中共有2000个单词,“中国”出现100次。假设全网共有1亿篇文章,其中包含“中国”的有200万篇。求单词“中国”的TF-IDF值
T F ( 中国 ) = 100 / 2000 = 0.05 I D F ( 中国 ) = log 10 1 亿 200 万 + 1 = 1.70 T F − I D F ( 中国 ) = 0.05 × 1.70 = 0.085 \begin{align} & \mathrm{TF(中国) = 100 / 2000 = 0.05} \notag \\[2ex] & \mathrm{IDF(中国) = \log_{10} \frac{1亿}{200万+1} = 1.70} \notag \\[3ex] & \mathrm{TF\!-\!IDF(中国) = 0.05 × 1.70 = 0.085} \notag \end{align} TF(中国)=100/2000=0.05IDF(中国)=log10200万+11亿=1.70TF−IDF(中国)=0.05×1.70=0.085
通过计算文档中词汇的TF-IDF值,我们就可以提取文档中的特征属性。即就是将TF-IDF值较高的词汇,作为文档的特征属性
Sklearn提供了计算TF-IDF值的API:TfidfVectorizer。具体使用详见下篇:传送门