[語料庫模型] 01-TF-IDF與餘弦相似性

TF-IDF(Term Frequency - Inverse Document Frequency)和餘弦相似性是整套系統很重要的部分,主要用來建立整個問答集的模型,還有比對使用者輸入的句子和問答集的哪一句最相似。

簡介

TF-IDF

  • 常用在資訊檢索與文字探勘的加權方式,是一種統計方法,用來評估一個詞在句子或文件中的重要程度。
  • 應用於中文時,由於中文字詞間不如英文有空白相隔,因此中文語句需先經過適當斷詞
  • 假設出現越多次的詞是越不重要的詞

TF-IDF 分為兩個部分,TF 和 IDF。(IDF 由 DF 轉換而來)

  • TF(詞頻):一個詞在一個句子中出現的頻率。
  • DF(文件頻率):是指一個詞出現在幾個句子中。
  • IDF(逆向文件頻率): IDF便是將DF經過轉換,IDF 越低的表示這個詞越不重要,反之亦然。

TF-IDF 實例說明

以五個擷取自問答集的問句為例,經過斷詞之後,問句會變成表中的格式。

  • 表1
    編號 問句
    0 [‘如何’, ‘申請’, ‘長期’, ‘照顧’, ‘服務’, ‘及’, ‘流程’, ‘為’, ‘何’, ‘?’]
    1 [‘申請’, ‘長照’, ‘服務’, ‘有’, ‘什麼’, ‘條件’, ‘?’]
    2 [‘長期’, ‘照顧’, ‘服務’, ‘項目’, ‘有’, ‘哪些’, ‘?’]
    3 [‘何謂’, ‘是’, ‘「’, ‘居家’, ‘服務’, ‘」’, ‘?’]
    4 [‘何謂’, ‘「’, ‘喘息’, ‘服務’, ‘」’, ‘?’]

首先,我們會把所有的詞整理成一個集合(圖 1)。再統計每個詞出現在句子中的頻率,例如,「有」出現在第 1、2 句(參考 表格 1、圖 1 綠框、圖 2 綠框)。再統計一個詞出現在幾個句子中,例如,「服務」在五個句子都有,所以相對的 IDF 值就會比較小(參考 表格 1、圖 1 橘框、圖 3 橘框)。IDF 可以被當作是一個權重,用來表示這個詞的重要程度,把 TF * IDF 就會得到這個資料集的模型(圖 4)。

  • 圖1
    5例句_WordSet
  • 圖2
    5例句_TF
  • 圖3
    5例句_DF+IDF
  • 圖4
    5例句_TFIDF

TF-IDF 使用餘弦相似性公式計算出輸入的問句與問答集中每個問題的相似性,再找出相似性最高的前三筆,回傳給使用者端 APP 使用。

TF-IDF 矩陣

TF-IDF 可以計算出每個詞在句子中權重分布的狀況,再透過餘弦相似性比較輸入的句子與問答集中每個問題的相似性,最後找到與輸入句子最相符的問答組合。

我們用程式畫了一張圖,每一列代表一個句子,每一欄代表一個詞,顏色深淺代表這個詞在這個句子中的重要性。如截圖所示,欄位個別代表一個句子,每一列則代表每一個詞,由這個矩陣可以觀察到所有權重的分佈狀況。

category3

因整個問答集的問句及詞語太多,完整的截圖放在文中不易閱讀,因此本文中僅使用部分問句與詞語生成圖表示意。

餘弦相似性

這些句子都可以當成是一個一個的向量,當然他的維度比較高,我們這邊就以二維的做示意圖,餘弦相似度無關乎向量大小,重點是向量之間的方向。

本文以二維示意圖說明,假設資料集中有 A、B 兩個句子,C 是要比對的句子。當把 C 放進來一起比較就可以看出,C 和 B 的餘弦相似性比 C 和 A 大。

餘弦相似性二維示意圖

結語

透過 TF-IDF 建立模型,再使用餘弦相似性比對句子間的相似性。基本上本系統最核心的部分就是這兩個部分了。