iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 13
0

Prioritizing important words with tf-idf

上一個章節提到 normaliztion vectors 解決了我們用單字統計時會產生的問題

但是還有一個問題是,我們通常想強調文章中的某些關鍵詞

在開始討論關鍵詞之前,我們先來說說什麼事冷僻詞

假設有一篇關於足球的文章,當中一定會常常出現 Common words 而當中的 rare words 常常會被掩沒,原因是它們在詞料庫並不常見

  • Common words: 詞料庫中常出現的用詞
  • corpus(詞料庫): 我們在檢索時所查看的文件總和
  • 在這個例子中的 Common words 指的是:the、and、it、player、field、goal
  • rare words:詞料庫中"不"常出現的用詞
  • 在這個例子中的可能會是:futbol、Messi

所以我們該如何增加這些 rare words 的重要性呢?因為通常這些詞才是真正描述這篇文章獨到之處,因此我們必須設法增加它的權重

現在另一個問題是,我們只想強調 rare words 嗎?

毫無疑問我們想要屏除it、that、the 這些 Common words ,但是跟球類相關的 player、field、goal 甚至有些詞像是 soccer 可以明確將運動的類型區隔開來,同樣的在籃球也會出現 player、field、goal 但你會在文章當中找到 basketball 而不是 soccer 或是 hoop(籃框)/offside(越位)

在這個例子中,我們想強調的單字,稱為 important words

在 important words 當中也有我們想要的詞他的詞性是 Common words 或 rare words,我們稱為 common locally 及 rare globally

接著下來就是權衡兩者了

Calculating tf-idf vectors

TF-IDF:Term frequency – inverse document frequency (tf-idf)

其就是作為 common locally 及 rare globally 的權衡的演算法

Term frequency 只考慮局部的狀況,只看某人正在看的文章,簡單的統計著單字出現的次數

接著我們要做的就是根據 inverse document frequency 來減少這個統計數字的權重,如下面的式子

https://ithelp.ithome.com.tw/upload/images/20171230/20107448zIcs93Is2v.png

為什麼是這個式子呢

  • 首先它一定常出現在句子中,所以一定是個非常大的數(lager number) -> log lager#/1+lager# 約為log 1 = 0
  • 相反的,如果是一個冷僻的詞 -> log lager#/1+small# = lager#
  • 分母有個1,主要是因為我們無法假設每個單字都會出現在詞料庫的某一個文件中,所以這是為了避免除以0的狀況

我們可以看兩個例子,分別是 the(出現1000次) 與 Messi(出現5次),詞料庫只有64份文件

在這個 case 當中 the 只在63個文件中出現,此時其權重就會為0

而 Messi 只出現在3個文件當中,此時權重就會為4

最後我們只需要將兩個向量相乘,來得到一個新的 Sparse matrix

https://ithelp.ithome.com.tw/upload/images/20171230/20107448I9Mr3FeLo1.png

Retrieving similar documents using nearest neighbor search

我們已經討論了如何表示文件及衡量它的相似度,接著我們可以開始來關心如何檢索文件

假設某人正在閱讀一篇文章,假設他很喜歡某篇文章,我們希望推薦它文章給他

最熱門的方法是的方法為 nearest neighbor search

為了實現這個演算法,我們需要定義一個 distance metric 以此來衡量我們之前討論過得相似度

這個演算法的輸出是一個相關文章的集合

nearest neighbor search 的一個特例叫做 one nearest neighbor

當搜索查詢文件檔時,返回的只是一篇最相關的文章,這個演算法很簡單,我們只要搜尋詞料庫中的每篇文章

不斷的比較彼此的相似度,比較完全部的文件檔後,我們將可以返回最相關的文章給讀者

Search over each article in corpus
Compute s = similarity( Previous,now )
If s > Best_s, record = s and set Best_s = s
    Return Best_s

這個演算法的一個變形叫 K-Nearest Neighbor

這個演算法將返回相關K個不同的文章集合給讀者,實現這個演算法除了保留當前最相關的文章,還需要一個優先陣列來存放目前找到k個最相關的文件檔

Reference:


上一篇
[day 11] 分群與相似度-1
下一篇
[day 13] 分群與相似度-3
系列文
到底是在learning什麼拉30

尚未有邦友留言

立即登入留言