文本特征词提取算法

在文本分类中,需要先对文本分词,原始的文本中可能由几十万个中文词条组成,维度非常高。另外,为了提高文本分类的准确性和效率,一般先剔除决策意义不大的词语,这就是特征词提取的目的。本文将简单介绍几种文本特征词提取算法。

信息增益(IG)

对于一个系统,其信息熵为\(H(S)=-\sum_{i}^{C}P_ilog_2(P_i)\).\(C\)表示类别个数,\(P_i\)表示第\(i\)的类别的概率。某个特征\(F\),有该特征和没有该特征,信息量的变化,就是信息增益。

对特征\(F\),它的取值有\(n\)种(\(x_1\), \(x_2\), ... , \(x_n\)),计算每个值的条件熵,并取均值

$$H(C|F) = \sum_i^nP_{i}H(C|X=x_i)$$

在分类中,特征词\(f\)只有存在(取值1)和不存在(取值为0)。那么\(H(C|f)=P(f=0)H(C|f=0) + P(f=1)H(C|f=1)\)。所以信息增益为

$$IG(F)=H(F)-H(C|F)=-\sum_{i=1}^{n}P(C_i)log(P(C_i) + $$

$$\quad \qquad P(f=1)\sum_{i=1}^{n}P(C_i|f=1)logP(C_i|f=1)+P(f=0)\sum_{i=1}^{n}P(C_i|f=0)logP(C_i|f=0)$$

信息增益提取特征词步骤:

1,统计正负分类的文档数,记为\(N_1\), \(N_2\).

2, 统计每个词在正文档出现的频率(A),负文档出现的频率(B),正文档不出现的频率(C),负文档不出现的频率(D).

3,计算信息熵

$$H(S)=-(\frac{N_1}{N_2+N_1}log(\frac{N_1}{N_1+N_2})+\frac{N_2}{N_1+N_2}log(\frac{N_1}{N_1+N_2}))$$

4,计算每个词\(w\)的信息增益

$$IG(w) = H(S)+\frac{A+B}{N_1+N_2}(\frac{A}{A+B}log(\frac{A}{A+B})+\frac{B}{A+B}log(\frac{B}{A+B}))$$

$$\qquad\qquad +\frac{A+B}{N_1+N_2}(\frac{A}{A+B}log(\frac{A}{A+B})+\frac{B}{A+B}log(\frac{B}{A+B}))$$

5,按照信息增益的大小排序,取topxx就行。

卡方校验(chi-square)

卡方检验最基本的思想就是通过观察实际值与理论值的偏差来确定理论的正确与否。具体做的时候常常先假设两个变量确实是独立的(“原假设”),然后观察实际值(观察值)与理论值(这个理论值是指“如果两者确实独立”的情况下应该有的值)的偏差程度,如果偏差足够小,我们就认为误差是很自然的样本误差,是测量手段不够精确导致或者偶然发生的,两者确确实实是独立的,此时就接受原假设;如果偏差大到一定程度,使得这样的误差不太可能是偶然产生或者测量不精确所致,我们就认为两者实际上是相关的,即否定原假设,而接受备择假设。

假设理论值是\(E\),实际值是\(x\),偏差程度的计算公式为:

$$\sum_{i}^{n}\frac{(x_i-E)^2}{E}$$

这个公式就是卡方检验使用的差值衡量公式,\(x_i\)表示样本。如果差值很大,则认为与原假设不符合,认为词与类别很相关。现在有N篇文章,分类有体育和非体育两类,考察“足球”和体育类别的关系:

特征选择 属于体育 不属于体育 总计
包含“足球”单词 A B A+B
不包含“足球”单词 C D C+D
总计 A+C B+D N

如果“足球”与体育不相关,则体育类文章包含“足球”的比例等同于所有文章包含“足球”的比例,所以A的理论值是

$$E_{11}=(A+C)\frac{A+B}{N}$$

卡方差值

$$D_{11}=\frac{(A-E_{11})^2}{E_{11}}$$

同样可以求出\(D_{12}, D_{21}, D_{22}\),最后求出“足球”与“体育”类的卡方值

$$\chi^2(足球,体育)=D_{11}+D_{12}+D_{21}+D_{22}=\frac{N(AD-BC)^2}{(A+C)(A+B)(B+D)(C+D)}$$

卡方检验的缺点:只考虑了词是否出现,而没有考虑出现了多少次,容易夸大低频词的价值。如一个单词a在一类文章中都出现一次,而另外一个单词b在该类99%的文章中都出现了10次,但是b计算出来的卡方值要小于a,所以,在筛选的时候,容易筛掉单词b,这就是“低频词缺陷”,通常,考虑也需要考虑词频。

卡方提取特征词步骤:

1,统计正负分类的文档数,记为\(N_1\), \(N_2\).

2, 统计每个词在正文档出现的频率(A),负文档出现的频率(B),正文档不出现的频率(C),负文档不出现的频率(D).

3,计算卡方

$$\chi^2=D_{11}+D_{12}+D_{21}+D_{22}=\frac{N(AD-BC)^2}{(A+C)(A+B)(B+D)(C+D)}$$

5,按照卡方值从大到小,取topxx就行。

http://www.pycpp.com/2015/06/27/%E6%96%87%E6%9C%AC%E7%89%B9%E5%BE%81%E8%AF%8D%E6%8F%90%E5%8F%96%E7%AE%97%E6%B3%95/

时间: 2024-11-10 07:07:03

文本特征词提取算法的相关文章

文本关键词提取算法

1.TF-IDF 2.基于语义的统计语言模型 文章关键词提取基础件能够在全面把握文章的中心思想的基础上,提取出若干个代表文章语义内容的词汇或短语,相关结果可用于精化阅读.语义查询和快速匹配等. 采用基于语义的统计语言模型,所处理的文档不受行业领域限制,且能够识别出最新出现的新词语,所输出的词语可以配以权重. 3.TF-IWF文档关键词自动提取算法 针对现有TF-IWF的领域文档关键词快速提取算法.该算法使用简单统计并考虑词长.位置.词性等启发性知识计算词权重,并通过文档净化.领域词典 分词等方法

基于高维聚类技术的中文关键词提取算法

[摘要]关键词提取是中文信息处理技术的热点和难点,基于统计信息的方法是其中一个重要分支.本文针对基于统计信息关键词提取方法准确率低的问题,提出基于高维聚类技术的中文关键词提取算法.算法通过依据小词典的快速分词.二次分词.高维聚类及关键词甄选四个步骤实现关键词的提取.理论分析和实验显示,基于高维聚类技术的中文关键词提取方法具备更好的稳定性.更高的效率及更准确的结果. 引言  关键词提取是通过对一篇输入文章做内容分析,按一定比例或字数要求提取出重要且语义相似性凝聚的关键词的过程.关键词自动提取是文本

关键字提取算法TF-IDF和TextRank(python3)————实现TF-IDF并jieba中的TF-IDF对比,使用jieba中的实现TextRank

关键词:    TF-IDF实现.TextRank.jieba.关键词提取数据来源:    语料数据来自搜狐新闻2012年6月-7月期间国内,国际,体育,社会,娱乐等18个频道的新闻数据    数据处理参考前一篇文章介绍:    介绍了文本关键词提取的原理,tfidf算法和TextRank算法    利用sklearn实现tfidf算法    手动python实现tfidf算法    使用jieba分词的tfidf算法和TextRank提取关键词 1.关键字提取: 关键词抽取就是从文本里面把跟这

转:文本相似度算法

文本相似度算法 原文出自:http://www.cnblogs.com/liangxiaxu/archive/2012/05/05/2484972.html 1.信息检索中的重要发明TF-IDF 1.1TF Term frequency即关键词词频,是指一篇文章中关键词出现的频率,比如在一篇M个词的文章中有N个该关键词,则 (公式1.1-1) 为该关键词在这篇文章中的词频. 1.2IDF Inverse document frequency指逆向文本频率,是用于衡量关键词权重的指数,由公式 (公

[搜索]波特词干(Porter Streamming)提取算法详解(3)

 接上 [搜索]波特词干(Porter Streamming)提取算法详解(2) 下面分为5大步骤来使用前面提到的替换条件来进行词干提取. 左边是规则,右边是提取成功或者失败的例子(用小写字母表示). 步骤1 SSES -> SS                   caresses  ->  caress IES  -> I                          ponies    ->  poni ties      ->  ti SS   -> S

基于word分词提供的文本相似度算法来实现通用的网页相似度检测

实现代码:基于word分词提供的文本相似度算法来实现通用的网页相似度检测 运行结果: 检查的博文数:128 1.检查博文:192本软件著作用词分析(五)用词最复杂99级,相似度分值:Simple=0.968589 Cosine=0.955598 EditDistance=0.916884 EuclideanDistance=0.00825 ManhattanDistance=0.001209 Jaccard=0.859838 JaroDistance=0.824469 JaroWinklerDi

集思广益,有个几百万关键字的数组的文本匹配的算法

关键字 都是放在一个数组中的,譬如$keyword_arr=["key1","key2","example",......],大约有几百万甚至上千万的关键字,这些关键字已经按照优先级从前到后排列了,越靠前的关键字优先匹配,匹配的最多次数是$max次:目前采用for循环$keyword_arr数组,然后将关键字组装成'/\\b(?:'.$value.')\\b/i';正则来匹配文本内容$text:如果已经匹配了$max次了,就停止匹配. 这个算法肯

处理文本,提取数据的脚本-主要就是用sed

处理文本,提取数据的脚本 1 #! /bin/sh 2 3 sed -i 's/<small>/\n/g' $1 | sed 's/)<\/small><\/td><td>/\n/g' 4 5 sed -i 's/.&nbsp/\n/g' $1 # 用换行符替换 6 7 sed -i '-e /;/d' $1 # 删除带有分号的行 8 9 sed -i 's/)</\n/g' $1 # 将数字两边的字符替换成换行符 10 11 sed -i '

三维等值面提取算法(Dual Contouring)

上一篇介绍了Marching Cubes算法,Marching Cubes算法是三维重建算法中的经典算法,算法主要思想是检测与等值面相交的体素单元并计算交点的坐标,然后对不同的相交情况利用查找表在体素单元内构建相应的网格拓扑关系.Marching Cubes算法简单,但是存在一些缺陷:1.模型二义性问题:2.模型特征问题. 对于二义性问题,以2D情形为例,存在一个单元中同一顶点状态而不同的连接方式(如下图所示). 图:2D中Marching Cubes算法的二义性问题 那么对于上图中两种连接方式