# 中文词法分析(LAC)
本项目依赖Paddle v0.14.0版本。如果您的Paddle安装版本低于此要求,请按照[安装文档](http://www.paddlepaddle.org/docs/develop/documentation/fluid/zh/build_and_install/index_cn.html)中的说明更新Paddle安装版本。
为了达到和机器运行环境的最佳匹配,我们建议基于源码编译安装Paddle,后文也将展开讨论一些编译安装的细节。当然,如果您发现符合机器环境的预编译版本在官网发布,也可以尝试直接选用。
需要说明的是,本文档的是基于源码编译安装流程撰写的。如果在使用Paddle预编译版本过程中存在问题,请自己动手解决,但本文档所述的一些细节,也许可以作为有用的参考信息。
## 目录
- [代码结构](#代码结构)
- [简介](#简介)
- [模型](#模型)
- [数据](#数据)
- [安装](#安装)
- [运行](#运行)
- [定制](#定制)
- [贡献代码](#贡献代码)
## 代码结构
```text
.
├── AUTHORS # 贡献者列表
├── CMakeLists.txt # cmake配置文件
├── conf # 运行本例所需的模型及字典文件
├── data # 运行本例所需要的数据依赖
├── include # 头文件
├── LICENSE # 许可证信息
├── python # 训练使用的python文件
├── README.md # 本文档
├── src # 源码
└── test # Demo程序
```
## 简介
中文分词(Word Segmentation)是将连续的自然语言文本,切分出具有语义合理性和完整性的词汇序列的过程。因为在汉语中,词是承担语义的最基本单位,切词是文本分类、情感分析、信息检索等众多自然语言处理任务的基础。
词性标注(Part-of-speech Tagging)是为自然语言文本中的每一个词汇赋予一个词性的过程,这里的词性包括名词、动词、形容词、副词等等。
命名实体识别(Named Entity Recognition,NER)又称作“专名识别”,是指识别自然语言文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。
我们将这三个任务统一成一个联合任务,称为词法分析任务,基于深度神经网络,利用海量标注语料进行训练,提供了一个端到端的解决方案。
我们把这个联合的中文词法分析解决方案命名为LAC。LAC既可以认为是**Lexical Analysis of Chinese**的首字母缩写,也可以认为是**LAC Analyzes Chinese**的递归缩写。
## 模型
词法分析任务的输入是一个字符串(我们后面使用『句子』来指代它),而输出是句子中的词边界和词性、实体类别。序列标注是词法分析的经典建模方式。我们使用基于GRU的网络结构学习特征,将学习到的特征接入CRF解码层完成序列标注。CRF解码层本质上是将传统CRF中的线性模型换成了非线性神经网络,基于句子级别的似然概率,因而能够更好的解决标记偏置问题。模型要点如下,具体细节请参考`pyton/train.py`代码。
1. 输入采用one-hot方式表示,每个字以一个id表示
2. one-hot序列通过字表,转换为实向量表示的字向量序列;
3. 字向量序列作为双向GRU的输入,学习输入序列的特征表示,得到新的特性表示序列,我们堆叠了两层双向GRU以增加学习能力;
4. CRF以GRU学习到的特征为输入,以标记序列为监督信号,实现序列标注。
词性和专名类别标签集合如下表,其中词性标签24个(小写字母),专名类别标签4个(大写字母)。这里需要说明的是,人名、地名、机名和时间四个类别,在上表中存在两套标签(PER / LOC / ORG / TIME 和 nr / ns / nt / t),被标注为第二套标签的词,是模型判断为低置信度的人名、地名、机构名和时间词。开发者可以基于这两套标签,在四个类别的准确、召回之间做出自己的权衡。
| 标签 | 含义 | 标签 | 含义 | 标签 | 含义 | 标签 | 含义 |
| ---- | -------- | ---- | -------- | ---- | -------- | ---- | -------- |
| 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 | 时间 |
## 数据
训练使用的数据可以由用户根据实际的应用场景,自己组织数据。数据由两列组成,以制表符分隔,第一列是utf8编码的中文文本,第二列是对应每个字的标注,以空格分隔。我们采用IOB2标注体系,即以X-B作为类型为X的词的开始,以X-I作为类型为X的词的持续,以O表示不关注的字(实际上,在词性、专名联合标注中,不存在O)。示例如下:
```text
在抗日战争时期,朝鲜族人民先后有十几万人参加抗日战斗 p-B vn-B vn-I n-B n-I n-B n-I w-B nz-B nz-I nz-I n-B n-I d-B d-I v-B m-B m-I m-I n-B v-B v-I vn-B vn-I vn-B vn-I
```
+ 我们随同代码一并发布了完全版的模型和相关的依赖数据。但是,由于模型的训练数据过于庞大,我们没有发布训练数据,仅在`data`目录下的`train_data`和`test_data`文件中放置少数样本用以示例输入数据格式。
+ 模型依赖数据包括:
1. 输入文本的词典,在`conf`目录下,对应`word.dic`
2. 对输入文本中特殊字符进行转换的字典,在`conf`目录下,对应`q2b.dic`
3. 标记标签的词典,在`conf`目录下,对应`tag.dic`
+ 在训练和预测阶段,我们都需要进行原始数据的预处理,具体处理工作包括:
1. 从原始数据文件中抽取出句子和标签,构造句子序列和标签序列
2. 将句子序列中的特殊字符进行转换
3. 依据词典获取词对应的整数索引
在训练阶段,这些工作由`python/train.py`调用`python/reader.py`完成;在预测阶段,由C++代码完成。
## 安装
### 安装Paddle
Paddle可以在符合要求的原生Linux环境或docker环境下编译,编译依赖请参考[安装文档](http://www.paddlepaddle.org/docs/develop/documentation/fluid/zh/build_and_install/build_from_source_cn.html)。对于docker环境,我们建议基于Paddle的Dockerfile自己构建镜像。
如果Paddle官方发布了符合机器运行环境的镜像,也可以尝试直接选用,省去下文所述第一步至第四步的工作。
但是,无论是官方镜像,还是基于源码的默认编译命令,都不包含Fluid预测库部分。Fluid预测库的安装要放在单独的步骤解决(见下文第五步)。
##### 第一步,克隆Paddle代码并检出 v0.14.0
```shell
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
git checkout release/0.14.0 # Paddle正式发布后,请检出v0.14.0
```
Paddle v0.14.0是Paddle团队将要重点主推的版本。在这个截至本文档发布时,Paddle v0.14.0版还没有正式发布,目前可用的是一个release分支`release/0.14.0`。
注意,`release/0.14.0`分支当前如果开启`mkldnn`的支持,会出现Segmentation Falut。这个问题在正式发布时也许会修复。而在这之前,请在关闭`mkldnn`支持的情况下编译,具体在后文详述。
##### 第二步(可选),构建docker镜像
对于非Linux环境(macOS, Windows……),需构建Paddle的docker镜像用于Paddle的编译和运行(主要是预测部分)。�
没有合适的资源?快使用搜索试试~ 我知道了~
Python-百度的中文开源词法分析工具LAC
共53个文件
b_0:9个
w_0:9个
cpp:6个
需积分: 48 7 下载量 21 浏览量
2019-08-11
02:22:12
上传
评论 2
收藏 85KB ZIP 举报
温馨提示
中文分词(Word Segmentation)是将连续的自然语言文本,切分出具有语义合理性和完整性的词汇序列的过程。因为在汉语中,词是承担语义的最基本单位,切词是文本分类、情感分析、信息检索等众多自然语言处理任务的基础。
资源推荐
资源详情
资源评论
收起资源包目录
Python-百度的中文开源词法分析工具LAC.zip (53个子文件)
baidu-lac-6d193d4
conf
customization.dic.example 127B
model
crfw 130B
fc_4.w_0 131B
fc_4.b_0 128B
fc_0.b_0 129B
gru_1.w_0 131B
gru_1.b_0 129B
fc_1.b_0 129B
fc_3.w_0 132B
gru_2.b_0 129B
gru_3.b_0 129B
fc_2.b_0 129B
fc_3.b_0 129B
gru_0.b_0 129B
fc_2.w_0 132B
__model__ 129B
gru_0.w_0 131B
gru_2.w_0 131B
fc_0.w_0 131B
fc_1.w_0 131B
gru_3.w_0 131B
word_emb 133B
q2b.dic 128B
tag.dic 128B
customization.dic 0B
strong_punc.dic 127B
word.dic 131B
.gitattributes 92B
AUTHORS 318B
src
customization_tagger.h 3KB
main_tagger.h 5KB
main_tagger.cpp 12KB
lac.cpp 13KB
lac.h 5KB
customization_tagger.cpp 6KB
lac_glb.h 3KB
lac_util.h 1KB
lac_util.cpp 2KB
ilac.cpp 2KB
CMakeLists.txt 3KB
LICENSE 11KB
test
src
lac_demo.cpp 4KB
README.md 18KB
data
test_data
test_part 16KB
train_data
news_part 16KB
query_part 16KB
title_part 16KB
feed_part 16KB
human_part 17KB
python
train.py 11KB
reader.py 3KB
network.py 4KB
include
ilac.h 2KB
共 53 条
- 1
资源评论
weixin_39840387
- 粉丝: 791
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功