Fork me on GitHub

CRF进行中文分词实操

在ubuntu下进行操作,自己写了个简单的预料。
我 爱 北京 天安门 
天安门 上 太阳 升
伟大 领袖 毛主席
带领 我们 向 前 进
这个和CRF格式差距比较大,所以使用hanlp提供的工具首先进行转换。
from pyhanlp import *

CRFSegmenter = JClass('com.hankcs.hanlp.model.crf.CRFSegmenter')
CRFLexicalAnalyzer = JClass('com.hankcs.hanlp.model.crf.CRFLexicalAnalyzer')

segmenter = CRFSegmenter(None)
segmenter.convertCorpus("/home/helu/data/my_cws_corpus.txt","/home/helu/data/my_cws_corpus.txt.tsv")
得到这样结果:
我    S
爱    S
北    B
京    E
天    B
安    M
门    E

天    B
安    M
门    E
上    S
太    B
阳    E
升    S

伟    B
大    E
领    B
袖    E
毛    B
主    M
席    E

带    B
领    E
我    B
们    E
向    S
前    S
进    S
使用
segmenter.dumpTemplate("/home/helu/data/dumpTemplate.txt")
获得Hanlp使用的模板
# Unigram
U0:%x[-1,0]
U1:%x[0,0]
U2:%x[1,0]
U3:%x[-2,0]%x[-1,0]
U4:%x[-1,0]%x[0,0]
U5:%x[0,0]%x[1,0]
U6:%x[1,0]%x[2,0]

# Bigram
B
开始训练:
crf_learn -f 3 -c 4.0 dumpTemplate.txt my_cws_corpus.txt.tsv crfpp-cws-model -t
观察crfpp-cws-model.txt
version: 100
cost-factor: 1
maxid: 32
xsize: 1

B
E
M
S

U0:%x[-1,0]
U1:%x[0,0]
U2:%x[1,0]
U3:%x[-2,0]%x[-1,0]
U4:%x[-1,0]%x[0,0]
U5:%x[0,0]%x[1,0]
U6:%x[1,0]%x[2,0]
B

0 B
16 U0:_B-1
20 U2:_B+1
24 U3:_B-2_B-1
28 U6:_B+1_B+2

-1.2032129690116680
1.8603826524358011
1.5039463680961482
-1.1069763714831706
1.2034529837020416
-1.2000814196381475
-0.9866999736184627
1.0089713350432583
-0.9736500116740756
1.5291725005885255
-0.7187277560732016
-0.9074433470354631
0.7190600977925025
-1.0778754648546756
-0.8726958062131194
1.2223771819436571
0.7167673355519872
-0.5900836828142920
-0.5245972920805317
0.3979136393428325
-0.5917222436763188
0.4958716602285193
-0.5281258456949545
0.6239764291427475
0.7167673355519872
-0.5900836828142920
-0.5245972920805317
0.3979136393428325
-0.5917222436763188
0.4958716602285193
-0.5281258456949545
0.6239764291427475
其中包含了模板等一些信息,做一个主观测试,准备语料:
我 
爱 
京 
门 

门 

大 
袖 

领 
向 
前 

进行
crf_test -m crfpp-cws-model  my_cws_corpus2.txt
得到结果
我    B
爱    E
北    B
京    E
天    B
安    E
门    S

天    B
安    E
门    B
上    E
太    B
阳    E
升    S

伟    B
大    E
领    B
袖    E
毛    B
主    E
席    S

带    B
领    E
我    B
们    E
向    B
前    E
进    S

南    B
京    E
今    B
天    E
降    B
温    E
了    S

从结果上来,问题比较多,只是演示流程而已。而且据我了解,NLP目前的结果只有70%-80%的准确率,在我们这里的情况下,缺乏验证环境、需要多次转换,所以将来这块技术如何使用,需持续观察思考。






posted @ 2021-02-23 21:09  jsxyhelu  阅读(23)  评论(0编辑  收藏