https://gitee.com/paddlepaddle/PaddleNLP/tree/develop/examples/lexical_analysis/#1-%E7%AE%80%E4%BB%8B
詞法分析
1. 簡(jiǎn)介
詞法分析任務(wù)的輸入是一個(gè)字符串(我們后面使用『句子』來(lái)指代它),而輸出是句子中的詞邊界和詞性、實(shí)體類別。序列標(biāo)注是詞法分析的經(jīng)典建模方式,我們使用基于 GRU 的網(wǎng)絡(luò)結(jié)構(gòu)學(xué)習(xí)特征,將學(xué)習(xí)到的特征接入 CRF 解碼層完成序列標(biāo)注。模型結(jié)構(gòu)如下所示:GRU
-CRF
-MODEL輸入采用 one
-hot 方式表示,每個(gè)字以一個(gè) id 表示
one
-hot 序列通過(guò)字表,轉(zhuǎn)換為實(shí)向量表示的字向量序列;
字向量序列作為雙向 GRU 的輸入,學(xué)習(xí)輸入序列的特征表示,得到新的特性表示序列,我們堆疊了兩層雙向 GRU 以增加學(xué)習(xí)能力;
CRF 以 GRU 學(xué)習(xí)到的特征為輸入,以標(biāo)記序列為監(jiān)督信號(hào),實(shí)現(xiàn)序列標(biāo)注。
快速開(kāi)始
數(shù)據(jù)準(zhǔn)備
我們提供了少數(shù)樣本用以示例輸入數(shù)據(jù)格式。執(zhí)行以下命令,下載并解壓示例數(shù)據(jù)集:python download
.py
--data_dir
./
訓(xùn)練使用的數(shù)據(jù)可以由用戶根據(jù)實(shí)際的應(yīng)用場(chǎng)景,自己組織數(shù)據(jù)。除了第一行是 text_a\tlabel 固定的開(kāi)頭,后面的每行數(shù)據(jù)都是由兩列組成,以制表符分隔,第一列是 utf
-8 編碼的中文文本,以 \
002 分割,第二列是對(duì)應(yīng)每個(gè)字的標(biāo)注,以 \
002 分隔。我們采用 IOB2 標(biāo)注體系,即以 X
-B 作為類型為 X 的詞的開(kāi)始,以 X
-I 作為類型為 X 的詞的持續(xù),以 O 表示不關(guān)注的字(實(shí)際上,在詞性、專名聯(lián)合標(biāo)注中,不存在 O )。示例如下:除\
002了\
002他\
002續(xù)\
002任\
002十\
002二\
002屆\
002政\
002協(xié)\
002委\
002員\
002,\
002馬\
002化\
002騰\
002,\
002雷\
002軍\
002,\
002李\
002彥\
002宏\
002也\
002被\
002推\
002選\
002為\
002新\
002一\
002屆\
002全\
002國(guó)\
002人\
002大\
002代\
002表\
002或\
002全\
002國(guó)\
002政\
002協(xié)\
002委\
002員 p
-B\
002p
-I\
002r
-B\
002v
-B\
002v
-I\
002m
-B\
002m
-I\
002m
-I\
002ORG
-B\
002ORG
-I\
002n
-B\
002n
-I\
002w
-B\
002PER
-B\
002PER
-I\
002PER
-I\
002w
-B\
002PER
-B\
002PER
-I\
002w
-B\
002PER
-B\
002PER
-I\
002PER
-I\
002d
-B\
002p
-B\
002v
-B\
002v
-I\
002v
-B\
002a
-B\
002m
-B\
002m
-I\
002ORG
-B\
002ORG
-I\
002ORG
-I\
002ORG
-I\
002n
-B\
002n
-I\
002c
-B\
002n
-B\
002n
-I\
002ORG
-B\
002ORG
-I\
002n
-B\
002n
-I
其中詞性和專名類別標(biāo)簽集合如下表,包含詞性標(biāo)簽
24 個(gè)(小寫(xiě)字母),專名類別標(biāo)簽
4 個(gè)(大寫(xiě)字母)。這里需要說(shuō)明的是,人名、地名、機(jī)構(gòu)名和時(shí)間四個(gè)類別,存在(PER
/ LOC
/ ORG
/ TIME 和 nr
/ ns
/ nt
/ t)兩套標(biāo)簽,被標(biāo)注為第二套標(biāo)簽的詞,是模型判斷為低置信度的人名、地名、機(jī)構(gòu)名和時(shí)間詞。開(kāi)發(fā)者可以基于這兩套標(biāo)簽,在四個(gè)類別的準(zhǔn)確、召回之間做出自己的權(quán)衡。標(biāo)簽 含義 標(biāo)簽 含義 標(biāo)簽 含義 標(biāo)簽 含義
n 普通名詞 f 方位名詞 s 處所名詞 t 時(shí)間
nr 人名 ns 地名 nt 機(jī)構(gòu)名 nw 作品名
nz 其他專名 v 普通動(dòng)詞 vd 動(dòng)副詞 vn 名動(dòng)詞
a 形容詞 ad 副形詞 an 名形詞 d 副詞
m 數(shù)量詞 q 量詞 r 代詞 p 介詞
c 連詞 u 助詞 xc 其他虛詞 w 標(biāo)點(diǎn)符號(hào)
PER 人名 LOC 地名 ORG 機(jī)構(gòu)名 TIME 時(shí)間
模型訓(xùn)練
單卡訓(xùn)練
啟動(dòng)方式如下:python train
.py \
--data_dir
./lexical_analysis_dataset_tiny \
--model_save_dir
./save_dir \
--epochs
10 \
--batch_size
32 \
--device gpu \#
--init_checkpoint
./save_dir
/final
其中參數(shù)釋義如下:data_dir
: 數(shù)據(jù)集所在文件夾路徑
.
model_save_dir
: 訓(xùn)練期間模型保存路徑。
epochs
: 模型訓(xùn)練迭代輪數(shù)。
batch_size
: 表示每次迭代每張卡上的樣本數(shù)目。
device
: 訓(xùn)練使用的設(shè)備
, 'gpu'表示使用GPU
, 'xpu'表示使用百度昆侖卡
, 'cpu'表示使用CPU。
init_checkpoint
: 模型加載路徑,通過(guò)設(shè)置init_checkpoint可以啟動(dòng)增量訓(xùn)練。
多卡訓(xùn)練
啟動(dòng)方式如下:python
-m paddle
.distributed
.launch
--gpus
"0,1" train
.py \
--data_dir
./lexical_analysis_dataset_tiny \
--model_save_dir
./save_dir \
--epochs
10 \
--batch_size
32 \
--device gpu \#
--init_checkpoint
./save_dir
/final
模型評(píng)估
通過(guò)加載訓(xùn)練保存的模型,可以對(duì)測(cè)試集數(shù)據(jù)進(jìn)行驗(yàn)證,啟動(dòng)方式如下:python eval
.py
--data_dir
./lexical_analysis_dataset_tiny \
--init_checkpoint
./save_dir
/model_100
.pdparams \
--batch_size
32 \
--device gpu
其中
./save_dir
/model_100
.pdparams是訓(xùn)練過(guò)程中保存的參數(shù)文件,請(qǐng)更換為實(shí)際得到的訓(xùn)練保存路徑。模型導(dǎo)出
使用動(dòng)態(tài)圖訓(xùn)練結(jié)束之后,還可以將動(dòng)態(tài)圖參數(shù)導(dǎo)出成靜態(tài)圖參數(shù),具體代碼見(jiàn)export_model
.py。靜態(tài)圖參數(shù)保存在output_path指定路徑中。運(yùn)行方式:python export_model
.py
--data_dir
=./lexical_analysis_dataset_tiny
--params_path
=./save_dir
/model_100
.pdparams
--output_path
=./infer_model
/static_graph_params
其中
./save_dir
/model_100
.pdparams是訓(xùn)練過(guò)程中保存的參數(shù)文件,請(qǐng)更換為實(shí)際得到的訓(xùn)練保存路徑。params_path是指動(dòng)態(tài)圖訓(xùn)練保存的參數(shù)路徑
output_path是指靜態(tài)圖參數(shù)導(dǎo)出路徑。
導(dǎo)出模型之后,可以用于部署,deploy
/python
/predict
.py文件提供了python部署預(yù)測(cè)示例。運(yùn)行方式:python deploy
/python
/predict
.py
--model_file
=infer_model
/static_graph_params
.pdmodel
--params_file
=infer_model
/static_graph_params
.pdiparams
模型預(yù)測(cè)
對(duì)無(wú)標(biāo)簽數(shù)據(jù)可以啟動(dòng)模型預(yù)測(cè):python predict
.py
--data_dir
./lexical_analysis_dataset_tiny \
--init_checkpoint
./save_dir
/model_100
.pdparams \
--batch_size
32 \
--device gpu
得到類似以下輸出:
(大學(xué)
, n
)(學(xué)籍
, n
)(證明
, n
)(怎么
, r
)(開(kāi)
, v
)
(電車
, n
)(的
, u
)(英文
, nz
)
(什么
, r
)(是
, v
)(司法
, n
)(鑒定人
, vn
)
預(yù)訓(xùn)練模型
如果您希望使用已經(jīng)預(yù)訓(xùn)練好了的LAC模型完成詞法分析任務(wù),請(qǐng)參考:Lexical Analysis of ChinesePaddleHub分詞模型
如果您希望使用已經(jīng)預(yù)訓(xùn)練好了的LAC模型完成詞法分析任務(wù),請(qǐng)參考:
https://github.com/baidu/lac
工具介紹
LAC全稱Lexical Analysis of Chinese,是百度自然語(yǔ)言處理部研發(fā)的一款聯(lián)合的詞法分析工具,實(shí)現(xiàn)中文分詞、詞性標(biāo)注、專名識(shí)別等功能。該工具具有以下特點(diǎn)與優(yōu)勢(shì):效果好:通過(guò)深度學(xué)習(xí)模型聯(lián)合學(xué)習(xí)分詞、詞性標(biāo)注、專名識(shí)別任務(wù),詞語(yǔ)重要性,整體效果F1值超過(guò)
0.91,詞性標(biāo)注F1值超過(guò)
0.94,專名識(shí)別F1值超過(guò)
0.85,效果業(yè)內(nèi)領(lǐng)先。
效率高:精簡(jiǎn)模型參數(shù),結(jié)合Paddle預(yù)測(cè)庫(kù)的性能優(yōu)化,CPU單線程性能達(dá)
800QPS,效率業(yè)內(nèi)領(lǐng)先。
可定制:實(shí)現(xiàn)簡(jiǎn)單可控的干預(yù)機(jī)制,精準(zhǔn)匹配用戶詞典對(duì)模型進(jìn)行干預(yù)。詞典支持長(zhǎng)片段形式,使得干預(yù)更為精準(zhǔn)。
調(diào)用便捷:支持一鍵安裝,同時(shí)提供了Python、Java和C
++調(diào)用接口與調(diào)用示例,實(shí)現(xiàn)快速調(diào)用和集成。
支持移動(dòng)端
: 定制超輕量級(jí)模型,體積僅為
2M,主流千元手機(jī)單線程性能達(dá)
200QPS,滿足大多數(shù)移動(dòng)端應(yīng)用的需求,同等體積量級(jí)效果業(yè)內(nèi)領(lǐng)先。
安裝與使用
在此我們主要介紹Python安裝與使用,其他語(yǔ)言使用:C
++
JAVA
Android
安裝說(shuō)明
代碼兼容Python2
/3全自動(dòng)安裝
: pip install lac半自動(dòng)下載:先下載http
://pypi
.python
.org
/pypi
/lac
/,解壓后運(yùn)行 python setup
.py install安裝完成后可在命令行輸入lac或lac
--segonly
,lac
--rank啟動(dòng)服務(wù),進(jìn)行快速體驗(yàn)。國(guó)內(nèi)網(wǎng)絡(luò)可使用百度源安裝,安裝速率更快:pip install lac
-i https
://mirror
.baidu
.com
/pypi
/simple功能與使用
分詞
代碼示例:
from LAC import LAC# 裝載分詞模型
lac
= LAC(mode
='seg')# 單個(gè)樣本輸入,輸入為Unicode編碼的字符串
text
= u
"LAC是個(gè)優(yōu)秀的分詞工具"
seg_result
= lac
.run(text
)# 批量樣本輸入
, 輸入為多個(gè)句子組成的list,平均速率會(huì)更快
texts
= [u
"LAC是個(gè)優(yōu)秀的分詞工具", u
"百度是一家高科技公司"]
seg_result
= lac
.run(texts
)
輸出:
【單樣本】:seg_result
= [LAC
, 是
, 個(gè)
, 優(yōu)秀
, 的
, 分詞
, 工具
]
【批量樣本】:seg_result
= [[LAC
, 是
, 個(gè)
, 優(yōu)秀
, 的
, 分詞
, 工具
], [百度
, 是
, 一家
, 高科技
, 公司
]]
詞性標(biāo)注與實(shí)體識(shí)別
代碼示例:
from LAC import LAC# 裝載LAC模型
lac
= LAC(mode
='lac')# 單個(gè)樣本輸入,輸入為Unicode編碼的字符串
text
= u
"LAC是個(gè)優(yōu)秀的分詞工具"
lac_result
= lac
.run(text
)# 批量樣本輸入
, 輸入為多個(gè)句子組成的list,平均速率更快
texts
= [u
"LAC是個(gè)優(yōu)秀的分詞工具", u
"百度是一家高科技公司"]
lac_result
= lac
.run(texts
)
輸出:
每個(gè)句子的輸出其切詞結(jié)果word_list以及對(duì)每個(gè)單詞的標(biāo)注tags_list,其格式為(word_list
, tags_list
)【單樣本】: lac_result
= ([百度
, 是
, 一家
, 高科技
, 公司
], [ORG
, v
, m
, n
, n
])
【批量樣本】:lac_result
= [([百度
, 是
, 一家
, 高科技
, 公司
], [ORG
, v
, m
, n
, n
]),([LAC
, 是
, 個(gè)
, 優(yōu)秀
, 的
, 分詞
, 工具
], [nz
, v
, q
, a
, u
, n
, n
])]
詞性和專名類別標(biāo)簽集合如下表,其中我們將最常用的
4個(gè)專名類別標(biāo)記為大寫(xiě)的形式:標(biāo)簽 含義 標(biāo)簽 含義 標(biāo)簽 含義 標(biāo)簽 含義
n 普通名詞 f 方位名詞 s 處所名詞 nw 作品名
nz 其他專名 v 普通動(dòng)詞 vd 動(dòng)副詞 vn 名動(dòng)詞
a 形容詞 ad 副形詞 an 名形詞 d 副詞
m 數(shù)量詞 q 量詞 r 代詞 p 介詞
c 連詞 u 助詞 xc 其他虛詞 w 標(biāo)點(diǎn)符號(hào)
PER 人名 LOC 地名 ORG 機(jī)構(gòu)名 TIME 時(shí)間
詞語(yǔ)重要性
代碼示例:
from LAC import LAC# 裝載詞語(yǔ)重要性模型
lac
= LAC(mode
='rank')# 單個(gè)樣本輸入,輸入為Unicode編碼的字符串
text
= u
"LAC是個(gè)優(yōu)秀的分詞工具"
rank_result
= lac
.run(text
)# 批量樣本輸入
, 輸入為多個(gè)句子組成的list,平均速率會(huì)更快
texts
= [u
"LAC是個(gè)優(yōu)秀的分詞工具", u
"百度是一家高科技公司"]
rank_result
= lac
.run(texts
)
輸出:
【單樣本】:rank_result
= [['LAC', '是', '個(gè)', '優(yōu)秀', '的', '分詞', '工具'], [nz
, v
, q
, a
, u
, n
, n
],[3, 0, 0, 2, 0, 3, 1]]
【批量樣本】:rank_result
= [(['LAC', '是', '個(gè)', '優(yōu)秀', '的', '分詞', '工具'], [nz
, v
, q
, a
, u
, n
, n
], [3, 0, 0, 2, 0, 3, 1]), (['百度', '是', '一家', '高科技', '公司'], [ORG
, v
, m
, n
, n
], [3, 0, 2, 3, 1])]
詞語(yǔ)重要性各類別標(biāo)簽集合如下表,我們使用
4-Level梯度進(jìn)行分類:標(biāo)簽 含義 常見(jiàn)于詞性
0 query中表述的冗余詞 p
, w
, xc
...
1 query中限定較弱的詞 r
, c
, u
...
2 query中強(qiáng)限定的詞 n
, s
, v
...
3 query中的核心詞 nz
, nw
, LOC
...
定制化功能
在模型輸出的基礎(chǔ)上,LAC還支持用戶配置定制化的切分結(jié)果和專名類型輸出。當(dāng)模型預(yù)測(cè)匹配到詞典的中的item時(shí),會(huì)用定制化的結(jié)果替代原有結(jié)果。為了實(shí)現(xiàn)更加精確的匹配,我們支持以由多個(gè)單詞組成的長(zhǎng)片段作為一個(gè)item。我們通過(guò)裝載詞典文件的形式實(shí)現(xiàn)該功能,詞典文件每行表示一個(gè)定制化的item,由一個(gè)單詞或多個(gè)連續(xù)的單詞組成,每個(gè)單詞后使用
'/'表示標(biāo)簽,如果沒(méi)有
'/'標(biāo)簽則會(huì)使用模型默認(rèn)的標(biāo)簽。每個(gè)item單詞數(shù)越多,干預(yù)效果會(huì)越精準(zhǔn)。詞典文件示例這里僅作為示例,展現(xiàn)各種需求情況下的結(jié)果。后續(xù)還將開(kāi)放以通配符配置詞典的模式,敬請(qǐng)期待。春天
/SEASON
花
/n 開(kāi)
/v
秋天的風(fēng)
落 陽(yáng)
代碼示例
from LAC import LAC
lac
= LAC()# 裝載干預(yù)詞典
, sep參數(shù)表示詞典文件采用的分隔符,為None時(shí)默認(rèn)使用空格或制表符
'\t'
lac
.load_customization('custom.txt', sep
=None
)# 干預(yù)后結(jié)果
custom_result
= lac
.run(u
"春天的花開(kāi)秋天的風(fēng)以及冬天的落陽(yáng)")
以輸入“春天的花開(kāi)秋天的風(fēng)以及冬天的落陽(yáng)”為例,原本輸出結(jié)果為:
春天
/TIME 的
/u 花開(kāi)
/v 秋天
/TIME 的
/u 風(fēng)
/n 以及
/c 冬天
/TIME 的
/u 落陽(yáng)
/n
添加示例中的詞典文件后的結(jié)果為:
春天
/SEASON 的
/u 花
/n 開(kāi)
/v 秋天的風(fēng)
/n 以及
/c 冬天
/TIME 的
/u 落
/n 陽(yáng)
/n
增量訓(xùn)練
我們也提供了增量訓(xùn)練的接口,用戶可以使用自己的數(shù)據(jù),進(jìn)行增量訓(xùn)練,首先需要將數(shù)據(jù)轉(zhuǎn)換為模型輸入的格式,并且所有數(shù)據(jù)文件均為
"UTF-8"編碼:
1. 分詞訓(xùn)練
數(shù)據(jù)樣例與大多數(shù)開(kāi)源分詞數(shù)據(jù)集格式一致,使用空格作為單詞切分標(biāo)記,如下所示:LAC 是 個(gè) 優(yōu)秀 的 分詞 工具 。
百度 是 一家 高科技 公司 。
春天 的 花開(kāi) 秋天 的 風(fēng) 以及 冬天 的 落陽(yáng) 。
代碼示例
from LAC import LAC# 選擇使用分詞模型
lac
= LAC(mode
= 'seg')# 訓(xùn)練和測(cè)試數(shù)據(jù)集,格式一致
train_file
= "./data/seg_train.tsv"
test_file
= "./data/seg_test.tsv"
lac
.train(model_save_dir
='./my_seg_model/',train_data
=train_file
, test_data
=test_file
)# 使用自己訓(xùn)練好的模型
my_lac
= LAC(model_path
='my_seg_model')
2. 詞法分析訓(xùn)練
樣例數(shù)據(jù)在分詞數(shù)據(jù)的基礎(chǔ)上,每個(gè)單詞以“
/type”的形式標(biāo)記其詞性或?qū)嶓w類別。值得注意的是,詞法分析的訓(xùn)練目前僅支持標(biāo)簽體系與我們一致的數(shù)據(jù)。后續(xù)也會(huì)開(kāi)放支持新的標(biāo)簽體系,敬請(qǐng)期待。LAC
/nz 是
/v 個(gè)
/q 優(yōu)秀
/a 的
/u 分詞
/n 工具
/n 。
/w
百度
/ORG 是
/v 一家
/m 高科技
/n 公司
/n 。
/w
春天
/TIME 的
/u 花開(kāi)
/v 秋天
/TIME 的
/u 風(fēng)
/n 以及
/c 冬天
/TIME 的
/u 落陽(yáng)
/n 。
/w
代碼示例
from LAC import LAC# 選擇使用默認(rèn)的詞法分析模型
lac
= LAC()# 訓(xùn)練和測(cè)試數(shù)據(jù)集,格式一致
train_file
= "./data/lac_train.tsv"
test_file
= "./data/lac_test.tsv"
lac
.train(model_save_dir
='./my_lac_model/',train_data
=train_file
, test_data
=test_file
)# 使用自己訓(xùn)練好的模型
my_lac
= LAC(model_path
='my_lac_model')
文件結(jié)構(gòu)
.
├── python # Python調(diào)用的腳本
├── c
++ # C
++調(diào)用的代碼
├── java # Java調(diào)用的代碼
├── Android # Android調(diào)用的示例
├── README
.md # 本文件
└── CMakeList
.txt # 編譯C
++和Java調(diào)用的腳本
在論文中引用LAC
如果您的學(xué)術(shù)工作成果中使用了LAC,請(qǐng)您增加下述引用。我們非常欣慰LAC能夠?qū)δ膶W(xué)術(shù)工作帶來(lái)幫助。@article
{jiao2018LAC
,title
={Chinese Lexical Analysis with Deep Bi
-GRU
-CRF Network
},author
={Jiao
, Zhenyu
and Sun
, Shuqi
and Sun
, Ke
},journal
={arXiv preprint arXiv
:1807.01882},year
={2018},url
={https
://arxiv
.org
/abs
/1807.01882}
}
PaddleHub分詞模型
https://www.paddlepaddle.org.cn/hubdetail?name=lac&en_category=LexicalAnalysis
便捷地獲取PaddlePaddle生態(tài)下的預(yù)訓(xùn)練模型,完成模型的管理和一鍵預(yù)測(cè)。配合使用Fine
-tune API,可以基于大規(guī)模預(yù)訓(xùn)練模型快速完成遷移學(xué)習(xí),讓預(yù)訓(xùn)練模型能更好地服務(wù)于用戶特定場(chǎng)景的應(yīng)用
PaddleHub 首頁(yè)文本
- 詞法分析lac
lac
類別文本
- 詞法分析
網(wǎng)絡(luò)BiGRU
+CRF
數(shù)據(jù)集百度自建數(shù)據(jù)集
模型概述
Lexical Analysis of Chinese,簡(jiǎn)稱 LAC,是一個(gè)聯(lián)合的詞法分析模型,能整體性地完成中文分詞、詞性標(biāo)注、專名識(shí)別任務(wù)。在百度自建數(shù)據(jù)集上評(píng)測(cè),LAC效果:Precision
=88.0%,Recall
=88.7%,F1
-Score
=88.4%。該P(yáng)addleHub Module支持預(yù)測(cè)。
選擇模型版本進(jìn)行安裝
$ hub install lac
==2.2.0LAC模型框架圖更多詳情請(qǐng)參考LAC論文命令行預(yù)測(cè)示例
$ hub run lac
--input_text
"今天是個(gè)好日子"
$ hub run lac
--input_file test
.txt
--user_dict user
.dict
test
.txt 存放待分詞文本, 如:今天是個(gè)好日子
今天天氣晴朗
user
.dict為用戶自定義詞典,可以不指定,當(dāng)指定自定義詞典時(shí),可以干預(yù)默認(rèn)分詞結(jié)果。詞典文件每行表示一個(gè)定制化的item,由一個(gè)單詞或多個(gè)連續(xù)的單詞組成,每個(gè)單詞后使用
'/'表示標(biāo)簽,如果沒(méi)有
'/'標(biāo)簽則會(huì)使用模型默認(rèn)的標(biāo)簽。每個(gè)item單詞數(shù)越多,干預(yù)效果會(huì)越精準(zhǔn)。春天
/SEASON
花
/n 開(kāi)
/v
秋天的風(fēng)
落 陽(yáng)
Note該P(yáng)addleHub Module使用詞典干預(yù)功能時(shí),依賴于第三方庫(kù)pyahocorasick,請(qǐng)自行安裝
請(qǐng)不要直接復(fù)制示例文本使用,復(fù)制后的格式可能存在問(wèn)題
LAC API 說(shuō)明
__init__(user_dict
=None
)
構(gòu)造LAC對(duì)象參數(shù)
user_dict(str
): 自定義詞典路徑。如果需要使用自定義詞典,則可通過(guò)該參數(shù)設(shè)置,否則不用傳入該參數(shù)。
cut(text
, use_gpu
=False
, batch_size
=1, return_tag
=True
)
lac預(yù)測(cè)接口,預(yù)測(cè)輸入句子的分詞結(jié)果參數(shù)
text(str
or list
): 待預(yù)測(cè)數(shù)據(jù),單句預(yù)測(cè)數(shù)據(jù)(str類型)或者批量預(yù)測(cè)(list,每個(gè)元素為str
use_gpu(bool): 是否使用GPU預(yù)測(cè),如果使用GPU預(yù)測(cè),則在預(yù)測(cè)之前,請(qǐng)?jiān)O(shè)置CUDA_VISIBLE_DEVICES環(huán)境變量,否則不用設(shè)置
batch_size(int): 批處理大小
return_tag(bool): 預(yù)測(cè)結(jié)果是否需要返回分詞標(biāo)簽結(jié)果
lexical_analysis(texts
=[], data
={}, use_gpu
=False
, batch_size
=1, return_tag
=True
)
該接口將會(huì)在未來(lái)版本被廢棄,如有需要,請(qǐng)使用cut接口預(yù)測(cè)lac預(yù)測(cè)接口,預(yù)測(cè)輸入句子的分詞結(jié)果參數(shù)
texts(list
): 待預(yù)測(cè)數(shù)據(jù),如果使用texts參數(shù),則不用傳入data參數(shù),二選一即可
data(dict
): 預(yù)測(cè)數(shù)據(jù),key必須為text,value是帶預(yù)測(cè)數(shù)據(jù)。如果使用data參數(shù),則不用傳入texts參數(shù),二選一即可。建議使用texts參數(shù),data參數(shù)后續(xù)會(huì)廢棄。
use_gpu(bool): 是否使用GPU預(yù)測(cè)
batch_size(int): 批處理大小
return_tag(bool): 預(yù)測(cè)結(jié)果是否需要返回分詞標(biāo)簽結(jié)果
返回
results(list
): 分詞結(jié)果
context(trainable
=False
)
獲取lac的預(yù)訓(xùn)練program以及program的輸入輸出變量參數(shù)
trainable(bool): trainable
=True表示program中的參數(shù)在Fine
-tune時(shí)需要微調(diào),否則保持不變
返回
inputs(dict
): program的輸入變量
outputs(dict
): program的輸出變量
main_program(Program
): 帶有預(yù)訓(xùn)練參數(shù)的program
set_user_dict(dict_path
)
加載用戶自定義詞典參數(shù)
dict_path(str
): 自定義詞典路徑
del_user_dict()
刪除自定義詞典
get_tags()
獲取lac的標(biāo)簽返回
tag_name_dict(dict
): lac的標(biāo)簽
get_vocab_path()
獲取預(yù)訓(xùn)練時(shí)使用的詞匯表返回
vocab_path(str
): 詞匯表路徑
代碼示例import paddlehub as hublac
= hub
.Module(name
="lac")
test_text
= ["今天是個(gè)好日子", "天氣預(yù)報(bào)說(shuō)今天要下雨", "下一班地鐵馬上就要到了"]results
= lac
.cut(text
=test_text
, use_gpu
=False
, batch_size
=1, return_tag
=True
)for result in results
:print(result
['word'])print(result
['tag'])
LAC 服務(wù)部署
PaddleHub Serving可以部署一個(gè)在線詞法分析服務(wù),可以將此接口用于詞法分析、在線分詞等在線web應(yīng)用。第一步:啟動(dòng)PaddleHub Serving
運(yùn)行啟動(dòng)命令:$ hub serving start
-c serving_config
.json
serving_config
.json的內(nèi)容如下:
{"modules_info": {"lac": {"init_args": {"version": "2.2.0""user_dict": "./test_dict.txt"}}},"port": 8866,"use_singleprocess": false,"workers": 2
}
其中user_dict含義為自定義詞典路徑,如果不使用lac自定義詞典功能,則可以不填入。這樣就完成了一個(gè)詞法分析服務(wù)化API的部署,默認(rèn)端口號(hào)為
8866。NOTE
: 如使用GPU預(yù)測(cè),則需要在啟動(dòng)服務(wù)之前,請(qǐng)?jiān)O(shè)置CUDA_VISIBLE_DEVICES環(huán)境變量,否則不用設(shè)置。第二步:發(fā)送預(yù)測(cè)請(qǐng)求
配置好服務(wù)端,以下數(shù)行代碼即可實(shí)現(xiàn)發(fā)送預(yù)測(cè)請(qǐng)求,獲取預(yù)測(cè)結(jié)果import request
import json# 待預(yù)測(cè)數(shù)據(jù)
text
= ["今天是個(gè)好日子", "天氣預(yù)報(bào)說(shuō)今天要下雨"]# 設(shè)置運(yùn)行配置
# 對(duì)應(yīng)本地預(yù)測(cè)lac
.cut(text
=text
, batch_size
=1)
data
= {"text": text
, "batch_size": 1}# 指定預(yù)測(cè)方法為lac并發(fā)送post請(qǐng)求,content
-type類型應(yīng)指定json方式
# HOST_IP為服務(wù)器IP
url
= "http://HOST_IP:8866/predict/lac"
headers
= {"Content-Type": "application/json"}
r
= requests
.post(url
=url
, headers
=headers
, data
=json
.dumps(data
))# 打印預(yù)測(cè)結(jié)果
print(json
.dumps(r
.json(), indent
=4, ensure_ascii
=False
))
關(guān)于PaddleHub Serving更多信息參考服務(wù)部署
總結(jié)
以上是生活随笔為你收集整理的1词法分析PaddleNLP / examples / lexical_analysis的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。