文本分析中关键词扩展算法
目录
简介
抑制效应
问题描述和符号约定
关键词扩展算法
算法评估
算法应用和总结
简介
本文算法来来自《Computer-Assisted Keyword and Document Set Discovery from Unstructured Text》,算是对这篇文章的解读和学习。
在文本文档的分析和建模时,会经常使用关键字的方法,例如在文档搜索、文档分类、文档感情分析等等。使用关键字进行文档分析和建模,经常会遇到两个问题,其一是表达同一概念的关键字是不一样的,也是随着时间变化的,而且人类不可能将表达同一概念的所有关键词一一列举。其二是关键字选择的不同,会直接影响模型的结果,同一个文档集合,同一个模型,因为选择关键字的不一样,可以得到完全相反的两个结论。
本文针对以上关键字问题,提出了一种算法,这是一种计算机辅助的统计方法(不是全自动的),这种算法可以动态的从非结构化的数据中,给出关键字,不再是人们事先给定。这样就避免了上面的两个问题。并且与一般的关键字查询扩展方法相比,本文的算法是半自动的,且是无监督的,更能在保证主题不偏移的情况下,让机器自己寻找关键字。
抑制效应
针对关键字的两个问题,论文中给出了心理学上的一个理论依据,就是抑制效应,人们的记忆和联想会存在抑制效应,当人们看到一个概念时,脑海中和记忆里面不可能穷举出这个和这一概念相关的所有关键字,因为人的大脑会处理不过了,所以人的大脑里面会有一个抑制效应,只会让人们回忆或者联想个别的关键字。
论文还给出了两个实验,实验一是对人们进行调查,让每个人给出某一概念能联想或者回忆到的关键字,实验结果是,大部分人给出的关键字都是唯一的,彼此不一样的。实验二,选取不一样的关键字是对同一文本进行感情分析,得出的结论是,选用的文本不一样,得到的感情完全不一样。实验结果如下两图:
问题描述和符号约定
定义参考集R和搜索集S
参考集就是一个选定的感兴趣的概念(例如,主题、情感、想法、人、组织、事件等)的样本的集合,在实践中通常是选用现有的语料库或者
使用包含匹配布尔查询的文本文档集合
搜索集S就是与R不想交的一个文本集合,在实践中,我们一般选用网站上所有文档、不同于上面语料库的文档、或者匹配布尔查询 的文本文档
定义目标集
在S中寻找子集T,T中包含的文档是参考集中感兴趣的概念的新的例子。T是人们给出的新的关键字的查询的结果。
问题描述
在给定的参考集R的基础上,在搜索集S里面使用用户新引入的关键字,寻找目标集T。需要注意的是此过程是一个无监督的增量的非全自动的过程。
符号约定
Reference set引用集合:R
Search set搜索集合:S
Target set目标集合:T
查询:Q
文本文档:d
关键词:K
关键字扩展算法
该算法是增量的半自动的无监督学习算法,具体步骤如下:
一、定义参考集R和搜索集S,其定义方法如上面所述。
可以使用以下可供选择的适应性策略,用户首先根据一个简单的关键字搜索文档,定义一个狭义的R,作为现有语料库的一个子集,然后我们在算法中添加一个中间步骤,该步骤用来挖掘R中的关键字,按文档中的关键字的频率,对关键字进行排序(或者使用TF-IDF),然后检查并选择一些关键字构成,从而生成搜索集S。
TF-IDF算法原理
TF-IDF(Term Frequency-inverse Document Frequency)是一种针对关键词的统计分析方法,用于评估一个词对一个文件集或者一个语料库的重要程度。一个词的重要程度跟它在文章中出现的次数成正比,跟它在语料库出现的次数成反比。这种计算方式能有效避免常用词对关键词的影响,提高了关键词与文章之间的相关性。
其中TF指的是某词在文章中出现的总次数,该指标通常会被归一化定义为TF=(某词在文档中出现的次数/文档的总词量),这样可以防止结果偏向过长的文档(同一个词语在长文档里通常会具有比短文档更高的词频)。IDF逆向文档频率,包含某词语的文档越少,IDF值越大,说明该词语具有很强的区分能力,IDF=loge(语料库中文档总数/包含该词的文档数+1),+1的原因是避免分母为0。TFIDF=TFxIDF,TFIDF值越大表示该特征词对这个文本的重要性越大。
二、使用一组不同的分类器,将S分为两部分T与S/T。
1、在我们构造的R和S中,集合R远小于集合S,我们选择R的全部样本和S的一小部分样本,一般S中随机选择一个,当R中集合过大时,也可以采用随机抽样的方式。这样,我们就构建了训练集。
2、针对上面的训练集,我们直接使用统计分类模型(无监督学习),训练一个分类器.这个分类器的测试集就是S的全体,对S中的每一个样本,使用这个分类器,我们就可以求的S中的每一个样本隶属于R的概率.
这里为增加模型鲁棒性,我们不止训练一类分类器,我们训练多样性的分类器,每个分类器都可以对S中的每一个样本求的一个隶属于R的概率,我们对每一个样本在每一个分类器上求得的概率取最大值,我们就得到了这个样本隶属与R的概率.
3、此时S中每一个样本都有一个隶属于R的概率,我们找一个阈值,超过这个阈值的样本的集合就是T.未超过这个阈值的样本的集合就是S/T.
这样,我们就将S分为俩部分T和S/T.
三、寻找T或者S/T的关键字
1、首先,我们列出S中的所有关键字,并统计关键字的频率,为剔除出现频率太低的关键字,我们可以设置一个阈值K,剔除S中出现频率太低的关键字。
2、对于S中整理得到的关键字,我们分别统计子集T和子集S/T中,关键字出现的文档数站总文档的比例,例如,关键字在T的总文件数中出现过的文件数为,在S/T的总文件数中出现的文件数为,
如果,则这个关键词分给T,否则分给集合S/T.
这样,我们就得到了两个列表,T中关键字的列表和S/T中关键字的列表。
3、最后,我们要分别对这两个列表中的关键字进行排序。排序的方式有很多,论文中给出了一个很有效的方式,如下:
对于任意文档,
对于关键字k,用来表示T中匹配到关键字k的文档数,表示T中匹配不到关键字k的文档数。
对于关键字k,用来表示S/T中匹配到关键字k的文档数,表示S/T中匹配不到关键字k的文档数。
所以T的文档总数,S/T的文档总数为,
包含k的文档的总数为,不包含k的文档的总数为
这样,我们就可以推导出关键字k区分T和S/T模型的似然函数:
其中与存在先验概率:
其中:,根据条件概率公式,我们替换掉,,得到如下公式:
文章通过计算似然函数的值来计算这些关键字的分数,从而对关键字进行排名。
四、用户输入和人机迭代
在得到上面两组关键词列表后,根据两组关键词类别的排序,我们可以从中人为的选择关键字构建查询和查询。这样,我们就根据新的查询更新了我们的R。这样我们就可以从新开始上面的过程,从而使算法迭代了起来。
在迭代的过程中,由于用户输入这一步是人为的,不是电脑自动的,所以我们也可以根据关键字的启发出新的关键字和文档,从而更新T和S/T。
算法这样就结束了,至此,我们就半自动的无监督的得到了新的关键词,解决了因人类抑制效应产生的关键词问题。
算法评估
对于以上模型算法的评估,文章中非常巧妙的构造了一种验证模型和评估模型的数据集,并对模型算法用了三种评估方式:1、定性的分析T和S/T中的关键词;2、使用召回率和精确率定量衡量关键词分组和排名的似然模型;3、与纯人工给出的关键字对比。
构建评估模型的数据集
模型的数据集使用美国波士顿爆炸案的推特推送的新闻资讯。其中引用集R使用波士顿爆炸案搜索出来的文档集,S的构成这里很巧妙,因为是对模型进行评估,不是训练模型,所以,文中直接给出了T和S/T ,从而合成搜索集S,文中T是使用波士顿爆炸相关的新闻资讯,S/T是使用了波士顿爆炸之前的和波士顿相关的新闻资讯。这样就构造了引用集R和搜索集S.
1、定性的分析T和S/T中的关键词;
这个方法很简单,就是使用以上算法,不进行迭代,不引入人为关键词,直接运行到生成关键词列表和排序.生成的关键词列表和排序如下:
文章定性分析了,两组关键词,确实目标集T里面的关键词都是和波士顿爆炸相关,非目标集里面的关键词都是和其他因素相关.
2、使用召回率和精确率定量衡量关键词分组和排名的似然模型
下图画出了目标集和非目标集上,累积关键词搜索(逻辑或运算)出来的召回率和精确率。
从累积召回率和精确率上明显可以得出,目标集上的效果比非目标集上的效果好很多,所以关键词有很好的区分性。而且从精确率的走势可以看出,关键字的排序是非常有效的,因为随着关键字的累积,精确率是降低的。
3、与纯人工给出的关键字对比。
下图画出了人们给出的关键字和算法给出关键字的召回率和精确率的对比图。
(a)图是人类和算法各给出145个关键字的召回率的概率密度图。由密度图表明,人类给出的145个关键字(43人给出)和算法给出的145个关键词在召回率上的效果是一样的。
(b)图是人类和算法各给出的145个关键字的精确率的概率密度图。由密度图表明,算法给出的关键词的精确度比人们给出的关键字的精确度高的多。算法给出的关键词噪音更少。
(c)图是43个用户的累积召回率和算法的累积召回率的对比,结论是算法的召回率远远高于大部分用户,当算法的关键词累积到一定程度,可以完胜所有用户。
(d)图是43个用户的累积精确率和算法的累积精确率的对比,结论是算法的精确率远远高于大部分用户,并且算法的精度衰减远远好于用户的精度衰减。
算法应用与总结
本文的算法与信息检索文献和“查询扩展”算法相关,是在搜索查询中添加或重新加权关键字以检索更具代表性的文档集的算法。本文的算法有两个重要的不同。首先,大多数查询扩展方法通过对原始关键字进行词干分析、查找同义词或共现词,或在原始关键字定义的语料库中查找相关术语(Schutze和Pedersen)来检索新关键字 (1997)Bai等人(2005年)。与此相反,本文的算法在外部语料库中找到不包含原始关键字的相关关键字。
虽然一些查询扩展方法使用大型外部语料库(如Wikipedia)来增强关键字检索(Weerkamp、Balog和de Rijke 2012),但我们的方法允许用户定义外部语料库,而不需要任何结构化数据,除了集合S和R。因此,我们依赖用户的专业知识来定义搜索和引用集,从中生成新的相关关键字。
第二,当前的查询扩展方法通常试图限制“主题漂移”,或者关注于识别过于笼统的关键字(Mitra、Singhal和Buckley 1998)。因此,大多数方法都隐式地关注于最大限度地提高检索到的文档的精确度(确保检索到的文档都是相关的),而本文同时关注精确度和召回率(确保检索到尽可能多的相关文档)。
本文算法的应用包括:发现逃避审查的关键字、扩展同一主题概念下的关键词、发现隶属于某一主题概念的新词。