admin管理员组文章数量:1035920
基于深度学习的NER(命名实体识别)教程 —— 识别文本中的编号
1. 任务介绍
1.1 什么是NER(命名实体识别)
命名实体识别(Named Entity Recognition, NER)是自然语言处理(NLP)任务之一,用于识别文本中的特定类别的实体,如人名、地名、组织名、日期、编号等。
NER 在许多领域都有重要应用,例如:
- 金融行业:识别发票号、交易编号等。
- 电商行业:提取订单号、物流单号。
- 法律行业:识别案件编号、法规条款。
本教程的目标是:
- 从文本中提取代表特定含义的编号(如订单号、合同编号、身份证号等)。
- 解决编号格式多样的问题(如ORD-202301、A-123456、#456-XY 等)。
- 使用深度学习NER模型进行训练和部署。
2. 数据准备
2.1 数据来源与标注
为了训练NER模型,我们需要准备带标注的文本数据。
数据来源:
- 企业历史数据:如订单记录、合同文本。
- 公开数据集:可以参考
CONLL-2003
这样的NER数据集。 - 人工标注数据:使用工具进行数据标注。
2.2 标注数据格式
NER数据通常使用 BIO
(Begin-Inside-Outside)标注方案。
示例文本:
代码语言:javascript代码运行次数:0运行复制客户的订单号是 ORD-202301,请尽快处理。
BIO格式标注:
代码语言:javascript代码运行次数:0运行复制客户 O
的 O
订单号 O
是 O
ORD B-NUMBER
- I-NUMBER
202301 I-NUMBER
, O
请 O
尽快 O
处理 O
。 O
2.3 标注工具推荐
Label Studio
(开源、支持NER任务)Prodigy
(商业化工具,适用于大规模标注)spaCy annotation tool
(适用于快速标注小型数据集)
3. 选择预训练模型
3.1 适用于NER任务的模型
BERT
(适用于一般NER任务)RoBERTa
(增强版BERT,适合更复杂任务)DeBERTa
(更强的上下文理解能力)GPT
(适合少量数据的微调)
3.2 预训练模型的优势
- 减少训练时间:无需从零开始训练。
- 适应多种文本格式:可以泛化不同的编号类型。
- 支持微调:可以在小数据集上继续训练。
4. 训练NER模型
4.1 安装必要的库
代码语言:javascript代码运行次数:0运行复制pip install transformers datasets seqeval torch
4.2 加载数据集
代码语言:javascript代码运行次数:0运行复制from datasets import load_dataset
dataset = load_dataset("json", data_files={
"train": "train.json",
"test": "test.json"
})
数据格式示例(train.json):
代码语言:javascript代码运行次数:0运行复制{
"tokens": ["客户", "的", "订单号", "是", "ORD", "-", "202301", ",", "请", "处理", "。"],
"ner_tags": [0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0]
}
4.3 加载预训练模型并进行微调
代码语言:javascript代码运行次数:0运行复制from transformers import AutoModelForTokenClassification, AutoTokenizer, TrainingArguments, Trainer
model_name = "bert-base-uncased"
model = AutoModelForTokenClassification.from_pretrained(model_name, num_labels=3)
tokenizer = AutoTokenizer.from_pretrained(model_name)
4.4 训练NER模型
代码语言:javascript代码运行次数:0运行复制training_args = TrainingArguments(
output_dir="./ner_model",
evaluation_strategy="epoch",
save_strategy="epoch",
per_device_train_batch_size=8,
per_device_eval_batch_size=8,
num_train_epochs=5,
weight_decay=0.01,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset["train"],
eval_dataset=dataset["test"]
)
trainer.train()
5. 评估与优化
5.1 评估指标
使用 seqeval
计算 F1-score。
from seqeval.metrics import classification_report
y_true = [["O", "O", "O", "O", "B-NUMBER", "I-NUMBER", "I-NUMBER", "O"]]
y_pred = [["O", "O", "O", "O", "B-NUMBER", "I-NUMBER", "I-NUMBER", "O"]]
print(classification_report(y_true, y_pred))
5.2 误识别优化
- 增加训练数据:涵盖更多编号格式。
- 数据增强:如替换编号前缀(ORD→INV)。
- 调整超参数:优化学习率、批量大小等。
- 尝试CRF层:可以提升模型的序列识别能力。
6. 部署模型
6.1 使用 FastAPI 部署 API
代码语言:javascript代码运行次数:0运行复制pip install fastapi uvicorn
创建 app.py
:
from fastapi import FastAPI
from transformers import pipeline
token_classifier = pipeline("ner", model="./ner_model")
app = FastAPI()
@app.post("/predict/")
def predict(text: str):
return token_classifier(text)
运行:
代码语言:javascript代码运行次数:0运行复制uvicorn app:app --reload
7. 结论
本教程介绍了如何使用深度学习NER模型 从文本中提取编号,包括 数据标注、模型训练、优化与部署,并提供了详细的代码示例。
如果你对 不同类型的编号 识别有特定需求,如 车牌号、银行账号等,可以微调模型或调整训练数据,进一步提升识别准确率!
基于深度学习的NER(命名实体识别)教程 —— 识别文本中的编号
1. 任务介绍
1.1 什么是NER(命名实体识别)
命名实体识别(Named Entity Recognition, NER)是自然语言处理(NLP)任务之一,用于识别文本中的特定类别的实体,如人名、地名、组织名、日期、编号等。
NER 在许多领域都有重要应用,例如:
- 金融行业:识别发票号、交易编号等。
- 电商行业:提取订单号、物流单号。
- 法律行业:识别案件编号、法规条款。
本教程的目标是:
- 从文本中提取代表特定含义的编号(如订单号、合同编号、身份证号等)。
- 解决编号格式多样的问题(如ORD-202301、A-123456、#456-XY 等)。
- 使用深度学习NER模型进行训练和部署。
2. 数据准备
2.1 数据来源与标注
为了训练NER模型,我们需要准备带标注的文本数据。
数据来源:
- 企业历史数据:如订单记录、合同文本。
- 公开数据集:可以参考
CONLL-2003
这样的NER数据集。 - 人工标注数据:使用工具进行数据标注。
2.2 标注数据格式
NER数据通常使用 BIO
(Begin-Inside-Outside)标注方案。
示例文本:
代码语言:javascript代码运行次数:0运行复制客户的订单号是 ORD-202301,请尽快处理。
BIO格式标注:
代码语言:javascript代码运行次数:0运行复制客户 O
的 O
订单号 O
是 O
ORD B-NUMBER
- I-NUMBER
202301 I-NUMBER
, O
请 O
尽快 O
处理 O
。 O
2.3 标注工具推荐
Label Studio
(开源、支持NER任务)Prodigy
(商业化工具,适用于大规模标注)spaCy annotation tool
(适用于快速标注小型数据集)
3. 选择预训练模型
3.1 适用于NER任务的模型
BERT
(适用于一般NER任务)RoBERTa
(增强版BERT,适合更复杂任务)DeBERTa
(更强的上下文理解能力)GPT
(适合少量数据的微调)
3.2 预训练模型的优势
- 减少训练时间:无需从零开始训练。
- 适应多种文本格式:可以泛化不同的编号类型。
- 支持微调:可以在小数据集上继续训练。
4. 训练NER模型
4.1 安装必要的库
代码语言:javascript代码运行次数:0运行复制pip install transformers datasets seqeval torch
4.2 加载数据集
代码语言:javascript代码运行次数:0运行复制from datasets import load_dataset
dataset = load_dataset("json", data_files={
"train": "train.json",
"test": "test.json"
})
数据格式示例(train.json):
代码语言:javascript代码运行次数:0运行复制{
"tokens": ["客户", "的", "订单号", "是", "ORD", "-", "202301", ",", "请", "处理", "。"],
"ner_tags": [0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0]
}
4.3 加载预训练模型并进行微调
代码语言:javascript代码运行次数:0运行复制from transformers import AutoModelForTokenClassification, AutoTokenizer, TrainingArguments, Trainer
model_name = "bert-base-uncased"
model = AutoModelForTokenClassification.from_pretrained(model_name, num_labels=3)
tokenizer = AutoTokenizer.from_pretrained(model_name)
4.4 训练NER模型
代码语言:javascript代码运行次数:0运行复制training_args = TrainingArguments(
output_dir="./ner_model",
evaluation_strategy="epoch",
save_strategy="epoch",
per_device_train_batch_size=8,
per_device_eval_batch_size=8,
num_train_epochs=5,
weight_decay=0.01,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset["train"],
eval_dataset=dataset["test"]
)
trainer.train()
5. 评估与优化
5.1 评估指标
使用 seqeval
计算 F1-score。
from seqeval.metrics import classification_report
y_true = [["O", "O", "O", "O", "B-NUMBER", "I-NUMBER", "I-NUMBER", "O"]]
y_pred = [["O", "O", "O", "O", "B-NUMBER", "I-NUMBER", "I-NUMBER", "O"]]
print(classification_report(y_true, y_pred))
5.2 误识别优化
- 增加训练数据:涵盖更多编号格式。
- 数据增强:如替换编号前缀(ORD→INV)。
- 调整超参数:优化学习率、批量大小等。
- 尝试CRF层:可以提升模型的序列识别能力。
6. 部署模型
6.1 使用 FastAPI 部署 API
代码语言:javascript代码运行次数:0运行复制pip install fastapi uvicorn
创建 app.py
:
from fastapi import FastAPI
from transformers import pipeline
token_classifier = pipeline("ner", model="./ner_model")
app = FastAPI()
@app.post("/predict/")
def predict(text: str):
return token_classifier(text)
运行:
代码语言:javascript代码运行次数:0运行复制uvicorn app:app --reload
7. 结论
本教程介绍了如何使用深度学习NER模型 从文本中提取编号,包括 数据标注、模型训练、优化与部署,并提供了详细的代码示例。
如果你对 不同类型的编号 识别有特定需求,如 车牌号、银行账号等,可以微调模型或调整训练数据,进一步提升识别准确率!
本文标签: 基于深度学习的NER(命名实体识别)教程识别文本中的编号
版权声明:本文标题:基于深度学习的NER(命名实体识别)教程 —— 识别文本中的编号 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1748215847a2270599.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论