基于模板生成 NER 训练数据

NER 数据模板

在这里插入图片描述
模板中的标记作为占位符,用实际的数据去填充。

根据占位符生成样本

tag2sample = {
    'PER': ('person',per_data),
    'LOC': ('address',loc_data),
    'ORG': ('organization',org_data)
}

def replace_tag(tag):
    tag = tag.strip('<>')
    for k, v in tag2sample.items():
        if tag.startswith(k):
            return (v[0], random.choice(v[1]))
    else:
        raise Exception(f"Unkown tag: {tag}")

# 例如: replace_tag('<LOC2>')
# 输出: ('address', '天津市东丽区金钟街道悦和里1号楼1401')

生成样本

  • 随机选取模板
  • 随机选取样例数据
  • 使用find函数完成位置标记
import re
from collections import defaultdict

def find_entity(long_str, sub_str): # 查找子串在长串中的所有位置
    if len(sub_str) <= 0:
        return []
    positions = []
    l = len(sub_str)
    start = 0
    while True:
        pos = long_str.find(sub_str, start)
        if pos == -1:
            break
        positions.append([pos, pos+l-1])
        start = pos + len(sub_str)
    return positions

data = []
for _ in tqdm(range(10000)):
    template = random.choice(templates)
    tags = re.findall('<.*?>', template)
    sentence = template
    labels = defaultdict(dict)
    for tag in tags:
        label, tag_sample = replace_tag(tag)
        labels[label][tag_sample] = []
        sentence = sentence.replace(tag, tag_sample)
    
    for label in labels:
        for entity in labels[label]:
            labels[label][entity] = find_entity(sentence, entity)
            
    data.append({'text': sentence, 'label': dict(labels)})

结果展示

在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-14 12:20:09       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-14 12:20:09       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-14 12:20:09       87 阅读
  4. Python语言-面向对象

    2024-05-14 12:20:09       96 阅读

热门阅读

  1. 使用Springboot整合Elasticsearch

    2024-05-14 12:20:09       33 阅读
  2. 机器学习概念:决策树的一些概念

    2024-05-14 12:20:09       30 阅读
  3. Django高级表单处理与验证实战

    2024-05-14 12:20:09       28 阅读
  4. Redis——缓存的三种设计模式

    2024-05-14 12:20:09       28 阅读
  5. 机器学习【如何学习】

    2024-05-14 12:20:09       30 阅读
  6. leetcode14 最长公共前缀-纵向比较

    2024-05-14 12:20:09       27 阅读