- 目前为封闭域关系三元组标注,不提供新关系的标注,之前开放域关系三元组版本将不再维护,不再维护,不再维护,存在BUG!存在BUG!存在BUG!。
- 计划脱离对Django框架的依赖,借助PyQt的WebEngine实现标注界面和Python程序数据传输,更好地支持Pytorch和数据处理,已基本打通JS和Python之间的墙壁。
- 计划加入预训练BERT模型。
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文件中配置按键。
标注工具可以直接读取:
- 原始文本
- BIO命名实体标注后的文本
- LAnn标注过的文本
鼠标选中文字,自动弹出实体类型选择页面,点击实体类型(或按相应的数字键,或者d:地理位置,r:人名,s:时间日期,g:公司名)完成标注,直接按空格将默认使用服务器给出的分类(服务器可用情况下);或点击取消按钮(或按“a”键)消除先前的标注。 鼠标点击任意字符会立即双字符实体标注。
- 依次点击两个实体类型的元素(s,o),跳出关系选择界面进行三元组标注
- 在选择(锁定)元素时,“已选中(锁定)”标签会变成粉红色进行提示
- 选中元素后,可点击取消消除当前元素的标记
- 选中元素后,点击空白处(或按空格键)将取消选中
- 两次选中相同元素,将锁定该元素的选择,该功能在一个头实体有多个三元组的情况下非常有用
- 已标注的三元组再次进行标记可取消之前的标记
- 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标注工具会记录实体类型标注为词典,新的实体会根据编辑距离最小的、记录过的实体标签进行判断;
- 在勾选辅助序列标注选项后,会根据词典匹配进行预标注。标注策略:优先匹配长度最长的实体,长度相同时,保留原标注;
- 标注过的三元组会记录为三元组词条,同样根据编辑距离进行关系判断。
在保存时,会保存标注好的文件和记录的词典;导出的词典也可以重新导入。
LAnnBack为后台辅助标记部分,可支持实体分类模型、序列标注模型和关系分类模型。
前段:
- 勾选序列辅助标注 会将当前页面的文本进行序列预标注
- 设定实体或关系时,辅助给出相应的分类和概率
后端:
- 接收数据形式根据server.js确定
- LAnnBack/UI.py文件中,process、seqlab和triple_relation_classfy分别对应实体分类、序列标注和关系分类方法,适当修改调用自己的模型。
- 辅助标注后台如果收到带有标签的样本,将在new文件夹下记录新的样本,用于后期模型的训练。
开启辅助标注后台:
python manage.py runserver 0.0.0.0:8000
注意: 如果辅助标注服务器为本地计算机,需要安装django-cors-headers和设置来解决跨域访问问题。
LAnn2NER.py文件用于将标注过的.lann文件转换为NER数据集,将自动读取当前result文件夹下所有的.lann文件,并按照75%的训练集和25%的测试集进行切分,同时输出数据集的统计信息。
LAnn2Triple.py文件用于将标注过的.lann文件转换为三元组数据集,将自动读取当前result文件夹下所有的.lann文件,并按照75%的训练集和25%的测试集进行切分,同时输出数据集的统计信息。数据集的格式同NYT,但所有Tokens为字符,且无POS特征。
- 三元组的编辑
- 多元组标注功能
- [-] 整合分词(统一为字符形式)
- 智能算法辅助标注
- BERT预训练模型在线训练(正在试验,效果差强人意)
- [-] 翻译为英文版(貌似没这个必要)
- 添加VIM模式
- 更优美的三元组显示方式
- 加入语料标注质量分析、提升功能