1. 程式人生 > >1. 文本相似度計算-文本向量化

1. 文本相似度計算-文本向量化

就是 mage method 根據 計算 down youdao 比較 所有

1.前言

在自然語言處理過程中,經常會涉及到如何度量兩個文本之間的相似性,我們都知道文本是一種高維的語義空間,如何對其進行抽象分解,從而能夠站在數學角度去量化其相似性。

有了文本之間相似性的度量方式,我們便可以利用劃分法的K-means、基於密度的DBSCAN或者是基於模型的概率方法進行文本之間的聚類分析;另一方面,我們也可以利用文本之間的相似性對大規模語料進行去重預處理,或者找尋某一實體名稱的相關名稱(模糊匹配)。

而衡量兩個字符串的相似性有很多種方法,如最直接的利用hashcode,以及經典的主題模型或者利用詞向量將文本抽象為向量表示,再通過特征向量之間的歐式距離或者皮爾森距離進行度量。本文將對NLP中文本相似度計算第一步文本向量化做一個簡述。

2. 文本向量化

無論文本式中文還是英文,我們首先要把它轉化為電腦認識的形式。轉化為電腦認識的形式的過程叫文本向量化。

向量化的粒度我們可以分為幾種形式:

  1. 以字或單詞為單位,中文就是單個字,英文可以是一個單詞。
  2. 以詞為單位,就需要加入一個分詞的過程。分詞算法本身是一個NLP中重要的基礎課題,本文不詳細講解。
  3. 以句子為單位,提煉出把一句話的高層語義,簡而言之就是尋找主題模型。當然如果我們已經拿到了一句話的所有詞的向量,也可以簡單的通過取平均活著其他方式來代表這個句子。

下面我們主要介紹以詞為單位的文本向量化方法,詞集模型、詞代模型、n-gram、TF-IDF、word2vec。和以句子為單位的主題模型,LSA、NMF、pLSA、LDA等。

2.1 詞集模型和詞代模型

詞集模型和詞代模型都是將所有文本中單詞形成一個字典vocab,然後根據字典來統計單詞出現頻數。不同的是:

  • 詞集模型是單個文本中單詞出現在字典中,就將其置為1,而不管出現多少次。
  • 詞代模型是單個文本中單詞出現在字典中,就將其向量值加1,出現多少次就加多少次。

詞集模型和詞代模型都是基於詞之間保持獨立性,沒有關聯為前提。這使得其統計方便,但同時也丟失了文本間詞之間關系的信息。

2.2 n-gram

n-gram是一種基於統計語言模型的算法。它的基本思想是將文本裏面的內容按照字節進行大小為n的滑動窗口操作,形成了長度是n的字節片段序列。

以“我愛中國”為例:

一元模型(unigram model)分為“我”“愛”“中”“國”

二元模型(bigram model)分為“我愛”“愛中”“中國”

三元模型(trigram model)分為“我愛中”“愛中國”

以此類推,分好詞後,就可以像詞代模型的處理方式,按照詞庫去比較句子中出現的次數。n-gram能夠比較好的記錄句子中詞之間的聯系,n越大句子的完整度越高,但是隨之而來的是詞的維度成指數級增長。所以一般取n=2,n=3。

2.3 TF-IDF

TF-IDF是Term Frequency - Inverse Document Frequency的縮寫,即“詞頻-逆文本頻率”。它由兩部分組成,TF和IDF。

前面的TF也就是我們前面說到的詞頻,我們之前做的向量化也就是做了文本中各個詞的出現頻率統計,並作為文本特征,這個很好理解。關鍵是後面的這個IDF,即“逆文本頻率”如何理解。前面,我們講到幾乎所有文本都會出現的"的"其詞頻雖然高,但是重要性卻應該比詞頻低的"西瓜"和“中國”要低。我們的IDF就是來幫助我們來反應這個詞的重要性的,進而修正僅僅用詞頻表示的詞特征值

所以一個詞的定量化表示比較合理的是(詞頻X詞的權重)。

\[ TF-IDF(x) = TF(x) * IDF(x) \]

2.4 word2vec

ord2vec是google在2013年推出的一個NLP工具,它的特點是將所有的詞向量化,這樣詞與詞之間就可以定量的去度量他們之間的關系,挖掘詞之間的聯系。word2vec一般有CBOW和Skip-Gram模型。

CBOW模型的訓練輸入是某一個特征詞的上下文相關的詞對應的詞向量,而輸出就是這特定的一個詞的詞向量。通過深度學習訓練出相應的固定維度的詞向量。Skip-Gram模型和CBOW模型反一反,輸入是中心詞,輸出是上下文。

2.5 主題詞模型

設想一下一個問題,如果我有兩個文本,分別是“星期天”和“周日”,從詞的角度,它們沒有相交的詞,那它們用統計詞頻的方法就會比較難處理。但是這兩個詞,我們一看就知道意思完全一樣的。這裏就可以用主題模型對它們進行處理,假設我們找到它們的2個隱含主題“假期”,“休息”,然後計算它們和隱含主題間的距離的相似度。

主題模型主要有以下幾種,LSA、NMF、pLSA、LDA。

  1. LSA是通過奇異值分解的方式把文本分解成如下,\(U_{il}\) 對應第\(i\)個文本和第\(l\)個主題的相關度。\(V_{jm}\)對應第\(j\)個詞和第\(m\)個詞義的相關度。\(\Sigma_{lm}\)對應第\(l\)個主題和第\(m\)個詞義的相關度。

\[ A_{m \times n} \approx U_{m \times k}\Sigma_{k \times k} V^T_{k \times n} \]

  1. NMF雖然也是矩陣分解,它卻使用了不同的思路,它的目標是期望將矩陣分解為兩個矩陣。這樣速度更快,而且不會出現LSA中相關度為負數的情況,可解釋性強。
    \[ A_{m \times n} \approx W_{m \times k}H_{k \times n} \]
  2. pLSA雖然可以從概率的角度解釋了主題模型
    1. 按照概率\(p(d_m)\)選擇一篇文檔\(d_m\)
    2. 根據選擇的文檔\(d_m\),從從主題分布中按照概率\(p(z_k|d_m)\)即(\(\theta_{mz}\))選擇一個隱含的主題類別\(z_k\)
    3. 根據選擇的主題\(z_k\), 從詞分布中按照概率\(p(w_j|z_k)\)即(\(\varphi_{zw}\))選擇一個詞\(w_j\)

技術分享圖片

  1. LDA模型考慮了主題概率分布的先驗知識,比如文本中出現體育主題的概率肯定比哲學主題的概率要高,這點來源於我們的先驗知識。具體我們以後的文章再討論。

技術分享圖片

3. 總結

本文主要介紹了文本相似度計算的第一步,文本的向量化。向量化好後,我們就可以通過一些常用的距離計算公式計算文本之間的相似度。

(歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]

1. 文本相似度計算-文本向量化