专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

武汉SEO之TF-IDF算法实现文本相似度的seo算法原理

来源:小易整编  作者:小易 发布时间:2019-08-27 03:11
摘要:武汉SEO之TF-IDF算法实现文本相似度的seo算法原理,主要应用于相似文本推荐等场景。通过使用TF-IDF算法,来找出文章的关键词,从我们每天发布的文章中提取一行或者多个关键词进行...

武汉SEO之TF-IDF算法实现文本相似度的seo算法原理,主要应用于相似文本推荐等场景。通过使用TF-IDF算法,来找出文章的关键词,从我们每天发布的文章中提取一行或者多个关键词进行整理,计算出每篇文章中的关键词量是否相似,也就是我们经常检查飘红,一般检测0都是原创文章。检测值越小相似度越,反之越大就表示越相似,一般伪原创文章就是通过这种算法来避开文章的相似度。

TF-IDF算法

TF-IDF是一种在信息检索与自然语言处理领域常用的加权技术,可用于挖掘文章中的关键词,也可用于比较文本的相似度等。

1.基本概念

TF,词频(term frequency),即一个单词在文档中出现的次数。一般来说,在某个文档中反复出现的单词,往往能够表征文档的主题信息,即TF值越大,越能代表文档所反映的内容,那么应该给予这个单词更大的权值。

IDF,逆文档频率(inverse document frequency),是一个词语普遍重要性的度量。词频因子是与文档密切相关的,说一个单词的TF值,指的是这个单词在某个文档中的出现次数,同一个单词在不同文档中TF值很可能不一样。而逆文档频率因子IDF则与此不同,它代表的是文档集合范围的一种全局因子。给定一个文档集合,那么每个单词的IDF值就唯一确定,跟具体的文档无关。所以IDF考虑的不是文档本身的特征,而是特征单词之间的相对重要性。

规定t表示单词term,d表示文档document,n表示文档集合中总共有多少文档,df(t)表示单词t在其中多少个文档出现过。则TF-IDF的计算公式为

其中,tf(t,d)表示单词t在文档d中出现的次数。具体计算TF的时候,基于不同的出发点,采纳的计算公式也不同,最直接的方式就是直接利用词频数,如上面的公式所示。比如文档中某个单词出现了5次,那么就将这个单词的TF值计为5。考虑到文章有长短之分,为了便于不同文章的比较,通常进行词频标准化,即某个单词t在某个文档d中的出现次数除以该文档d的总词数作为TF值。

与TF一样,IDF的计算公式变体也有很多,上面公式展示的是常用的基本公式。公式中加一是为了做数据平滑。考虑极端的情况,若某一个单词在文档集合所有文档中都出现,那么取log后值将为0,为了避免这种情况,在log计算后采用加一的方式进行平滑。而log计算中分子分母之所以加一,是为了避免某个单词没在文档集中任意文档中出现过,分母为零的情况。IDF的计算公式再次印证了我们上面的说法,IDF的计算与具体的某一文档无关。

从IDF计算公式可以看出,文档频率df(t)越高,则其IDF值越小,即越多的文档包含这个单词t。IDF反映了一个单词在整个文档集合中的分布情况,单词出现在其中的文档数目越多,IDF值越低,这个单词区分不同文档的能力也就越差。比如,中文中的"我们"这个词在中文文档中经常出现,相对而言,"机器学习"这个词在中文文档中就不如"我们"常见,那么"机器学习"这个词在文档集中区分不同文档的能力更强,更适合用于分类文档。

TF和IDF的计算公式变体有很多,大家感兴趣可以自行上网查阅资料。

2.实例

下面我们基于具体的例子讲解TF-IDF的计算。假设我们的语料如下(来源:sklearn文档),一共有4个句子作为文档集合,每个句子表示一个文档,则文档集合中一共有4个文档(单引号内为文档内容)。

我们手工计算TF-IDF过程如下:首先构建document-term矩阵(忽略标点符号)。term为语料中出现的所有单词。

 

TF-IDF

 

然后按照公式分别计算单词t在文档d中的TF以及单词t的IDF,相乘即为TF-IDF值。

3.代码示例

下面我们使用sklearn库来进行TF-IDF的计算。主要有两种方式。

方法一

第一种方法主要用到两个类:CountVectorizer和TfidfTransformer。代码演示如下:

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer corpus = [     'This is the first document.',     'This document is the second document.',     'And this is the third one.',     'Is this the first document?', ] vectorizer = CountVectorizer() # 根据语料计算词频矩阵 X = vectorizer.fit_transform(corpus) # 打印文档集合中所有单词 print(vectorizer.get_feature_names()) # 打印词频矩阵 print(X.toarray()) transformer = TfidfTransformer() # 根据词频矩阵计算TF-IDF值 tfidf = transformer.fit_transform(X) # 打印TF-IDF计算结果 print(tfidf.toarray())

方法二

第二种方法只用到一个类:TfidfVectorizer。代码演示如下:

from sklearn.feature_extraction.text import TfidfVectorizer corpus = [     'This is the first document.',     'This document is the second document.',     'And this is the third one.',     'Is this the first document?', ] vectorizer = TfidfVectorizer() # 根据原始语料直接计算TF-IDF值 tfidf = vectorizer.fit_transform(corpus) # 打印文档集合中所有单词 print(vectorizer.get_feature_names()) # 打印TF-IDF计算结果 print(tfidf.toarray())

如果只是计算TF-IDF,两种方法所得结果是一样的,第二种方法相对简洁。大家可以根据自己需要选择。

4注意

1、在机器学习任务中,我们经常会划分训练集和测试集。我们在针对测试集语料计算TF-IDF时,往往是根据训练集获取词典和IDF,然后根据测试集语料内容计算其TF-IDF值。代码示例如下:

from sklearn.feature_extraction.text import TfidfVectorizer corpus = [     'This is the first document.',     'This document is the second document.',     'And this is the third one.',     'Is this the first document?', ] test_corpus = ['This is the fourth document.'] vectorizer = TfidfVectorizer() # 从训练语料中获取包含所有单词的词典以及IDF值 vectorizer.fit(corpus) # 根据测试语料计算TF-IDF tfidf = vectorizer.transform(test_corpus) # 打印TF-IDF计算结果 print(tfidf.toarray())

2、sklearn中类的参数设置。比如TfidfVectorizer的其中一个初始化参数默认设置为

token_pattern=’(?u)ww+’

该参数使用正则表达式表明该类选取文档中单词的标准,只有该单词包含两个或者两个以上的字符时才被选入document-term矩阵,比如英文单词"a"只包含一个字母,则其即使出现在语料中也不会被当作term进行TF-IDF的计算。在实际使用中大家要根据自己需要设置正则表达式。

文本总结,说白了TF-IDF算法就是使用正则表达式在文章中进行选词,计算出文章的相似度。为了考虑到我们发布的文章有长短差异之分,百度算法呢,就对关键词进行词频标准化。好了今天关于TF-IDF算法就讲到这里。


本文地址:SEO培训频道 https://www.hkm168.com/seojiaocheng/1060.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们处理,谢谢!


SEO培训
小编:小易整编
相关文章相关阅读
  • 用U盘轻松实现一键重装系统的小白装机教程

    用U盘轻松实现一键重装系统的小白装机教程

    在现代社会,电脑已经成为人们生活中不可或缺的工具。然而,由于各种原因,我们有时候需要重装电脑系统来解决一些问题或提升性能。但是,对于一些小白用户来说,重装系统可能是一项困难的任务。因此,本文将介绍一款小白一键重装系统的u盘装机教程,帮助小白...

  • 计算机按工作原理可分为什么

    计算机按工作原理可分为什么

    计算机按工作原理可分为数字计算机和模拟计算机。数字式电子计算机是当今世界电子计算机行业中的主流,其内部处理的是一种称为符号信号或数字信号的电信号,它有着运算速度快、运算精度高、通用性强等特点。模拟计算机是根据相似原理,用一种连续变化的模拟量...

  • PHP调用美联软通短信接口实现短信发送

    PHP调用美联软通短信接口实现短信发送

    随着人们生活水平的提高和科技的发展,短信已成为人们交流的主要方式之一,越来越多的企业开始通过短信平台来实现营销、提醒等功能。在这个过程中,短信接口的选择显得尤为重要。本文将介绍如何通过php调用美联软通短信接口实现短信发送。一、美联软通短信...

  • php怎么实现对字符串的排序

    php怎么实现对字符串的排序

    实现步骤:1、利用str_split()函数将字符串转为字符数组,语法“str_split(字符串)”;2、使用asort()或arsort()函数来对字符数组进行升序排序或降序排序,语法“asort(字符数组)”或“arsort(字符数组...

  • python怎么实现三子棋游戏

    python怎么实现三子棋游戏

    一、基本流程三子棋游戏实现逻辑如下:1、创建初始化3*3棋盘;2、玩家执U子,先进行落子;3、胜负判定【胜、负、和棋】,若胜负未分,则继续如下4、电脑执T子,进行落子;5、胜负判定,若胜负未分,则从步骤2继续执行二、基本步骤1、菜单界面选择...

  • 如何在Vue项目中使用路由实现页面刷新和缓存控制?

    如何在Vue项目中使用路由实现页面刷新和缓存控制?

    如何在vue项目中使用路由实现页面刷新和缓存控制?在Vue项目开发中,使用路由实现页面刷新和缓存控制是非常常见的需求。本文将介绍如何在Vue项目中使用路由来实现页面刷新和缓存控制,并给出相应的代码示例。路由配置首先,在Vue项目中需要使用v...

  • 如何设置Nginx代理服务器以在多台服务器之间实现负载均衡?

    如何设置Nginx代理服务器以在多台服务器之间实现负载均衡?

    如何设置Nginx代理服务器以在多台服务器之间实现负载均衡?引言:在现代互联网应用程序中,服务器负载均衡是保证应用程序高可用性、高性能和可扩展性的重要因素之一。Nginx是一个高性能的开源代理服务器,具有强大的负载均衡功能。本文将介绍如何利...

  • 如何实现微信软件后台自动弹窗显示新接收信息?

    如何实现微信软件后台自动弹窗显示新接收信息?

    微信软件后台运行时,新接收信息如何自动弹窗显示?解决步骤是:微信——消息提醒——打开消息——弹窗现实。具体步骤如下:1、打开微信。2、点击设置后,进入新消息提醒界面。3、在新消息界面中,查看是否接受新消息通知这个选项是否有关闭。4、长按...

  • 周排行
  • 月排行
  • 年排行