當前位置:首頁 » 操作系統 » 文本分類演算法研究

文本分類演算法研究

發布時間: 2022-09-25 08:50:34

① 文本分類和聚類有什麼區別

文本分類和聚類有什麼區別
簡單點說:分類是將一篇文章或文本自動識別出來,按照已經定義好的類別進行匹配,確定。聚類就是將一組的文章或文本信息進行相似性的比較,將比較相似的文章或文本信息歸為同一組的技術。分類和聚類都是將相似對象歸類的過程。區別是,分類是事先定義好類別,類別數不變。分類器需要由人工標注的分類訓練語料訓練得到,屬於有指導學習范疇。聚類則沒有事先預定的類別,類別數不確定。聚類不需要人工標注和預先訓練分類器,類別在聚類過程中自動生成。分類適合類別或分類體系已經確定的場合,比如按照國圖分類法分類圖書;聚類則適合不存在分類體系、類別數不確定的場合,一般作為某些應用的前端,比如多文檔文摘、搜索引擎結果後聚類(元搜索)等。
分類(classification )是找出描述並區分數據類或概念的模型(或函數),以便能夠使用模型預測類標記未知的對象類。分類技術在數據挖掘中是一項重要任務,目前商業上應用最多。分類的目的是學會一個分類函數或分類模型(也常常稱作分類器),該模型能把資料庫中的數據項映射到給定類別中的某一個類中。
要構造分類器,需要有一個訓練樣本數據集作為輸入。訓練集由一組資料庫記錄或元組構成,每個元組是一個由有關欄位(又稱屬性或特徵)值組成的特徵向量,此外,訓練樣本還有一個類別標記。一個具體樣本的形式可表示為:(v1,v2,...,vn; c);其中vi表示欄位值,c表示類別。分類器的構造方法有統計方法、機器學習方法、神經網路方法等等。
不同的分類器有不同的特點。有三種分類器評價或比較尺度:1)預測准確度;2)計算復雜度;3)模型描述的簡潔度。預測准確度是用得最多的一種比較尺度,特別是對於預測型分類任務。計算復雜度依賴於具體的實現細節和硬體環境,在數據挖掘中,由於操作對象是巨量的數據,因此空間和時間的復雜度問題將是非常重要的一個環節。對於描述型的分類任務,模型描述越簡潔越受歡迎。
另外要注意的是,分類的效果一般和數據的特點有關,有的數據雜訊大,有的有空缺值,有的分布稀疏,有的欄位或屬性間相關性強,有的屬性是離散的而有的是連續值或混合式的。目前普遍認為不存在某種方法能適合於各種特點的數據
聚類(clustering)是指根據「物以類聚」原理,將本身沒有類別的樣本聚集成不同的組,這樣的一組數據對象的集合叫做簇,並且對每一個這樣的簇進行描述的過程。它的目的是使得屬於同一個簇的樣本之間應該彼此相似,而不同簇的樣本應該足夠不相似。與分類規則不同,進行聚類前並不知道將要劃分成幾個組和什麼樣的組,也不知道根據哪些空間區分規則來定義組。其目的旨在發現空間實體的屬性間的函數關系,挖掘的知識用以屬性名為變數的數學方程來表示。聚類技術正在蓬勃發展,涉及范圍包括數據挖掘、統計學、機器學習、空間資料庫技術、生物學以及市場營銷等領域,聚類分析已經成為數據挖掘研究領域中一個非常活躍的研究課題。常見的聚類演算法包括:K-均值聚類演算法、K-中心點聚類演算法、CLARANS、BIRCH、CLIQUE、DBSCAN等。關鍵詞:文本分類 文本聚類 數據挖掘 機器學習

② 文本分類的方法

文本分類問題與其它分類問題沒有本質上的區別,其方法可以歸結為根據待分類數據的某些特徵來進行匹配,當然完全的匹配是不太可能的,因此必須(根據某種評價標准)選擇最優的匹配結果,從而完成分類。 後來人們意識到,究竟依據什麼特徵來判斷文本應當隸屬的類別這個問題,就連人類自己都不太回答得清楚,有太多所謂「只可意會,不能言傳」的東西在裡面。人類的判斷大多依據經驗以及直覺,因此自然而然的會有人想到何讓機器像人類一樣自己來通過對大量同類文檔的觀察來自己總結經驗,作為今後分類的依據。這便是統計學習方法的基本思想。
統計學習方法需要一批由人工進行了准確分類的文檔作為學習的材料(稱為訓練集,注意由人分類一批文檔比從這些文檔中總結出准確的規則成本要低得多),計算機從這些文檔中挖掘出一些能夠有效分類的規則,這個過程被形象的稱為訓練,而總結出的規則集合常常被稱為分類器。訓練完成之後,需要對計算機從來沒有見過的文檔進行分類時,便使用這些分類器來進行。這些訓練集包括sogou文本分類分類測試數據、中文文本分類分類語料庫,包含Arts、Literature等類別的語料文本、可用於聚類的英文文本數據集、網易分類文本分類文本數據、tc-corpus-train(語料庫訓練集,適用於文本分類分類中的訓練)、2002年中文網頁分類訓練集CCT2002-v1.1等。
現如今,統計學習方法已經成為了文本分類領域絕對的主流。主要的原因在於其中的很多技術擁有堅實的理論基礎(相比之下,知識工程方法中專家的主觀因素居多),存在明確的評價標准,以及實際表現良好。統計分類演算法
將樣本數據成功轉化為向量表示之後,計算機才算開始真正意義上的「學習」過程。常用的分類演算法為:
決策樹,Rocchio,樸素貝葉斯,神經網路,支持向量機,線性最小平方擬合,kNN,遺傳演算法,最大熵,Generalized Instance Set等。在這里只挑幾個最具代表性的演算法侃一侃。
Rocchio演算法
Rocchio演算法應該算是人們思考文本分類問題時最先能想到,也最符合直覺的解決方法。基本的思路是把一個類別里的樣本文檔各項取個平均值(例如把所有 「體育」類文檔中詞彙「籃球」出現的次數取個平均值,再把「裁判」取個平均值,依次做下去),可以得到一個新的向量,形象的稱之為「質心」,質心就成了這 個類別最具代表性的向量表示。再有新文檔需要判斷的時候,比較新文檔和質心有多麼相像(八股點說,判斷他們之間的距離)就可以確定新文檔屬不屬於這個類。 稍微改進一點的Rocchio演算法不僅考慮屬於這個類別的文檔(稱為正樣本),也考慮不屬於這個類別的文檔數據(稱為負樣本),計算出來的質心盡量靠近正樣本同時盡量遠離負樣本。Rocchio演算法做了兩個很致命的假設,使得它的性能出奇的差。一是它認為一個類別的文檔僅僅聚集在一個質心的周圍,實際情況往往不是如此(這樣的數據稱為線性不可分的);二是它假設訓練數據是絕對正確的,因為它沒有任何定量衡量樣本是否含有雜訊的機制,因而也就對錯誤數據毫無抵抗力。
不過Rocchio產生的分類器很直觀,很容易被人類理解,演算法也簡單,還是有一定的利用價值的,常常被用來做科研中比較不同演算法優劣的基線系統(Base Line)。
樸素貝葉斯演算法
貝葉斯演算法關注的是文檔屬於某類別概率。文檔屬於某個類別的概率等於文檔中每個詞屬於該類別的概率的綜合表達式。而每個詞屬於該類別的概率又在一定程度上 可以用這個詞在該類別訓練文檔中出現的次數(詞頻信息)來粗略估計,因而使得整個計算過程成為可行的。使用樸素貝葉斯演算法時,在訓練階段的主要任務就是估計這些值。
樸素貝葉斯演算法的公式並不是只有一個。
首先對於每一個樣本中的元素要計算先驗概率。其次要計算一個樣本對於每個分類的概率,概率最大的分類將被採納。所以
其中P(d| Ci)=P(w1|Ci) P(w2|Ci) …P(wi|Ci) P(w1|Ci) …P(wm|Ci) (式1)
P(w|C)=元素w在分類為C的樣本中出現次數/數據整理後的樣本中元素的總數(式2)
這其中就蘊含著樸素貝葉斯演算法最大的兩個缺陷。
首先,P(d| Ci)之所以能展開成(式1)的連乘積形式,就是假設一篇文章中的各個詞之間是彼此獨立的,其中一個詞的出現絲毫不受另一個詞的影響(回憶一下概率論中變 量彼此獨立的概念就可以知道),但這顯然不對,即使不是語言學專家的我們也知道,詞語之間有明顯的所謂「共現」關系,在不同主題的文章中,可能共現的次數 或頻率有變化,但彼此間絕對談不上獨立。
其二,使用某個詞在某個類別訓練文檔中出現的次數來估計P(wi|Ci)時,只在訓練樣本數量非常多的情況下才比較准確(考慮扔硬幣的問題,得通過大量觀 察才能基本得出正反面出現的概率都是二分之一的結論,觀察次數太少時很可能得到錯誤的答案),而需要大量樣本的要求不僅給前期人工分類的工作帶來更高要求 (從而成本上升),在後期由計算機處理的時候也對存儲和計算資源提出了更高的要求。
但是稍有常識的技術人員都會了解,數據挖掘中佔用大量時間的部分是數據整理。在數據整理階段,可以根據詞彙的情況生成字典,刪除冗餘沒有意義的詞彙,對於單字和重要的片語分開計算等等。
這樣可以避免樸素貝葉斯演算法的一些問題。其實真正的問題還是存在於演算法對於信息熵的計算方式。
樸素貝葉斯演算法在很多情況下,通過專業人員的優化,可以取得極為良好的識別效果。最為人熟悉的兩家跨國軟體公司在目前仍採用樸素貝葉斯演算法作為有些軟體自然語言處理的工具演算法。
kNN演算法
最近鄰演算法(kNN):在給定新文檔後,計算新文檔特徵向量和訓練文檔集中各個文檔的向量的相似度,得到K篇與該新文 檔距離最近最相似的文檔,根據這K篇文檔所屬的類別判定新文檔所屬的類別(注意這也意味著kNN演算法根本沒有真正意義上的「訓練」階段)。這種判斷方法很 好的克服了Rocchio演算法中無法處理線性不可分問題的缺陷,也很適用於分類標准隨時會產生變化的需求(只要刪除舊訓練文檔,添加新訓練文檔,就改變了 分類的准則)。
kNN唯一的也可以說最致命的缺點就是判斷一篇新文檔的類別時,需要把它與現存的所有訓練文檔全都比較一遍,這個計算代價並不是每個系統都能夠承受的(比 如我將要構建的一個文本分類系統,上萬個類,每個類即便只有20個訓練樣本,為了判斷一個新文檔的類別,也要做20萬次的向量比較!)。一些基於kNN的 改良方法比如Generalized Instance Set就在試圖解決這個問題。
kNN也有另一個缺點,當樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本佔多數。 SVM(Support Vector Machine)是Cortes和Vapnik於1995年首先提出的,它在解決小樣本、非線性及高維模式識別中表現出許多特有的優勢,並能夠推廣應用到函數擬合等其他機器學習問題中。
支持向量機方法是建立在統計學習理論的VC維理論和結構風險最小原理基礎上的,根據有限的樣本信息在模型的復雜性(即對特定訓練樣本的學習精度,Accuracy)和學習能力(即無錯誤地識別任意樣本的能力)之間尋求最佳折衷,以期獲得最好的推廣能力(或稱泛化能力)。
SVM 方法有很堅實的理論基礎,SVM 訓練的本質是解決一個二次規劃問題(Quadruple Programming,指目標函數為二次函數,約束條件為線性約束的最優化問題),得到的是全局最優解,這使它有著其他統計學習技術難以比擬的優越性。 SVM分類器的文本分類效果很好,是最好的分類器之一。同時使用核函數將 原始的樣本空間向高維空間進行變換,能夠解決原始樣本線性不可分的問題。其缺點是核函數的選擇缺乏指導,難以針對具體問題選擇最佳的核函數;另外SVM 訓練速度極大地受到訓練集規模的影響,計算開銷比較大,針對SVM 的訓練速度問題,研究者提出了很多改進方法,包括Chunking 方法、Osuna演算法、SMO 演算法和交互SVM 等。SVM分類器的優點在於通用性較好,且分類精度高、分類速度快、分類速度與訓練樣本個數無關,在查准和查全率方面都略優於kNN及樸素貝葉斯方法。

③ NLP之文本分類

作為NLP領域最經典的使用場景之一,文本分類積累了許多的實現方法。這里我們根據是否使用深度學習方法將文本分類主要分為一下兩個大類:

隨著統計學習方法的發展,特別是在90年代後互聯網在線文本數量增長和機器學習學科的興起,逐漸形成了一套解決大規模文本分類問題的經典玩法,這個階段的主要套路是人工特徵工程+淺層分類模型。整個文本分類問題就拆分成了 特徵工程 分類器 兩部分。

這里的特徵工程也就是將文本表示為計算機可以識別的、能夠代表該文檔特徵的特徵矩陣的過程。在基於傳統機器學習的文本分類中,我們通常將特徵工程分為 文本預處理、特徵提取、文本表示 等三個部分。

文本預處理過程是提取文本中的關鍵詞來表示文本的過程 。中文文本預處理主要包括 文本分詞 去停用詞 兩個階段。
文本分詞 ,是因為很多研究表明特徵粒度為詞粒度遠好於字粒度(其實很好理解,因為大部分分類演算法不考慮詞序信息,基於字粒度顯然損失了過多「n-gram」信息)。具體到中文分詞,不同於英文有天然的空格間隔,需要設計復雜的分詞演算法。傳統分詞演算法主要有 基於字元串匹配的正向/逆向/雙向最大匹配 基於理解的句法和語義分析消歧 基於統計的互信息/CRF方法 。近年來隨著深度學習的應用, WordEmbedding + Bi-LSTM+CRF方法 逐漸成為主流,本文重點在文本分類,就不展開了。
停止詞 文本中一些高頻的代詞、連詞、介詞等對文本分類無意義的詞 ,通常維護一個停用詞表,特徵提取過程中刪除停用表中出現的詞,本質上屬於特徵選擇的一部分。

特徵提取包括 特徵選擇 特徵權重計算 兩部分。
特徵選擇的基本思路 根據某個評價指標獨立的對原始特徵項(詞項)進行評分排序,從中選擇得分最高的一些特徵項,過濾掉其餘的特徵項 。常用的評價有:文檔頻率、互信息、信息增益、χ²統計量等。
特徵權重計算 主要是經典的TF-IDF方法及其擴展方法。 TF-IDF的主要思想 一個詞的重要度與在類別內的詞頻成正比,與所有類別出現的次數成反比

文本表示的目的是把文本預處理後的轉換成計算機可理解的方式,是決定文本分類質量最重要的部分。傳統做法常用 詞袋模型 (BOW, Bag Of Words)或 向量空間模型 (Vector Space Model),最大的 不足 是忽略文本上下文關系,每個詞之間彼此獨立,並且無法表徵語義信息。

大部分機器學習方法都在文本分類領域有所應用,比如樸素貝葉斯分類演算法(Naïve Bayes)、KNN、SVM、最大熵和神經網路等等。

FastText 是Facebook AI Research在16年開源的一種文本分類器。 其 特點 就是 fast 。相對於其它文本分類模型,如 SVM Logistic Regression 等模型,fastText能夠在保持分類效果的同時,大大縮短了訓練時間。

FastText方法包含三部分, 模型架構 層次SoftMax N-gram特徵

FastText模型架構和 Word2Vec 中的 CBOW 模型很類似,因為它們的作者都是Facebook的科學家Tomas Mikolov。不同之處在於,FastText 預測標簽 ,而CBOW 模型 預測中間詞

TextCNN 是利用卷積神經網路對文本進行分類的演算法,它是由 Yoon Kim 在2014年在 「 Convolutional Neural Networks for Sentence Classification 」 一文中提出的。詳細的原理圖如下。

特徵 :這里的特徵就是詞向量,有 靜態(static) 非靜態(non-static) 方式。static方式採用比如word2vec預訓練的詞向量,訓練過程不更新詞向量,實質上屬於遷移學習了,特別是數據量比較小的情況下,採用靜態的詞向量往往效果不錯。non-static則是在訓練過程中更新詞向量。推薦的方式是 non-static 中的 fine-tunning方式,它是以預訓練(pre-train)的word2vec向量初始化詞向量,訓練過程中調整詞向量,能加速收斂,當然如果有充足的訓練數據和資源,直接隨機初始化詞向量效果也是可以的。

通道(Channels) :圖像中可以利用 (R, G, B) 作為不同channel,而文本的輸入的channel通常是不同方式的embedding方式(比如 word2vec或Glove),實踐中也有利用靜態詞向量和fine-tunning詞向量作為不同channel的做法。

一維卷積(conv-1d) :圖像是二維數據,經過詞向量表達的文本為一維數據,因此在TextCNN卷積用的是一維卷積。一維卷積帶來的問題是需要設計通過不同 filter_size 的 filter 獲取不同寬度的視野。

Pooling層: 利用CNN解決文本分類問題的文章還是很多的,比如這篇 A Convolutional Neural Network for Modelling Sentences 最有意思的輸入是在 pooling 改成 (dynamic) k-max pooling,pooling階段保留 k 個最大的信息,保留了全局的序列信息。

參考文獻

④ 技術 | 文本聚類與分類

按照處理的對象和處理的方法不同,可將常見文本分類/聚類任務分為以下幾種:

① 文檔聚類: 把一組未知類別的文檔劃分為若干類別,例如將介紹奧運會的新聞都歸到某一類;

② 文檔分類: 給定一個文檔,將其劃分到預定義好的某一個類別中,例如將所有介紹奧運會的新聞都標記為「體育」;

③ 詞彙聚類: 把一組未知類別的詞彙劃分為若干類別,例如將各種運動的項目名稱(詞彙)都歸為一類;

④ 詞彙分類: 給定一個詞彙,將其劃分到預定義好的某一個類別中,例如將籃球、足球等都比較為球類,將打獵、射箭等都標記為射擊。

要實現上述目的,通常有以下幾個核心問題要解決:

1. 特徵選擇

1.1 用什麼作為特徵項

用於表示文本的基本單位通常稱為文本的特徵或特徵項。特徵項必須滿足:能夠標識文本內容、能夠將目標文本與其他文本相區分、個數不能太多、特徵項分離要比較容易實現。在中文文本中可以採用字、詞或短語作為表示文本的特徵項。

相比較而言,詞比字具有更強的表達能力,而詞和短語相比,詞的切分難度比短語的切分難度小得多。因此,目前大多數中文文本分類系統都採用詞作為特徵項,稱作特徵詞。這些特徵詞作為文檔的中間表示形式,用來實現文檔與文檔、文檔與用戶目標之間的相似度計算 。

1.2 選取哪些作為特徵項

如果把所有的詞都作為特徵項,那麼特徵向量的維數將過於巨大,從而導致計算量太大,在這樣的情況下,要完成文本分類幾乎是不可能的。特徵提取的主要功能是在不損傷文本核心信息的情況下盡量減少要處理的單詞數,以此來降低向量空間維數,從而簡化計算,提高文本處理的速度和效率。

特徵選取的方式有2種:用映射或變換的方法把原始特徵變換為較少的新特徵(將原始特徵用新特徵表示);從原始特徵中挑選出一些最具代表性的特徵(只保留部分原始特徵,不產生新特徵),即根據某個特徵評估函數計算各個特徵的評分值,然後按評分值對這些特徵進行排序,選取若干個評分值最高的作為特徵詞,常見的特徵評估函數包括TF-IDF、信息增益、互信息等。

2. 文本表示

2.1 如何表示文檔

為了讓計算機能夠「計算」文本,就需要我們將文本數據轉換成計算機可以處理的結構化數據。常見的文本表示模型有布爾模型、向量空間模型、統計主題模型等。其中,向量空間模型概念簡單,把對文本內容的處理簡化為向量空間中的向量運算,並且它以空間上的相似度表達語義的相似度,直觀易懂,目前應用最廣。

2.2 如何確立權重

一篇文檔有很多詞,有些詞表達的語義很重要,有些相對次要,那麼如何確定哪些重要?哪些次要呢?因此,需要進一步對每個詞的重要性進行度量。常見的確立詞彙權重的演算法有TF-IDF、詞頻法等。

3. 相似性計算

要實現文本的分類和聚類,需要設計一種演算法計算出文檔與文檔、詞彙與詞彙之間的相似性。

3.1 文檔相似性

設定我們要比較X和Y間的差異,它們都包含了N個維的特徵,即X=(x1, x2, x3, … xn),Y=(y1, y2, y3, … yn)。下面來看看主要可以用哪些方法來衡量兩者的差異,主要分為距離度量和相似度度量。

a. 距離度量

距離度量(Distance)用於衡量個體在空間上存在的距離,距離越遠說明個體間的差異越大。常見的距離有歐幾里得距離(Euclidean Distance)、明可夫斯基距離(Minkowski Distance)、曼哈頓距離(Manhattan Distance)、切比雪夫距離(Chebyshev Distance)、馬哈拉諾比斯距離(Mahalanobis Distance)。

b. 相似性度量

相似度度量(Similarity),即計算個體間的相似程度,與距離度量相反,相似度度量的值越小,說明個體間相似度越小,差異越大。常見的相似性度量有向量空間餘弦相似度(Cosine Similarity)、皮爾森相關系數(Pearson Correlation Coefficient)、Jaccard相似系數(Jaccard Coefficient)、調整餘弦相似度(Adjusted Cosine Similarity)。

歐氏距離是最常見的距離度量,而餘弦相似度則是最常見的相似度度量,很多的距離度量和相似度度量都是基於這兩者的變形和衍生,所以下面重點比較下兩者在衡量個體差異時實現方式和應用環境上的區別。下面藉助三維坐標系來看下歐氏距離和餘弦相似度的區別:

從圖上可以看出距離度量衡量的是空間各點間的絕對距離,跟各個點所在的位置坐標(即個體特徵維度的數值)直接相關;而餘弦相似度衡量的是空間向量的夾角,更加的是體現在方向上的差異,而不是位置。如果保持A點的位置不變,B點朝原方向遠離坐標軸原點,那麼這個時候餘弦相似度cosθ是保持不變的,因為夾角不變,而A、B兩點的距離顯然在發生改變,這就是歐氏距離和餘弦相似度的不同之處。

根據歐氏距離和餘弦相似度各自的計算方式和衡量特徵,分別適用於不同的數據分析模型:歐氏距離能夠體現個體數值特徵的絕對差異,所以更多的用於需要從維度的數值大小中體現差異的分析,如使用用戶行為指標分析用戶價值的相似度或差異;而餘弦相似度更多的是從方向上區分差異,而對絕對的數值不敏感,更多的用於使用用戶對內容評分來區分用戶興趣的相似度和差異,同時修正了用戶間可能存在的度量標准不統一的問題(因為餘弦相似度對絕對數值不敏感)。

3.2 詞彙相似性

目前我接觸的常見詞彙相似性的方法有:

a. 傳統圖情領域:基於共現頻次這一基本統計量衍生出來的,如association strength、inclusion index、Jaccard』s coefficient、Salton』s cosine(Ochiia系數)等;

b. 計算機領域:一是基於語義詞典的方法,即依據詞典分類體系挖掘所包含的詞義知識,常用的詞典包括Wordnet、Hownet等;二是基於語料庫的方法,這里的語料庫較為多元,例如網路預料、唐詩宋詞預料等;;三是進行詞向量化,如Word2vec。

4. 文本分類/聚類演算法

有了文本表示方法,又有了計算相似性的公式,下一步就可以在此基礎上討論文本分類/聚類的演算法了。

4.1 文本分類

醫生對病人進行診斷就是一個典型的分類過程,任何一個醫生都無法直接看到病人的病情,只能觀察病人表現出的症狀和各種化驗檢測數據來推斷病情,這時醫生就好比一個分類器,而這個醫生診斷的准確率,與他當初受到的教育方式(構造方法)、病人的症狀是否突出(待分類數據的特性)以及醫生的經驗多少(訓練樣本數量)都有密切關系。

分類器是對樣本進行分類的方法的統稱,包含決策樹、邏輯回歸、樸素貝葉斯、神經網路等演算法。舉個例子:假如你想區分小明是好學生還是壞學生,那麼區分「好學生」和「壞學生」就是一個分類任務。

4.1.1 K最鄰近

「別和其他壞學生在一起,否則你也會和他們一樣。」 —— 家長

主要思想是通過離待預測樣本最近的K個樣本的類別來判斷當前樣本的類別。從K最近鄰演算法的角度來看,就是讓目標樣本與其他正樣本距離更近、與其他負樣本距離更遠,從而使得其近鄰中的正樣本比例更高,更大概率被判斷成正樣本。

4.1.2 樸素貝葉斯

「根據以往抓獲的情況來看,十個壞學生有九個愛打架。」 —— 教導主任

「十個壞學生有九個愛打架」就意味著「壞學生」打架的概率P(打架|壞學生)=0.9,假設根據訓導處歷史記錄壞學生占學生總數P(壞學生)=0.1、打架發生的概率是P(打架)=0.09,那麼這時如果發生打架事件,就可以通過貝葉斯公式判斷出當事學生是「壞學生」的概率P(壞學生|打架)=P(打架|壞學生)×P(壞學生)÷P(打架)=1.0,即該學生100%是「壞學生」。

4.1.3 決策樹

「先看抽不抽煙,再看染不染頭發,最後看講不講臟話。」 ——社區大媽

假設「抽煙」、「染發」和「講臟話」是社區大媽認為的區分「好壞」學生的三項關鍵特徵,那麼這樣一個有先後次序的判斷邏輯就構成一個決策樹模型。在決策樹中,最能區分類別的特徵將作為最先判斷的條件,然後依次向下判斷各個次優特徵。決策樹的核心就在於如何選取每個節點的最優判斷條件,也即特徵選擇的過程。

而在每一個判斷節點,決策樹都會遵循一套IF-THEN的規則:

IF 「抽煙」 THEN -> 「壞學生」 ELSE IF 「染發」 THEN -> 「壞學生」 ELSE IF 「講臟話」 THEN -> 「壞學生」 ELSE -> 「好學生」

4.1.4 邏輯回歸

「上課講話扣1分,不交作業扣2分,比賽得獎加5分。」 ——紀律委員

我們稱邏輯回歸為一種線性分類器,其特徵就在於自變數x和因變數y之間存在類似y=ax+b的一階的、線性的關系。假設「上課講話」、「不交作業」和「比賽得獎」的次數分別表示為x1、x2、和x3,且每個學生的基礎分為0,那麼最終得分y=-1 x1-2 x2+5*x3+0。其中-1、-2和5分別就對應於每種行為在「表現好」這一類別下的權重。

對於最終得分y,邏輯回歸還通過Sigmoid函數將其變換到0-1之間,其含義可以認為是當前樣本屬於正樣本的概率,即得分y越高,屬於「表現好」的概率就越大。也就是說,假如紀律委員記錄了某位同學分別「上課講話」、「不交作業」和「比賽得獎」各一次,那麼最終得分y=-2-1+5=2,而對2進行Sigmoid變換後約等於0.88,即可知該同學有88%的概率為「好學生」。

4.1.5 支持向量機

「我想個辦法把表現差的學生都調到最後一排。」 ——班主任

支持向量機致力於在正負樣本的邊界上找到一條分割界線(超平面),使得它能完全區分兩類樣本的同時,保證劃分出的間隔盡量的大。如果一條分割界線無法完全區分(線性不可分),要麼加上鬆弛變數進行適當的容忍,要麼通過核函數對樣本進行空間上的映射後再進行劃分。對於班主任來講,調換學生們的座位就相當於使用了核函數,讓原本散落在教室里的「好」、「壞」學生從線性不可分變得線性可分了。

4.2 文本聚類

4.2.1 基於分層的聚類

hierarchical methods: 對數據集進行逐層分解,直到滿足某種條件為止。可分為「自底向上」和「自頂向下」兩種。例如「自底向上」指初始時每個數據點組成一個單獨的組,在接下來的迭代中,按一定的距離度量將相互鄰近的組合並成一個組,直至所有的記錄組成一個分組或者滿足某個條件為止。代表演算法有:BIRCH,CURE,CHAMELEON等。自底向上的凝聚層次聚類如下圖所示。

4.2.2 基於劃分的聚類

partitioning methods: 給定包含N個點的數據集,劃分法將構造K個分組,每個分組代表一個聚類,這里每個分組至少包含一個數據點,每個數據點屬於且僅屬於一個分組。對於給定的K值,演算法先給出一個初始的分組方法,然後通過反復迭代的方法改變分組,使得每一次改進之後的分組方案較前一次好,這里好的標准在於同一組中的點越近越好,不同組中的點越遠越好。代表演算法有:K-means,K-medoids,CLARANS。K-means聚類過程圖解如下:

4.2.3 基於密度的聚類

density-based methods: 基於密度的方法的特點是不依賴於距離,而是依賴於密度,從而克服基於距離的演算法只能發現「球形」聚簇的缺點。其核心思想在於只要一個區域中點的密度大於某個閾值,就把它加到與之相近的聚類中去。代表演算法有:DBSCAN,OPTICS,DENCLUE,WaveCluster。DBSCAN的聚簇生成過程的簡單理解如下圖。

4.2.3 基於網格的聚類

gird-based methods: 這種方法通常將數據空間劃分成有限個單元的網格結構,所有的處理都是以單個的單元為對象。這樣做起來處理速度很快,因為這與數據點的個數無關,而只與單元個數有關。代表演算法有:STING,CLIQUE,WaveCluster。基於Clique的聚類過程可直觀如下圖進行理解。

4.2.4 基於模型的聚類

model-based methods: 基於模型的方法給每一個聚類假定一個模型,然後去尋找能很好的擬合模型的數據集。模型可能是數據點在空間中的密度分布函數或者其它。這樣的方法通常包含的潛在假設是:數據集是由一系列的潛在概率分布生成的。通常有兩種嘗試思路:統計學方法和神經網路方法。其中,統計學方法有COBWEB演算法、GMM(Gaussian Mixture Model),神經網路演算法有SOM(Self Organized Maps)演算法。下圖是GMM過程的一個簡單直觀地理解。

4.2.5 基於圖論的聚類

圖論聚類方法解決的第一步是建立與問題相適應的圖,圖的節點對應於被分析數據的最小單元,圖的邊(或弧)對應於最小處理單元數據之間的相似性度量。因此,每一個最小處理單元數據之間都會有一個度量表達,這就確保了數據的局部特性比較易於處理。圖論聚類法是以樣本數據的局域連接特徵作為聚類的主要信息源,因而其主要優點是易於處理局部數據的特性。典型演算法有譜聚類。

聚類問題的研究不僅僅局限於上述的硬聚類,即每一個數據只能被歸為一類,模糊聚類也是聚類分析中研究較為廣泛的一個分支。模糊聚類通過隸屬函數來確定每個數據隸屬於各個簇的程度,而不是將一個數據對象硬性地歸類到某一簇中。目前已有很多關於模糊聚類的演算法被提出,如著名的FCM演算法等。

⑤ NLP基礎知識和綜述

一種流行的自然語言處理庫、自帶語料庫、具有分類,分詞等很多功能,國外使用者居多,類似中文的jieba處理庫

為單詞序列分配概率的模型就叫做語言模型。

通俗來說, 語言模型就是這樣一個模型:對於任意的詞序列,它能夠計算出這個序列是一句話的概率。或者說語言模型能預測單詞序列的下一個詞是什麼。

** n-gram Language Models **

N-gram模型是一種典型的統計語言模型(Language Model,LM),統計語言模型是一個基於概率的判別模型.統計語言模型把語言(詞的序列)看作一個隨機事件,並賦予相應的概率來描述其屬於某種語言集合的可能性。給定一個詞彙集合 V,對於一個由 V 中的詞構成的序列S = ⟨w1, · · · , wT ⟩ ∈ Vn,統計語言模型賦予這個序列一個概率P(S),來衡量S 符合自然語言的語法和語義規則的置信度。用一句簡單的話說,統計語言模型就是計算一個句子的概率大小的這種模型。

n-gram模型可以減輕單詞序列沒有在訓練集中出現過而引起的問題,即數據稀疏問題

n-gram模型問題
對於n-gram模型的問題,這兩頁ppt說的很明白

N-gram模型基於這樣一種假設,當前詞的出現只與前面N-1個詞相關,而與其它任何詞都不相關,整句的概率就是各個詞出現概率的乘積。這些概率可以通過直接從語料中統計N個詞同時出現的次數得到。常用的是二元的Bi-Gram(N=2)和三元的Tri-Gram(N=3).Bi-Gram所滿足的假設是馬爾科夫假設。

一般常用的N-Gram模型是Bi-Gram和Tri-Gram。分別用公式表示如下:

Bi-Gram:P(T)=p(w1|begin) p(w2|w1) p(w3|w2)***p(wn|wn-1)

Tri-Gram:P(T)=p(w1|begin1,begin2) p(w2|w1,begin1) p(w3|w2w1)***p(wn|wn-1,wn-2)

注意上面概率的計算方法:P(w1|begin)=以w1為開頭的所有句子/句子總數;p(w2|w1)=w1,w2同時出現的次數/w1出現的次數。以此類推。

對於其中每項的計算舉個例子:

由上可見Bi-Gram計算公式中的begin一般都是加個<s>標簽。

N-gram存在的問題:

舉一個小數量的例子進行輔助說明:假設我們有一個語料庫(注意語料庫),如下:

老鼠真討厭,老鼠真丑,你愛老婆,我討厭老鼠。

想要預測「我愛老」這一句話的下一個字。我們分別通過 bigram 和 trigram 進行預測。

1)通過 bigram,便是要對 P(w|老)進行計算,經統計,「老鼠」出現了3次,「老婆」出現了1次,通過最大似然估計可以求得P(鼠|老)=0.75,P(婆|老)=0.25, 因此我們通過 bigram 預測出的整句話為: 我愛老鼠。

2)通過 trigram,便是要對便是要對 P(w|愛老)進行計算,經統計,僅「愛老婆」出現了1次,通過最大似然估計可以求得 P(婆|愛 老)=1,因此我們通過trigram 預測出的整句話為: 我愛老婆。顯然這種方式預測出的結果更加合理。

問題一:隨著 n 的提升,我們擁有了更多的前置信息量,可以更加准確地預測下一個詞。但這也帶來了一個問題,當N過大時很容易出現這樣的狀況:某些n-gram從未出現過, 導致很多預測概率結果為0, 這就是稀疏問題。 實際使用中往往僅使用 bigram 或 trigram 。(這個問題可以通過平滑來緩解參考: https://mp.weixin.qq.com/s/NvwB9H71JUivFyL_Or_ENA )

問題二:同時由於上個稀疏問題還導致N-gram無法獲得上下文的長時依賴。

問題三:n-gram 基於頻次進行統計,沒有足夠的泛化能力。

n-gram總結:統計語言模型就是計算一個句子的概率值大小,整句的概率就是各個詞出現概率的乘積,概率值越大表明該句子越合理。N-gram是典型的統計語言模型,它做出了一種假設,當前詞的出現只與前面N-1個詞相關,而與其它任何詞都不相關,整句的概率就是各個詞出現概率的乘積。它其中存在很多問題,再求每一個詞出現的概率時,隨著N的提升,能夠擁有更多的前置信息量,可以使得當前詞的預測更加准確,但是當N過大時會出現稀疏問題,導致很多詞的概率值為0,為解決這一問題,因此常用的為bigram 或 trigram,這就導致N-gram無法獲得上文的長時依賴。另一方面N-gram 只是基於頻次進行統計,沒有足夠的泛化能力。

神經網路語言模型

2003年 Bengio 提出,神經網路語言模型( neural network language model, NNLM)的思想是提出詞向量的概念,代替 ngram 使用離散變數(高維),採用連續變數(具有一定維度的實數向量)來進行單詞的分布式表示,解決了維度爆炸的問題,同時通過詞向量可獲取詞之間的相似性。

結合下圖可知它所建立的語言模型的任務是根據窗口大小內的上文來預測下一個詞,因此從另一個角度看它就是一個使用神經網路編碼的n-gram模型。

它是一個最簡單的神經網路,僅由四層構成,輸入層、嵌入層、隱藏層、輸出層。(從另一個角度看它就是一個使用神經網路編碼的n-gram模型)

輸入是單詞序列的index序列,例如單詞『這』在字典(大小為∣V∣)中的index是10,單詞『是』的 index 是23,『測』的 index 是65,則句子「這是測試」通過『這是測』預測『試』,窗口大小內上文詞的index序列就是 10, 23, 65。嵌入層(Embedding)是一個大小為∣V∣×K的矩陣(注意:K的大小是自己設定的,這個矩陣相當於隨機初始化的詞向量,會在bp中進行更新,神經網路訓練完成之後這一部分就是詞向量),從中取出第10、23、65行向量拼成3×K的矩陣就是Embedding層的輸出了。隱層接受拼接後的Embedding層輸出作為輸入,以tanh為激活函數,最後送入帶softmax的輸出層,輸出概率,優化的目標是使得待預測詞其所對應的softmax值最大。

缺點:因為這是通過前饋神經網路來訓練語言模型,缺點顯而易見就是其中的參數過多計算量較大,同時softmax那部分計算量也過大。另一方面NNLM直觀上看就是使用神經網路編碼的 n-gram 模型,也無法解決長期依賴的問題。

RNNLM

它是通過RNN及其變種網路來訓練語言模型,任務是通過上文來預測下一個詞,它相比於NNLM的優勢在於所使用的為RNN,RNN在處理序列數據方面具有天然優勢, RNN 網路打破了上下文窗口的限制,使用隱藏層的狀態概括歷史全部語境信息,對比 NNLM 可以捕獲更長的依賴,在實驗中取得了更好的效果。RNNLM 超參數少,通用性更強;但由於 RNN 存在梯度彌散問題,使得其很難捕獲更長距離的依賴信息。

Word2vec中的CBOW 以及skip-gram,其中CBOW是通過窗口大小內的上下文預測中心詞,而skip-gram恰恰相反,是通過輸入的中心詞預測窗口大小內的上下文。

Glove 是屬於統計語言模型,通過統計學知識來訓練詞向量

ELMO 通過使用多層雙向的LSTM(一般都是使用兩層)來訓練語言模型,任務是利用上下文來預測當前詞,上文信息通過正向的LSTM獲得,下文信息通過反向的LSTM獲得,這種雙向是一種弱雙向性,因此獲得的不是真正的上下文信息。

GPT是通過Transformer來訓練語言模型,它所訓練的語言模型是單向的,通過上文來預測下一個單詞

BERT通過Transformer來訓練MLM這種真正意義上的雙向的語言模型,它所訓練的語言模型是根據上下文來預測當前詞。

以上部分的詳細介紹在NLP之預訓練篇中有講到

語言模型的評判指標

具體參考: https://blog.csdn.net/index20001/article/details/78884646

Perplexity可以認為是average branch factor(平均分支系數),即預測下一個詞時可以有多少種選擇。別人在作報告時說模型的PPL下降到90,可以直觀地理解為,在模型生成一句話時下一個詞有90個合理選擇,可選詞數越少,我們大致認為模型越准確。這樣也能解釋,為什麼PPL越小,模型越好。
一般用困惑度Perplexity(PPL)衡量語言模型的好壞,困惑度越小則模型生成一句話時下一個詞的可選擇性越少,句子越確定則語言模型越好。

簡單介紹
Word2vec是一種有效創建詞嵌入的方法,它自2013年以來就一直存在。但除了作為詞嵌入的方法之外,它的一些概念已經被證明可以有效地創建推薦引擎和理解時序數據。在商業的、非語言的任務中。

背景
由於任何兩個不同詞的one-hot向量的餘弦相似度都為0,多個不同詞之間的相似度難以通過onehot向量准確地體現出來。
word2vec⼯具的提出正是為了解決上⾯這個問題。它將每個詞表⽰成⼀個定⻓的向量,並使得這些向量能較好地表達不同詞之間的相似和類⽐關系。

word2vec模型
word2vec⼯具包含了兩個模型,即跳字模型(skip-gram)和連續詞袋模型(continuous bag of words,CBOW)。word2vec的input/output都是將單詞作為one-hot向量來表示,我們可以把word2vec認為是詞的無監督學習的降維過程。

MaxEnt 模型(最大熵模型): 可以使用任意的復雜相關特徵,在性能上最大熵分類器超過了 Byaes 分類器。但是,作為一種分類器模型,這兩種方法有一個共同的缺點:每個詞都是單獨進行分類的,標記(隱狀態)之間的關系無法得到充分利用,具有馬爾可夫鏈的 HMM 模型可以建立標記之間的馬爾可夫關聯性,這是最大熵模型所沒有的。

最大熵模型的優點:首先,最大熵統計模型獲得的是所有滿足約束條件的模型中信息熵極大的模型;其次,最大熵統計模型可以靈活地設置約束條件,通過約束條件的多少可以調節模型對未知數據的適應度和對已知數據的擬合程度;再次,它還能自然地解決統計模型中參數平滑的問題。

最大熵模型的不足:首先,最大熵統計模型中二值化特徵只是記錄特徵的出現是否,而文本分類需要知道特徵的強度,因此,它在分類方法中不是最優的;其次,由於演算法收斂的速度較慢,所以導致最大熵統計模型它的計算代價較大,時空開銷大;再次,數據稀疏問題比較嚴重。

CRF(conditional random field) 模型(條件隨機場模型):首先,CRF 在給定了觀察序列的情況下,對整個的序列的聯合概率有一個統一的指數模型。一個比較吸引人的特性是其為一個凸優化問題。其次,條件隨機場模型相比改進的隱馬爾可夫模型可以更好更多的利用待識別文本中所提供的上下文信息以得更好的實驗結果。並且有測試結果表明:在採用相同特徵集合的條件下,條件隨機域模型較其他概率模型有更好的性能表現。

CRF 可以用於構造在給定一組輸入隨機變數的條件下,另一組輸出隨機變數的條件概率分布模型。經常被用於序列標注,其中包括詞性標注,分詞,命名實體識別等領域。

建一個條件隨機場,我們首先要定義一個特徵函數集,每個特徵函數都以整個句子s,當前位置i,位置i和i-1的標簽為輸入。然後為每一個特徵函數賦予一個權重,然後針對每一個標注序列l,對所有的特徵函數加權求和,必要的話,可以把求和的值轉化為一個概率值。

CRF 具有很強的推理能力,並且能夠使用復雜、有重疊性和非獨立的特徵進行訓練和推理,能夠充分地利用上下文信息作為特徵,還可以任意地添加其他外部特徵,使得模型能夠 獲取的信息非常豐富。

CRF 模型的不足:首先,通過對基於 CRF 的結合多種特徵的方法識別英語命名實體的分析,發現在使用 CRF 方法的過程中,特徵的選擇和優化是影響結果的關鍵因素,特徵選擇問題的好與壞,直接決定了系統性能的高低。其次,訓練模型的時間比 MaxEnt 更長,且獲得的模型很大,在一般的 PC 機上無法運行。

潛在語義分析(Latent Semantic Analysis,LSA)模型
在潛在語義分析(LSA)模型首先給出了這樣一個 『『分布式假設」 :一個 單詞的屬性是由它所處的環境刻畫的。這也就意味著如果兩個單詞在含義上比較接近,那麼它們也會出現在相似的文本中,也就是說具有相似的上下文。
LSA模型在構建好了單詞-文檔矩陣之後,出於以下幾種可能的原因,我們會使用奇異值分解(Singular Value Decomposition,SVD) 的方法來尋找該矩陣的一個低階近似。

概率潛在語義分析(Probability Latent Semantic Analysis ,PLSA)模型
概率潛在語義分析(PLSA)模型其實是為了克服潛在語義分析(LSA)模型存在的一些缺點而被提出的。LSA 的一個根本問題在於,盡管我們可以把 U k 和 V k 的每一列都看成是一個話題,但是由於每一列的值都可以看成是幾乎沒有限制的實數值,因此我們無法去進一步解釋這些值到底是什麼意思,也更無法從概率的角度來理解這個模型。
PLSA模型則通過一個生成模型來為LSA賦予了概率意義上的解釋。該模型假設,每一篇文檔都包含一系列可能的潛在話題,文檔中的每一個單詞都不是憑空產生的,而是在這些潛在的話題的指引下通過一定的概率生成的。

在 PLSA 模型裡面,話題其實是一種單詞上的概率分布,每一個話題都代表著一個不同的單詞上的概率分布,而每個文檔又可以看成是話題上的概率分布。每篇文檔就是通過這樣一個兩層的概率分布生成的,這也正是PLSA 提出的生成模型的核心思想。

PLSA 通過下面這個式子對d和 w 的聯合分布進行了建模:

該模型中的 *z * 的數量是需要事先給定的一個超參數。需要注意的是,上面這 個式子裡面給出了 P (w, d ) 的兩種表達方式,在前一個式子里, *d * 和 w 都是在給定 *z * 的前提下通過條件概率生成出來的,它們的生成方式是相似的,因此是 『『對稱』』 的;在後一個式子里,首先給定 d ,然後根據 P ( z | d ) 生成可能的話題 z ,然後再根據 P (w| z ) 生成可能的單詞 w,由於在這個式子裡面單詞和文檔的生成並不相似, 所以是 『『非對稱』』 的。

上圖給出了 PLSA 模型中非對稱形式的 Plate Notation表示法。其中d表示 一篇文檔,z 表示由文檔生成的一個話題,w 表示由話題生成的一個單詞。 在這個模型中, d和w 是已經觀測到的變數,而z是未知的變數(代表潛在的話題)。

容易發現,對於一個新的文檔而言,我們無法得知它對應的 P ( d ) 究竟是什麼, 因此盡管 PLSA 模型在給定的文檔上是一個生成模型,它卻無法生成新的未知的文檔。該模型的另外的一個問題在於,隨著文檔數量的增加, P ( z | d ) 的參數也會隨著線性增加,這就導致無論有多少訓練數據,都容易導致模型的過擬合問題。這兩點成為了限制 PLSA 模型被更加廣泛使用的兩大缺陷。

潛在狄利克雷分配(Latent Dirichlet Analysis , LDA)模型

為了解決 PLSA 模型中出現的過擬合問題,潛在狄利克雷分配(LDA)模型被 Blei 等人提出,這個模型也成為了主題模型這個研究領域內應用最為廣泛的模 型。LDA就是在PLSA的基礎上加層貝葉斯框架,即LDA就是PLSA的貝葉斯版本(正因為LDA被貝葉斯化了,所以才需要考慮歷史先驗知識,才加的兩個先驗參數)。

從上一節我們可以看到,在 PLSA 這個模型里,對於一個未知的新文檔 d ,我們對於 P ( d ) 一無所知,而這個其實是不符合人的經驗的。或者說,它沒有去使用本來可以用到的信息,而這部分信息就是 LDA 中所謂的先驗信息。

具體來說,在 LDA 中,首先每一個文檔都被看成跟有限個給定話題中的每一個存在著或多或少的關聯性,而這種關聯性則是用話題上的概率分布來刻畫的, 這一點與 PLSA 其實是一致的。

但是在 LDA 模型中,每個文檔關於話題的概率分布都被賦予了一個先驗分布,這個先驗一般是用稀疏形式的狄利克雷分布表示的。 這種稀疏形式的狄利克雷先驗可以看成是編碼了人類的這樣一種先驗知識:一般而言,一篇文章的主題更有可能是集中於少數幾個話題上,而很少說在單獨一篇文章內同時在很多話題上都有所涉獵並且沒有明顯的重點。

此外,LDA 模型還對一個話題在所有單詞上的概率分布也賦予了一個稀疏形式的狄利克雷先驗,它的直觀解釋也是類似的:在一個單獨的話題中,多數情況是少部分(跟這個話題高度相關的)詞出現的頻率會很高,而其他的詞出現的頻率則明顯較低。這樣兩種先驗使得 LDA 模型能夠比 PLSA 更好地刻畫文檔-話題-單詞這三者的關系。

事實上,從 PLSA 的結果上來看,它實際上相當於把 LDA 模型中的先驗分布轉變為均勻分布,然後對所要求的參數求最大後驗估計(在先驗是均勻分布的前提下,這也等價於求參數的最大似然估計) ,而這也正反映出了一個較為合理的先驗對於建模是非常重要的。

分詞就是將連續的字序列按照一定的規范重新組合成詞序列的過程。
現有的分詞演算法可分為三大類:基於字元串匹配的分詞方法、基於理解的分詞方法和基於統計的分詞方法。
按照是否與詞性標注過程相結合,又可以分為單純分詞方法和分詞與標注相結合的一體化方法。

中文分詞根據實現原理和特點,主要分為以下2個類別:

(1)基於詞典分詞演算法
也稱字元串匹配分詞演算法。該演算法是按照一定的策略將待匹配的字元串和一個已建立好的「充分大的」詞典中的詞進行匹配,若找到某個詞條,則說明匹配成功,識別了該詞。常見的基於詞典的分詞演算法分為以下幾種:正向最大匹配法、逆向最大匹配法和雙向匹配分詞法等。
基於詞典的分詞演算法是應用最廣泛、分詞速度最快的。很長一段時間內研究者都在對基於字元串匹配方法進行優化,比如最大長度設定、字元串存儲和查找方式以及對於詞表的組織結構,比如採用TRIE索引樹、哈希索引等。

(2)基於統計的機器學習演算法
這類目前常用的是演算法是HMM、CRF(條件隨機場)、SVM、深度學習等演算法,比如stanford、Hanlp分詞工具是基於CRF演算法。以CRF為例,基本思路是對漢字進行標注訓練,不僅考慮了詞語出現的頻率,還考慮上下文,具備較好的學習能力,因此其對歧義詞和未登錄詞的識別都具有良好的效果。

常見的分詞器都是使用機器學習演算法和詞典相結合,一方面能夠提高分詞准確率,另一方面能夠改善領域適應性。

隨著深度學習的興起,也出現了 基於神經網路的分詞器 ,例如有人員嘗試使用雙向LSTM+CRF實現分詞器, 其本質上是序列標注 ,所以有通用性,命名實體識別等都可以使用該模型,據報道其分詞器字元准確率可高達97.5%。演算法框架的思路與論文《Neural Architectures for Named Entity Recognition》類似,利用該框架可以實現中文分詞,如下圖所示:

首先對語料進行字元嵌入,將得到的特徵輸入給雙向LSTM,然後加一個CRF就得到標注結果。

目前中文分詞難點主要有三個:
1、分詞標准 :比如人名,在哈工大的標准中姓和名是分開的,但在Hanlp中是合在一起的。這需要根據不同的需求制定不同的分詞標准。

2、歧義 :對同一個待切分字元串存在多個分詞結果。
歧義又分為組合型歧義、交集型歧義和真歧義三種類型。

一般在搜索引擎中,構建索引時和查詢時會使用不同的分詞演算法。常用的方案是,在索引的時候使用細粒度的分詞以保證召回,在查詢的時候使用粗粒度的分詞以保證精度。

3、新詞 :也稱未被詞典收錄的詞,該問題的解決依賴於人們對分詞技術和漢語語言結構的進一步認識。

典型的文本分類過程可以分為三個步驟:
1. 文本表示(Text Representation)
這一過程的目的是把文本表示成分類器能夠處理的形式。最常用的方法是向量空間模型,即把文本集表示成詞-文檔矩陣,矩陣中每個元素代表了一個詞在相應文檔中的權重。選取哪些詞來代表一個文本,這個過程稱為特徵選擇。常見的特徵選擇方法有文檔頻率、信息增益、互信息、期望交叉熵等等。為了降低分類過程中的計算量,常常還需要進行降維處理,比如LSI。
2. 分類器構建(Classifier Construction)
這一步驟的目的是選擇或設計構建分類器的方法。不同的方法有各自的優缺點和適用條件,要根據問題的特點來選擇一個分類器。我們會在後面專門講述常用的方法。選定方法之後,在訓練集上為每個類別構建分類器,然後把分類器應用於測試集上,得到分類結果。
3. 效果評估(Classifier Evaluation)
在分類過程完成之後,需要對分類效果進行評估。評估過程應用於測試集(而不是訓練集)上的文本分類結果,常用的評估標准由IR領域繼承而來,包括查全率、查准率、F1值等等。

1. Rocchio方法
每一類確定一個中心點(centroid),計算待分類的文檔與各類代表元間的距離,並作為判定是否屬於該類的判據。Rocchio方法的特點是容易實現,效率高。缺點是受文本集分布的影響,比如計算出的中心點可能落在相應的類別之外。

2. 樸素貝葉斯(naïve bayes)方法
將概率論模型應用於文檔自動分類,是一種簡單有效的分類方法。使用貝葉斯公式,通過先驗概率和類別的條件概率來估計文檔對某一類別的後驗概率,以此實現對此文檔所屬類別的判斷。

3. K近鄰(K-Nearest Neightbers, KNN)方法
從訓練集中找出與待分類文檔最近的k個鄰居(文檔),根據這k個鄰居的類別來決定待分類文檔的類別。KNN方法的優點是不需要特徵選取和訓練,很容易處理類別數目多的情況,缺點之一是空間復雜度高。KNN方法得到的分類器是非線性分類器。

4. 支持向量機(SVM)方法
對於某個類別,找出一個分類面,使得這個類別的正例和反例落在這個分類面的兩側,而且這個分類面滿足:到最近的正例和反例的距離相等,而且是所有分類面中與正例(或反例)距離最大的一個分類面。SVM方法的優點是使用很少的訓練集,計算量小;缺點是太依賴於分類面附近的正例和反例的位置,具有較大的偏執。

文本聚類過程可以分為3個步驟:
1. 文本表示(Text Representation)
把文檔表示成聚類演算法可以處理的形式。所採用的技術請參見文本分類部分。
2. 聚類演算法選擇或設計(Clustering Algorithms)
演算法的選擇,往往伴隨著相似度計算方法的選擇。在文本挖掘中,最常用的相似度計算方法是餘弦相似度。聚類演算法有很多種,但是沒有一個通用的演算法可以解決所有的聚類問題。因此,需要認真研究要解決的問題的特點,以選擇合適的演算法。後面會有對各種文本聚類演算法的介紹。
3. 聚類評估(Clustering Evaluation)
選擇人工已經分好類或者做好標記的文檔集合作為測試集合,聚類結束後,將聚類結果與已有的人工分類結果進行比較。常用評測指標也是查全率、查准率及F1值。

1.層次聚類方法
層次聚類可以分為兩種:凝聚(agglomerative)層次聚類和劃分(divisive)層次聚類。凝聚方法把每個文本作為一個初始簇,經過不斷的合並過程,最後成為一個簇。劃分方法的過程正好與之相反。層次聚類可以得到層次化的聚類結果,但是計算復雜度比較高,不能處理大量的文檔。

2.劃分方法
k-means演算法是最常見的劃分方法。給定簇的個數k,選定k個文本分別作為k個初始簇,將其他的文本加入最近的簇中,並更新簇的中心點,然後再根據新的中心點對文本重新劃分;當簇不再變化時或經過一定次數的迭代之後,演算法停止。k-means演算法復雜度低,而且容易實現,但是對例外和雜訊文本比較敏感。另外一個問題是,沒有一個好的辦法確定k的取值。

3.基於密度的方法
為了發現任意形狀的聚類結果,提出了基於密度的方法。這類方法將簇看作是數據空間中被低密度區域分割開的高密度區域。常見的基於密度的方法有DBSCAN, OPTICS, DENCLUE等等。

4.神經網路方法
神經網路方法將每個簇描述為一個標本,標本作為聚類的"原型",不一定對應一個特定的數據,根據某些距離度量,新的對象被分配到與其最相似的簇中。比較著名的神經網路聚類演算法有:競爭學習(competitive learing)和自組織特徵映射(self-organizing map)[Kohonen, 1990]。神經網路的聚類方法需要較長的處理時間和復雜的數據復雜性,所以不適用於大型數據的聚類。

⑥ 文本分類的6類方法

一、中文分詞:

針對中文文本分類時,很關鍵的一個技術就是中文分詞。特徵粒度為詞粒度遠遠好於字粒度,其大部分分類演算法不考慮詞序信息,基於字粒度的損失了過多的n-gram信息。下面簡單總結一下中文分詞技術:基於字元串匹配的分詞方法、基於理解的分詞方法和基於統計的分詞方法 [1]。

1,基於字元串匹配的分詞方法:
過程:這是一種基於詞典的中文分詞,核心是首先建立統一的詞典表,當需要對一個句子進行分詞時,首先將句子拆分成多個部分,將每一個部分與字典一一對應,如果該詞語在詞典中,分詞成功,否則繼續拆分匹配直到成功。
核心: 字典,切分規則和匹配順序是核心。
分析:優點是速度快,時間復雜度可以保持在O(n),實現簡單,效果尚可;但對歧義和未登錄詞處理效果不佳。

2,基於理解的分詞方法:基於理解的分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法信息和語義信息來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義信息來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和信息。由於漢語語言知識的籠統、復雜性,難以將各種語言信息組織成機器可直接讀取的形式,因此目前基於理解的分詞系統還處在試驗階段。

3,基於統計的分詞方法:
過程:統計學認為分詞是一個概率最大化問題,即拆分句子,基於語料庫,統計相鄰的字組成的詞語出現的概率,相鄰的詞出現的次數多,就出現的概率大,按照概率值進行分詞,所以一個完整的語料庫很重要。
主要的統計模型有: N元文法模型(N-gram),隱馬爾可夫模型(Hidden Markov Model ,HMM),最大熵模型(ME),條件隨機場模型(Conditional Random Fields,CRF)等。

二、文本預處理:

1,分詞: 中文任務分詞必不可少,一般使用jieba分詞,工業界的翹楚。
2,去停用詞:建立停用詞字典,目前停用詞字典有2000個左右,停用詞主要包括一些副詞、形容詞及其一些連接詞。通過維護一個停用詞表,實際上是一個特徵提取的過程,本質 上是特徵選擇的一部分。
3,詞性標註: 在分詞後判斷詞性(動詞、名詞、形容詞、副詞…),在使用jieba分詞的時候設置參數

⑦ 文本分類演算法的問題

特徵值比如TF IDF肯定是平滑的結果,所以這樣的權重肯定存在吧。。

所謂就是說:假設所有特徵詞都出現過一次,這樣就不存在權值不存在的情況了。。。

⑧ 目前最好的文本分類演算法

文本分類問題與其它分類問題沒有本質上的區別,其方法可以歸結為根據待分類數據的某些特徵來進行匹配,當然完全的匹配是不太可能的,因此必須(根據某種評價標准)選擇最優的匹配結果,從而完成分類。

⑨ 文本分類系統的流程及步驟

文本分類系統的總體功能模塊為:

1、預處理:將原始語料格式化為同一格式,便於後續的統一處理。

2、索引:將文檔分解為基本處理單元,同時降低後續處理的開銷。

3、統計:詞頻統計,項(單詞、概念)與分類的相關概率。

4、特徵抽取:從文檔中抽取出反映文檔主題的特徵。

5、分類器:分類器的訓練。

6、評價:分類器的測試結果分析。



(9)文本分類演算法研究擴展閱讀

文本分類已廣泛應用於網路信息過濾、信息檢索和信息推薦等多個方面。數據驅動分類器學習一直是近年來的熱點,方法很多,比如神經網路、決策樹、支持向量機、樸素貝葉斯等。相對於其他精心設計的更復雜的分類演算法,樸素貝葉斯分類演算法是學習效率和分類效果較好的分類器之一。

直觀的文本分類演算法,也是最簡單的貝葉斯分類器,具有很好的可解釋性,樸素貝葉斯演算法特點是假設所有特徵的出現相互獨立互不影響,每一特徵同等重要。

但事實上這個假設在現實世界中並不成立:首先,相鄰的兩個詞之間的必然聯系,不能獨立;其次,對一篇文章來說,其中的某一些代表詞就確定它的主題,不需要通讀整篇文章、查看所有詞。所以需要採用合適的方法進行特徵選擇,這樣樸素貝葉斯分類器才能達到更高的分類效率。

⑩ 利用神經網路進行文本分類演算法綜述(持續更新中)

傳統的文本分類一般都是使用詞袋模型/Tf-idf作為特徵+機器學習分類器來進行分類的。隨著深度學習的發展,越來越多的神經網路模型被用來進行文本分類。本文將對這些神經網路模型做一個簡單的介紹。

本文介紹了一種詞向量模型,雖然算不得文本分類模型,但由於其可以說是fasttext的基礎。因此也簡單提一下。

作者認為cbow和skipgram及大部分詞向量模型都沒有考慮到單詞的多態性,而簡單的將一個單詞的多種形態視為獨立的單詞。例如like的不同形式有likes,liking,liked,likes,這些單詞的意思其實是相同的,但cbow/skipgram模型卻認為這些單詞是各自獨立的,沒有考慮到其形態多樣性。

因此作者提出了一個可以有效利用單詞字元級別信息的n-gram詞向量模型,該模型是以skipgram模式實現的。例如單詞 where,其n-gram表示為<wh, whe, her, ere, re>, where。其中<>分別表示前後綴。在原始的skipgram模型中,輸入僅僅只是where的onehot向量,而在此模型中輸入則變成了<wh, whe, her, ere, re>, where的onehot編碼的加和,有效的利用了字元級別的信息,因此效果更加好。

而在loss方面,文中採用了負采樣+binary LogisticRegression的策略。即對每一個目標單詞都預測為正負中的一種。

在本文中作者提供了一個基於神經網路的文本分類模型,這個模型是基於cbow的,與cbow非常類似。

和CBOW一樣,fastText模型也只有三層:輸入層、隱含層、輸出層(Hierarchical Softmax),輸入都是多個經向量表示的單詞,輸出都是一個特定的target,隱含層都是對多個詞向量的疊加平均。不同的是,CBOW的輸入是目標單詞的上下文,fastText的輸入是多個單詞及其n-gram特徵的embeding表示方式,這些特徵用來表示單個文檔;CBOW的輸入單詞被onehot編碼過,fastText的輸入特徵是被embedding過;CBOW的輸出是目標詞彙,fastText的輸出是文檔對應的類標。輸出層的實現同樣使用了層次softmax,當然如果自己實現的話,對於類別數不是很多的任務,個人認為是可以直接使用softmax的。

最後,貼一個Keras的模型fasttext簡化版。

基於詞向量表示,本文提出利用卷積神經網路來進行文本分類。其演算法如上圖所示:

在本文中,作者嘗試了多種不同的詞向量模式:

在上一篇文章中CNN網路的輸入一般是預訓練好的詞向量,而在本文中作者提出一種直接將embedding訓練與分類任務結合在一起,且能有效提取/保留詞序信息,也即有效訓練出n-gram的模型方法,其實也可以理解為一種利用CNN來進行embedding的方法。

此外,另一個問題是輸入序列長度變化問題(在上一篇文章textCNN中通過padding解決的?),在本文作者提出使用一個動態可變的pooling層來解決這個問題,使得卷積層輸出的大小是相同的。關於可變pooling其實與圖像識別中的 空間金字塔池化 (Spatial Pyramid Pooling) 是類似的。

這篇文章有點將fastText與TextCNN結合在一起的感覺,將n-gram embedding與分類任務結合在了一起進行訓練,通過CNN來進行Embedding。

Text Categorization via Region Embedding》

在本篇文章中作者提出了一個tv-embedding(即two-view embedding),它也屬於region embedding(也可以理解為ngram embedding)。這種方法與上面的bow-CNN表示相似,使用bow(bag of words)的方式來表示一個區域的詞句,然後通過某個區域(region,左右鄰域的單詞或詞句)來預測其前後的區域(單詞或詞句),即輸入區域是view1,target區域是view2。tv-embedding是單獨訓練的,在使用的時候與CNN中的embedding組合在一起(形成多個channel?)。作者認為,word2vec方法預訓練得到的embedding向量是普適性的,而通過特定任務的數據集的訓練得到tv-embedding具有任務相關的一些信息,更有利於提升我們的模型效果。

吐槽一下,這篇文章沒太看懂,也可能是英語太差,作者文章中沒有那種一眼就能讓人理解的網路圖,像textCNN的圖就非常一目瞭然,看圖就知道是怎麼做的了。

本文提出了一個使用監督學習加半監督預訓練的基於LSTM的文本分類模型。文章作者與上面相同,所以用到的很多技術可以說與上面也是同出一轍。因此簡單說下本文的一些思路。

作者認為已有的直接使用LSTM作為文本分類模型並直接將LSTM的最後一個輸出作為後續全連接分類器的方法面臨兩個問題:(1)這種方式一般都是與word embedding整合在一起(即輸入onehot經過一個embedding層再進入LSTM),但是embedding訓練不穩定,不好訓練;(2)直接使用LSTM最後一個輸出來表示整個文檔不準確,一般來說LSTM輸入中後面的單詞會在最後輸出中佔有較重的權重,但是這對於文章表示來說並不總是對的。因此作者對這兩點進行了改進:

本文其實可以看作是作者將自己前面的tv-embedding半監督訓練與RCNN的一個融合吧,大有一種一頓操作猛如虎,一看人頭0-5的感覺(因為作者的實驗結果跟一般的CNN相比其實也搶不了多少)。

本文的作者也是前面兩篇使用CNN來進行文本分類處理的文章的作者。因此在本文中,結合了前面兩篇文章提出的一些方法,並使用了一個深層的卷積神經網路。具體的細節包括:

更多詳細的關於DPCNN的細節可以查看 從DPCNN出發,撩一下深層word-level文本分類模型 。

本文提出了一種基於CNN+Attention的文本分類模型。作者認為已有的基於CNN的文本分類模型大都使用的是固定大小的卷積核,因此其學習到的表示也是固定的n-gram表示,這個n與CNN filter大小相關。但是在進行句子的語義表示時,不同句子發揮重要作用的ngram詞語常常是不同的,也即是變化的。因此,模型能根據句子來自適應的選擇每個句子最佳的n-gram對於提升模型的語義表示能力是非常關鍵的。本文便是由此思路提出了一種自適應的來選擇不同n-gram表示的模型。

本文模型在主題結構上參照了CV中的DenseNet,藉由DenseNet中的稠密連接來提取到豐富的n-gram特徵表示。舉例來說,在layer3的特徵不僅能學習到f(x1, x2, x3),還能學習到f(x1(x2,x3))這種更多層次,更加豐富的特徵。網路的結構主要包括三部分:DenseCNN主網路,Attention mole和最後的全連接層分類網路。下面對這三部分進行簡單的說明:

本文通過Dense connection + Attention來自動獲取對於文本語義最重要的n-gram特徵,結果很好。但是缺點是,這個網路比較適合較短的文本,文中對輸入文本進行了padding補齊,對於不同數據集最大長度分別為50,100等,但這對於較長的文本明顯是不足的。因此對於較長的文本或許HAN這種借用RNN來不限制輸入長短的網路會更好。

本文提出了一種結合循環神經網路(RNN)和卷積神經網路來進行文本分類的方法,其結構如上圖所示,該網路可以分為三部分:

雖然說是RNN與CNN的結合,但是其實只用到了CNN中的pooling,多少有一點噱頭的意思。文中還提到了RCNN為什麼比CNN效果好的原因,即為什麼RCNN能比CNN更好的捕捉到上下文信息:CNN使用了固定大小window(也即kernel size)來提取上下文信息,其實就是一個n-gram。因此CNN的表現很大程度上受window大小的影響,太小了會丟失一些長距離信息,太大了又會導致稀疏性問題,而且會增加計算量。

在眾多自然語言處理任務中,一個非常突出的問題就是訓練數據不足,且標注難度大。因此文本提出了一種多任務共享的RNN模型框架,其使用多個不同任務數據集來訓練同一個模型共享參數,已達到擴充數據集的作用。

文中作者提出了三個模型,如上圖所示:

三個模型的訓練方式相同:

本文提出了一個層次LSTM+Attention模型。作者認為,雖然一篇文章有多個句子組成但真正其關鍵作用的可能是其中的某幾個,因此對各個句子施加了注意力機制,以使得對文章語義貢獻較多的句子佔有更多的權重。同樣的,組成一個句子的單詞有多個,但是發揮重要作用的可能就那麼幾個,因此使用注意力機制以使得重要單詞發揮更大的作用,這些便是本文的核心思想。整個網路可分為三層,兩個LSTM層分別用來進行word encode和sentence encode,最頂上為一個全連接分類層。若加上兩層注意力層,則可認為網路為5層。下面簡單聊聊這五層網路的結構:

總體來說,本文看起來還是比較有意思的,符合人閱讀文章的習慣,我們寫文章的時候也是有中心詞和中心句的。但是由於這個層級結構是否會導致訓練慢或者不好訓練還不得而知。最後,文中還提出對文章按長短先進行排序,長度相似的進入一個batch,這將訓練速度加快了3倍。

本文提出了一個基於圖神經網路的文本分類方法。該方法的主要思想是將所有文章及其包含的詞彙都放到一個圖網路裡面去,圖網路中的節點分為兩種類型:單詞節點和文章節點。其中連接單詞節點和文章節點的邊的權重使用TF-IDF來表示,而單詞與單詞之間邊的權重則是使用點互信息(PMI)來表示。點互信息與傳統語言模型中的條件概率計算方式非常相似。只不過PMI採用的是滑窗方式而條件概率是直接在所有語料中進行統計,可以認為是將所有語料當做一個大窗口,這時就又與PMI相同了。

A表示圖網路的鄰接矩陣,表示如下:

GCN同樣也是可以含有多層隱藏層的,其各個層的計算方式如下:

其中A'為歸一化對稱鄰接矩陣, W0 ∈ R^(m×k) 為權重矩陣,ρ是激活函數,例如 ReLU ρ(x) = max(0,x) 如前所述,可以通過疊加多個GCN層來合並更高階的鄰域信息:

其中j表示層數。
損失函數定義為所有已標記文檔的交叉熵誤差:

文中提到Text GCN運行良好的原因有兩個方面:

但是其也有一些缺:

總的來說,文章的idea還是挺有意思的,效果也還不錯。初識GCN可能還是有一點難以理解,可以參考如下資料進行進一步學習:
基於圖卷積網路的文本分類演算法
如何理解 Graph Convolutional Network(GCN)?

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:333
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:376
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:610
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:31
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:941
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:739
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:802
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:510
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:371