用计算机提取它的关键词(AutomaticKeyphraseextractionextraction)
优采云 发布时间: 2021-06-21 21:02用计算机提取它的关键词(AutomaticKeyphraseextractionextraction)
这个标题看起来很复杂,其实我想说的是一个很简单的问题。
有一个很长的文章,我想用电脑提取它的关键词(自动Keyphrase提取),不用人工干预。我怎样才能正确地做到这一点?
这个问题涉及到数据挖掘、文本处理、信息检索等诸多计算机前沿领域,但出乎意料的是,有一个非常简单的经典算法可以给出相当满意的结果。简单到不需要高深的数学,普通人只要10分钟就能看懂。这就是我今天要介绍的TF-IDF算法。
让我们从一个例子开始。假设有一篇长文《中国养蜂》,我们就用电脑提取它的关键词。
一个容易想到的想法是找到最常用的词。如果一个词很重要,它应该在这个文章 中出现多次。因此,我们进行“词频”(Term Frequency,缩写为TF)统计。
结果,你一定猜到了。最常用的词是----“的”、“是”、“在”----这个类别中最常用的词。它们被称为“停用词”,意思是对查找结果没有帮助的词,必须过滤掉。
假设我们过滤掉它们,只考虑剩下的有意义的词。这会遇到另一个问题。我们可能会发现“China”、“bee”和“farming”三个词出现的次数相同。这是否意味着作为关键词,他们的重要性是一样的?
显然不是这样。因为“中国”是一个很常见的词,相对来说,“蜜蜂”和“耕种”就没有那么常见了。如果这三个词在一篇文章文章中出现的次数相同,那么有理由认为“蜜蜂”和“繁殖”比“中国”更重要,也就是说,在关键词的排名中,“蜜蜂”“他”应该排在“中国”之前。
所以,我们需要一个重要性调整系数来衡量一个词是否是一个常用词。如果一个词比较少见,但是在这个文章中出现多次,那么很可能体现了这个文章的特点,这正是我们需要的关键词。
用统计语言表达就是根据词频给每个词赋予一个“重要性”权重。最常用的词(“的”、“是”、“在”)的权重最小,较常用的词(“中国”)的权重较小,较不常用的词(“蜜蜂”、“农业”) ) ) 给予更大的权重。这个权重被称为“逆文档频率”(Inverse Document Frequency,缩写为IDF),其大小与一个词的通用性成反比。
知道“词频”(TF)和“逆文档频率”(IDF)后,将这两个值相乘,得到一个词的TF-IDF值。一个词对文章 的重要性越高,它的 TF-IDF 值就越大。所以前几个字就是这个文章的关键词。
下面是这个算法的细节。
第一步是计算词频。
考虑到文章长短不一,不足之处,为了方便不同文章的对比,进行了“词频”标准化。
或
第二步是计算逆文档频率。
此时需要一个语料库来模拟语言环境。
如果一个词比较常见,分母就越大,逆向文档出现的频率越小,越接近0。分母加1的原因是为了防止分母为0(即所有文档不收录该词)。 log 表示对得到的值取对数。
第三步是计算TF-IDF。
可以看出TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以自动提取关键词的算法很清晰,就是计算文档中每个词的TF-IDF值,然后降序排序,取前几个词。
以《中国养蜂》为例。假设文本长度为1000个单词,“China”、“bee”、“farming”各出现20次,那么这三个单词的“词频”(TF)都是0.02。然后,在谷歌上搜索发现有250亿个网页收录“的”这个词,假设这是中文网页的总数。有62.30亿网页收录“中国”,0.4840亿网页收录“蜜蜂”,0.9730亿网页收录“修真”。那么它们的逆文档频率(IDF)和TF-IDF如下:
从上表可以看出,“蜜蜂”的TF-IDF值最高,“农业”次之,“中国”最低。 (如果还计算了单词“的”的TF-IDF,会是一个非常接近0的值。)因此,如果只选择一个单词,“bee”就是这个文章的关键词。
TF-IDF算法除了可以自动提取关键词之外,还可以用在很多地方。例如,在信息检索时,对于每个文档,可以分别计算一组搜索词(“China”、“bee”、“farming”)的TF-IDF,整个文档的TF-IDF可以是通过将它们相加得到。以色列国防军。值最高的文档是与搜索词最相关的文档。
TF-IDF算法的优点是简单快速,结果更符合实际情况。缺点是单纯用“词频”来衡量一个词的重要程度不够全面,有时重要的词可能不会出现很多次。而且,该算法无法反映单词的位置信息。出现在前面位置的词和出现在后面位置的词都被认为具有相同的重要性,这是错误的。 (一个解决方案是给全文的第一段和每段的第一句话更多的权重。)
有时候,除了找到关键词,我们也希望找到其他与原来的文章类似的文章。例如,“谷歌新闻”在主新闻下也提供了多个类似的新闻。
为了找到相似的文章,你需要使用“余弦相似度”。下面我举个例子来说明什么是“余弦相似度”。
为简单起见,让我们从句子开始。
句子A:我喜欢看电视,而不是电影。句子 B:我不喜欢看电视或看电影。
如何计算上面两句话的相似度?
基本思想是:如果这两个句子中使用的词比较相似,那么它们的内容应该也比较相似。因此,我们可以从词频入手,计算它们之间的相似度。
第一步是分词。
句子A:我/喜欢/看/电视,不/喜欢/看/电影。句子B:我/不/不喜欢/看/电视,也不/不/不喜欢/看/电影。
第二步是列出所有单词。
我喜欢看电视、电影,不,也一样。
第三步计算词频。
句子 A:我 1,喜欢 2,看 2,电视 1,电影 1,不是 1,也是 0。句子 B:我 1,喜欢 2,看 2,电视 1,电影 1,没有 2,也是 1 .
第四步是写词频向量。
句子 A:[1, 2, 2, 1, 1, 1, 0] 句子 B:[1, 2, 2, 1, 1, 2, 1]
此时,问题变成了如何计算这两个向量的相似度。
我们可以把它们看作是空间中的两条线段,都从原点 ([0, 0, ...]) 开始,指向不同的方向。两条线段之间形成夹角。如果夹角为0度,则表示方向相同,线段重叠;如果夹角为90度,则表示它们形成直角且方向完全不同;如果夹角为180度,则表示方向刚好相反。因此,我们可以通过夹角的大小来判断向量的相似度。角度越小,越相似。
以二维空间为例。上图中的a和b是两个向量,我们需要计算它们之间的夹角θ。余弦定律告诉我们可以用下面的公式得到:
假设a向量是[x1, y1],b向量是[x2, y2],那么余弦定律可以改写成如下形式:
数学家已经证明,这种余弦的计算方法也适用于n维向量。假设A和B是两个n维向量,A是[A1, A2, ..., An],B是[B1, B2, ..., Bn],那么A和B的夹角θ的余弦B 等于:
利用这个公式,我们可以得到句子A和句子B之间夹角的余弦。
余弦值越接近1,角度越接近0度,即两个向量越相似,称为“余弦相似度”。因此,上面的句子A和句子B非常相似,实际上它们的角度大约是20.3度。
由此,我们有了“寻找相似性文章”的算法:
(1)用TF-IDF算法找出两个文章关键词;(2)each文章取出几个关键词(如20个)合并为一个Set,计算每个文章对于这个集合中的词的词频(为了避免文章长度的差异,可以使用相对词频);(3)生成两个文章各自的词频向量; (4)计算两个向量的余弦相似度,数值越大越相似。
“余弦相似度”是一个非常有用的算法,只要是计算两个向量的相似度就可以使用。作者:阮一峰