基于ALBERT实现中文NER,提供测试代码和数据资源
声明
本文仅技术性分享,该模型在google colab上能正常运行。如需转载,请注明来源。
什么是NER
命名实体识别,英语名称:Named Entity Recognition,简称NER,是指从文本中识别某类意义的实体,实体类型包含并不限于人名、地名、机构名、专有名词、时间、数量、货币、比例数值等文字。从非结构化文本(如新闻文章等)识别某些实体类型。
比如:
美国的华莱士,我和他谈笑风生。
经过NER处理后(输出格式视情况而定,这仅仅是个例子):
{
"地区": [
"美国"
],
"人物": [
"华莱士"
]
}
美国的华莱士,我和他谈笑风生。
{
"地区": [
"美国"
],
"人物": [
"华莱士"
]
}
为什么需要NER
NER是NLP(自然语言处理)中一项关键任务。在信息检索、关系抽取、事件抽取、自动文本摘要、知识图谱、机器翻译、问答系统等NLP任务提供帮助。这里暂不详述,请另行研究。
NER实现方法
- 采取自定义规则 - 依赖人工定制规则,一般基于句法、语法、词汇以及特定领域的知识等。设计好的规则一般无法套用其他领域。
- 采取无监督学习 - 如使用聚类方式可以根据语义相似度,从聚集抽取命名实体。但需要巨大的语料库得到词汇资源。
- 基于特征值采取监督学习 - 将NER任务视为序列标注任务,使用标注好的数据、特定领域知识和设计特征提取训练数据样本,将特征值用于训练机器学习模型使其学习规则。
- 采取深度学习 - 深度学习具有非线性转转特点,在不需要复杂的特征工程上学习更复杂的特征。
本文采取深度学习方法
本文深度学习架构
本文采取ALBERT + BiLSTM + CRF架构实现NER任务,本文将以下代码拆分几部分:
- 项目代码、训练数据、测试数据准备
- 模型训练
- 数据测试
项目代码、训练数据、测试数据准备
https://github.com/grallage/ALBERT-BiLSTM-CRF-NER已经包含简单的训练、测试样本,和模型训练、模型测试脚本,chinese model需另行下载(见Download chinese model)。
项目结构
|____albert-lstm-crf-ner
| |____lstm_crf_layer.py 定义LSTM & CRF layer
| |____run_ner.py 训练ner model
| |____optimization.py
| |____tokenization.py
| |____terminal_predict.py 预测测试
| |____README.md
| |____requirement.txt
| |____modeling.py 定义albert模型
| |____data train、eval、predict dataset
| | |____dev.txt
| | |____train.txt
| | |____test.txt
|____albert-lstm-crf-ner
| |____lstm_crf_layer.py 定义LSTM & CRF layer
| |____run_ner.py 训练ner model
| |____optimization.py
| |____tokenization.py
| |____terminal_predict.py 预测测试
| |____README.md
| |____requirement.txt
| |____modeling.py 定义albert模型
| |____data train、eval、predict dataset
| | |____dev.txt
| | |____train.txt
| | |____test.txt
Download chinese model
https://github.com/google-research/albert,google官方已经提供资源。
运行模型
可以上传该ipynb到google colab,然后逐行运行即可。免除部署和硬件性能烦恼。
训练模型
python /content/ALBERT-BiLSTM-CRF-NER/run_ner.py \
--task_name ner \
--do_train true \
--do_eval true \
--data_dir /content/ALBERT-BiLSTM-CRF-NER/data \
--vocab_file /content/albert_base/vocab_chinese.txt \
--bert_config_file /content/albert_base/albert_config.json \
--max_seq_length 128 \
--train_batch_size 64 \
--learning_rate 2e-5 \
--num_train_epochs 2 \
--do_predict true \
--init_checkpoint /content/albert_base/model.ckpt-best \
--output_dir /content/albert_base_ner_checkpoints
其中/content/ALBERT-BiLSTM-CRF-NER
存放该项目代码和dataset,/content/albert_base
存放chinese model,/content/albert_base_ner_checkpoints
存放checkpoint相关数据,可根据自身情况更改。
python /content/ALBERT-BiLSTM-CRF-NER/run_ner.py \
--task_name ner \
--do_train true \
--do_eval true \
--data_dir /content/ALBERT-BiLSTM-CRF-NER/data \
--vocab_file /content/albert_base/vocab_chinese.txt \
--bert_config_file /content/albert_base/albert_config.json \
--max_seq_length 128 \
--train_batch_size 64 \
--learning_rate 2e-5 \
--num_train_epochs 2 \
--do_predict true \
--init_checkpoint /content/albert_base/model.ckpt-best \
--output_dir /content/albert_base_ner_checkpoints
/content/ALBERT-BiLSTM-CRF-NER
存放该项目代码和dataset,/content/albert_base
存放chinese model,/content/albert_base_ner_checkpoints
存放checkpoint相关数据,可根据自身情况更改。测试模型
python /content/ALBERT-BiLSTM-CRF-NER/terminal_predict.py
python /content/ALBERT-BiLSTM-CRF-NER/terminal_predict.py
源码分析
该项目核心是参考下方资源进行改动,run_ner.py
是参考run_classifier.py
改动的。若想阅读研究源代码,需要对TensorFlow的estimator有一定的熟悉,具体请参考官方或其他网站。
run_ner.py
是参考run_classifier.py
改动的。若想阅读研究源代码,需要对TensorFlow的estimator有一定的熟悉,具体请参考官方或其他网站。
No comments:
Post a Comment