zoukankan      html  css  js  c++  java
  • NLP之TF-IDF与BM25原理探究

    前言

    本文主要是对TF-IDF和BM25在公式推演发展沿革方面的演述,全文思路、图片基本来源于此篇公众号推文《搜索中的权重度量利器: TF-IDF和BM25》,侵删。

    一 术语

    • TF: Term Frequency,词频;衡量某个指定的词语在某份【文档】中出现的【频率】
    • IDF: Inverse Document Frequency,逆文档频率;一个词语【普遍重要性】的度量。
    • TF-IDF = TF*IDF

    一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。 -----《TF-IDF 百度百科》

    TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

    • BM25
      • 应用:BM25相关度打分,基于BM25与TextRank的单文档自动文摘(经Rouge评测,效果较为优异)

    bm25 是一种用来评价搜索词和文档之间相关性的算法,它是一种基于概率检索模型提出的算法

    二 TF-IDF

    • <1>传统的TF-IDF
      • 【TF】词汇word的词频(TF)值

    [TF_{Score} = tf = frac{ 指定词汇word在第i份文档documents[i]中出现的次数 }{ 文档documents[i]的长度 } ]

    + 【IDF】词汇word的逆文档频率(IDF)值
    

    [IDF_{Score} = log( frac{ 文档集documents的总数 }{ 指定词word在文档集documents中出现过的文档总数 } ) ]

    + <span class="important">【TF-IDF/关联度计算】</span>词汇word与某份文档documents[j]的关联度得分(TF-IDF)
    

    [TFIDF(word | docuements ) = Similarity(word | documents ) ]

    [Similarity(word | documents ) = TF_{Score}*IDF_{Score} ]

    + 短语sentence与某份文档documents[j]的关联度得分(TF-IDF)
    

    [sentence = [word1,word2,...,wordi,...,wordn] ]

    [TFIDF_{_{sentence}}(word | docuements ) = TFIDF_{_{word1}} + TFIDF_{_{word2}} + ... + TFIDF_{_{wordi}} + ... + TFIDF_{_{wordn}} ]

    • <2>早期Lucence版的TF-IDF
      • 【TF】

    [TF_{Score} = sqrt(tf) ]

    + 【IDF】
    

    [IDF_{Score} = log( frac{ 文档集documents的总数 }{ 指定词word在文档集documents中出现过的文档总数 + 1 } ) ]

    + 【filedNorms】fieldNorms:对文本长度的归一化(Normalization)
    

    [fieldNorms = (frac{1}{sqrt(文档documents[j]的长度)}) ]

    + <span class="important">【TF-IDF/关联度计算】</span>
    

    [TF-IDF(word | docuements ) = Similarity(word | documents ) ]

    [Similarity(word | documents ) = TF_{Score} * IDF_{Score} * fieldNorms ]

    三 BM25

    下一代的TF-IDF。
    新版的lucence不再把TF-IDF作为默认的相关性算法,而是采用了BM25(BM是Best Matching的意思)。BM25是基于TF-IDF并做了改进的算法。

    + <3>BM25 + 【TF】传统的TF值理论上是可以无限大的。而BM25与之不同,它在TF计算方法中增加了一个常量k,用来限制TF值的增长极限。 + 早期Lucence版的TF-IDF $$ TF_{Score} = sqrt(tf) $$ + BM25的TF Score(作者默认对k取值为1.2) $$ TF_{Score} = frac{ ((k + 1) * tf) }{ k + tf } $$ + 如何对待文档长度?(再优化) $$ TF_{Score} = frac{ ((k + 1) * tf) }{ k * (1.0 - b + b * L) + tf } $$ > BM25还引入了平均文档长度的概念,单个文档长度对相关性的影响力与它和平均长度的比值有关系。 > BM25的TF公式里,除了k外,引入另外两个参数:L和b。 > L是文档长度与平均长度的比值。如果文档长度是平均长度的2倍,则L=2。 > b是一个常数,它的作用是规定L对评分的影响有多大。如果把b设置为0,则L完全失去对评分的影响力。b的值越大,L对总评分的影响力越大。加了L和b的公式如上所示。 + 【IDF】 $$ IDF_{Score} = log( frac{ 文档集documents的总数 }{ 指定词word在文档集documents中出现过的文档总数 + 1 } ) $$ + 【TF-IDF/关联度计算】 $$ Similarity(word | documents ) = frac{ IDF_{Score}*(k + 1)*tf } { k * (1.0 - b + b * frac{|D|}{avgD_{l}}) + tf } $$ $$ L= frac{|D|}{avgD_{l}} $$ $$ 其中,|D|系文档集documents的文档总数;avgD_{l}系文档集documents的平均文档长度(即 平均词汇数) $$

    四 文献

    > 《Variations of the Similarity Function of TextRank for Automated Summarization》
  • 相关阅读:
    Thinking in Java Reading Note(9.接口)
    Thinking in java Reading Note(8.多态)
    Thinking in Java Reading Note(7.复用类)
    SQL必知必会
    Thinking in Java Reading Note(5.初始化与清理)
    Thinking in Java Reading Note(2.一切都是对象)
    鸟哥的Linux私房菜笔记(1.基础)
    Thinking in Java Reading Note(1.对象导论)
    CoreJava2 Reading Note(2:I/O)
    CoreJava2 Reading Note(1:Stream)
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/11298273.html
Copyright © 2011-2022 走看看