📌 DistilBERT 在专利摘要 NER 任务中的数据标注作用及方法
🚀 为什么数据标注对 NER 任务重要?
在 命名实体识别(NER) 任务中,模型需要学习识别 专利摘要中的特定实体类别,如 技术术语、化学物质、专利申请人 等。 数据标注的核心作用:
1. 提供监督信号:DistilBERT 是基于有监督学习训练的,需要标注数据才能学习正确的实体边界和分类。
2. 提高模型泛化能力:高质量标注数据可以减少误分类,提高模型在未见专利上的泛化能力。
3. 适应专利领域术语:专利摘要包含行业专有术语,需要准确标注以提高领域适配性。
📌 1. 数据标注格式
在 NER 任务中,最常用的标注格式有 BIO(Begin-Inside-Outside) 或 BILOU:
• BIO(常用):
"本发明涉及一种环氧树脂制备方法。" ["O", "O", "O", "O", "B-MAT", "I-MAT", "B-TECH", "I-TECH", "I-TECH", "O"]
• B-MAT = 材料(Material)的开始
• I-MAT = 材料的中间部分
• B-TECH = 技术(Technology)的开始
• I-TECH = 技术的中间部分
• O = 不是实体的词
• BILOU(更精细化):
["O", "O", "O", "O", "B-MAT", "L-MAT", "B-TECH", "I-TECH", "L-TECH", "O"]
• B = 实体的 开头
• I = 实体的 中间
• L = 实体的 结尾
• O = 非实体
✅ 推荐使用 BIO,适用于 DistilBERT 训练。
📌 2. 如何对专利摘要进行标注?
✅ (1) 手动标注(适用于小规模数据)
使用工具 Label Studio、Prodigy 或 doccano 进行人工标注。
示例
本发明涉及一种环氧树脂制备方法。
人工标注:
{
"text": "本发明涉及一种环氧树脂制备方法。",
"entities": [
{"start": 4, "end": 8, "label": "MAT"}, # "环氧树脂" 标注为材料
{"start": 9, "end": 13, "label": "TECH"} # "制备方法" 标注为技术
]
}
✅ (2) 规则匹配 + 词典扩充(适用于大规模数据)
对于大规模专利数据,可利用 规则匹配 + 术语词典 进行半自动标注:
import re
materials = ["环氧树脂", "聚乙烯", "碳纳米管"] technologies = ["制备方法", "合成工艺", "涂层技术"]
def annotate_text(text):
annotations = []
# 标注材料
for mat in materials:
for match in re.finditer(mat, text):
annotations.append({"start": match.start(), "end": match.end(), "label": "MAT"})
# 标注技术
for tech in technologies:
for match in re.finditer(tech, text):
annotations.append({"start": match.start(), "end": match.end(), "label": "TECH"})
return {"text": text, "entities": annotations}
text = "本发明涉及一种环氧树脂制备方法。" print(annotate_text(text))
✅ 适用于 大规模专利数据,可减少人工标注成本。
📌 3. 训练 DistilBERT 进行 NER
✅ (1) 加载 DistilBERT
from transformers import AutoTokenizer, AutoModelForTokenClassification
model_name = "distilbert-base-multilingual-cased" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForTokenClassification.from_pretrained(model_name, num_labels=7)
✅ (2) 处理数据集(BIO 格式)
from torch.utils.data import Dataset
train_texts = ["本发明涉及一种环氧树脂制备方法。"] train_labels = [["O", "O", "O", "O", "B-MAT", "I-MAT", "B-TECH", "I-TECH", "I-TECH", "O"]]
class PatentNERDataset(Dataset):
def __init__(self, texts, labels, tokenizer, max_length=128):
self.texts = texts
self.labels = labels
self.tokenizer = tokenizer
self.max_length = max_length
def __len__(self):
return len(self.texts)
def __getitem__(self, idx):
text = self.texts[idx]
labels = self.labels[idx]
encoding = self.tokenizer(text, truncation=True, padding="max_length", max_length=self.max_length, return_tensors="pt")
input_ids = encoding["input_ids"].squeeze()
attention_mask = encoding["attention_mask"].squeeze()
# 转换标签
label_map = {"O": 0, "B-MAT": 1, "I-MAT": 2, "B-TECH": 3, "I-TECH": 4}
label_ids = [label_map[label] for label in labels] + [0] * (self.max_length - len(labels))
return {"input_ids": input_ids, "attention_mask": attention_mask, "labels": torch.tensor(label_ids)}
dataset = PatentNERDataset(train_texts, train_labels, tokenizer)
✅ (3) 训练 DistilBERT 进行 NER
import torch from torch.utils.data import DataLoader from transformers import AdamW
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) optimizer = AdamW(model.parameters(), lr=5e-5) train_loader = DataLoader(dataset, batch_size=2, shuffle=True)
for epoch in range(3):
for batch in train_loader:
optimizer.zero_grad()
input_ids, attention_mask, labels = batch["input_ids"].to(device), batch["attention_mask"].to(device), batch["labels"].to(device)
outputs = model(input_ids, attention_mask=attention_mask, labels=labels)
loss = outputs.loss
loss.backward()
optimizer.step()
print(f"Epoch {epoch}, Loss: {loss.item()}")
✅ 使用 DistilBERT 进行高效训练,减少计算资源消耗。
📌 4. 总结
步骤 方法 作用 数据标注 手动(Label Studio)或 半自动(正则匹配+词典) 生成高质量 BIO 格式数据 数据格式 BIO 格式 适用于 Transformer 训练 模型选择 DistilBERT 速度快 60%,适用于大规模推理 训练方式 PyTorch + AdamW 适用于 GPU 训练
📌 5. 下一步
• 是否需要优化数据标注流程(如自动化 NER 标注)?
• 是否需要优化推理速度(如 ONNX 加速 DistilBERT)?
• 是否需要进一步扩展到超大规模专利数据?
🚀 我可以帮助你优化专利 NER 任务! 🚀
在建筑行业的 命名实体识别(NER) 任务中,常见的实体类别通常可以分为以下几大类:
指用于建筑施工的各种原材料和成品材料。 示例:
• 混凝土、钢筋、水泥、砖块、砂石、玻璃、铝合金
• 复合材料、保温材料、木材、防水涂料
指在建筑过程中使用的施工方法、工艺和技术。 示例:
• 预制装配式、现浇混凝土、钢结构施工、深基坑支护
• 高性能混凝土技术、BIM(建筑信息建模)、3D 打印建筑
指施工现场使用的各类设备、工具和机械。 示例:
• 塔吊、挖掘机、起重机、打桩机、搅拌站
• 模板支撑系统、脚手架、电焊机、喷涂设备
指建筑物的结构类型和组成部分。 示例:
• 框架结构、剪力墙结构、装配式结构、钢结构
• 基础、梁、柱、板、楼梯、屋顶
指建筑的用途和功能类型。 示例:
• 住宅、商业综合体、写字楼、医院、学校、机场、地铁站
• 绿色建筑、被动房、智能建筑
指建筑行业相关的法律法规、设计标准和施工规范。 示例:
• 《建筑设计防火规范》(GB50016)、《混凝土结构设计规范》(GB50010)
• LEED(绿色建筑认证)、BREEAM、ISO 9001
指建筑项目中涉及的公司、机构和人员角色。 示例:
• 建设单位、总承包商、分包商、监理单位、设计院
• 施工员、项目经理、安全员、造价工程师、监理工程师
指建筑项目的各个施工环节。 示例:
• 设计阶段、基础施工、主体结构施工、机电安装、装修阶段
• 竣工验收、交付运营
指建筑施工中的安全隐患、事故类型和安全防护措施。 示例:
• 高空坠落、模板塌陷、起重伤害、触电事故
• 安全帽、安全网、消防喷淋、应急预案
总结
类别 典型示例 材料(Material) 混凝土、钢筋、玻璃、保温材料 施工技术(Technique) 预制装配、BIM、3D 打印建筑 设备与机械(Equipment) 塔吊、挖掘机、脚手架 建筑结构(Structure) 框架结构、剪力墙、屋顶 建筑功能(Function) 住宅、医院、地铁站 规范与标准(Regulations) GB50016、LEED、ISO 9001 施工单位与角色(Roles) 施工员、监理单位、总承包商 施工阶段(Phase) 设计、基础施工、竣工验收 建筑风险与安全(Safety) 高空坠落、触电事故、安全帽
如果你要做 建筑行业的命名实体识别(NER),可以基于这些类别构建标注体系,并训练模型来自动提取相关实体! 🚀