引言:近期的人工智能项目中,涉及到抽取小范围时间内的相似文本的需求,故小编应V粉们请求,运用java语言编写以下小程序,在此分享。
把文本转化成数学模型,通过数学方法处理文本的先决条件,此过程称为文本特征抽取。其中,向量作为一种基本的数学模型,是文本特征抽取的一种常见方法。
文本的向量空间模型(VSM)
向量空间模型中将文本表达为一个向量,看作向量空间中的一个点。
词权重
句子中的每个词在决定句子的含义时贡献度并不相同,表明每个词的权重不同,例如:
· * 重要的词:世界杯、国足
· * 不重要的词:球迷、亚洲杯
词权重:反映每个词的重要性的度量。那么如何计算权重呢?下面由小编向大家介绍注明的TF/IDF计算方法。
TF-IDF与余弦相似性
首先,让我们从一个实例开始:假如现在有一篇文章《假如国足获得世界杯冠军》,我们准备用计算机提取它的关键词,这个问题涉及到文本处理、数据挖掘、信息检索等多个领域,但是这是一个非常简单的经典算法。找到出现次数最多的词,是一个最容易考虑到的想法,如果某个词很重要,它应该在这篇文章中多次出现。
其次,我们进行"词频"(缩写为TF)统计。出现次数最多的词是"的"、"是"、"在"这一类最常用的词。它们叫做"停用词",表示对找到结果毫无帮助、必须过滤掉的词。假设我们把它们都过滤掉了,只考虑剩下的有实际意义的词。问题又随即出现,"国足"、"世界杯"、"冠军"这三个词的出现次数一样多。是否意味着,作为关键词,它们的重要性是一样的?显然不是。因为"国足"是很常见的词,相对而言,"冠军"和"世界杯"不那么常见。如果这三个词在一篇文章的出现次数一样多,有理由认为,"冠军"和"世界杯"的重要程度要大于"国足",也就是说,在关键词排序上面,"冠军"和"足球"应该排在"中国"的前面。
最后,我们需要一个重要性调整系数来衡量一个词是不是常见词。如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性,表明它正是我们所需要的关键词。
用统计学语言表达,即在词频的基础上,要对每个词分配一个"重要性"权重。最常见的词("的"、"是"、"在")给予最小的权重,较常见的词("中国")给予较小的权重,较少见的词("冠军"、"世界杯")给予较大的权重。这个权重叫做"逆文档频率"(IDF),它的大小与一个词的常见程度成反比。知道了"词频"(TF)和"逆文档频率"(IDF)以后,将这两个值相乘,就得到了一个词的TF-IDF值。某个词对文章的重要性越高,它的TF-IDF值就越大。所以,排在最前面的几个词,就是这篇文章的关键词。
伪码如下:
计算余弦夹角:
计算结果:
通过以上实验,我们由此判断,文章越相似,阀值越高。