英文題目:N-LTP: An Open-source Neural Language Technology Platform for Chinese
中文題目:開源中文神經網絡語言技術平台N-LTP
論文位址:https://arxiv.org/pdf/2009.11616v4.pdf
領域:自然語言處理
發表時間:2021
作者:Wanxiang Che等,哈工大
出處:EMNLP
被引量:18+
代碼和資料:https://github.com/HIT-SCIR/ltp
閱讀時間:22.06.20
讀後感
它是一個基于Pytorch的針對中文的離線工具,帶訓練好的模型,最小模型僅164M。直接支援分詞,命名實體識别等六種任務,六種任務基本都圍繞分詞、确定詞的成份、關系。
實測:比想象中好用,如果用于識别人名,效果還可以,直接用于垂直領域,效果一般,可能還需要進一步精調。
文章貢獻
- 支援六項中文自然語言任務。
- 基于多任務架構,共享知識,減少記憶體用量,加快速度。
- 高擴充性:支援使用者引入的BERT類模型。
- 容易使用:支援多語言接口 C++, Python, Java, Rust
- 達到比之前模型更好的效果
設計和架構
圖-2展示了軟體架構,由一個多任務共享的編碼層和各任務别實作的解碼層組成。
共享編碼層
使用預訓練的模型 ELECTRA,輸入序列是s=(s1,s2,…,sn),加入符号将其變成 s = ([CLS], s1, s2, . . . , sn, [SEP]),請見BERT原理,輸出為對應的隐藏層編碼
H = (h[CLS],h1, h2, . . . , hn, h[SEP])。
中文分詞 CWS
将編碼後的H代入線性解碼器,對每個字元分類:
y是每個字元類别為各标簽的機率。
位置标注 POS
位置标注也是NLP中的一個重要任務,用于進一步的文法解析。目前的主流方法是将其視為序列标注問題。也是将編碼後的H作為輸入,輸出位置的标簽:
y是該位置字元屬于某一标簽的機率,其中i是位置資訊。
命名實體識别 NER
命名實體識别的目标是尋找實體的開始位置和結束位置,以及該實體的類别。工具中使用Adapted-Transformer方法,加入方向和距離特征:
最後一步也使用線性分類器計算每個詞的類别:
其中y是NER屬于某一标簽的機率。
依賴性解析 DEP
依賴性解析主要是分析句子的語義結構(詳見網上示例),尋找詞與詞之間的關系。軟體中具體使用了雙仿射神經網絡和einser算法。
語義依解析 SDP
與依賴性分析相似,語義依賴分析也是捕捉句子的語義結構。它将句子分析成一棵依存句法樹,描述出各個詞語之間的依存關系。也即指出了詞語之間在句法上的搭配關系,這種搭配關系是和語義相關聯的。具體包括:主謂關系SBV,動賓關系VOB,定中關系ATT等,詳見:
從0到1,手把手教你如何使用哈工大NLP工具——PyLTP 具方法是查找語義上互相關聯的詞對,并找到預定義的語義關系。實作也使用了雙仿射模型。
當p>0.5時,則認為詞 i 與 j 之間存在關聯。
語義角色标注 SRL
語義角色标注主要目标是識别句子以謂語為中心的結構,具體方法是使用端到端的SRL模型,它結合了雙仿射神經網絡和條件随機場作為編碼器,條件随機場公式如下:
其中f用于計算從yi,j-1到yi,j的轉移機率。
知識蒸餾
為了比較單獨訓練任務和多任務訓練,引入了BAM方法:
用法
安裝
$ pip install ltp
線上demo
http://ltp.ai/demo.html
示例代碼
from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["他叫湯姆去拿外衣。"])
pos = ltp.pos(hidden)
ner = ltp.ner(hidden)
srl = ltp.srl(hidden)
dep = ltp.dep(hidden)
sdp = ltp.sdp(hidden)
其中seg函數實作了分詞,并輸出了切分結果,及各詞的向量表示。
精調模型
下載下傳源碼
$ git clone https://github.com/HIT-SCIR/ltp
在其 ltp 目錄中有 task_xx.py,可訓練及調優模型,用法詳見py内部的示例。形如:
python ltp/task_segmention.py --data_dir=data/seg --num_labels=2 --max_epochs=10 --batch_size=16 --gpus=1 --precision=16 --auto_lr_find=lr
實驗
Stanza是支援一個多語言的NLP工具,中文模組化效果比較如下: