深度學習分句技術 [ALBERT+BiLSTM+CRF]
文章目的:當提取長文字的標籤時,解決標籤定位到具體子句的問題。
1。 簡介
目前,主流的中文分句技術絕大部分還是基於規則的。一方面,就技術而言容易實現;其次,邏輯簡單,便於理解。但是,完全基於規則的分句方法往往存在侷限性,對具體專案而言並不友好。
其次,也有透過unigram language model(ULM)或者 byte-pair-encoding (BPE)的方法來實現分句的技術。例如google做的sentencepiece ,雖然是用來分詞的,但是改造一下也可以成為分詞的技術。這種型別的方法簡稱為傳統的機器學習方法。
那麼,融入一部分
主觀的分句想法
到
一種完全基於規則分句的方法
中,無論是從技術方案的角度,還是實現演算法的角度,都是一件值得探討的工作。同時,我們會發現在一些具體專案中,這樣做顯得尤為重要。
下面,我們會透過引入深度學習的方法,從而實現融入的操作。
2。 演算法
我們將標點符號劃分為兩個型別,一個是確定可分的,另一個是非確定可分的。假設現在要對一個原始的句子或者文章進行分句,首先,在確定可分的位置基於規則演算法進行分句;其次,在非確定可分的位置使用深度學習模型來分句。
下面分別介紹下“確定可分”和“非確定可分”這兩個方法。
2.1. 確定可分
確定可分的標點符號可以理解為,當遇到這個標點符號時,即預設為當前位置必須分句。
對於確定可分的標點符號,使用了基於正則表示式的分句方法,其中包含標點符號:。!!??;;\n…~等
實現程式碼:
2.2.
非確定可分
非確定可分的標點符號則可以理解為,當遇到這個標點符號時,不能確定當前位置是否可分,那麼就存在可分和不可分兩種情況。
對於非確定可分的標點符號,使用了有監督的深度學習方法,其中包含3個標點符號:,, (分別為中文逗號、英文逗號、空格)
注意:對非確定可分的標點符號可根據專案需求制定。
2.1.1. ALBERT+BiLSTM+CRF
型別序列標註框架,我們構建了一個ALBERT+BiLSTM+CRF的深度學習框架。同時,我們使用了“BE”的思想,其中“B”表示拒句首或者句中的位置,“E”表示需要分句的位置(句尾)。
下面我們簡單看下實現的程式碼:
ALBERT token-vectors
BiLSTM Network
Full connection
Input length
Transition parameters
Load model
CRF Decoder
2.2.2. 標註
基於規則分句後,我們會得到大量的樣本。這時候,需要人工判斷這些樣本在指定的一些位置是否可分,這部分工作需要大量的人力資源。下面,我們給幾個標註的例子:
1。 繼續使用一段時間看看,後續有問題再來追評
2。 續航滿意,用一整天沒問題
3。 可以看到三星 Galaxy Note 系列的智慧型
4。 能正常開機,手感很好
其中,“B”表示不可分的位置,“E”表示可分的位置。
2.3. 規則分句+深度學習分句
例子:“續航滿意,用一整天沒問題。能正常開機,手感很好。”
首先,在兩個“。”的地方,是確定可分的。那麼,經過
規則分句
後,就得到了2個句子:“續航滿意,用一整天沒問題”和“能正常開機,手感很好”。
其次,對於這2個非確定可分的句子,需要分別使用到
深度學習
的方法。第1個句子經過深度學習的方法後,得到的還是1個句子:“續航滿意,用一整天沒問題”,第2個句子經過深度學習的方法後,得到了2個句子:“能正常開機”和“手感很好”。
最後,得到了3個句子,分別為:“續航滿意,用一整天沒問題”、“能正常開機”和“手感很好”。
3。 模型框架及收斂圖
3.1. 框架圖
3.2. 模型Loss變化曲線圖
從圖中可以看到,大概loss=0。2附近模型收斂。上圖中,是針對不同的引數做的訓練,所以收斂速度有所差異。
4。 結果展示
下面,透過兩個例子,我們來看一下在實際專案中的使用情況。在這個專案中,分句目的是為了精準定位標籤的位置。
例1,“趁著活動入手,最後實付八十一點多”,其中的前半句和後半句都是描述的“活動”相關的內容;
例2,“家裡現在用的一款已經服役七八年了,該換了”,其中的前半句和後半句都在描述“使用年限”的相關內容;
例3,“可摺疊攜帶方便,另外風力夠用,還有負離子功能。”。其中,“可摺疊攜帶方便”、“另外風力夠用”和“還有負離子功能”分別描述了3個不同的聚焦點。
例1:
例2:
5。 原始碼
深度學習分句