Skip to content
/ LAnn Public

This is a little Annotator tool using browser;这是一个基于浏览器运行的中文三元组(命名实体识别和关系分类)联合标注工具

Notifications You must be signed in to change notification settings

Freeshman/LAnn

Repository files navigation

LAnn标注工具

当前情况

  • 目前为封闭域关系三元组标注,不提供新关系的标注,之前开放域关系三元组版本将不再维护,不再维护,不再维护,存在BUG!存在BUG!存在BUG!。
  • 计划脱离对Django框架的依赖,借助PyQt的WebEngine实现标注界面和Python程序数据传输,更好地支持Pytorch和数据处理,已基本打通JS和Python之间的墙壁。
  • 计划加入预训练BERT模型。

LAnn简介

演示视频 LAnn(Little Annotator)是一个用于标注三元组的纯前段中文标注工具。具有使用简单的特点,采用网页的形式,使用浏览器便可运行。标注过程、结果直观,易后处理。基本不用配置,快速上手。可只用于NER标注,也可以适当修改,改为POS标注(实体类型改为词性,只进行实体标注)或者分词标注(设置特殊的实体类型“词语”,只进行实体标注)。 可以先后导入test.txt、entity_dict,然后启动软件的辅助标注试一试,试一试

快速上手

配置实体类型

在entity_type.js文件中配置实体类型和所显示的颜色,配置格式为:"实体名称":"颜色"。目前最多支持26种实体类型的定义,选择快捷键分别对应与[0-9,a-z]

配置关系类型

在relation_type.js文件中配置关系类型和所显示的颜色,配置格式为:"关系名称":"颜色"。目前最多支持26种关系类型的定义,选择快捷键分别对应与[0-9,a-z]

配置按键映射(如需要)

在keybind.js文件中配置按键。

配置辅助标注模型

LAnn读取文件

标注工具可以直接读取:

  • 原始文本
  • BIO命名实体标注后的文本
  • LAnn标注过的文本

标注流程

实体的标注或取消:

鼠标选中文字,自动弹出实体类型选择页面,点击实体类型(或按相应的数字键,或者d:地理位置,r:人名,s:时间日期,g:公司名)完成标注,直接按空格将默认使用服务器给出的分类(服务器可用情况下);或点击取消按钮(或按“a”键)消除先前的标注。 鼠标点击任意字符会立即双字符实体标注。

三元组的标注:

  • 依次点击两个实体类型的元素(s,o),跳出关系选择界面进行三元组标注
  • 在选择(锁定)元素时,“已选中(锁定)”标签会变成粉红色进行提示
  • 选中元素后,可点击取消消除当前元素的标记
  • 选中元素后,点击空白处(或按空格键)将取消选中
  • 两次选中相同元素,将锁定该元素的选择,该功能在一个头实体有多个三元组的情况下非常有用
  • 已标注的三元组再次进行标记可取消之前的标记

类VIM操作:

  • h,j,k,l移动光标,g和;键分别向左右移动两个字符
  • n、b翻页
  • w、e跳转到上一个或下一个标记实体
  • r跳转到标记结尾
  • 空格选中,移动光标框选:s标记为实体;a取消当前标记(还支持快速修改:光标在实体或关系区域内时,不用选中可直接修改)
  • 不用空格选中,直接按s或者f默认选中两个字符进行标注
  • p分别标记[s,o],双按p标记并锁定标记,但只能锁定s
  • 可输入数字进行上下左右光标和页面的跳转,按回车直接跳转到指定数字页面,ctrl+g跳转到指定字符处

字符增删

有时候不可避免地需要增删字符,此时需要对三元组的索引进行调整,因此设计并加入了此功能。

  • 删除字符

点击删除键(或按“x”)删除光标处的字符,如果当前字符对应有三元组,则三元组直接被舍弃。

  • 插入字符

点击插入键(或按“u”)在光标前插入指定的字符,字符的标签默认为“O”,如有必要,重新标注实体。如果需要在页面最后位置处插入字符,需要间接操作才能实现(因为这种情况比较少见,故不再优化)。

删除的字符会默认为插入的字符,因此在删除后直接按插入键会恢复删除的字符,间接实现撤销功能。

标注存储格式

语料文本的标注结果文件(.lann)每行为一个字符,包含三列,每列用”\t“隔开,分别对应字符域、实体关系域和三元组域。

  • 字符域:为统一格式和方便预览,原始文本的换行符“\n”用“_换行符_”代替。
  • 实体关系域:采用BIO标注方式。
  • 三元组域:包含相同S的三元组都记录在S首字符那一行,三元组之间采用“;”相隔,方便分割;SPO用“>”相隔。不构成三元组的字符该域为“X”。 使用前两个域分割后即为NER数据集。

辅助标注

初期-纯前端

  • 在标注初期,LAnn标注工具会记录实体类型标注为词典,新的实体会根据编辑距离最小的、记录过的实体标签进行判断;
  • 在勾选辅助序列标注选项后,会根据词典匹配进行预标注。标注策略:优先匹配长度最长的实体,长度相同时,保留原标注;
  • 标注过的三元组会记录为三元组词条,同样根据编辑距离进行关系判断。

在保存时,会保存标注好的文件和记录的词典;导出的词典也可以重新导入。

Django后台辅助标注

LAnnBack为后台辅助标记部分,可支持实体分类模型、序列标注模型和关系分类模型。

前段:

  • 勾选序列辅助标注 会将当前页面的文本进行序列预标注
  • 设定实体或关系时,辅助给出相应的分类和概率

后端:

  • 接收数据形式根据server.js确定
  • LAnnBack/UI.py文件中,process、seqlab和triple_relation_classfy分别对应实体分类、序列标注和关系分类方法,适当修改调用自己的模型。
  • 辅助标注后台如果收到带有标签的样本,将在new文件夹下记录新的样本,用于后期模型的训练。

开启辅助标注后台:

python manage.py runserver 0.0.0.0:8000

注意: 如果辅助标注服务器为本地计算机,需要安装django-cors-headers和设置来解决跨域访问问题。

数据集制作

NER

LAnn2NER.py文件用于将标注过的.lann文件转换为NER数据集,将自动读取当前result文件夹下所有的.lann文件,并按照75%的训练集和25%的测试集进行切分,同时输出数据集的统计信息。

三元组

LAnn2Triple.py文件用于将标注过的.lann文件转换为三元组数据集,将自动读取当前result文件夹下所有的.lann文件,并按照75%的训练集和25%的测试集进行切分,同时输出数据集的统计信息。数据集的格式同NYT,但所有Tokens为字符,且无POS特征。

TODO

  • 三元组的编辑
  • 多元组标注功能
  • [-] 整合分词(统一为字符形式)
  • 智能算法辅助标注
  • BERT预训练模型在线训练(正在试验,效果差强人意)
  • [-] 翻译为英文版(貌似没这个必要)
  • 添加VIM模式
  • 更优美的三元组显示方式
  • 加入语料标注质量分析、提升功能

About

This is a little Annotator tool using browser;这是一个基于浏览器运行的中文三元组(命名实体识别和关系分类)联合标注工具

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy