摘自:https://aistudio.baidu.com/aistudio/projectdetail/305812
相关代码:
链接:https://pan.baidu.com/s/1uK9Cq55RZinAIDAcdCOLuw 提取码:sjpy
分词基本知识
什么是分词
词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文分词的基础与关键。
由于英文单词本来就有空格进行分割,所以处理起来相对方便。但是,由于中文是没有分隔符的,所以分词的问题就比较重要。
分词常用的手段是基于字典的最长串匹配,但是歧义分词很难。举个例子,‘他 将来 我 校 讲学’ ,也可切分成’他 将 来 我 校 讲学‘。
中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块。不同于英文的是,中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词,分词效果将直接影响词性、句法树等模块的效果。当然分词只是一个工具,场景不同,要求也不同。在人机自然语言交互中,成熟的中文分词算法能够达到更好的自然语言处理效果,帮助计算机理解复杂的中文语言。中文分词根据实现原理和特点,主要分为以下2个类别:
分词基本知识
常见的分词方法
1、基于词典分词算法也称字符串匹配分词算法。
该算法是按照一定的策略将待匹配的字符串和一个已建立好的“充分大的”词典中的词进行匹配,若找到某个词条,则说明匹配成功,识别了该词。常见的基于词典的分词算法分为以下几种:正向最大匹配法、逆向最大匹配法和双向匹配分词法等。基于词典的分词算法是应用最广泛、分词速度最快的。很长一段时间内研究者都在对基于字符串匹配方法进行优化,比如最大长度设定、字符串存储和查找方式以及对于词表的组织结构,比如采用TRIE索引树、哈希索引等。
2、基于统计的机器学习算法
这类目前常用的是算法是HMM、CRF、SVM、深度学习等算法,比如stanford、Hanlp分词工具是基于CRF算法。以CRF为例,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率,还考虑上下文,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果。Nianwen Xue在其论文《Combining Classifiers for Chinese Word Segmentation》中首次提出对每个字符进行标注,通过机器学习算法训练分类器进行分词,在论文《Chinese word segmentation as character tagging》中较为详细地阐述了基于字标注的分词法。常见的分词器都是使用机器学习算法和词典相结合,一方面能够提高分词准确率,另一方面能够改善领域适应性。随着深度学习的兴起,也出现了基于神经网络的分词器,例如有人员尝试使用双向LSTM CRF实现分词器,其本质上是序列标注,所以有通用性,命名实体识别等都可以使用该模型,据报道其分词器字符准确率可高达97.5%。算法框架的思路与论文《Neural Architectures for Named Entity Recognition》类似,利用该框架可以实现中文分词,
分词器当前存在问题
目前中文分词难点主要有三个:
- 1、分词标准:比如人名,在哈工大的标准中姓和名是分开的,但在Hanlp中是合在一起的。这需要根据不同的需求制定不同的分词标准。
- 2、歧义:对同一个待切分字符串存在多个分词结果。歧义又分为组合型歧义、交集型歧义和真歧义三种类型。
- 组合型歧义:分词是有不同的粒度的,指某个词条中的一部分也可以切分为一个独立的词条。比如“中华人民共和国”,粗粒度的分词就是“中华人民共和国”,细粒度的分词可能是“中华/人民/共和国”
- 交集型歧义:在“郑州天和服装厂”中,“天和”是厂名,是一个专有词,“和服”也是一个词,它们共用了“和”字。
- 真歧义:本身的语法和语义都没有问题, 即便采用人工切分也会产生同样的歧义,只有通过上下文的语义环境才能给出正确的切分结果。例如:对于句子“美国会通过对台售武法案”,既可以切分成“美国/会/通过对台售武法案”,又可以切分成“美/国会/通过对台售武法案”。一般在搜索引擎中,构建索引时和查询时会使用不同的分词算法。常用的方案是,在索引的时候使用细粒度的分词以保证召回,在查询的时候使用粗粒度的分词以保证精度。
- 3、新词:也称未被词典收录的词,该问题的解决依赖于人们对分词技术和汉语语言结构的进一步认识。
NLP基础知识-中文分词词性表
词性编码 | 词性名称 | 注 解 |
---|---|---|
Ag | 形语素 | 形容词性语素。形容词代码为 a,语素代码g前面置以A。 |
a | 形容词 | 取英语形容词 adjective的第1个字母。 |
ad | 副形词 | 直接作状语的形容词。形容词代码 a和副词代码d并在一起。 |
an | 名形词 | 具有名词功能的形容词。形容词代码 a和名词代码n并在一起。 |
b | 区别词 | 取汉字“别”的声母。 |
c | 连词 | 取英语连词 conjunction的第1个字母。 |
dg | 副语素 | 副词性语素。副词代码为 d,语素代码g前面置以D。 |
d | 副词 | 取 adverb的第2个字母,因其第1个字母已用于形容词。 |
e | 叹词 | 取英语叹词 exclamation的第1个字母。 |
f | 方位词 | 取汉字“方”。 |
g | 语素 | 绝大多数语素都能作为合成词的“词根”,取汉字“根”的声母。 |
h | 前接成分 | 取英语 head的第1个字母。 |
i | 成语 | 取英语成语 idiom的第1个字母。 |
j | 简称略语 | 取汉字“简”的声母。 |
k | 后接成分。 | |
l | 习用语 | 习用语尚未成为成语,有点“临时性”,取“临”的声母。 |
m | 数词 | 取英语 numeral的第3个字母,n,u已有他用。 |
Ng | 名语素 | 名词性语素。名词代码为 n,语素代码g前面置以N。 |
n | 名词 | 取英语名词 noun的第1个字母。 |
nr | 人名 | 名词代码 n和“人(ren)”的声母并在一起。 |
ns | 地名 | 名词代码 n和处所词代码s并在一起。 |
nt | 机构团体 | “团”的声母为 t,名词代码n和t并在一起。 |
nz | 其他专名 | “专”的声母的第 1个字母为z,名词代码n和z并在一起。 |
o | 拟声词 | 取英语拟声词 onomatopoeia的第1个字母。 |
p | 介词 | 取英语介词 prepositional的第1个字母。 |
q | 量词 | 取英语 quantity的第1个字母。 |
r | 代词 | 取英语代词 pronoun的第2个字母,因p已用于介词。 |
s | 处所词 | 取英语 space的第1个字母。 |
tg | 时语素 | 时间词性语素。时间词代码为 t,在语素的代码g前面置以T。 |
t | 时间词 | 取英语 time的第1个字母。 |
u | 助词 | 取英语助词 auxiliary |
vg | 动语素 | 动词性语素。动词代码为 v。在语素的代码g前面置以V。 |
v | 动词 | 取英语动词 verb的第一个字母。 |
vd | 副动词 | 直接作状语的动词。动词和副词的代码并在一起。 |
vn | 名动词 | 指具有名词功能的动词。动词和名词的代码并在一起。 |
w | 标点符号 | |
x | 非语素字 | 非语素字只是一个符号,字母 x通常用于代表未知数、符号。 |
y | 语气词 | 取汉字“语”的声母。 |
z | 状态词 | 取汉字“状”的声母的前一个字母。 |
un | 未知词 | 不可识别词及用户自定义词组。取英文Unkonwn首两个字母。 |
缩略版本可见下表:
标签 | 含义 | 标签 | 含义 | 标签 | 含义 | 标签 | 含义 |
---|---|---|---|---|---|---|---|
n | 普通名词 | f | 方位名词 | s | 处所名词 | t | 时间 |
nr | 人名 | ns | 地名 | nt | 机构名 | nw | 作品名 |
nz | 其他专名 | v | 普通动词 | vd | 动副词 | vn | 名动词 |
a | 形容词 | ad | 副形词 | an | 名形词 | d | 副词 |
m | 数量词 | q | 量词 | r | 代词 | p | 介词 |
c | 连词 | u | 助词 | xc | 其他虚词 | w | 标点符号 |
PER | 人名 | LOC | 地名 | ORG | 机构名 | TIME | 时间 |
中文词法分析LAC
Lexical Analysis of Chinese,简称 LAC,是一个联合的词法分析模型,在单个模型中完成中文分词、词性标注、专名识别任务。我们在自建的数据集上对分词、词性标注、专名识别进行整体的评估效果,具体数值见下表
模型 | Precision | Recall | F1-score |
---|---|---|---|
Lexical Analysis | 89.2% | 89.4% | 89.3% |
BERT finetuned | 90.2% | 90.4% | 90.3% |
ERNIE finetuned | 91.7% | 91.7% | 91.7% |
一、数据准备
可通过脚本下载数据集和预训练模型
- 全部下载
python downloads.py all
或者
代码语言:javascript复制sh downloads.sh
- 训练数据集 下载数据集文件,解压后会生成
./data/
文件夹
python downloads.py dataset
- 预训练模型 可下载三种模型:baseline、finetuned、ernie
# download baseline model
python downloads.py lac
# download ERNIE finetuned model
python downloads.py finetuned
# download ERNIE model for training
python downloads.py ernie
二、模型评估
我们基于自建的数据集训练了一个词法分析的模型,可以直接用这个模型对测试集 ./data/test.tsv
进行验证
# baseline model
sh run.sh eval
# ERNIE finetuned model
sh run_ernie.sh eval
- 评估结果
baseline model: [test] P: 0.89211, R: 0.89442, F1: 0.89326, elapsed time: 0.955 s
ernie finetuned model: [test] loss: 3.13399, P: 0.91724, R: 0.91663, F1: 0.91694, elapsed time: 598.154 s
三、模型训练
我们可在./data/train.tsv
上进行训练,示例包含程序在单机单卡/多卡,以及CPU多线程的运行设置,若需进行ERNIE Finetune训练,需先行下载ERNIE
开放的模型,通过命令python downloads.py ernie
可完成下载
多机模式不建议在AI Studio下尝试,会崩溃
多机模式不建议在AI Studio下尝试,会崩溃
多机模式不建议在AI Studio下尝试,会崩溃(重要的事说三遍!有条件的可以在自己的本地环境尝试)
代码语言:javascript复制# baseline model, using single GPU
sh run.sh train_single_gpu
# baseline model, using multi GPU
sh run.sh train_multi_gpu
# baseline model, using multi CPU
sh run.sh train_multi_cpu
# ERNIE finetuned model
sh run_ernie.sh train
# ERNIE finetuned model, using single GPU
sh run_ernie.sh train_single_gpu
# ERNIE finetuned model, using multi CPU
sh run_ernie.sh train_multi_cpu
四、模型的预测
使用预训练的模型可以对未知的数据进行预测
- 数据集格式
In[4]
代码语言:javascript复制!head LAC/lexical_analysis/data/test.tsv
代码语言:javascript复制text_a label
除了他续任十二届政协委员,马化腾,雷军,李彦宏也被推选为新一届全国人大代表或全国政协委员 p-Bp-Ir-Bv-Bv-Im-Bm-Im-IORG-BORG-In-Bn-Iw-BPER-BPER-IPER-Iw-BPER-BPER-Iw-BPER-BPER-IPER-Id-Bp-Bv-Bv-Iv-Ba-Bm-Bm-IORG-BORG-IORG-IORG-In-Bn-Ic-Bn-Bn-IORG-BORG-In-Bn-I
其中,这也和应届生就业市场疲软有关 r-Br-Iw-Br-Bd-Bp-Bn-Bn-In-Iv-Bv-In-Bn-Ia-Ba-Iv-Bv-I
此外,创伤及大面积烧伤,由于严重的失血,脱水,造成血液浓缩,血细胞增多也可增加血液的凝固度 d-Bd-Iw-Bn-Bn-Ic-Bn-Bn-In-Ivn-Bvn-Iw-Bp-Bp-Ia-Ba-Iu-Bvn-Bvn-Iw-Bvn-Bvn-Iw-Bv-Bv-In-Bn-Iv-Bv-Iw-Bn-Bn-In-Iv-Bv-Id-Bv-Bv-Bv-In-Bn-Iu-Bn-Bn-In-I
设计理念精益求精,以合理的价格建造优质放心的工程 vn-Bvn-In-Bn-Iv-Bv-Iv-Iv-Iw-Bp-Ba-Ba-Iu-Bn-Bn-Iv-Bv-Ia-Ba-Iv-Bv-Iu-Bn-Bn-I
负责医疗广告的技术出证 v-Bv-In-Bn-In-Bn-Iu-Bn-Bn-Iv-Bn-B
工作中,细化过程,注重抽查检查,切实抓好常规教学,安全教育,食堂卫生,校外寄宿生管理等工作 n-Bn-If-Bw-Bv-Bv-In-Bn-Iw-Bv-Bv-Ivn-Bvn-Ivn-Bvn-Iw-Bad-Bad-Iv-Bv-In-Bn-Ivn-Bvn-Iw-Ban-Ban-Ivn-Bvn-Iw-Bn-Bn-Ian-Ban-Iw-Bs-Bs-In-Bn-In-Ivn-Bvn-Iu-Bn-Bn-I
七是负责全市机关,事业单位的工资制度改革和工资福利工作 m-Bv-Bv-Bv-In-Bn-In-Bn-Iw-Bn-Bn-In-In-Iu-Bn-Bn-In-Bn-Ivn-Bvn-Ic-Bn-Bn-In-Bn-In-Bn-I
唐婉质问林致远,可林致远却说没什么. PER-BPER-Iv-Bv-IPER-BPER-IPER-Iw-Bc-BPER-BPER-IPER-Iv-Bv-Iv-Br-Br-Iw-B
宋思明喜欢这种十里洋场的明暗交替,醉心这种慵懒的步履 PER-BPER-IPER-Iv-Bv-Ir-Br-In-Bn-In-In-Iu-Bn-Bn-Ivn-Bvn-Iw-Bv-Bv-Ir-Br-Ia-Ba-Iu-Bn-Bn-I
- 预测方法
# baseline model
sh run.sh infer
# ERNIE finetuned model
sh run_ernie.sh infer
- 预测结果
举例说明,全部结果可执行命令后在终端查看
代码语言:javascript复制(用户, n)(应, v)(关闭, v)(现在, TIME)(的, u)(led, n)(继承, vn)
(姐姐, n)(我, r)(休息, v)(一下, m)(,, w)(马上, d)(就, d)(煮面, v)
(显然, ad)(,, w)(东风标致308, nz)(也, d)(开始, v)(见证, v)(东风标致, ORG)(品牌, n)(的, u)(崛起, vn)
(可能, v)(是, v)(我, r)(长期, n)(劳累, a)(经常, d)(出汗, v)(所以, c)(下面, f)(长期, n)(比较, d)(潮湿, a)(的, u)(原因, n)
(两人, n)(在, p)(两派, n)(中, f)(都是, v)(地位, n)(不俗, a)(,, w)(如今, TIME)(互相, d)(牵制, v)(,, w)(使得, v)(楚晓燕, PER)(处境, n)(不, d)(至于, d)(太, d)(为难, a)
五、如何使用自己的数据训练
构建自己的数据
第一行是 text_atlabel
固定的开头,后面的每行数据都是由两列组成,以制表符分隔,第一列是 utf-8 编码的中文文本,以