NLP之分词

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NLP之分词相关的知识,希望对你有一定的参考价值。

参考技术A 其实市面上的分词工具很多,python的c++的都有,那为啥还要写分词呢,因为分词的很多方法可以套用到其他nlp基础任务中,比如命名实体识别、词性标注。
在中文中,最小单位首先是字,由字组成词,再由词组成句子,然后由句子组成段落,最后由段落组成文章。尽管字是最小单位,但是文章的语义表达却是以词来划分的。因此在中文的NLP中,我们首先要先做分词,中文不像英文,每一个单词就是一个词用空格划分好了,所以英文的分词简单,只需要按空格分割就行。但是中文的词语是连在一起的,所以相对于英文会困难一些。
到目前为止,中文的分词主要有四种方法:1)基于规则的分词;2)基于概率统计的分词;3)混合分词(1+2);4)基于深度学习的分词。下面就来介绍这四种分词:

基于规则的分词有三种:正向最大匹配法,逆向最大匹配发,双向最大匹配发。他们的基本思想都相同,都是通过维护一个词典,按字典中最长的词的长度在句子中枚举字符串域词典中的词逐一匹配,能在词典中找到则切分,不能则最长的长度减一再枚举匹配。

基于概率统计的分词的思想是:如果在已经建立的大规模语料库中,相连的字在不同的文本中出现的次数越多,就证明这相连的字很可能就是一个词。所以可以利用字与字相邻出现的频率来反应组成词的可靠度,统计预料中相邻共现的各个字的组合的频度,当组合频度高于莫一个临界值时,便可认为此字组可能会构成一个词语。

如采用google开源的bert模型来分词,还有lstm+crf等。

NLP之CRF分词训练

 

分三步
1、先分词
2、做BEMS标注,同时做词性标注
3、训练模型

 

1、对语料进行分词

拿到测试部的语料或者其他渠道的语料,先对语料进行分词,我刚刚开始是用NS分词的,等CRF模型训练好后,可以直接用CRF进行分词,分完词后要人工核对分词结果,将分词分得不正确的地方修改好


2、标注词性,标注BEMS

BEMS所说是中科院的提出一种标注,也有说BEIS的,hanlp用的是BEMS
B:开始
E:结束
M/I:中间
S:单独
BEMS标注已经写了一个方法generateCRF在SegAndSave.class中。
词性标注只能人工标注了。

 

3、训练

安装CRF++
./configure
make
make install
cd /CRF++-0.58/example/seg
执行crf++的crf_learn指令
../../crf_learn -f 3 -c 4.0 template train.data model -t
产生的model.txt就是我们要的文件,model二进制文件hanlp运行不起来
eg: 我想听周杰伦的夜曲
1)分词:我 想听 周杰伦 的 夜曲
2)BEMS和词性标注(每列用\t分隔开,一般键入tab键,windows的tab似乎有问题,可以参考用SegAndSave.class的generateSeg方法):

分词标注
我 rr S
想 v B
听 v E
周 nr B
杰 nr M
伦 nr E
的 ude1 S
夜 nz B
曲 nz E
注:周杰伦的词性标注存在争议,周杰伦作为一个整体是nr,但 “周” “杰” “伦” 分别应该标注为什么词性,我还不确定。

分词和词性同时标注(CRF只预测一列。通常做法是将词性附加在BMES后面:B_nr)
我 S_rr
想 B_v
听 E_v
周 B_nr
杰 M_nr
伦 E_rn
的 S_ude1
夜 B_nz
曲 E_nz

3)../../crf_learn -f 3 -c 4.0 template train.data model -t
template用的是例子自带的特征模板,对这个我还不会制作,先用着
train.data是我们上面整理好的语料
model是我们训练好的模型文件(二进制名称)
-t生成model.txt文本模型文件(这个就是我们要的模型了,直接copy到hanlp中使用即可)

 

mark

用43万个句子的语料(约25M,约100个句式)训练了一个音乐的CRF分词模型,在本地用虚拟机,开9个G的内存,跑了90分钟才训练好一个模型,但分词的效果并没有达到想要的效果;本想增大语料(对语料进行复制)以加强每种句式的概率,但发现仅仅是复制一次,即约50M,86万个句子,开了10个G也跑不起来,只能作罢。
总的来说,CRF能考虑每个字词的上下文,然后进行分词,这样的分词是很合理的,我认为这里的模型分词的结果不理想和音乐的歌名、歌手等专有名词本身没有规律所造成的,也就是说CRF学习到的规律本身就是不正确的。对于音乐这些语料,我觉得已经不适用CRF来分词,反而用字典分词达到的效果要好得多,也易于控制。

以上是关于NLP之分词的主要内容,如果未能解决你的问题,请参考以下文章

【NLP中文分词】一、规则分词之最大匹配法

NLP之CRF分词训练

NLP之中文分词cppjieba

NLP之分词词向量预训练篇

自然语言处理NLP之BERTBERT是什么智能问答阅读理解分词词性标注数据增强文本分类BERT的知识表示本质

NLP预备:jieba 中文分词入门(上)