TF-IDF和BM25原理和區別

TF-IDF

TF-IDF是TF(詞頻,Term Frequency)和IDF(逆文檔頻率,Inverse Document Frequency)的乘積。我們先來看他們分別是怎么計算的:

TF的計算有多種方式,常見的是

除以文章總詞數是為了標準化

IDF為:

如果一個詞越常見,那么分母就越大,逆文檔頻率就越小越接近0。分母之所以要加1,是為了避免分母為0(即所有文檔都不包含該詞)。log表示對得到的值取對數,求log是為了歸一化,保證IDF不會過大

所以TF-IDF 的計算就是:

以下有幾個細節點的理解:

  1. IDF表征的是區分度、稀缺性,用以評估一個單詞在語料庫中的重要程度,一個詞在少數幾篇文檔中出現的次數越多,它的IDF值越高,如果這個詞在大多數文檔中都出現了,這個值就不大了。從公式也可以看出來,由于log函數是單增函數,當文檔總數固定時,包含該詞的文檔數越少,IDF值越大,稀缺性越強。背后的思想是某個詞或者短語在一篇文章中出現的頻率高(TF大),并且在其他文檔中很少出現(IDF也大),則認為該詞或短語具備很好的類別區分能力(TF-IDF就越大)
  2. TF刻畫了詞語w對某篇文檔的重要性,IDF刻畫了w對整個文檔集的重要性。TF與IDF沒有必然聯系,TF低并不一定伴隨著IDF高。實際上我們可以看出來,IDF其實是給TF加了一個權重

優點與不足

TF-IDF算法的優點是簡單快速,結果比較符合實際情況。缺點是,單純以"詞頻"衡量一個詞的重要性,不夠全面,有時重要的詞可能出現次數并不多。這會導致TF-IDF法的精度并不是很高。而且,這種算法無法體現詞的位置信息,出現位置靠前的詞與出現位置靠后的詞,都被視為重要性相同,這是不正確的。(常用的一種解決方法是,對全文的第一段和每一段的第一句話,給予較大的權重。)同時TF-IDF沒有考慮詞頻上限的問題。

BM25

因為在TF-IDF 中去停用詞被認為是一種標準實踐,故TF-IDF沒有考慮詞頻上限的問題(因為高頻停用詞已經被移除了)。而在某些頻率較高的停用詞不被去除的情況下,停用詞的權重會被無意義地放大。比如文中提到的:

Elasticsearch 的?standard?標準分析器(?string?字段默認使用)不會移除停用詞,因為盡管這些詞的重要性很低,但也不是毫無用處。這導致:在一個相當長的文檔中,像?the?和?and?這樣詞出現的數量會高得離譜,以致它們的權重被人為放大。

這就是所謂的詞頻飽和度,TF-IDF的詞頻飽和度是線性的,而BM25的詞頻飽和度是非線性的:

公式:

?C = tf = \frac{word}{whole\_words},k > 0,b \in [0, 1],d為文檔的長度,avdl是文檔的平均長度

BM25和tfidf的計算結果很相似,唯一的區別在于中多了一項,這一項是用來對tf的結果進行的一種變換。把1 - b + b (\frac{d}{avdl})中的b看成0,那么此時項的結果為(\frac{(k + 1)tf}{k + tf}),通過設置一個k,就能夠保證其最大值為1,達到限制tf過大的目的。

即:

[ \frac{(k + 1)tf}{k + tf} = \frac{k + 1}{1 + \frac{k}{tf}} ]?上下同除tf

k不變的情況下,上式隨著tf的增大而增大,上限為k + 1,但是增加的程度會變小,如下圖所示。在一個句子中,某個詞重要程度應該是隨著詞語的數量逐漸衰減的,所以中間項對詞頻進行了一定罰,隨著次數的增加,影響程度的增加會越來越小。通過設置k值,能夠保證其最大值為k + 1,k往往取值1.2。

其變化如下圖(無論k為多少,中間項的變化程度會隨著次數的增加,越來越小):

1 - b + b \frac{d}{avdl}的作用是用來對文本的長度進行歸一化。
例如在考慮整個句子的 tdidf 的時候,如果句子的長度太短,那么計算的總的 tdidf 的值是要比長句子的 tdidf 的值要低的。所以可以考慮對句子的長度進行歸一化處理。

可以看到,當句子的長度越短,1 - b + b \frac{d}{\text{avdl}} 的值是越小,作為分母的位置,會讓整個第二項越大,從而達到提高短文本句子的 BM25 的值的效果。當 b 的值為 0,可以禁用歸一化,b 往往取值 0.75。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40225.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40225.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40225.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從CPU的視角看C++的構造函數和this指針

從匯編角度,清晰的去看構造函數和this指針到底是個什么東西呢?也許可以解決你的一點小疑問 首先寫一個很簡單的代碼demo: class A{ public:int a;A(){;}void seta(int _a){a_a;}A* getA(){return this;} };int fun1(int px){return px; }in…

【FreeRTOS】同步互斥與通信 有缺陷的同步示例

目錄 1 同步互斥與通信1.1 同步互斥與通信概述1.2 同步與互斥的概念1.3 同步的例子:有缺陷1.4 freertos.c源碼3. 互斥的例子:有缺陷4. 通信的例子:有缺陷5. FreeRTOS的解決方案 1 同步互斥與通信 1.1 同步互斥與通信概述 參考《FreeRTOS入門…

搞錢四步:干活、出名、破圈、整合

搞錢這事兒,說起來有四步:干活、出名、破圈、整合。 咱們現在這個時代,誰要是能把自尊心放一邊,勇敢站到舞臺上展示才華,變現那是分鐘的事兒。 只要你敢承認自己想要財富,并且不停地使用正確的方法論&…

python語句前面有一個$是什么意思

“$”是匯編語言中的一個預定義符號,等價于當前正匯編到的段的當前偏移值。例如:指令“jmp $3”中的“$”表示當前這條指令在代碼段中的偏移量。 代表當前指令的地址,如: data segment str1 db a,b,c,d leng equ $-str 就是當前地…

JVM專題之性能優化

運行時優化 方法內聯 > 方法內聯,是指 **JVM在運行時將調用次數達到一定閾值的方法調用替換為方法體本身** ,從而消除調用成本,并為接下來進一步的代碼性能優化提供基礎,是JVM的一個重要優化手段之一。 > > **注:** > > * **C++的inline屬于編譯后內聯,…

數據庫實訓復習(1)

目錄 一、關于表結構的相關操作(與表中字段的數據操作有區別) (1)往已有的表中添加字段 (2)修改表中已有字段的數據類型 (3)修改已有的表中的字段名和字段類型 (4&a…

TopK問題與堆排序

目錄 TopK問題: 定義: 應用場景: 搜索引擎: 推薦系統: 數據分析: 數據挖掘: TopK問題初階:(數據量較小情況) TopK問題進階:(…

知名品牌因商標痛失市場:114家直營店山寨店7000多家!

奶茶知名品牌“鹿角巷”當年紅遍大江南北,是最早的新茶飲品牌,但是當年商標注冊存在問題,被同行奶茶品牌搶占了先機,發聲明“對大陸商標注冊細則不詳,在商標注冊過程中讓假店鉆了法律空檔”,最夸張的時候全…

qml required property

目錄 前言 示例代碼 創建一個自定義組件(MyComponent.qml) 使用自定義組件(main.qml) 解釋 運行效果 運行時錯誤示例 前言 在 QML 中,你可以使用 required 關鍵字來聲明一個屬性是必需的。這意味著在創建該對象…

如何用Python向PPT中批量插入圖片

辦公自動化辦公中,Python最大的優勢是可以批量操作,省去了用戶粘貼、復制、插入等繁瑣的操作。經常做PPT的朋友都知道,把圖片插入到PPT當中的固定位置是一個非常繁瑣的操作,往往調整圖片時耗費大量的時間和精力。如何能省時省力插…

【數據結構】使用C語言 從零實現一個棧的數據結構

棧 什么是棧?棧是一種特殊的線性表,它只能在在表尾進行插入和刪除操作。 棧的底部稱為棧底,頂部稱為棧頂,所有的操作只能在棧頂進行,也就是說,被壓在下方的元素,只能等待其上方的元素出棧之后…

LeetCode-簡單-回文數

給你一個整數 x ,如果 x 是一個回文整數,返回 true ;否則,返回 false 。 回文數 是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。 例如,121 是回文,…

windows啟動Docker閃退Docker desktop stopped

Windows啟動Docker閃退-Docker desktop stopped 電腦上很早就安裝有Docker了,但是有一段時間都沒有啟動了,今天想啟動啟動不起來了,打開沒幾秒就閃退,記錄一下解決方案。僅供參考 首先,參照其他解決方案,本…

Ubuntu20安裝mysql方法,適用于wsl

itopen組織1、提供OpenHarmony優雅實用的小工具2、手把手適配riscv qemu linux的三方庫移植3、未來計劃riscv qemu ohos的三方庫移植 小程序開發4、一切擁抱開源,擁抱國產化 一、Ubunt20安裝mysql 適用于wsl中安裝mysql sudo apt update# 查看可使用的安裝包…

【刷題匯總--游游的you、腐爛的蘋果、孩子們的游戲(圓圈中最后剩下的數)】

C日常刷題積累 今日刷題匯總 - day0051、游游的you1.1、題目1.2、思路1.3、程序實現 - 蠻力法1.4、程序實現 - 貪心(優化) 2、腐爛的蘋果2.1、題目2.2、思路2.3、程序實現 - bfs 3、孩子們的游戲(圓圈中最后剩下的數)3.1、題目3.2、思路3.3、程序實現 -- 環形鏈表3.4、程序實現…

2個方法教你輕松移除pdf文件編輯限制

PDF是一種常見的辦公文檔格式,常用于文件共享和保護。然而,有時候我們需要編輯PDF文件中的內容,但受到了編輯限制。本文將介紹一些有效的方法,幫助您解除PDF的編輯限制,輕松進行編輯和修改。 一、通過密碼取消PDF“限制…

雷電模擬器報錯remount of the / superblock failed: Permission denied remount failed

報錯截圖 解決方法 打開設置 設置配置system.vmdk可寫入 解決

Transformer和Mamba強強結合!最新混合架構全面開源,推理速度狂飆8倍

最近發現,將Mamba和Transformer模塊混合使用,效果會比單獨使用好很多,這是因為該方法結合了Mamba的長序列處理能力和Transformer的建模能力,可以顯著提升計算效率和模型性能。 典型案例如大名鼎鼎的Jamba:Jamba利用Tr…

ELK優化之Elasticsearch

目錄 1.ELK優化 2.優化 ES 索引設置 2.1 優化 fsync 2.2 優化 refresh 2.3 優化 merge 2.4 優化設置 2.5 打開索引 3.優化線程池配置 3.1 優化的方案 4.鎖定內存,不讓 JVM 使用 Swap 5.減少分片數、副本數 6.ES優化總結 1.ELK優化 ELK優化可以圍繞著 li…

Python統計實戰:時間序列分析之簡單指數平滑和Holt指數平滑

為了解決特定問題而進行的學習是提高效率的最佳途徑。這種方法能夠使我們專注于最相關的知識和技能,從而更快地掌握解決問題所需的能力。 (以下練習題來源于《統計學—基于Python》。請在Q群455547227下載原始數據。) 練習題 下表是某只股票…