forked from PaddlePaddle/Paddle
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
update text_to_knowledge framework documents and termtype schema (Pad…
…dlePaddle#324) * update docs * update termtree doc * add report * add term type schema to termtree * update wordtag docs * update * tune some doc * update total plans * update style * fix error * update doc * update docs, add applications. * zoom picture * test * update examples of termtree * format tabel style * update a demo picture * update some docs * update titles * fix example bugs. * modify readme * fix format * modify readme * modify termtree_type * modify termtree readme * modify ernie-ctm readme * modify readme * modify readme * fix link * update picture * update summary picture * modify images * modify images * modify images * fix link * modify readme Co-authored-by: qinhuapeng <qinhuapeng@baidu.com> Co-authored-by: zmsearch <zmsearch@163.com> Co-authored-by: Zeyu Chen <chenzeyu01@baidu.com>
- Loading branch information
1 parent
22c558a
commit 0ad7118
Showing
11 changed files
with
730 additions
and
69 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,165 @@ | ||
# 解语(Text to Knowledge) | ||
|
||
解语(Text to Knowledge)是首个覆盖中文全词类的知识库(百科知识树)及知识标注框架,拥有可描述所有中文词汇的词类体系、中文知识标注工具集,以及更适用于中文挖掘任务的预训练语言模型。 | ||
|
||
覆盖中文全词类的知识库和知识标注工具能够帮助你面对更加多元的应用场景,方便地融合自有知识体系,显著提升中文文本解析和挖掘效果,并能够更容易地利用知识增强机器学习模型效果。 | ||
|
||
![image-20210429195529388](doc/img/image-20210429195529388.png) | ||
|
||
[TermTree:能够描述所有中文词汇的百科知识树](./termtree) :词类体系全面覆盖**百度百科词条、搜索query**,经过大规模工业应用验证,适合通用领域文本理解。 | ||
|
||
[WordTag:中文文本知识标注工具](./wordtag) :提供中文文本词类序列标注框架,结合TermTree可实现定制化词类序列标注。 | ||
|
||
[ERNIE-CTM:适用于中文文本挖掘任务的预训练语言模型](./ernie-ctm) :汉字字表扩充为2万+(全面覆盖百度百科中出现的汉字),解决中文文本挖掘中常见的UNK(未收录字符)问题。 | ||
|
||
---- | ||
|
||
## 解语的应用场景 | ||
|
||
解语可直接用于各类中文文本解析与挖掘任务,提升文本解析与挖掘精度;也可以作为中文文本特征生成器,为各类机器学习模型提供文本特征。 | ||
|
||
中文文本知识标注工具(WordTag)整合了传统中文解析的**分词**、**词性标注**、**命名实体识别**的能力,能够将任意中文句子解析为**完整的词类序列**。结合百科知识树(TermTree),可为应用提供一套通用的知识关联(term-linking)框架,方便应用适配关联自己的应用知识图谱,更好地将知识用于中文自然语言处理(NLP)任务。 | ||
|
||
<img src="./doc/img/image-20210429201014633.png" alt="image-20210429201014633"/> | ||
|
||
|
||
|
||
### 应用场景A:文本挖掘/解析模板生成与匹配 | ||
|
||
虽然近年来,深度学习模型尤其是预训练语言模型的广泛使用大幅提升了各项中文NLP任务效果,但在实际的工业应用中,单独使用深度学习模型往往达不到应用需求,还需要结合规则模型以提升精度以及解决恶劣case,如,知识图谱构建、query解析、语义一致性判定等应用。 | ||
|
||
在这些应用中,文本挖掘/解析模板是最常用的规则模型。WordTag包含了覆盖中文所有词汇的词类标注体系,在生成模板以及模板匹配上有着天然的优势。用户可以根据WordTag标注的样本词类序列,自动生成或配置更加丰富、精准的挖掘/解析模板,然后对目标文本使用WordTag标注,即可利用模板进行匹配,从而大大降低人工配置模板的代价,显著提升生产效率。 | ||
|
||
例如,输入文本:*美人鱼是周星驰执导的电影*,得到预测结果: | ||
|
||
```json | ||
{ | ||
"text": "美人鱼是周星驰执导的电影", | ||
"items": [ | ||
{ | ||
"item": "美人鱼", | ||
"offset": 0, | ||
"WordTag_label": "作品类_实体", | ||
"length": 3, | ||
"termid": "作品与出版物_eb_美人鱼" | ||
}, | ||
{ | ||
"item": "是", | ||
"offset": 3, | ||
"WordTag_label": "肯定词", | ||
"length": 1, | ||
"termid": "肯定否定词_cb_是" | ||
}, | ||
{ | ||
"item": "周星驰", | ||
"offset": 4, | ||
"WordTag_label": "人物类_实体", | ||
"length": 3, | ||
"termid": "人物_eb_周星驰" | ||
}, | ||
{ | ||
"item": "执导", | ||
"offset": 7, | ||
"WordTag_label": "场景事件", | ||
"length": 2, | ||
"termid": "场景事件_cb_执导" | ||
}, | ||
{ | ||
"item": "的", | ||
"offset": 9, | ||
"WordTag_label": "助词", | ||
"length": 1, | ||
"termid": "助词_cb_的" | ||
}, | ||
{ | ||
"item": "电影", | ||
"offset": 10, | ||
"WordTag_label": "作品类_概念", | ||
"length": 2, | ||
"termid": "影视作品_cb_电影" | ||
} | ||
] | ||
} | ||
``` | ||
|
||
将上述标注结果中的词类序列取出,去除虚词、标点等与语义无关的词,可将抽取出的词类直接构造成为挖掘匹配模板: | ||
|
||
``` | ||
[作品类_实体][肯定词|是][人物类_实体][场景事件|执导][作品类_概念|电影] | ||
``` | ||
|
||
利用该模板,以及结合TermTree进行概念扩展,可以匹配出所有该句式的文本,例如: | ||
|
||
> 《狂人日记》是鲁迅创作的第一个短篇白话日记体小说 | ||
> | ||
> 《澳门风云》是王晶创作执导的合家欢贺岁喜剧赌片 | ||
> | ||
> 《千王之王2000》是一部王晶于1999年执导的喜剧电影 | ||
> | ||
> 《射雕英雄传》是金庸创作的长篇武侠小说 | ||
WordTag的标注结果中,区分了“人物类\_实体”和“人物类\_概念”,以及“作品类\_实体”和“作品类\_概念”,使得模板生成更为精准。同时,TermTree中也区分了命名实体词(eb: entity base)与非实体词(cb: concept base),这样,可以利用TermTree分别进行实体扩展(e.g., 周星驰->王晶)和概念扩展(e.g., 电影->小说),生成更加丰富多样的模板,支持更细化的应用场景。 | ||
|
||
### 应用场景B:词类知识增强的深度学习模型 | ||
|
||
词类特征同时也是一类重要的文本特征,可为原始文本token提供有效的边界信息、归组信息,减少样本中的噪音,防止模型过拟合;还可作为层次泛化特征,弥补统计共现特征的不足。 | ||
|
||
在深度学习模型应用中,可将WordTag产出的词类作为embedding特征,直接叠加到文本token上,作为深度学习模型的输入;在BERT等模型中,也可以将词类作为文本序列中的一部分,利用position id和可见性矩阵控制token和词类特征之间的可见性,作为深度学习模型的输入。 | ||
|
||
### 应用场景C:知识图谱关联(term-linking) | ||
|
||
随着知识图谱技术的普及和越来越多应用知识图谱数据的发布,如何利用知识提升NLP任务效果,成为近年来NLP研究的热点方向。文本与图谱知识结合的前提是将图谱中的实体准确link到文本上,这是知识图谱应用的一大难点。现有的方案多是基于某个特定图谱实现的,缺乏通用的图谱关联解决方案。我们尝试使用“**WordTag+TermTree**”提供一套通用的图谱关联(term-linking)技术框架。 | ||
|
||
(注:为了避免歧义,我们**用term统一指代图谱收录的各类实体、概念、术语**) | ||
|
||
为了能够适配应用中的不同实体集(例如,不同的企业有不同的人物实体集合,不同的小说站有不同的小说实体集合),我们将term-linking拆分为两个步骤: | ||
|
||
- 第一步是基于词类的linking,主要解决“同名概念词/实体词”、“不同类的同名词”消歧问题,这一步只使用文本本身特征和词类特征,不使用图谱中的实体属性值(SPO)知识,从而支持切换不同应用图谱; | ||
- 第二步是同类同名实体词的linking,主要解决同类下不同属性值的实体消歧问题,这一步需要使用实体词的SPO知识(一般用于实体特征表示计算,以及文本-实体相似度计算)。 | ||
|
||
“WordTag+TermTree”的开源版提供了第一步的解决示例,第二步由于依赖于特定图谱的SPO知识,暂时无法提供通用工具,未来可能提供通用解决方案。 | ||
|
||
### 应用场景D:文本分类和文本挖掘样本优化 | ||
|
||
工业NLP应用场景中,文本分类、文本挖掘是最常见的任务。虽然,预训练语言模型的技术进步大幅提升了小样本学习的效果,但要达到理想的工业应用效果,还是需要大规模高精度监督训练样本。 | ||
|
||
人工标注可以产出高精度小规模训练样本。半监督学习等技术可以帮助用户基于人工标准样本快速扩充样本规模,但无法保证样本精度。这种情况下,可以使用“WordTag+TermTree”辅助筛选和修正样本,提升样本精度,例如: | ||
|
||
- 使用WordTag产出样本模板,再利用TermTree进行泛化约束,筛选出高置信度的样本,或者过滤不合格的样本; | ||
|
||
- 利用词类关系检测类别与样本的一致性,比如,医疗类文本与“疾病损伤、药物、医疗卫生机构”等词类相关,可以利用TermTree知识筛选出该类别高置信度的样本。 | ||
|
||
此外,统计模型容易拟合高频term,导致在低频term上泛化效果不好,这时可以利用TermTree筛选样本,提升样本平衡性,从而提升模型泛化能力。 | ||
|
||
## 快速开始 | ||
|
||
### 快速加载标注工具 | ||
|
||
|
||
|
||
## 后续计划 | ||
|
||
1. 发布百科知识树(TermTree)正式版数据,建立知识共建社区,支持用户提交应用词表/应用图谱 & 定制化TermTree; | ||
2. 持续优化ERNIE-CTM预训练模型,支持多种参数规模模型发布,探索更好的适配中文解析挖掘任务的预训练模型; | ||
3. 持续优化中文文本知识标注工具集,提供更加精准的知识标注服务;发布多粒度标注工具,支持更加丰富的应用场景。 | ||
|
||
|
||
|
||
## 在论文中引用解语 | ||
|
||
如果您的工作成果中使用了解语,请增加下述引用。我们非常乐于看到解语对您的工作带来帮助。 | ||
|
||
``` | ||
@article{zhao2020TermTree, | ||
title={TermTree and Knowledge Annotation Framework for Chinese Language Understanding}, | ||
author={Zhao, Min and Qin, Huapeng and Zhang, Guoxin and Lyu, Yajuan and Zhu, Yong}, | ||
technical report={Baidu, Inc. TR:2020-KG-TermTree}, | ||
year={2020} | ||
} | ||
``` | ||
|
||
|
||
|
||
## 问题与反馈 | ||
|
||
解语在持续优化中,如果您有任何建议或问题,欢迎提交issue到Github。 |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,91 +1,71 @@ | ||
# 文本知识标注工具集 - ERNIE-CTM | ||
|
||
## 简介 | ||
# 解语:ERNIE-CTM(ERNIE for **Chinese Text Mining**) | ||
|
||
ERNIE for **C**hinese **T**ext **M**ining,适用于中文挖掘任务的预训练语言模型,包含全中文词表、中英文标点、单位符号、汉语拼音等token,大幅减少tokenize中UNK的情况,对中文标注、挖掘类任务有较大增益。 | ||
ERNIE-CTM是适用于中文文本挖掘任务的预训练语言模型,拥有更全面的汉字字表集合,更优的中文文本挖掘任务表现,与PaddleNLP深度结合,提供更加便捷的应用实践。 | ||
|
||
## 快速开始 | ||
## Ernie-CTM特点 | ||
|
||
### 数据准备 | ||
- 全面的中文汉字字表扩充 | ||
- ERNIE-CTM的字符集包含2万+汉字,以及中文常用符号(常用标点、汉语拼音、编号)、部分外语符号(假名、单位)等,大幅减少中文解析挖掘任务中UNK(未识别字符)引发的标注问题。同时,ERNIE-CTM使用了embedding分解,可以更加灵活地扩充应用字表。 | ||
- 更加适配中文文本挖掘任务 | ||
- ERNIE-CTM中在每个表示后面添加了全局信息,在序列特征上叠加了全局的信息,使得在文本挖掘任务上有更加强力的表现。 | ||
- 支持多种特征训练的模型结构 | ||
- ERNIE-CTM的模型结构中,支持多种特征训练,用户可按照自己的需求任意添加任务及对应特征训练模型,而无需考虑任务之间的冲突所造成的灾难性遗忘。 | ||
|
||
我们提供了少数样本用以示例输入数据格式。执行以下命令,下载并解压示例数据集: | ||
|
||
```bash | ||
python download.py --data_dir ./ | ||
``` | ||
|
||
训练使用的数据可以由用户根据实际的应用场景,自己组织数据。每行数据都由tokens、tags、cls_label组成,tags采用 BIOES 标注体系,cls_label是整个句子的分类,包含"编码/引用/列表","外语句子","古文/古诗句","其他文本"四种,由于目前发布的预训练模型针对的是现代文,因此前三种文本只用于训练文本分类,不用于训练序列标注。 | ||
## Ernie-CTM模型介绍 | ||
|
||
示例如下: | ||
### 模型结构 | ||
|
||
```text | ||
{"tokens": ["1", ".", "1", ".", "8", "车", "辆", "自", "动", "驾", "驶", "及", "控", "制", " ", "8"], "tags": ["B-数量词", "I-数量词", "I-数量词", "I-数量词", "E-数量词", "B-物体类", "E-物体类", "B-场景事件", "I-场景事件", "I-场景事件", "E-场景事件", "S-连词", "B-场景事件", "E-场景事件", "S-w", "S-数量词"], "cls_label": "编码/引用/列表"} | ||
{"tokens": ["亦", "在", "空", "中", "捕", "食", ",", "边", "飞", "翔", "边", "捕", "食", "。"], "tags": ["S-词汇用语", "S-介词", "B-位置方位", "E-位置方位", "B-场景事件", "E-场景事件", "S-w", "S-词汇用语", "B-场景事件", "E-场景事件", "S-词汇用语", "B-场景事件", "E-场景事件", "S-w"], "cls_label": "其他文本"} | ||
``` | ||
ERNIE-CTM的模型结构大体与BERT相同,都是双向transformer结构。区别是,ERNIE-CTM为能灵活扩充字表,采用了ALBERT的embedding分解,将embedding层分解为128维,参数列表如下: | ||
|
||
| 模型 | embedding size | hidden size | hidden layers | vocab size | | ||
| -------------- | -------------- | ----------- | ------------- | ---------- | | ||
| ERNIE-CTM-base | 128 | 768 | 12 | 23000 | | ||
|
||
### 模型训练 | ||
ERNIE-CTM以字粒度建模,英文区分大小写,其输入表示如下: | ||
|
||
#### 单卡训练 | ||
![image-20210429205620216](../doc/img/image-20210429205620216.png) | ||
|
||
```bash | ||
python -u train.py \ | ||
--max_seq_len 128 \ | ||
--batch_size 32 \ | ||
--learning_rate 1e-4 \ | ||
--num_train_epochs 3 \ | ||
--logging_steps 10 \ | ||
--save_steps 100 \ | ||
--output_dir ./tmp/ \ | ||
--device "gpu" | ||
``` | ||
其中,`[CLS{n}]`是ERNIE-CTM预留出的全局观察位,其中`n`从0开始计数,该全局观察位用于不同的训练任务,建模不同的语义特征,在下游任务中,可以结合使用,如使用attention筛选/融合特征,以达到更好的效果。而在灵活使用`[CLS{n}]`的时候,为中途增减任务token时不影响文本输入,所有的`[CLS{n}]`的位置编码均为0,且可以使用可见性矩阵(visible matrix)控制`[CLS{n}]`位置的特征对序列中其他位置,以及其他的全局观察位的可见性,以获得更加灵活、独立的特征表示。 | ||
|
||
#### 多卡训练 | ||
```bash | ||
python -m paddle.distributed.launch --gpus "0,1" train.py \ | ||
--max_seq_len 128 \ | ||
--batch_size 32 \ | ||
--learning_rate 1e-4 \ | ||
--num_train_epochs 3 \ | ||
--logging_steps 10 \ | ||
--save_steps 100 \ | ||
--output_dir ./tmp/ \ | ||
--device "gpu" | ||
``` | ||
本次开源的ERNIE-CTM-base模型中,使用了两个全局观察位`[CLS0]`和`[CLS1]`,具体作用见下文预训练任务介绍。 | ||
|
||
其中参数释义如下: | ||
- `max_seq_length` 表示最大句子长度,超过该长度将被截断。 | ||
- `batch_size` 表示每次迭代**每张卡**上的样本数目。 | ||
- `learning_rate` 表示基础学习率大小,将于learning rate scheduler产生的值相乘作为当前学习率。 | ||
- `num_train_epochs` 表示训练轮数。 | ||
- `logging_steps` 表示日志打印间隔。 | ||
- `save_steps` 表示模型保存及评估间隔。 | ||
- `output_dir` 表示模型保存路径。 | ||
- `device` 表示训练使用的设备, 'gpu'表示使用GPU, 'xpu'表示使用百度昆仑卡, 'cpu'表示使用CPU。 | ||
### 预训练任务 | ||
|
||
ERNIE-CTM使用的预训练任务为掩码语言模型(Masked Language Model,MLM)及ALBERT所使用的句子顺序预测(Sentence Order Prediction,SOP)。 | ||
|
||
### 模型评估 | ||
其中`[CLS0]`用于训练SOP任务,训练方式如ALBERT中描述,正例为同一篇文章中的两个连续的句子,负例为用一篇文章中两个连续的句子顺序翻转。 | ||
|
||
`[CLS1]`做为全局的监督信号,应用于MLM任务中。训练MLM任务前,将`[CLS1]`特征表示拼接在所有的序列表示之后,通过线性层融合,成为最终的序列表示,之后预测MLM任务。所以,ERNIE-CTM最终输出的文本序列表示中,都融合了`[CLS1]`的特征表示。最终的序列表示中,带有全句的特征,一定程度可避免序列中全局特征捕捉不足,同时,`[CLS1]`最终的表示中也充分融合了句子内容的信息,弥补了SOP任务对文本主题信息捕捉不足的缺陷。 | ||
|
||
![image-20210429202329482](../doc/img/image-20210429202329482.png) | ||
|
||
通过加载训练过程中保存的模型,可以对验证集数据进行验证,启动方式如下: | ||
|
||
```bash | ||
python -u eval.py \ | ||
--max_seq_len 128 \ | ||
--batch_size 32 \ | ||
--init_ckpt_dir ./tmp/ernie_ctm_ft_model_1.pdparams \ | ||
--device "gpu" | ||
``` | ||
|
||
其中 init_ckpt_dir 是模型加载路径,请根据具体的模型路径填写该项。 | ||
## Ernie-CTM后续计划 | ||
|
||
### 模型预测 | ||
1. 提升预训练语料的多样性(开源版主要使用了百度百科语料),持续优化预训练模型 | ||
2. 发布其他参数量的预训练模型(tiny、large等),便于不同场景应用 | ||
3. 维护开源社区,探索模型优化方向,整合优秀idea | ||
|
||
对无标签数据可以启动模型预测: | ||
|
||
```bash | ||
python -u predict.py \ | ||
--max_seq_len 128 \ | ||
--batch_size 32 \ | ||
--init_ckpt_dir ./tmp/ernie_ctm_ft_model_1.pdparams \ | ||
--device "gpu" | ||
|
||
## 在论文中引用ERNIE-CTM | ||
|
||
如果您的工作成果中使用了ERNIE-CTM,请增加下述引用。我们非常乐于看到ERNIE-CTM对您的工作带来帮助。 | ||
``` | ||
@article{zhao2020TermTree, | ||
title={TermTree and Knowledge Annotation Framework for Chinese Language Understanding}, | ||
author={Zhao, Min and Qin, Huapeng and Zhang, Guoxin and Lyu, Yajuan and Zhu, Yong}, | ||
technical report={Baidu, Inc. TR:2020-KG-TermTree}, | ||
year={2020} | ||
} | ||
``` | ||
|
||
|
||
|
||
## 问题与反馈 | ||
|
||
ERNIE-CTM在持续优化中,如果您有任何建议或问题,欢迎提交issue到Github。 |
Oops, something went wrong.