配置代码样式

Sunday, April 19, 2020

基于ALBERT实现中文NER

基于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

Download chinese model

https://github.com/google-research/albert,google官方已经提供资源。

运行模型

可以上传该ipynbgoogle 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/terminal_predict.py

源码分析

该项目核心是参考下方资源进行改动,run_ner.py是参考run_classifier.py改动的。若想阅读研究源代码,需要对TensorFlow的estimator有一定的熟悉,具体请参考官方或其他网站。

参考资源

No comments:

Post a Comment