TF/IDF/DF算法

TF-IDF

TF-IDF(term frequency - inverse document frequency) 是一种用于信息检索与文本挖掘的常用加权技术。TF-IDF是一种统计方法,用以评估一个字词对于一个文件集合或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比,但同事会随着它在语料库中出现的频率成反比。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以为,互联网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜索结果中出现的位置。


目录

  • 1. 原理
  • 2. 例子
  • 3. 在向量空间模型里的应用
  • 4. 参考资料
  • 5. 外部链接

原理

在一份给定的文件里,词频(term frequency, TF)是指某一个给定的词语在该文件中出现的次数。这个数字通常会被正规化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语是否重要。)对于在某一特定文件里的词语ti来说,它的重要性可表示为: 

  \mathrm{tf_{i,j}} = \frac{n_{i,j}}{\sum_k n_{k,j}}

以上式子中,ni,j是该词在文件dj中的出现次数,而分母则是在该文件dj中所有字词的出现次数之和。


逆向文件频率(inverse document frequency, IDF)是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到:

\mathrm{idf_i} =  \log \frac{|D|}{|\{d: d \ni t_{i}\}|}

其中:

  • |D|:语料库中的文件总数
  •  :包含词语ti的文件数目(即ni!=0 的文件数目)

然后:

\mathrm{tf{}idf_{i,j}} = \mathrm{tf_{i,j}} \cdot  \mathrm{idf_{i}}

某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。


例子

有很多不同的数学公式可以用来计算TF-IDF。这边的例子以上述的数学公式来计算。词频(TF)是一词语出现的次数除以该文件的总词语数。

假如一篇文章的总词语数是100个,而词语“奶牛”出现了3次,那么“奶牛”一词在该文件中的词频就是0.03(3/100)。一个计算文件频率(DF)的方法是测定有多少份文件出现过“母牛”一词,然后除以文件集里包含的文件总数。所以,“奶牛”在1000份文件出现过,而文件总数是10000000份的话,其IDF就是9.21 (log(10000000/1000))。最后TF-IDF的分数为0.28(0.03*9.21)。


在向量空间模型里的应用


TF-IDF权重计算方法经常会和余弦相似度(cosine similarity)一同使用于向量空间模型中,用以判断两份文件之间的相似性。


### TF-IDF算法原理 TF-IDF (Term Frequency-Inverse Document Frequency) 是一种统计方法,用于评估一个词对于文档集或语料库中的其中一份文档的重要性。该重要性与词语频率成正比,与逆文档频率成反比。 #### 术语频率(Term Frequency, TF) 术语频率是指某个给定词语在特定文件里出现的次数除以这个文件中所有字词的数量。这可以表示为: \[ \text{TF}(t,d)=\frac{\text{词语} t \text{在文档} d \text{中出现的次数}}{\text{文档} d \text{总长度}} \] 这种计算方式能够反映出单词在一个单独文档内的相对频度[^1]。 #### 文档频率(Inverse Document Frequency, IDF) 为了降低那些常见却无实际意义区分作用词汇的影响,引入了IDF概念。它衡量的是在整个集合中文档含有某词的比例情况,并取其倒数再加一求得自然对数值来作为权重因子。具体表达如下所示: \[ \text{IDF}(t,D)=\log\left(\frac{\text{总数目 of 文件}}{\text{包含词语} t \text{的文件数目}+1}\right)+1 \] 这里加一是为了避免分母为零的情况发生[^2]。 最终得到的TF-IDF得分就是上述两个值相乘的结果,即: \[ \text{TF-IDF}(t,d,D)=\text{TF}(t,d)\times\text{IDF}(t,D) \] ### 应用场景 TF-IDF广泛应用于信息检索领域,在搜索引擎优化(SEO),自动摘要生成以及关键词提取等方面发挥着重要作用。通过这种方法可以帮助计算机理解人类语言并从中挖掘有价值的信息。例如,在构建索引时利用此技术可提高查询效率;而在文本分类任务上,则有助于提升模型准确性[^3]。 ```python import math from collections import Counter def compute_tf(text): words = text.split() word_counts = Counter(words) total_words = len(words) tf_dict = {word: count / float(total_words) for word, count in word_counts.items()} return tf_dict def compute_idf(documents): N = len(documents) idf_dict = {} all_tokens_set = set([token for doc in documents for token in doc.split()]) for tkn in all_tokens_set: cnt_tkn = sum(1 for doc in documents if tkn in doc) idf_dict[tkn] = math.log(N/(cnt_tkn + 1)) + 1 return idf_dict def compute_tfidf(tf,idfs): tfidf = {} for key,val in tf.items(): tfidf[key]=val*idfs.get(key,0) return tfidf ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值