tf-idf, NLP与搜索引擎中的词加权

1.tf-idf

tf-idf, term frequency - inverse document frequency,词频 -逆向文档频率。
用于评价一个单词在整个语料库中的重要程度, 即这个词是否对不同文档有着很好的区分能力.
如果某个词语 term 在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为这个词语具有很好的文档分类能力。
它通常用于词加权, 即作为权重因子(weight factor) 被用于信息检索.

2.公式

i i i 表示term, j j j 表示doc. D D D 表示文档总数.

  • t f ( i , j ) = i 在 j 中 的 出 现 频 次 j 中 的 总 词 数 tf(i,j) =\frac{i 在 j 中的出现频次}{j 中的总词数} tf(i,j)=jij
    表示词语i在文档j中的频率。

  • i d f ( i ) = log ⁡ ( D 包 含 i 的 文 档 数 ) idf(i)=\log(\frac D {包含i的文档数}) idf(i)=log(iD)
    含有词语i的文档数越少,则此项得分最高。

  • t f _ i d f ( i , j ) = t f ( i , j ) × i d f ( i ) tf\_idf(i,j)=tf(i,j) \times idf(i) tf_idf(i,j)=tf(i,j)×idf(i)
    衡量词语i在j中的重要性.

  • t f _ i d f ( i ) = i d f ( i ) × ∑ j 文 档 数 n t f ( i , j ) tf\_idf(i)=idf(i) \times \sum \limits_j^{文档数n} tf(i,j) tf_idf(i)=idf(i)×jntf(i,j),得分越高表示词语i对文章的分类能力越强。
    总的也能统计, 但这个一般不用.

3.业界工具实现

gensim

gensim有 tf-idf 的实现.
输出的是一个权重矩阵 A A A, A i , j = t f _ i d f i , j A_{i,j}=tf\_idf_{i,j} Ai,j=tf_idfi,j.

sklearn

TfidfVectorizer 类, 训练阶段接收语料库作输入, 训练得到 idf信息, 然后用于普通的 tf-idf 计算.

from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(min_df=10)
# 训练
X_train = vectorizer.fit_transform(corpus_train)
# 输出向量化结果, dtype=float, shape=[doc_size, vocabulary_size], 因 vocabulary_size 大于1万, 常用 sparse_matrix 格式表示. 每个 element 就是对应term的 tf-idf 值.
X_test = vectorizer.transform(corpus_test)

在这里插入图片描述

4. 表格示例

这里写图片描述
图 4-1 tf-idf(word, doc)

5.灵活变种

借鉴 t f _ i d f ( i , j ) = t f ( i , j ) × i d f ( i ) tf\_idf(i,j)=tf(i,j) \times idf(i) tf_idf(i,j)=tf(i,j)×idf(i) 的思想, 综合运用 term score, term hot, field weight, inverse document frequency. 得到的新公式为:
t s _ t h _ i d f ( i , j ) = t s ( i , j ) ∗ log ⁡ ( t h ( i ) ∣ { d o c ∣ i ∈ d o c } ∣ ) (5-1) ts\_th\_idf(i,j)=ts(i,j)*\log (\frac {th(i)}{|\{doc| i \in doc\}|}) \tag {5-1} ts_th_idf(i,j)=ts(i,j)log({docidoc}th(i))(5-1)

  • i, j
    i 为 term, j 为 doc.
  • t s ( i , j ) ts(i,j) ts(i,j)
    ts 即 term_score.
    t s ( i , j ) = ∑ f i e l d ∈ j w e i g h t ( f i e l d ) ∗ f r e q u e n c y ( i , j , f i e l d ) ts(i,j)=\sum_{field \in j} weight(field)*frequency(i,j,field) ts(i,j)=fieldjweight(field)frequency(i,j,field)
    即 term i i i 在 doc j j j 中的得分.
  • t h ( i ) th(i) th(i)
    th 即 term_hot, 该term本身的热度.
  • w e i g h t ( f i e l d ) weight(field) weight(field)
    doc由若干field组成, 代表指定field的权重.
  • f r e q u e n c y ( i , j , f i e l d ) frequency(i,j,field) frequency(i,j,field)
    i 在 j 的 field 中出现的频次

参考

  1. wikipedia
  2. stanford: tf-idf-weighting
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值