Label Studio 怎么标注中文实体?选择文本片段并核对字符位置

使用 Label Studio 的 Labels 配置标注中文人名、地点与组织片段,通过原文切片核对起止位置和类别。

给整句选择一个类别,与标记句子里的“人名、地点、组织名”是两种任务。准备中文实体识别数据时,Label Studio 可以通过 Labels 给具体文本片段加类别,导出后应把字符位置切回原文,确认圈选的内容没有偏移。

本文使用虚构短句“张三在北京加入云杉科技。”,不包含真实个人信息。官方文档核对日期为 2026 年 10 月 1 日;界面步骤未在你的部署上实测,切片例子只用于展示检查方法,不代表训练或识别效果。

Label Studio 怎么标注中文实体?选择文本片段并核对字符位置

先写清片段边界

为这条演示样本约定三类:人名只标姓名,不包含动词;地点只标地名,不包含“在”;组织名只标组织名称,不包含“加入”。据此应产生三个片段:

原文片段 类别 边界说明
张三 人名 不包含后面的“在”
北京 地点 不包含前面的“在”或后面的“加入”
云杉科技 组织名 不包含句号

真实项目还要补充简称、重叠实体、嵌套实体以及无法判断的处理规则。不要因为文本里出现汉字就把它全部框为一个实体,也不要让标注者各自决定边界。

配置 Labels 与可选择的 Text

在一个试验项目的 Labeling Setup 或 Labeling Interface 中保存下面的 XML。Labels 官方文档把它定义为给区域分配标签的控件;toName 绑定要标注的对象。这里使用字符级选择,方便选择没有空格的中文片段。

<View>
  <Labels name="entities" toName="text">
    <Label value="人名" />
    <Label value="地点" />
    <Label value="组织名" />
  </Labels>
  <Text name="text" value="$text"
        granularity="symbol" saveTextResult="yes" />
</View>

granularity="symbol" 和保存选中文字的参数见Text 文档。entities 是区域标注控件名,text 是文本对象名,$text 是任务数据字段;三个角色不能混为一谈。

按官方任务导入说明通过项目 Import 导入下面的 UTF-8 JSON,再打开任务。先选“人名”,拖选“张三”;再选“地点”并拖选“北京”;最后标“云杉科技”为“组织名”。查看区域列表和高亮,确认每个片段的边界与上表一致,然后提交正式标注。

[
  {"data":{"source_id":"ner-01","text":"张三在北京加入云杉科技。"}}
]

如果拖选时把“在北京”或句号一并选入,先修正区域边界再提交。完成标准是原文里准确出现三个目标片段,不是界面看到了三种标签颜色。

导出后核对 start、end 和原文

通过 Export 选择 JSON。导出文档说明区域对应结果,结果与具体控件关联;找到任务 data.source_id="ner-01",再找正式标注里 from_name="entities"、to_name="text"、type="labels" 的结果。下面是“北京”的预期结构示意,省略了区域 ID 等字段:

{
  "from_name": "entities",
  "to_name": "text",
  "type": "labels",
  "value": {
    "start": 3,
    "end": 5,
    "text": "北京",
    "labels": ["地点"]
  }
}

本例从零开始编号,结束位置不包含在片段内。用同一份原文验证位置:

text = "张三在北京加入云杉科技。"
examples = [
    (0, 2, "张三", "人名"),
    (3, 5, "北京", "地点"),
    (7, 11, "云杉科技", "组织名"),
]
for start, end, expected, label in examples:
    actual = text[start:end]
    assert actual == expected, (start, end, actual, expected)
    print(start, end, actual, label)

三个切片必须分别得到“张三”“北京”“云杉科技”。正式核查时,将示例坐标替换为导出结果的坐标,并读取同一任务的 data.text;若结果保存了 value.text,再核对它与切片一致。不能用重新整理过的另一份句子检查旧坐标。

位置不对时,先排查文本有没有被改过

Text 官方文档说明空格参与位置计数,Windows 的 \r\n 与 \n 也需要一致处理。Python 读文本文件可能转换换行;需要保留原字符时,使用 open(..., encoding="utf-8", newline=""),或在导入前统一换行并保存转换后的原文。标完以后删除空格、替换标点或改换行会让已有坐标偏移。

本文切片示例只含常用中文字符。含 emoji 等字符的文本可能涉及不同语言运行时的字符计数差异,应先用实际导出的结果核对坐标单位,不能直接把这份示例外推到任意 Unicode 文本。使用 URL 加载的原文也要保存固定版本,避免网页内容变化后坐标失效。

交给训练程序前再检查什么

保留原样本编号、未经改写的文本、片段起止位置和类别。逐条检查位置在文本范围内、切片非空、类别来自固定列表;多人标注的分歧需要裁决,取消状态或未提交结果应单独处理。

如果下游要的是 BIO 标签或特定分词器的数据,先明确它如何把字符片段映射到 token,并用这条已知答案样本做一次转换检查。Label Studio 的区域结果并不自动等同于任意模型的 token 标签,不能直接把 start 当作词序号。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30249.html

赞 (0)
AI小管家的头像AI小管家
Label Studio 导出 JSON 怎么转训练 CSV?保留人工标签并拦截异常记录
上一篇 1天前
Label Studio 文本显示异常怎么排查?核对字段、控件绑定和 URL 模式
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部