核心概念#

自然語言處理中最常見的兩個分類問題——將文本按主題歸類和將詞彙按語義歸類——都可以通過矩陣運算中的奇異值分解(Singular Value Decomposition, SVD)一次性地解決。

文本和詞彙的矩陣#

  • 上一章用餘弦定理做新聞分類雖然漂亮,但需要對所有新聞做兩兩比較,且要進行很多次迭代,耗時特別長
  • 希望有一個辦法能一次就把所有新聞的相關性計算出來,這就是 SVD
  • 構建一個 $M \times N$ 的大矩陣 $A$,每一行對應一篇文章,每一列對應一個詞,元素 $a_{ij}$ 是第 $j$ 個詞在第 $i$ 篇文章中的加權詞頻(如 TF-IDF 值)

奇異值分解的物理含義#

SVD 將大矩陣 $A$ 分解成三個小矩陣的乘積:$A = X \times B \times Y$

  • 矩陣 $X$:詞的分類結果,每行代表一個詞,每列代表一個語義類,非零元素表示該詞在該語義類中的重要性
  • 矩陣 $B$:詞的類和文章的類之間的相關性
  • 矩陣 $Y$:文本的分類結果,每列對應一篇文本,每行對應一個主題

只要對關聯矩陣 $A$ 進行一次奇異值分解,就可以同時完成近義詞分類文章的分類,還能得到每個主題和每個詞的語義類之間的相關性。

延伸閱讀:奇異值分解的方法和應用場景#

  • 嚴格數學定義:$A_{MN} = X_{MM} \times B_{MN} \times Y_{NN}$,其中 $X$ 是酉矩陣,$Y$ 是酉矩陣的共軛矩陣,$B$ 是對角矩陣
  • 由於對角矩陣 $B$ 中很多值非常小或為零,可以省略,因此超大矩陣可以壓縮成三個小矩陣的乘積
  • 例如一個 100 萬 $\times$ 50 萬的矩陣,分解後三個矩陣元素總數不到 1.5 億,不到原來的三千分之一
  • SVD 計算分兩步:先將矩陣 $A$ 變換成雙對角矩陣(複雜度 $O(MN^2)$),再分解為三個矩陣
  • 對於超大矩陣(百萬乘百萬),需要多台計算機並行處理;2007 年 Google 中國的張智威博士團隊實現了奇異值分解的並行算法

本章小結#

相比餘弦定理的分類方法,SVD 的優點是能較快地一次性得到結果(不需要逐次迭代),但分類結果略為粗糙。實際應用中,可以先用 SVD 得到粗分類,再用餘弦定理在粗分類基礎上迭代精化,結合兩者優勢。