NLP系列-關鍵詞抽取技術(一)-技術原理篇

一、背景介紹

??關鍵詞提取就是從文本里面把跟這篇文章意義最相關的一些詞語抽取出來,在文獻檢索、自動文摘、文本聚類和文本分類等方面有著重要的應用。

??關鍵詞提取算法一般分為有監督和無監督兩類:

  • 有監督:有監督的關鍵詞提取方法主要是通過分類的方式進行,通過構建一個較為豐富和完善的詞表,然后判斷每個文檔與詞表中每個詞的匹配程度,以類似打標簽的方式,達到關鍵詞提取的效果。優點是精度較高,缺點是需要大批量的標注數據,人工成本過高,并且詞表需要及時維護。

  • 無監督:相比較而言,無監督的方法對數據的要求低,既不需要一張人工生成且需要持續維護的詞表,也不需要人工標注語料輔助訓練。目前比較常用的關鍵詞提取算法都是基于無監督算法。如TF-IDF算法,TextRank算法和主題模型算法(包括LSA,LSI,LDA等)。

二、TF-IDF算法簡介

??TF-IDF(term frequency–inverse document frequency,詞頻-逆向文件頻率)是一種用于信息檢索(information retrieval)與文本挖掘(text mining)的常用加權技術。

??TF-IDF是一種統計方法,用以評估一字/詞對于一個文件集合或一個語料庫中的其中一份文檔的重要程度。字/詞的重要性隨著它在文檔中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。

??TF-IDF的主要思想是:如果某個單詞在一篇文章中出現的頻率TF高,并且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。


TF-IDF實例圖

圖1:TF-IDF實例矩陣
??如圖1所示,圖示為一個TF-IDF的實例矩陣,該矩陣有10行,即語料庫一共有十篇文檔,每列表示整個語料庫內的某一個詞典的字/詞,如果謀篇文檔中出現了詞典中的字/詞,那么在實例矩陣中,該位置不為0;若用字/詞在該文檔中出現的詞頻來填充,則該實例矩陣為TF矩陣,又稱為詞頻矩陣。當使用逆文檔率乘以對應的詞頻矩陣即可得到如圖1所示的TF-IDF矩陣。

2.1 TF-詞頻(Term Frequency)

??詞頻(TF)表示字/詞(關鍵字)在文檔中出現的頻率。

??這個數字通常會被歸一化(一般是詞頻除以文檔總詞數), 以防止它偏向長的文檔。

??TF_{ij}=\frac{n_{ij}}{\sum_{k}n_{ij}} TF_{w}=\frac{某一類字/詞w出現的次數}{該類字/詞出現的總次數}

??其中n_{ij}是該字/詞在文檔d_{j}中出現的次數,分母則是文檔d_{j}中所有字/詞出現的次數總和;

2.2 IDF-逆向文件頻率(Inverse Document Frequency)

??逆向文檔頻率 (IDF) :某一特定字/詞的IDF,可以由總文檔數目除以包含該詞語的文件的數目,再將得到的商取對數得到。

??如果包含字/詞w的文檔越少, IDF越大,則說明字/詞具有很好的類別區分能力。

??IDF_{i}=log\frac{D}{|{j:w_{i}\in{d_{j}}}|}

??其中,|D|是語料庫中的文件總數。{|{j:w_{i}\in{d_{j}}}|}表示包含詞語w_i的文檔數目(即n_{ij}\neq0 的文檔數目)。如果該詞語不在語料庫中,就會導致分母為零,因此一般情況下使用 拉普拉斯平滑化處理{1+|{j:w_{i}\in{d_{j}}}|}
即:

??IDF=log(\frac{語料庫的文檔總數}{包含字/詞w的文檔數+1}),其中分母加1是為了避免分母為0

2.3 TF-IDF 實際為TF*IDF

??某一特定文件內的高詞語頻率,以及該詞語字/詞在整個文檔集合中的低文件頻率,可以產生出高權重的TF-IDF。因此,TF-IDF傾向于過濾掉常見的字/詞,保留重要的字/詞。

??TF-IDF=TF \times{IDF}

??注: TF-IDF算法非常容易理解,并且很容易實現,但是其簡單結構并沒有考慮字/詞的語義信息,無法處理一詞多義與一義多詞的情況。

2.4 TF-IDF 應用

  • 搜索引擎;
  • 關鍵詞提取;
  • 文本相似性;
  • 文本摘要;

2.5 TF-IDF算法的不足

??TF-IDF 采用文檔逆頻率 IDF 對 TF 值加權取權值大的作為關鍵詞,但 IDF 的簡單結構并不能有效地反映字/詞的重要程度和特征詞的分布情況,使其無法很好地完成對權值調整的功能,所以 TF-IDF 算法的精度并不是很高,尤其是當文檔集合已經分類的情況下。

??在本質上 IDF 是一種試圖抑制噪音的加權,并且單純地認為文檔頻率小的字/詞就越重要,文本頻率大的字/詞就越無用。這對于大部分文本信息,并不是完全正確的。IDF 的簡單結構并不能使提取的關鍵詞, 十分有效地反映單詞字/詞的重要程度和特征詞的分布情 況,使其無法很好地完成對權值調整的功能。尤其是在同類語料庫中,這一方法有很大弊端,往往一些同類文本的關鍵詞被覆蓋掉。

??不足之處:

  • 沒有考慮特征詞的位置因素對文本的區分度,字/詞出現在文檔的不同位置時,對區分度的貢獻大小是不一樣的。
  • 按照傳統TF-IDF,往往一些生僻詞的IDF(反文檔頻率)會比較高、因此這些生僻詞常會被誤認為是文檔關鍵詞。
  • 傳統TF-IDF中的IDF部分只考慮了特征詞與它出現的文檔數之間的關系,而忽略了特征項在一個類別中不同的類別間的分布情況。
  • 對于文檔中出現次數較少的重要人名、地名信息提取效果不佳。

2.6 TF-IDF算法改進:TF-IWF算法

??摘要:在 TF-IDF 算法基礎上,提出新的基于詞頻統計的關鍵詞提取方法。利用段落標注技術,對處于不同位置的詞語給予不同的位置權重,對分詞結果中詞頻較高的同詞性詞語進行詞語相似度計算,合并相似度較高的詞語,通過詞語逆頻率 TF-IWF 算法,按權值排序得到關鍵詞。這種改進算法解決了傳統中文關鍵詞提取方法中對相似度高的詞的不重視而導致關鍵詞提取精度不高的問題。實驗結果表明,改進的算法結果在準確率和召回率上較原有的 TF-IDF 算法上都得到較好的提升,使得提取的關鍵詞集合能較好體現文本內容。

??詳細看論文:改進的 TF-IDF 關鍵詞提取方法

三、TextRank算法簡介

3.1 PageRank算法

??PageRank算法通過計算網頁鏈接的數量和質量來粗略估計網頁的重要性,算法創立之初即應用在谷歌的搜索引擎中,對網頁進行排名。

??PageRank算法的核心思想如下:

  • 鏈接數量:如果一個網頁被越多的其他網頁鏈接,說明這個網頁越重要,即該網頁的PR值(PageRank值)會相對較高;
  • 鏈接質量:如果一個網頁被一個越高權值的網頁鏈接,也能表明這個網頁越重要,即一個PR值很高的網頁鏈接到一個其他網頁,那么被鏈接到的網頁的PR值會相應地因此而提高。

    ??PageRank算法計算公式:

??S(V_i)=(1-d)+d*\sum_{j\in{ln(V_i)}}\frac{q}{|Out(V_j)|}S(V_j)

??其中,S(V_i)是網頁i的重要性(PR值),d是阻尼系數,一般為0.85,ln(V_i)是整個互聯網中所存在的有指向網頁i的鏈接的網頁集合,Out(V_j)是網頁j中存在的指向所有外部網頁的鏈接的集合,|Out(V_j)|是該集合中元素的個數。

??詳細看論文:The PageRank Citation Ranking: Bringing Order to the Web

3.2 TextRank算法

??TextRank算法是一種基于圖的用于關鍵詞抽取和文檔摘要的排序算法,由谷歌的網頁重要性排序算法PageRank算法改進而來,它利用一篇文檔內部的字/詞間的共現信息(語義)便可以抽取關鍵詞,它能夠從一個給定的文檔中抽取出該文檔的關鍵詞、關鍵詞組,并使用抽取式的自動文摘方法抽取出該文本的關鍵句。

??TextRank算法的基本思想是將文檔看作一個詞的網絡,該網絡中的鏈接表示詞與詞之間的語義關系,圖2所示為文檔內句子與句子之間的共現關系,詞與詞之間的共現關系類似,只是將圖G的范圍由文檔改成了句子。


textrank文章內句子間的共現關系

圖2:TextRank文檔內句子之間的貢獻關系

??TextRank算法計算公式:

??WS(V_i)=(1-d)+d*\sum_{j\in{ln(V_i)}}\frac{W_{ji}}{\sum_{V_{k}\in{Out(v_{j})}}W_{jk}}WS(V_j)

??其中,WS(V_i)是句子i的權重,右側的求和表示每個相鄰句子對本句子的貢獻程度,在單文檔中,我們可以粗略的人為所有的句子都是相鄰的,不需要像多文檔一樣進行多個窗口的生成和抽取,僅需單一文檔窗口即可,W_{ji}表示兩個句子的相似度WS(V_j)代表上次迭代出來的句子j的權重。d是阻尼系數,一般為0.85。

??詳細看論文:TextRank: Bringing Order into Texts

3.3 主要算法

3.3.1 關鍵詞抽取(keyword extraction)

??關鍵詞抽取是指從文檔中確定一些能夠描述文檔含義的術語的過程。對關鍵詞抽取而言,用于構建頂點集的文本單元可以是句子中的一個或多個字;根據這些字之間的關系(比如:在一個框中同時出現)構建邊。根據任務的需要,可以使用語法過濾器(syntactic filters)對頂點集進行優化。語法過濾器的主要作用是將某一類或者某幾類詞性的字(比如只保留名詞)過濾出來作為頂點集。

3.3.2 關鍵短語抽取(keyphrase extration)

??關鍵詞抽取結束后,我們可以得到的N個關鍵詞,在原始文本中相鄰的關鍵詞構成關鍵短語。因此,從get_keyphrases函數的源碼中我們可以看到,它先調用get_keywords抽取關鍵詞,然后分析關鍵詞是否存在相鄰的情況,最后確定哪些是關鍵短語。

3.3.3 關鍵句抽取(sentence extraction)

??句子抽取任務主要針對的是自動摘要這個場景,將每一個sentence作為一個頂點,根據兩個句子之間的內容重復程度來計算他們之間的“相似度”,以這個相似度作為聯系,由于不同句子之間相似度大小不一致,在這個場景下構建的是以相似度大小作為edge權重的有權圖。

3.4 PageRank算法與TextRank算法的區別

  • PageRank算法根據網頁之間的鏈接關系構造網絡,TextRank算法根據詞之間的共現關系構造網絡;
  • PageRank算法構造的網絡中的邊是有向無權邊,TextRank算法構造的網絡中的邊是無向有權邊。

四、LDA算法簡介

4.1 基礎知識

??給包含N篇文檔的定語料庫D=\{D_1,D_2,...,D_N\},其中D_i為第i篇文檔,包含n_i個單詞。語料庫的所有單詞來自于詞匯表V=\{word_1,word_2,...,word_V\},其中V表示詞匯表的大小,第 j個單詞為word_j

??注意:文檔中的單詞標記為w_j,它表示文檔中第j個位置的單詞為word_{w_{j}}。如:文檔中第1個位置的單詞為w_1=100(假設 word_100=我),則文檔中第一個位置的單詞為 我 。因此這里將w來表示文檔中的單詞(也稱作 token ),用v表示詞表中的單詞。

??BOW:bag of words: 單詞在文檔中不考慮順序,這稱為詞袋模型。

4.2 共軛先驗、共軛分布的概念

??概率論中兩大學派:頻率派和貝葉斯學派。而我們口中所訴說的先驗概率,后驗概率,共軛分布和共軛先驗是貝葉斯學派中的幾個概念。原因是貝葉斯學派認為分布存在先驗分布和后驗分布的不同,而頻率學派則認為一個事件的概率只有一個。

??(1)共軛分布:后驗概率分布函數與先驗概率分布函數具有相同的形式;

??(2)共軛先驗:可以使得先驗分布和后驗分布的形式相同,一方面這符合人的直覺(它們應該是相同形式的)另外一方面是可以形成一個先驗鏈,即現在的后驗分布可以作為下一次計算的先驗分布,如果形式相同,就可以形成一個鏈條。

??為了使得先驗分布和后驗分布的形式相同,我們定義:如果先驗分布和似然函數可以使得先驗分布和后驗分布具有相同的形式,那么就稱先驗分布與似然函數是共軛的。所以,共軛是指的先驗分布和似然函數。如果某個隨機變量\Theta的后驗概率P(\Theta|x)和先驗概率P(\Theta)屬于同一個分布簇的,那么稱P(\Theta|x)P(\Theta)為共軛分布,同時,也稱P(\Theta)為似然函數P(x|\Theta)的共軛先驗。

4.3 參數估計:

??(1) 離散型隨機變量分布:二項式分布,多項式分布等;

??(2) 連續型隨機變量分布:正態分布。

??他們都可以看作是參數分布,因為他們的函數形式都被一小部分的參數控制,比如正態分布的均值和方差,二項分布事件發生的概率等。因此,給定一堆觀測數據集(假定數據滿足獨立同分布),我們需要有一個解決方案來確定這些參數值的大小,以便能夠利用分布模型來做密度估計。這就是參數估計。

??從兩個學派角度考慮參數估計:

??(1) 頻率學派:通過某些優化準則(比如似然函數)來選擇特定參數值;

??(2) 貝葉斯學派:假定參數服從一個先驗分布,通過觀測到的數據,使用貝葉斯理論計算對應的后驗分布。
先驗和后驗的選擇滿足共軛,這些分布都是指數簇分布。它們之間的關系可以通過貝葉斯公式進行連接:

??后驗分布=似然函數\times{\frac{先驗分布}{P(X)}}

4.4 多項式分布與狄利克雷分布

??Gamma函數:gamma函數其實就是階乘的函數,比如n!=1\times{2}\times{3}…\times{n},這個階乘形式可以更加一般化,不限于整數。而更一般的函數形式就是gamma函數:

??\tau(x)=\int_{0}^{+\infin}e^{-t}t^{x-1}dt(x>0)

??\tau(1)=\int_{0}^{+\infin}e^{-t}dt=-[e^{-t}]_{0}^{+\infin}=1

??\tau(\frac{1}{2})=\int_{0}^{+\infin}e^{-t}t^{-\frac{1}{2}}dt=1

??\tau(x+1)=x\tau(x)

??\tau(n)=(n-1)!

??二項分布與Beta分布

??(1)二項分布其中p為成功的概率,記作X\sim{B(n,p)}

????????P=C_{n}^{k}p^{k}(1-p)^{n-k}

??(2)Beta分布,一組定義在區間(0,1)的連續概率分布,有兩個參數\alpha\beta,且\alpha,\beta>0。它是一個作為伯努利分布與二項分布的共軛先驗分布的密度函數。Beta分布的概率密度函數:

????????f(x;\alpha,\beta)=\frac{1}{B(\alpha,\beta)}x^{\alpha-1}(1-x)^{\beta-1}

??記作X\sim{Beta(\alpha,\beta)},其中分母函數為B函數,B函數是一個標準化函數,它只是為了使得這個分布的概率密度積分等于1。

??B函數與Gamma函數的關系:

????????B(\alpha,\beta)=\frac{\tau(\alpha)\tau(\beta)}{\tau(\alpha+\beta)}

??Beta分布的期望可以用公式來估計:\frac{\alpha}{\alpha+\beta}

??二項分布代入似然函數:

????????P(x|\Theta)\propto\Theta^{k}(1-\Theta)^{n-k}

??Beta分布代入先驗分布:

????????Beta(\alpha,\beta)\propto\Theta^{\alpha-1}(1-\Theta)^{\beta-1}

??則根據貝葉斯公式:

????P(\Theta|X)=\frac{P(X|\Theta)P(\Theta)}{P(x)}

????\propto{P(X|\Theta)P(\Theta)}

????=\Theta^{\alpha-1}(1-\Theta)^{\beta-1}\times{\Theta^{k}(1-\Theta)^{n-k}}

????=\Theta^{\alpha+k-1}(1-\Theta)^{n-k+\beta-1}

??最后我們發現這個貝葉斯估計服從Beta(\alpha^{'},\beta^{'})分布的,我們只要用B函數將他標準化得到我們的后驗概率:

??不妨令\alpha^{'}=k+\alpha,\beta^{'}=n-k+\beta;

??則有P(\Theta|X)=\frac{\Theta^{\alpha^{'}-1}(1-\Theta^{\beta^{'}-1})}{B(\alpha^{'},\beta^{'})};

??將這個形式推廣到多項式分布和Dirichlet分布:

??狄利克雷分布是多項分布的共軛分布,也就是它與多項式分布具有相同形式的分布函數。多項式分布是二項分布的推廣,在n次獨立試驗中每次只輸出k種結果中的一個,且每種結果都有一個確定的概率p。

??三項多項式與三維狄利克雷分布

??三維多項式表達

??p_1+p_2+p_3=1,\sum_{i=1}^{3}p_i=1;

??x_1+x_2+x_3=3,\sum_{i=1}^{3}x_i=3;

??multi(x_1,x_2,x_3|n,p_1,p_2,p_3)=f(x_1,x_2,x_3|n,p_1,p_2,p_3)=\frac{n!} {x_{1}!x_{2}!x_{3}!}p_{1}^{x_1}p_{2}^{x_2}p_{3}^{x_3}

??三維狄利克雷分布

??Dirichlet(p_1,p_2,p_3|\alpha_1,\alpha_2,\alpha_3)

??=\frac{1}{B(\alpha_1,\alpha_2,\alpha_3)}p_{1}^{\alpha_{1}-1}p_{2}^{\alpha_{2}-1}p_{3}^{\alpha_{3}-1}

??=\frac{\tau(\alpha_1+\alpha_2+\alpha_3)}{\tau(\alpha_1){\times}\tau(\alpha_2){\times}\tau(\alpha_3)}p_{1}^{\alpha_1-1}p_{2}^{\alpha_2-1}p_{3}^{\alpha_3-1}

??=\frac{\tau(\sum_{i=1}^{3}\alpha_i)}{\Pi_{i=1}^{3}\tau(\alpha^{i})}\Pi_{i=1}^{3}p_{i}^{\alpha_i}

??多項式表達和多維Dirichelet分布

??多項式表達

??p_1+p_2+...+p_n=1,\sum_{i=1}^{n}p_i=1;

??x_1+x_2+...+x_n=n,\sum_{i=1}^{n}x_i=n;

??multi(x_1,x_2,...,x_n|n,p_1,p_2,...,p_n)=f(x_1,x_2,...,x_n|n,p_1,p_2,...,p_n)=\frac{n!}{x_{1}!x_{2}!,...,x_{n}!}p_{1}^{x_1}p_{2}^{x_2}...p_{n}^{x_n}

??多維Dirichelet分布:

??Dirichlet(p_1,p_2,...,p_n|\alpha_1,\alpha_2,...,\alpha_n)

??=\frac{1}{B(\alpha_1,\alpha_2,...,\alpha_n)}p_{1}^{\alpha_{1}-1}p_{2}^{\alpha_{2}-1}...p_{n}^{\alpha_{n}-1}

??=\frac{\tau(\alpha_1+\alpha_2+...,\alpha_n)}{\tau(\alpha_1){\times}\tau(\alpha_2)...{\times}\tau(\alpha_n)}p_{1}^{\alpha_1-1}p_{2}^{\alpha_2-1}...p_{n}^{\alpha_n-1}

??=\frac{\tau(\sum_{i=1}^{n}\alpha_i)}{\Pi_{i=1}^{n}\tau(\alpha^{i})}\Pi_{i=1}^{n}p_{i}^{\alpha_i}

??=\frac{1}{B(\alpha)}\Pi_{i=1}^{n}p_{i}^{\alpha_i}

??多項式代入似然函數:

??p(y|x)=\frac{n!}{n_{1}!...n_{k}!}x_{1}^{n_1}...x_{k}^{n_k}

??Dirichlet分布代入先驗分布:

??p(x;\alpha_{1},\alpha_{2},...,\alpha_{k})=\frac{1}{B(\alpha)}\Pi_{i=1}^{k}x_{1}^{\alpha^{i}-1}

??則后驗概率:

??p(x|y)=\frac{1}{Z}\Pi_{i=1}^{k}x_{i}^{\alpha^{i}+n_{i}-1}

??至此,LDA主題模型的概率可以表示為一個概率鏈,通相應的參數估計求解方法,例如EM迭代算法求解出估計參數。

??則LDA主題模型的概率表示:

??p(詞語|文檔)=\sum_{主題}p(詞語|主題){\times}p(主題|文檔)

??P(詞語|文檔)可以通過觀察數據集求得。那么右邊的兩個概率分布如何求得?將這兩個分布看作上帝的游戲:上帝為了創造一篇文檔,先用一個有M個面的骰子做實驗,M個面代表M個主題,每做一次投骰子試驗,就可以得到M個主題中的一個,進行多次投擲,就可以得到一篇文檔的多個主題,可以看到這個試驗描述的分布就是多項式分布。同樣某個主題下有多個詞語,某個主題骰子有N個面,每個面表示一個詞語(即詞袋),每做一次投骰子實驗,就可得到N個詞種的一個,進行多次投擲,就可以得到一個主題下多個詞語,同樣可以看出這個試驗也服從多項式分布。我們可以將他們的先驗都取Dirichlet分布。

??如圖3所示,從文檔集合中抽取出四類主題,每類主題下有對應主題的主題詞,而每篇文檔都或多或少的會使用這些主題對應的主題詞來構建文檔,而這些主題詞就是文檔的關鍵詞。


LDA主題模型實例

圖3:LDA主題模型實例

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容