自然語言處理
自然語言處理(英語:Natural Language Processing,縮寫為NLP)是人工智慧和語言學領域的分支學科。此領域探討如何處理及運用自然語言;自然語言處理包括多方面和步驟,基本有認知、理解、生成等部分。
自然語言認知和理解是讓電腦把輸入的語言變成有意思的符號和關係,然後根據目的再處理。讓AI理解人類,應用有理解意圖,解析語義,識別情緒,搜索推薦
自然語言生成系統則是把計算機數據轉化為自然語言。讓AL能被人類理解,應用有文本摘要,情感生成,話題展開,情感對話
研究方向:
文本預處理
文本預處理的步驟:
文本提取。對於一些開放語料庫,可能有其獨特的數據格式,需要我們按照其提示編寫代碼獲取語料。對於一些我們自己獲得的語料,我們需要將其轉化為純文本格式。
分詞。分詞就是我們把整個文檔集中的文檔劃分成一個個的詞語,形成我們的語料庫。然後使用不同的詞來描述不同的文檔。
去除停用詞。分詞完成後,有些詞是無意義的,我們稱之為停用詞,在處理中我們將其去掉。
使用詞標籤(id)來表示文檔。 自然語言處理中,文檔的表示不是人們看到的單詞的形式,而是用一個個的標籤(id)來表示詞,然後組成一篇文檔。
詞袋模型
詞袋模型(Bag-of-words model)是個在自然語言處理和信息檢索(IR)下被簡化的表達模型。此模型下,一段文本(比如一個句子或是一個文檔)可以用一個裝著這些詞的袋子來表示,這種表示方式不考慮文法以及詞的順序。最近詞袋模型也被應用在電腦視覺領域。
詞袋模型被廣泛應用在文件分類,詞出現的頻率可以用來當作訓練分類器的特徵。
以下是兩個簡單的文件:
(1) John likes to watch movies. Mary likes movies too.
(2) John also likes to watch football games.
基於以上兩個文件,可以建構出下列清單:
["John","likes","to","watch","movies","also","football","games","Mary","too"]
此處有10個不同的詞,使用清單的索引表示長度為10的向量:
(1) [1, 2, 1, 1, 2, 0, 0, 0, 1, 1]
(2) [1, 1, 1, 1, 0, 1, 1, 1, 0, 0]
每個向量的索引內容對應到清單中詞出現的次數。
舉例來說,第一個向量(文件一)前兩個內容索引是1和2,第一個索引內容是"John"對應到清單第一個詞並且該值設定為1,因為"John"出現一次。
Q1、為什麼要去除重複的詞? 沒有
Q2、為什麼會造成語義丟失?此向量表示法不會保存原始句子中詞的順序。
主題模型
關鍵詞匹配文檔檢索出現的問題
問題一:同義詞問題
我們知道,無論在英語還是漢語中,一個詞語或一個單詞都存在同義詞,比如愉悅和開心,那麼通過關鍵詞檢索愉悅,就只能找到包含愉悅這兩個字的文檔,而不能找到包含開心但不包含愉悅的文檔。撇開同義詞,當我們檢索賈伯斯,我們可能也想檢索到關於iphone的相關信息,但僅通過關鍵詞匹配,不能檢索到。
使用LSA模型可以解決。
問題二:一詞多義問題
我們知道,無論在英語還是漢語中都存在一詞多義問題,比如「蘋果」,到底指的是一種水果還是一個手機品牌,除非給定上下文語境否則我們不得而知。這樣僅通過關鍵詞匹配,檢索到的含義可能不是我們想要的。撇開一詞多義,文檔中可能存在很多詞語屬於拼寫打字錯誤(粗心)、誤用(語文沒學好)、巧合(比如「和服裝」,這裡的和服不是一個詞語,但關鍵詞匹配會檢索到),更甚,文檔中可能存在大量廣告信息,人為植入這些關鍵詞,這些都不是我們想要的。
使用PLSA和LDA模型可以解決。
LSA潛在語義分析模型
潛在語義分析(LSA)是自然語言處理中的一種技術,目的是要找出詞(terms)在文檔和查詢中真正的含義,也就是潛在語義,通過產生與文檔和術語相關的一組概念來分析一組文檔與它們包含的術語之間的關係。LSA假設意義上接近的單詞將出現在相似的文本中(分布式假設)。
每個段落包含單詞計數的矩陣(行代表唯一的單詞,列代表每個段落)是由一大段文本和奇異值分解(SVD)的數學技術構成的用於減少行數,同時保留列之間的相似性結構。然後通過取任意兩行形成的兩個矢量(或兩個矢量的歸一化之間的點積)之間的角度的餘弦來比較單詞。接近1的值表示非常相似的單詞,而接近0的值表示非常不相似的單詞。
LSA試圖利用文檔中隱藏的潛在的概念來進行文檔分析與檢索,能夠達到比直接的關鍵詞匹配獲得更好的效果。該方法和傳統向量空間模型(vector space model)一樣使用向量來表示詞(terms)和文檔(documents),並通過向量間的關係(如夾角)來判斷詞及文檔間的關係;而不同的是,LSA將詞和文檔映射到潛在語義空間,從而去除了原始向量空間中的一些「噪音」,提高了信息檢索的精確度。
步驟為:
1.分析文檔集合,建立Term-Document矩陣。
2. 對Team-Document矩陣進行奇異值分解。
3. 對SVD分解後的矩陣進行降維,也就是奇異值分解一節所提到的低階近似。
4. 使用降維後的矩陣構建潛在語義空間,或重建Term-Document矩陣。
左奇異向量表示詞的一些特性,右奇異向量表示文檔的一些特性,中間的奇異值矩陣表示左奇異向量的一行與右奇異向量的一列的重要程序,數字越大越重要。
PLSA概率潛在語義分析
語義分析問題中,存在同義詞和一詞多義這兩個嚴峻的問題,LSA可以很好的解決同義詞問題,卻無法妥善處理一詞多義問題。
PLSA則可以同時解決同義詞和一詞多義兩個問題。
PLSA(Probabilistic Latent Semantic Analysis, 概率潛在語義分析)由LSA發展而來。LSA使用線性代數方法,對document-word矩陣進行SVD分解。PLSA則使用了一個概率圖模型,引入了一個隱變量topic(可以認為是文檔的主題),然後進行統計推斷。
假設 Z 的取值共有 K 個。PLSA模型假設的文檔生成過程如下:
以 p(di) 的概率選擇一個文檔 di
以 p(zk|di) 的概率選擇一個主題 zk
以 p(wj|zk) 的概率生成一個單詞 wj
根據圖模型,我們就得到觀測數據的聯合分布:
由於P(di)可事先計算求出,而P(ωj|zk)和P(zk|di)未知,所以φ=(P(ωj|zk),P(zk|di))就是我們要估計的參數(值),通俗點說,就是要最大化這個φ 。
最大化目標後,我們得到兩個矩陣 λ和θ,"λ" _?k表示參數 p(zk|di),"θ" _??表示參數 p(wj|zk), 用 p[i,j,k] 表示隱藏變量的後驗概率 p(zk|di,wj)。
步驟:
經過統計,我們得到docement-word矩陣,行N是文檔個數,列M是單詞個數,元素是某個單詞在某篇文檔中出現的次數。在例子中,我們的N是16,M是275.
我們定義兩個矩陣 λ和 θ。 λ矩陣是i行k列的矩陣,裡面的元素是P(zk|di)的值, θ是k行j列的矩陣,裡面的元素是P(wj|zk)的值。其中,i代表文檔數,k代表主題數,j代表單詞數。分別對這兩個矩陣進行初始化和歸一化。
定義p[i,j,k]矩陣表示P(zk|di,wj)的值,元素為λik與θkj的乘積。該矩陣主要用於求解另外兩個矩陣的最大化,應用中無意義。
使用EM算法對p[i,j,k]矩陣進行最大化處理,設置迭代次數。
最後,從θ矩陣中提取每個主題的詞,從λ矩陣中提取文檔對應的主題。
3.3 LDA隱含狄利克雷分布
隱含狄利克雷分布(英語:Latent Dirichlet allocation,簡稱LDA),是一種主題模型,它可以將文檔集中每篇文檔的主題按照概率分布的形式給出。同時它是一種無監督學習算法,在訓練時不需要手工標註的訓練集,需要的僅僅是文檔集以及指定主題的數量k即可。此外LDA的另一個優點則是,對於每一個主題均可找出一些詞語來描述它。
LDA首先由Blei, David M.、吳恩達和Jordan, Michael I於2003年提出,目前在文本挖掘領域包括文本主題識別、文本分類以及文本相似度計算方面都有應用。
LDA是一種典型的詞袋模型,即它認為一篇文檔是由一組詞構成的一個集合,詞與詞之間沒有順序以及先後的關係。一篇文檔可以包含多個主題,文檔中每一個詞都由其中的一個主題生成。
其中,φ表示詞分布,θ表示主題分布,α是主題分布θ的先驗分布(即Dirichlet分布)的參數,β是詞分布φ的先驗分布(即Dirichlet分布)的參數,N表示文檔的單詞總數,M表示文檔的總數。
所以,對於一篇文檔d中的每一個單詞,LDA根據先驗知識確定某篇文檔的主題分布θ,然後從該文檔所對應的多項分布(主題分布)θ中抽取一個主題z,接著根據先驗知識確定當前主題的詞語分布φ,然後從主題z所對應的多項分布(詞分布)φ中抽取一個單詞w。然後將這個過程重複N次,就產生了文檔d。
綜上,LDA真的只是PLSA的貝葉斯版本,文檔生成後,兩者都要根據文檔去推斷其主題分布和詞語分布(即兩者本質都是為了估計給定文檔生成主題,給定主題生成詞語的概率),只是用的參數推斷方法不同,在pLSA中用極大似然估計的思想去推斷兩未知的固定參數,而LDA則把這兩參數弄成隨機變量,且加入dirichlet先驗。
所以,PLSA跟LDA的本質區別就在於它們去估計未知參數所採用的思想不同,前者用的是頻率派思想,後者用的是貝葉斯派思想