日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【NLP】基于预训练的中文NLP工具介绍:ltp 和 fastHan

發布時間:2025/3/12 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【NLP】基于预训练的中文NLP工具介绍:ltp 和 fastHan 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 1. 簡介

  • 2. ltp

    • 2.1 工作流程

    • 2.2 demo

    • 2.3 詞典分詞

    • 2.4 詞性標注集

    • 2.5 模型算法

  • 3. fastHan

    • 3.1 模型結構

    • 3.2 demo

    • 3.3 詞典分詞

    • 3.4 微調模型

    • 3.5 詞性標注集

  • 4. 速度對比實驗

1. 簡介

今天給大家介紹兩個中文自然語言處理工具:ltp 和 fastHan,兩者都支持基本的中文自然語言處理任務,包括中文分詞、詞性標注、命名實體識別和依存句法分析等。ltp 是由哈工大社會計算與信息檢索研究中心(HIT-SCIR)開源,基于 pytorch 與 transformers 實現的語言技術平臺,其內核為基于 Electra 的聯合模型。

paper:?N-LTP:?An?Open-source?Neural?Language?Technology?Platform?for?Chinese? link:?https://arxiv.org/pdf/2009.11616.pdf code:?https://github.com/HIT-SCIR/ltp

fastHan 是由復旦大學自然語言處理實驗室邱錫鵬組研發,基于 fastNLP 與 pytorch 實現的中文自然語言處理工具,其內核為基于 BERT 的聯合模型。

paper:?fastHan:?A?BERT-based?Multi-Task?Toolkit?for?Chinese?NLP link:?https://arxiv.org/pdf/2009.08633v2.pdf code:?https://github.com/fastnlp/fastHan

2. ltp

2.1 工作流程

如上為 N-LTP 的工作流程,輸入為中文語料庫,輸出為相對豐富和快速的分析結果,包括詞法分析(中文分詞、詞性標注和命名實體識別),依存句法分析和語義分析(語義依存分析和語義角色標注)等。

上圖展示了 N-LTP 的基本模型結構,主要由一個共享編碼器和幾個處理不同任務的解碼器組成。整個框架共享一個編碼器,用于利用在所有任務中共享的知識。每個任務分別使用各自的任務解碼器。所有任務通過一個聯合學習機制同時進行優化。此外,還引入了知識蒸餾技術,以鼓勵多任務模型性能超越其單任務教師模型。

2.2 demo

使用 pip 安裝 ltp:

pip?install?ltp

快速使用:

from?ltp?import?LTP model?=?LTP() #?默認加載?small?模型 #?model?=?LTP(path="small") #?path?可以為下載下來的包含ltp.model和vocab.txt的模型文件夾 #?也可以接受一些已注冊可自動下載的模型名: #?base/base1/base2/small/tiny/GSD/GSD+CRF/GSDSimp/GSDSimp+CRF sent_list?=?['俄羅斯總統普京決定在頓巴斯地區開展特別軍事行動。']#?中文分詞 seg,?hidden?=?model.seg(sent_list) #?詞性標注 pos?=?model.pos(hidden) #?命名實體識別 ner?=?model.ner(hidden) #?語義角色標注 srl?=?model.srl(hidden) #?依存句法分析 dep?=?model.dep(hidden) #?語義依存分析 sdp?=?model.sdp(hidden)

部分分析結果:

seg: [['俄羅斯',?'總統',?'普京',?'決定',?'在',?'頓巴斯',?'地區',?'開展',?'特別',?'軍事',?'行動',?'。']]pos: [['ns',?'n',?'nh',?'v',?'p',?'ns',?'n',?'v',?'a',?'n',?'v',?'wp']]ner: [[('Ns',?0,?0),?('Nh',?2,?2),?('Ns',?5,?6)]]

詞性標注結果中的每個元素表示分詞結果中相應的單詞詞性,命名實體識別結果中的每個元素為一個三元組,分別表示實體類型、單詞開始編號和單詞結束編號。

2.3 詞典分詞

LTP 允許用戶使用 init_dict 函數和 add_words 函數添加自定義詞典:

#?model.init_dict(user_dict_path) model.add_words(['俄羅斯總統',?'頓巴斯地區']) seg,?_?=?model.seg(sent_list)seg: [['俄羅斯總統',?'普京',?'決定',?'在',?'頓巴斯地區',?'開展',?'特別',?'軍事',?'行動',?'。']]

2.4 詞性標注集

LTP 使用的是 863 詞性標注集,其各個詞性含義如下表。

TagDescriptionExampleTagDescriptionExample
aadjective美麗niorganization name保險公司
bother noun-modifier大型, 西式nllocation noun城郊
cconjunction和, 雖然nsgeographical name北京
dadverbnttemporal noun近日, 明代
eexclamationnzother proper noun諾貝爾獎
gmorpheme茨, 甥oonomatopoeia嘩啦
hprefix阿, 偽ppreposition在, 把
iidiom百花齊放qquantity
jabbreviation公檢法rpronoun我們
ksuffix界, 率uauxiliary的, 地
mnumber一, 第一vverb跑, 學習
ngeneral noun蘋果wppunctuation,。!
nddirection noun右側wsforeign wordsCPU
nhperson name杜甫, 湯姆xnon-lexeme萄, 翱



zdescriptive words瑟瑟,匆匆

LTP 中的 NER 模塊識別三種命名實體,分別如下:

標記含義
Nh人名
Ni機構名
Ns地名

2.5 模型算法

默認加載的 small 模型各個模塊使用的算法如下,詳細介紹可參考原論文。

  • 分詞:Electra Small + Linear

  • 詞性:Electra Small + Linear

  • 命名實體:Electra Small + Adapted Transformer + Linear

  • 依存句法:Electra Small + BiAffine + Eisner

  • 語義依存:Electra Small + BiAffine

  • 語義角色:Electra Small + BiAffine + CRF

3. fastHan

3.1 模型結構

如上展示了 fastHan 的基本模型結構,其采用基于 BERT 的聯合模型在 13 個語料庫上進行多任務學習,可以處理中文分詞、詞性標注、命名實體識別和依存句法分析四項基本任務。

fastHan 有 base 和 large 兩個版本,large 模型使用 BERT 的前 8 層,base 模型使用 Theseus 策略將 large 模型的 8 層壓縮至 4 層。base 版本在總參數量 150MB 的情況下在各項任務上均有不錯表現,large 版本則接近甚至超越 SOTA 模型。

3.2 demo

使用 pip 安裝 fastHan:

pip?install?fastHan

快速使用:

from?fastHan?import?FastHan model?=?FastHan() #?默認加載base模型 #?使用large模型如下 #?model?=?FastHan(model_type="large") model.set_device(0) sent_list?=?['俄羅斯總統普京決定在頓巴斯地區開展特別軍事行動。']#?中文分詞 seg?=?model(sent_list) #?詞性標注 pos?=?model(sent_list,?target="POS") #?命名實體識別 ner?=?model(sent_list,?target="NER",?return_loc=True) #?依存句法分析 dep?=?model(sent_list,?target="Parsing")

分析結果:

seg: [['俄羅斯',?'總統',?'普京',?'決定',?'在',?'頓巴斯',?'地區',?'開展',?'特別',?'軍事',?'行動',?'。']]pos: [[['俄羅斯',?'NR'],?['總統',?'NN'],?['普京',?'NR'],?['決定',?'VV'],?['在',?'P'],?['頓巴斯',?'NR'],?['地區',?'NN'],?['開展',?'VV'],?['特別',?'JJ'],?['軍事',?'NN'],?['行動',?'NN'],?['。',?'PU']]]ner: [[['俄羅斯',?'NS',?0],?['普京',?'NR',?5],?['頓巴斯',?'NS',?10]]]dep: [[['俄羅斯',?2,?'nn',?'NR'],?['總統',?3,?'nn',?'NN'],?['普京',?8,?'xsubj',?'NR'],?['決定',?0,?'root',?'VV'],?['在',?8,?'prep',?'P'],?['頓巴斯',?7,?'nn',?'NR'],?['地區',?5,?'pobj',?'NN'],?['開展',?4,?'ccomp',?'VV'],?['特別',?11,?'amod',?'JJ'],?['軍事',?11,?'nn',?'NN'],?['行動',?8,?'dobj',?'NN'],?['。',?4,?'punct',?'PU']]]

當設置 return_loc=True 時,結果會返回單詞的第一個字符在原始輸入句子中的位置。

3.3 詞典分詞

fastHan 允許用戶使用 add_user_dict 函數添加自定義詞典,該詞典會影響模型在分詞任務中的權重分配。進行分詞任務時,首先利用詞典和正向、反向最大匹配法進行分詞,并將詞典方法的分詞結果乘上權重系數融入到深度學習模型的結果中。add_user_dict 函數的參數可以是由單詞組成的列表,也可以是文件路徑(文件中的內容是由 '\n' 分隔開的詞)。

用戶可使用 set_user_dict_weight 函數設置自定義詞典中的單詞權重系數(若不設置,默認為 0.05)。

model.add_user_dict(["俄羅斯總統",?"頓巴斯地區"]) #?自定義詞典中的單詞權重系數默認為0.05 model.set_user_dict_weight() seg1?=?model(sent_list,?use_dict=True) #?自定義詞典中的單詞權重系數設置為1.0 model.set_user_dict_weight(1.0) seg2?=?model(sent_list,?use_dict=True)seg1: [['俄羅斯',?'總統',?'普京',?'決定',?'在',?'頓巴斯',?'地區',?'開展',?'特別',?'軍事',?'行動',?'。']]seg2: [['俄羅斯總統',?'普京',?'決定',?'在',?'頓巴斯地區',?'開展',?'特別',?'軍事',?'行動',?'。']]

3.4 微調模型

用戶可以使用 finetune 函數在新的數據集上進行微調:

from?fastHan?import?FastHan model?=?FastHan(model_type='base') model.set_device(0) #?traindata?file?path cws_data?=?'train.dat' model.finetune(data_path=cws_data,?task='CWS',?save=True,?save_url='finetuned_model')

微調時需要將用于訓練的數據按格式放到一個文件里。對于中文分詞任務,要求每行一條句子,每個詞用空格分隔開:

上海?浦東?開發?與?法制?建設?同步 俄羅斯總統?普京?決定?在?頓巴斯地區?開展?特別?軍事?行動?。

對于命名實體識別任務,要求使用 B-M-E-S-O 標注的 NT/NS/NR 輸入格式:

札?B-NS 幌?E-NS 雪?O 國?O 廟?O 會?O 。O主?O 道?O 上?O 的?O 雪?O...

對于詞性標注和依存句法解析任務,要求按照 CTB9 的格式與標簽集。

3.5 詞性標注集

fastHan 使用 CTB 詞性標注集,其各個詞性含義如下表。

標簽描述含義標簽描述含義
ADadverbs副詞MMeasure word(including classifiers)量詞,例子:“個”
ASAspect marker體態詞,體標記(例如:了,在,著,過)MSPSome particles例子:“所”
BA把 in ba-const“把”、“將”的詞性標記NNCommon nouns普通名詞
CCCoordinating conjunction并列連詞,“和”NRProper nouns專有名詞
CDCardinal numbers數字,“一百”NTTemporal nouns時序詞,表示時間的名詞
CSSubordinating conj從屬連詞(例子:若,如果,如…)ODOrdinal numbers序數詞,“第一”
DEC的 for relative-clause etc“的”詞性標記ONOnomatopoeia擬聲詞,“哈哈”
DEGAssociative聯結詞“的”PPreposition (excluding 把 and 被)介詞
DERin V-de construction, and V-de-R“得”PNpronouns代詞
DEVbefore VPPUPunctuations標點
DTDeterminer限定詞,“這”SBin long bei-construction例子:“被,給”
ETCTag for words, in coordination phrase等,等等SPSentence-final particle句尾小品詞,“嗎”
FWForeign words例子:ISOVAPredicative adjective表語形容詞,“紅”
IJinterjetion感嘆詞VCCopula系動詞,“是”
JJNoun-modifier other than nouns
VE有 as the main verb“有”
LBin long bei-construction例子:被,給VVOther verbs其他動詞
LCLocalizer定位詞,例子:“里”


fastHan 中的 NER 模塊識別三種命名實體,分別如下:

標記含義
NR人名
NT機構名
NS地名

4. 速度對比實驗

筆者在 GPU 上(torch1.7 + cuda10.2 + cudnn7.6.5)對比了 ltp 和 fastHan 的處理速度。從中文維基百科中抽取了 10098 條長度為 128 左右的句子,分別使用 ltp-tiny、ltp-small、ltp-base 和 fastHan-base、fastHan-large 模型進行處理,batch size 設置為 64,統計不同任務的處理速度如下表所示:

modelcws_speed (句/s)pos_speed (句/s)ner_speed (句/s)
ltp-tiny613614596
ltp-small451450413
ltp-base189186178
fastHan-base199194194
fastHan-large144143145

可以看出,ltp-tiny 和 ltp-small 模型的處理速度顯著快于 fastHan,fashHan-base 的處理速度略快于 ltp-base,fastHan-large 的處理速度最慢。通常情況下,ltp-small 的性能已經非常不錯,對處理速度要求高的場景建議使用 ltp 默認的 small 模型。

往期精彩回顧適合初學者入門人工智能的路線及資料下載(圖文+視頻)機器學習入門系列下載中國大學慕課《機器學習》(黃海廣主講)機器學習及深度學習筆記等資料打印《統計學習方法》的代碼復現專輯 AI基礎下載機器學習交流qq群955171419,加入微信群請掃碼:

總結

以上是生活随笔為你收集整理的【NLP】基于预训练的中文NLP工具介绍:ltp 和 fastHan的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。