核心概念#
自然語言處理中最常見的兩個分類問題——將文本按主題歸類和將詞彙按語義歸類——都可以通過矩陣運算中的奇異值分解(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 得到粗分類,再用餘弦定理在粗分類基礎上迭代精化,結合兩者優勢。