NLP概述和文字自動分類演算法詳解

達觀資料發表於2018-07-25

自然語言處理一直是人工智慧領域的重要話題,更是 18 年的熱度話題,為了在海量文字中及時準確地獲得有效資訊,文字分類技術獲得廣泛關注,也給大家帶來了更多應用和想象的空間。本文根據達觀資料聯合創始人張健的直播內容《NLP 概述及文字自動分類演算法詳解》整理而成。

一、    NLP 概述

1.文字挖掘任務型別的劃分

文字挖掘任務大致分為四個型別:類別到序列、序列到類別、同步的(每個輸入位置都要產生輸出)序列到序列、非同步的序列到序列。

同步的序列到序列的例子包括中文分詞,命名實體識別詞性標註。一部的序列到序列包括機器翻譯和自動摘要。序列到類別的例子包括文字分類和情感分析。類別(物件)到序列的例子包括文字生成和形象描述。

2.文字挖掘系統整體方案

達觀資料一直專注於文字語義,文字挖掘系統整體方案包含了 NLP 處理的各個環節,從處理的文字粒度上來分,可以分為篇章級應用、短串級應用和詞彙級應用。

篇章級應用有六個方面,已經有成熟的產品支援企業在不同方面的文字挖掘需求:

  • 垃圾評論:精準識別廣告、不文明用語及低質量文字。

  • 黃反識別:準確定位文字中所含涉黃、涉政及反動內容。

  • 標籤提取:提取文字中的核心詞語生成標籤。

  • 文章分類:依據預設分類體系對文字進行自動歸類。

  • 情感分析:準確分析使用者透過文字表達出的情感傾向。

  • 文章主題模型:抽取出文章的隱含主題。

為了實現這些頂層應用,達觀資料掌握從詞語短串分析個層面的分析技術,開發了包括中文分詞、專名識別、語義分析和詞串分析等模組。

NLP概述和文字自動分類演算法詳解達觀資料文字挖掘架構圖

3.序列標註應用:中文分詞

同步的序列到序列,其實就是序列標註問題,應該說是自然語言處理中最常見的問題。序列標註的應用包括中文分詞、命名實體識別詞性標註等。序列標註問題的輸入是一個觀測序列,輸出的是一個標記序列或狀態序列。

NLP概述和文字自動分類演算法詳解

舉中文分詞為例,處理「結合成分子」的觀測序列,輸出「結合/成/分子」的分詞標記序列。針對中文分詞的這個應用,有多種處理方法,包括基於詞典的方法、隱馬爾可夫模型(HMM)、最大熵模型條件隨機場(CRF)、深度學習模型(雙向 LSTM 等)和一些無監督學習的方法(基於凝聚度與自由度)。

4.序列標註應用:NER

命名實體識別:Named Entity Recognition,簡稱 NER,又稱作「專名識別」,是指識別文字中具有特定意義的實體,主要包括人名、地名、機構名、專有名詞等。通常包括實體邊界識別和確定實體類別。

NLP概述和文字自動分類演算法詳解

對與命名實體識別,採取不同的標記方式,常見的標籤方式包括 IO、BIO、BMEWO 和 BMEWO+。其中一些標籤含義是:

  • B:begin

  • I:一個詞的後續成分

  • M:中間

  • E:結束

  • W:單個詞作為實體

大部分情況下,標籤體系越複雜準確度也越高,但相應的訓練時間也會增加。因此需要根據實際情況選擇合適的標籤體系。通常我們實際應用過程中,最難解決的還是標註問題。所以在做命名實體識別時,要考慮人工成本問題。

5.英文處理

在 NLP 領域,中文和英文的處理在大的方面都是相通的,不過在細節方面會有所差別。其中一個方面,就是中文需要解決分詞的問題,而英文天然的就沒有這個煩惱;另外一個方面,英文處理會面臨詞形還原和詞根提取的問題,英文中會有時態變換(made==>make),單複數變換(cats==>cat),詞根提取(arabic==>arab)。

在處理上面的問題過程中,不得不提到的一個工具是 WordNet。WordNet 是一個由普林斯頓大學認識科學實驗室在心理學教授喬治•A•米勒的指導下建立和維護的英語字典。在 WordNet 中,名詞、動詞、形容詞和副詞各自被組織成一個同義詞的網路,每個同義詞集合都代表一個基本的語義概念,並且這些集合之間也由各種關係連線。我們可以通過 WordNet 來獲取同義詞和上位詞。

6.詞嵌入

在處理文字過程中,我們需要將文字轉化成數字可表示的方式。詞向量要做的事就是將語言數學化表示。詞向量有兩種實現方式:One-hot 表示,即通過向量中的一維 0/1 值來表示某個詞;詞嵌入,將詞轉變為固定維數的向量。

word2vec 是使用淺層和雙層神經網路產生生詞向量的模型,產生的詞嵌入實際上是語言模型的一個副產品,網路以詞表現,並且需猜測相鄰位置的輸入詞。word2vec 中詞向量的訓練方式有兩種,cbow(continuous bags of word)和 skip-gram。cbow 和 skip-gram 的區別在於,cbow 是通過輸入單詞的上下文(周圍的詞的向量和)來預測中間的單詞,而 skip-gram 是輸入中間的單詞來預測它周圍的詞。

7.文件建模

要使計算機能夠高效地處理真實文字,就必須找到一種理想的形式化表示方法,這個過程就是文件建模。文件建模一方面要能夠真實地反映文件的內容,另一方面又要對不同文件具有區分能力。文件建模比較通用的方法包括布林模型向量空間模型(VSM)和概率模型。其中最為廣泛使用的是向量空間模型

二、文字分類的關鍵技術與重要方法

1.利用機器學習進行模型訓練

文字分類的流程包括訓練、文字語義、文字特徵處理、訓練模型、模型評估和輸出模型等幾個主要環節。其中介紹一下一些主要的概念。

  • 文件建模:概率模型布林模型,VSM;

  • 文字語義:分詞,命名實體識別詞性標註等;

  • 文字特徵處理:特徵降維,包括使用評估函式(TF-IDF,互資訊方法,期望交叉熵,QEMI,統計量方法,遺傳演算法等);特徵向量權值計算;

  • 樣本分類訓練:樸素貝葉斯分類器,SVM,神經網路演算法,決策樹,Ensemble 演算法等;

  • 模型評估:召回率,正確率,F-測度值;

2.向量空間模型

向量空間模型是常用來處理文字挖掘的文件建模方法。VSM 概念非常直觀——把對文字內容的處理簡化為向量空間中的向量運算,並且它以空間上的相似度表達語義的相似度,直觀易懂。

當文件被表示為文件空間的向量時,就可以通過計算向量之間的相似性來度量文件間的相似性。它的一些實現方式包括:

1)N-gram 模型:基於一定的語料庫,可以利用 N-Gram 來預計或者評估一個句子是否合理;

2)TF-IDF 模型:若某個詞在一篇文件中出現頻率 TF 高,卻在其他文章中很少出現,則認為此詞具有很好的類別區分能力;

3)Paragraph Vector 模型:其實是 word vector 的一種擴充套件。Gensim 中的 Doc2Vec 以及 Facebook 開源的 Fasttext 工具也是採取了這麼一種思路,它們將文字的詞向量進行相加/求平均的結果作為 Paragraph Vector。

3.文字特徵提取演算法

目前大多數中文文字分類系統都採用詞作為特徵項,作為特徵項的詞稱作特徵詞。這些特徵詞作為文件的中間表示形式,用來實現文件與文件、文件與使用者目標之間的相似度計算。如果把所有的詞都作為特徵項,那麼特徵向量的維數將過於巨大。有效的特徵提取演算法,不僅能降低運算複雜度,還能提高分類的效率和精度。

文字特徵提取的演算法包含下面三個方面:

1)從原始特徵中挑選出一些最具代表文字資訊的特徵,例如詞頻、TF-IDF 方法;

2)基於數學方法找出對分類資訊共現比較大的特徵,主要例子包括互資訊法、資訊增益、期望交叉熵和統計量方法;

3)以特徵量分析多元統計分佈,例如主成分分析(PCA)。

4.文字權重計算方法

特徵權重用於衡量某個特徵項在文件表示中的重要程度或區分能力的強弱。選擇合適的權重計算方法,對文字分類系統的分類效果能有較大的提升作用。

特徵權重的計算方法包括:

1)TF-IDF

2)詞性;

3)標題;

4)位置;

5)句法結構;

6)專業詞庫;

7)資訊熵

8)文件、詞語長度;

9)詞語間關聯;

10)詞語直徑;

11)詞語分佈偏差。

其中提幾點,詞語直徑是指詞語在文字中首次出現的位置和末次出現的位置之間的距離。詞語分佈偏差所考慮的是詞語在文章中的統計分佈。在整篇文章中分佈均勻的詞語通常是重要的詞彙。

5.分類器設計

由於文字分類本身是一個分類問題,所以一般的模式分類方法都可以用於文字分類應用中。

常用分類演算法的思路包括下面四種:

1)樸素貝葉斯分類器:利用特徵項和類別的聯合概率來估計文字的類別概率;

2)支援向量機分類器:在向量空間中找到一個決策平面,這個平面能夠最好的切割兩個分類的資料點,主要用於解決二分類問題

3)KNN 方法:在訓練集中找到離它最近的 k 個臨近文字,並根據這些文字的分類來給測試文件分類;

4)決策樹方法:將文字處理過程看作是一個等級分層且分解完成的複雜任務。

6.分類演算法融合

聚合多個分類器,提高分類準確率稱為 Ensemble 方法。

利用不同分類器的優勢,取長補短,最後綜合多個分類器的結果。Ensemble 可設定目標函式 (組合多個分類器),通過訓練得到多個分類器的組合引數 (並非簡單的累加或者多數)。

NLP概述和文字自動分類演算法詳解

我們這裡提到的 ensemble 可能跟通常說的 ensemble learning 有區別。主要應該是指 stacking。Stacking 是指訓練一個模型用於組合其他各個模型。即首先我們先訓練多個不同的模型,然後再以之前訓練的各個模型的輸出為輸入來訓練一個模型,以得到一個最終的輸出。在處理 ensemble 方法的時候,需要注意幾個點。基礎模型之間的相關性要儘可能的小,並且它們的效能表現不能差距太大。

多個模型分類結果如果差別不大,那麼疊加效果也不明顯;或者如果單個模型的效果距離其他模型比較差,也是會對整體效果拖後腿。

三、文字分類深度學習中的應用

1.CNN 文字分類

採取 CNN 方法進行文字分類,相比傳統方法會在一些方面有優勢。

NLP概述和文字自動分類演算法詳解

基於詞袋模型文字分類方法,沒有考慮到詞的順序。

基於卷積神經網路(CNN)來做文字分類,可以利用到詞的順序包含的資訊。如圖展示了比較基礎的一個用 CNN 進行文字分類的網路結構。CNN 模型把原始文字作為輸入,不需要太多的人工特徵。CNN 模型的一個實現,共分四層:

  • 第一層是詞向量層,doc 中的每個詞,都將其對映到詞向量空間,假設詞向量為 k 維,則 n 個詞對映後,相當於生成一張 n*k 維的影象;

  • 第二層是卷積層,多個濾波器作用於詞向量層,不同濾波器生成不同的 feature map;

  • 第三層是 pooling 層,取每個 feature map 的最大值,這樣操作可以處理變長文件,因為第三層輸出只依賴於濾波器的個數;

  • 第四層是一個全連線的 softmax 層,輸出是每個類目的概率,中間一般加個 dropout,防止過擬合

有關 CNN 的方法一般都圍繞這個基礎模型進行,再加上不同層的創新。

比如第一個模型在輸入層換成 RNN,去獲得文字通過 rnn 處理之後的輸出作為卷積層的輸入。比如說第二個是在 pooling 層使用了動態 kmax pooling,來解決樣本集合文字長度變化較大的問題。比如說第三種是極深網路,在卷積層做多層卷積,以獲得長距離的依賴資訊。CNN 能夠提取不同長度範圍的特徵,網路的層數越多,意味著能夠提取到不同範圍的特徵越豐富。不過 cnn 層數太多會有梯度彌散、梯度爆炸或者退化等一系列問題。

為了解決這些問題,極深網路就通過 shortcut 連線。殘差網路其實是由多種路徑組合的一個網路,殘差網路其實是很多並行子網路的組合,有些點評評書殘差網路就說它其實相當於一個 Ensembling。

2.RNN 與 LSTM 文字分類

CNN 有個問題是卷積時候是固定 filter_size,就是無法建模更長的序列資訊,雖然這個可以通過多次卷積獲得不同範圍的特徵,不過要付出增加網路深度的代價。

Rnn 的出現是解決變長序列資訊建模的問題,它會將每一步中產生的資訊都傳遞到下一步中。

首先我們在輸入層之上,套上一層雙向 LSTM 層,LSTM 是 RNN 的改進模型,相比 RNN,能夠更有效地處理句子中單詞間的長距離影響;而雙向 LSTM 就是在隱層同時有一個正向 LSTM 和反向 LSTM,正向 LSTM 捕獲了上文的特徵資訊,而反向 LSTM 捕獲了下文的特徵資訊,這樣相對單向 LSTM 來說能夠捕獲更多的特徵資訊,所以通常情況下雙向 LSTM 表現比單向 LSTM 或者單向 RNN 要好。

NLP概述和文字自動分類演算法詳解

如何從物理意義上來理解求平均呢?這其實可以理解為在這一層,兩個句子中每個單詞都對最終分類結果進行投票,因為每個 BLSTM 的輸出可以理解為這個輸入單詞看到了所有上文和所有下文(包含兩個句子)後作出的兩者是否語義相同的判斷,而通過 Mean Pooling 層投出自己寶貴的一票。

3.Attention Model 與 seq2seq

注意力模型 Attention Model 是傳統自編碼器的一個升級版本。傳統 RNN 的 Encoder-Decoder 模型,它的缺點是不管無論之前的 context 有多長,包含多少資訊量,最終都要被壓縮成固定的 vector,而且各個維度維度收到每個輸入維度的影響都是一致的。為了解決這個問題,它的 idea 其實是賦予不同位置的 context 不同的權重,越大的權重表示對應位置的 context 更加重要。

NLP概述和文字自動分類演算法詳解

現實中,舉一個翻譯問題:jack ma dances very well 翻譯成中文是馬雲跳舞很好。其中,馬雲應該是和 jack ma 關聯的。

Attention Model 是當前的研究熱點,它廣泛地可應用於文字生成、機器翻譯語言模型等方面。

4.Hierarchical Attention Network

下面介紹層次化注意力網路。

NLP概述和文字自動分類演算法詳解

詞編碼層是首先把詞轉化成詞向量,然後用雙向的 GRU 層, 可以將正向和反向的上下文資訊結合起來,獲得隱藏層輸出。第二層是 word attention 層。attention 機制的目的是要把一個句子中,對句子的含義最重要,貢獻最大的詞語找出來。

為了衡量單詞的重要性, 我們用 u_it 和一個隨機初始化的上下文向量 u_w 的相似度來表示,然後經過 softmax 操作獲得了一個歸一化的 attention 權重矩陣 a_it,代表句子 i 中第 t 個詞的權重。結合詞的權重,句子向量 s_i 看作組成這些句子的詞向量的加權求和。

第三層是句子編碼層,也是通過雙向 GRU 層, 可以將正向和反向的上下文資訊結合起來,獲得隱藏層輸出。

到了第四層是句子的注意力層,同詞的注意力層差不多,也是提出了一個句子級別的上下文向量 u_s, 來衡量句子在文中的重要性。輸出也是結合句子的權重,全文的向量表示看做是句子向量的加權求和。

到了最後,有了全文的向量表示,我們就直接通過全連線 softmax 來進行分類。

四、案例介紹

1.新聞分類

新聞分類是最常見的一種分類。其處理方法包括:

1)定製行業專業語料,定期更新語料知識庫,構建行業垂直語義模型。

2)計算 term 權重,考慮到位置特徵,網頁特徵,以及結合離線統計結果獲取到核心的關鍵詞。

3)使用主題模型進行語義擴充套件

4)監督與半監督方式的文字分類

NLP概述和文字自動分類演算法詳解

2.垃圾廣告黃反識別

垃圾廣告過濾作為文字分類的一個場景有其特殊之處,那就是它作為一種防攻擊手段,會經常面臨攻擊使用者採取許多變換手段來繞過檢查。

處理這些變換手段有多重方法:

  • 一是對變形詞進行識別還原,包括要處理間雜特殊符號,同音、簡繁變換,和偏旁拆分、形近變換。

  • 二是通過語言模型識別干擾文字,如果識別出文字是段不通順的「胡言亂語」,那麼他很可能是一段用於規避關鍵字審查的垃圾文字。

  • 三是通過計算主題和評論的相關度匹配來鑑別。

  • 四是基於多種表達特徵的分類器模型識別來提高分類的泛化能力。

3.情感分析

情感分析的處理辦法包括:

1)基於詞典的情感分析,主要是線設定情感詞典,然後基於規則匹配(情感詞對應的權重進行加權)來識別樣本是否是正負面。

2)基於機器學習的情感分析,主要是採取詞袋模型作為基礎特徵,並且將複雜的情感處理規則命中的結果作為一維或者多維特徵,以一種更為「柔性」的方法融合到情感分析中,擴充我們的詞袋模型

3)使用 dnn 模型來進行文字分類,解決傳統詞袋模型難以處理長距離依賴的缺點。

4.NLP 其他應用

NLP 在達觀的其他一些應用包括:

1)標籤抽取;

2)觀點挖掘;

3)應用於推薦系統

4)應用於搜尋引擎。

標籤抽取有多種方式:基於聚類的方法實現。此外,現在一些深度學習的演算法,通過有監督的手段實現標籤抽取功能。

就觀點挖掘而言,舉例:床很破,睡得不好。我抽取的觀點是「床破」,其中涉及到語法句法分析,將有關聯成本提取出來。

搜尋及推薦,使用到 NLP 的地方也很多,如搜尋引擎處理使用者查詢的糾錯,就用到通道噪聲模型實行糾錯處理。

相關文章