詞袋模型和TF-IDF

做者|PURVA HUILGOL
編譯|VK
來源|Analytics Vidhya機器學習

機器理解文本的挑戰

「語言是一種極好的交流媒介」學習

你和我很快就會明白那句話。但機器根本沒法處理原始形式的文本數據。他們須要咱們將文本分解成一種易於機器閱讀的數字格式(天然語言處理背後的理念!)。ui

這就引入「詞袋」(BoW)和TF-IDF。BoW和TF-IDF都是幫助咱們將文本句子轉換爲向量的技術。this

在這篇文章中,我將討論「詞袋」和TF-IDF。咱們將使用一個直觀和通常的例子來詳細理解每一個概念。.net

示例

我將用一個流行的例子來解釋本文中的Bag of Words(BoW)和TF-IDF。翻譯

咱們都喜歡看電影(不一樣程度)。在我決定看一部電影以前,我老是先看它的影評。我知道大家不少人也這麼作!因此,我在這裏用這個例子。3d

如下是關於某部恐怖電影的評論示例:blog

  • 點評一:This movie is very scary and longip

  • 點評二:This movie is not scary and is slow資源

  • 點評三:This movie is spooky and good

你能夠看到關於這部電影的一些對比評論,以及電影的長度和節奏。想象一下看一千篇這樣的評論是多麼枯燥。顯然,咱們能夠從中汲取不少有趣的東西,並以此爲基礎來衡量電影的表現。

然而,正如咱們在上面看到的,咱們不能簡單地把這些句子交給機器學習模型,讓它告訴咱們一篇評論是正面的仍是負面的。咱們須要執行某些文本預處理步驟。

「詞袋」和TF-IDF就是兩個這樣作的例子。讓咱們詳細瞭解一下。

從文本建立向量

你能想出一些咱們能夠在一開始就把一個句子向量化的技巧嗎?基本要求是:

  • 它不該該致使稀疏矩陣,由於稀疏矩陣會致使高計算成本

  • 咱們應該可以保留句子中的大部分語言信息

詞嵌入是一種利用向量表示文本的技術。還有2種單詞嵌入形式是:

  1. Bow,表明詞袋

  2. TF-IDF,表明詞頻-逆文本頻率

如今,讓咱們看看如何將上述電影評論表示爲嵌入,併爲機器學習模型作好準備。

詞袋(BoW)模型

詞袋(BoW)模型是數字文本表示的最簡單形式。像單詞自己同樣,咱們能夠將一個句子表示爲一個詞向量包(一個數字串)。

讓咱們回顧一下咱們以前看到的三種類型的電影評論:

  • 點評一:This movie is very scary and long
  • 點評二:This movie is not scary and is slow
  • 點評三:This movie is spooky and good

咱們將首先從以上三篇評論中全部的獨特詞彙中構建一個詞彙表。詞彙表由這11個單詞組成:「This」、「movie」、「is」、「very」、「stear」、「and」、「long」、「not」、「slow」、「spooky」、「good」。

如今,咱們能夠將這些單詞中的每個用1和0標記在上面的三個電影評論中。這將爲咱們提供三個用於三個評論的向量:

點評向量1:[1 1 1 1 1 1 0 0 0 0]

點評向量2:[1 1 2 0 0 1 0 1 0 0 0]

點評向量3:[1 1 1 0 0 0 1 0 1 1 1 1]

這就是「詞袋」(BoW)模型背後的核心思想。

使用單詞包(BoW)模型的缺點

在上面的例子中,咱們能夠獲得長度爲11的向量。然而,當咱們遇到新的句子時,咱們開始面臨一些問題:

  1. 若是新句子包含新詞,那麼咱們的詞彙量就會增長,所以向量的長度也會增長。

  2. 此外,向量還包含許多0,從而產生稀疏矩陣(這是咱們但願避免的)

  3. 咱們沒有保留任何關於句子語法和文本中單詞順序的信息。

詞頻-逆文本頻率(TF-IDF)

咱們先對TF-IDF下一個正式定義。百科是這樣說的:

「TF-IDF(term frequency–inverse document frequency)是一種用於信息檢索與數據挖掘的經常使用加權技術。TF是詞頻(Term Frequency),IDF是逆文本頻率指數(Inverse Document Frequency)」

術語頻率(TF)

首先讓咱們理解術語頻繁(TF)。它是衡量一個術語t在文檔d中出現的頻率:

這裏,在分子中,n是術語「t」出如今文檔「d」中的次數。所以,每一個文檔和術語都有本身的TF值。

咱們再次使用咱們在詞袋模型中構建的相同詞彙表來演示如何計算電影點評2:

點評 2: This movie is not scary and is slow

這裏

  • 詞彙:「This」,「movie」,「is」,「very」,「stear」,「and」,「long」,「not」,「slow」,「spooky」,「good」

  • 點評2的單詞數=8

  • 單詞「this」的TF=(點評2中出現「this」的次數)/(點評2中的單詞數)=1/8

一樣地

  • TF(‘movie’) = 1/8
  • TF(‘is’) = 2/8 = 1/4
  • TF(‘very’) = 0/8 = 0
  • TF(‘scary’) = 1/8
  • TF(‘and’) = 1/8
  • TF(‘long’) = 0/8 = 0
  • TF(‘not’) = 1/8
  • TF(‘slow’) = 1/8
  • TF( ‘spooky’) = 0/8 = 0
  • TF(‘good’) = 0/8 = 0

咱們能夠這樣計算全部點評的詞頻:

逆文本頻率(IDF)

IDF是衡量一個術語有多重要的指標。咱們須要IDF值,由於僅計算TF不足以理解單詞的重要性:

咱們能夠計算點評2中全部單詞的IDF值:

IDF('this')=log(文檔數/包含「this」一詞的文檔數)=log(3/3)=log(1)=0

一樣地,

  • IDF(‘movie’, ) = log(3/3) = 0
  • IDF(‘is’) = log(3/3) = 0
  • IDF(‘not’) = log(3/1) = log(3) = 0.48
  • IDF(‘scary’) = log(3/2) = 0.18
  • IDF(‘and’) = log(3/3) = 0
  • IDF(‘slow’) = log(3/1) = 0.48

咱們能夠計算每一個單詞的IDF值。所以,整個詞彙表的IDF值爲:

所以,咱們看到「is」、「this」、「and」等詞被降爲0,表明重要性很小;而「scary」、「long」、「good」等詞則更爲重要,於是具備更高的權值。

咱們如今能夠計算語料庫中每一個單詞的TF-IDF分數。分數越高的單詞越重要,分數越低的單詞越不重要:

如今,咱們能夠計算點評2中每一個單詞的TF-IDF分數:

TF-IDF(‘this’, Review 2) = TF(‘this’, Review 2) * IDF(‘this’) = 1/8 * 0 = 0

一樣地

  • TF-IDF(‘movie’, Review 2) = 1/8 * 0 = 0
  • TF-IDF(‘is’, Review 2) = 1/4 * 0 = 0
  • TF-IDF(‘not’, Review 2) = 1/8 * 0.48 = 0.06
  • TF-IDF(‘scary’, Review 2) = 1/8 * 0.18 = 0.023
  • TF-IDF(‘and’, Review 2) = 1/8 * 0 = 0
  • TF-IDF(‘slow’, Review 2) = 1/8 * 0.48 = 0.06

一樣地,咱們能夠計算出對於全部評論的全部單詞的TF-IDF分數:

咱們如今已經得到了咱們詞彙的TF-IDF分數。TF-IDF還爲頻率較低的單詞提供較大的值,而且當IDF和TF值都較高時,該值較高。TF-IDF分值高表明該單詞在全部文檔中都不多見,但在單個文檔中很常見。

結尾

讓我總結一下咱們在文章中所討論的內容:

  1. 詞袋只建立一組向量,其中包含文檔中的單詞出現次數,而TF-IDF模型還包含關於更重要的單詞和不重要的單詞的信息。

  2. 詞袋向量很容易解釋。然而,在機器學習模型中,TF-IDF一般表現得更好。

雖然「詞袋」和「TF-IDF」在各自方面都很受歡迎,但在理解文字背景方面仍然存在空白。檢測單詞「spooky」和「scary之間的類似性,或者將給定的文檔翻譯成另外一種語言,須要更多關於文檔的信息。

這就有關於Word2Vec、CBOW、Skip-gram等詞嵌入技術的由來。

原文連接:https://www.analyticsvidhya.com/blog/2020/02/quick-introduction-bag-of-words-bow-tf-idf/

歡迎關注磐創AI博客站:
http://panchuang.net/

sklearn機器學習中文官方文檔:
http://sklearn123.com/

歡迎關注磐創博客資源彙總站:
http://docs.panchuang.net/

相關文章
相關標籤/搜索