知识图谱实战第二章:用 Doccano 数据标注 + Neo4j 存储 + Cypher/SPARQL 查询全攻略(附Doccano安装与使用教程)

张开发
2026/4/6 19:58:13 15 分钟阅读

分享文章

知识图谱实战第二章:用 Doccano 数据标注 + Neo4j 存储 + Cypher/SPARQL 查询全攻略(附Doccano安装与使用教程)
文章目录一、认识工具1.Doccano数据标注平台2.Flask web服务框架3.Gunicorn服务组件4.Neo4j图数据库(非常重要!博主现在工作还在用二、Doccano安装及其使用方法1.Doccano平台介绍2.Doccano的安装3.启动Doccano4.运行Doccano与创建新的文本打标项目5.添加语料库6.添加标签7.添加成员8.添加标注指南9.开始给文本打标10.导出打标结果三、知识查询语言1.SQL2.SPARQL3. Gremlin4.Cypher四、欢迎提问一、认识工具1.Doccano数据标注平台Doccano是一种用于文本标注的开源工具旨在简化和加速标注任务的进行。它提供了一个直观的用户界面使标注人员能够轻松地对文本数据进行标注并创建高质量的训练数据集用于机器学习和自然语言处理任务。-Doccano的一些主要特点和功能多种标注类型Doccano支持多种常见的文本标注任务如命名实体识别、文本分类、关系抽取等。您可以根据具体任务的需求选择适当的标注类型。协作标注多个标注人员可以同时使用Doccano进行协作标注。标注人员可以独立地对同一份数据进行标注并进行交互和讨论以提高标注的一致性和准确性。快速导入和导出您可以将原始文本数据以各种格式如CSV、JSON、TXT等导入到Doccano中进行标注。标注完成后您可以将标注结果导出为各种格式方便后续的数据分析和模型训练。具体标注方法我们会在后续讲解2.Flask web服务框架Flask框架是当下最受欢迎的python轻量级框架也是pytorch官网指定的部署框架。 Flask的基本模式为在程序里将一个视图函数分配给一个URL每当用户访问这个URL时系统就会执行给该URL分配好的视图函数获取函数的返回值其工作过程见图在日常工作中Flask框架主要作用是对模型的封装和API接口的制作。安装pip install flask基本使用方法# 导入Flask类from flaskimportFlask# 创建一个该类的实例app, 参数为__name__, 这个参数是必需的# 这样Flask才能知道在哪里可找到模板和静态文件等东西。appFlask(__name__)# 使用route()装饰器来告诉Flask触发函数的URLapp.route(/)def hello_world():请求指定的url后执行的主要逻辑函数# 在用户浏览器中显示信息Hello, World!returnHello, World!if__name____main__:app.run(host0.0.0.0,port5000)启动服务python app.py启动效果通过浏览器打开地址http://0.0.0.0:5000可看见打印了’Hello, World’.3.Gunicorn服务组件简介Gunicorn是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务组件(WSGI: Web Server Gateway Interface)移植自Ruby的独角兽Unicorn 项目具有使用非常简单轻量级的资源消耗以及高性能等特点。作用在项目中Gunicorn和Flask框架一同使用能够开启服务处理请求因其高性能的特点能够有效减少服务丢包率。安装# 使用pip安装gunicornpipinstallgunicorn基本使用方法# 使用其启动Flask服务gunicorn-w1-b0.0.0.0:5000 app:app# -w 代表开启的进程数我们只开启一个进程# -b 服务的IP地址和端口# app:app 是指执行的主要对象位置在app.py中的app对象# 如果使其在后台运行可使用# nohup gunicorn -w 1 -b 0.0.0.0:5000 app:app 21 4.Neo4j图数据库(非常重要!博主现在工作还在用Neo4j图数据库作为核心的存储和查询数据库因此博主第三章专门详细介绍二、Doccano安装及其使用方法1.Doccano平台介绍Doccano是documment anotation的缩写是一个开源的文本标注工具我们可以用它为NLP任务的语料库进行打标。它支持情感分析命名实体识别文本摘要等任务。它的操作非常便捷在小型语料库上只要数小时就能完成全部的打标工作。下面介绍一下如何安装、配置和使用doccano2.Doccano的安装doccano的安装要在虚拟环境下进行进入你用到的虚拟环境中, 安装doccano虚拟环境不会创建和使用的私信博主博主看见了会第一时间回复的pip install doccano然后在终端里输入# 初始化数据库doccano init# 创建一个super user。这里要把pass改成你需要的密码。当然用户名也可以改成别的。doccano createuser--usernameadmin--password12343.启动Doccano首先在终端中运行下面的代码来启动WebServer# 启动webserverdoccano webserver--port8000然后打开另一个终端运行下面的代码启动—任务队列:# 启动任务队列doccano task4.运行Doccano与创建新的文本打标项目首先打开浏览器最好是Chrome在地址栏中输入http://127.0.0.1:8000/并回车。然后我们点击中间的蓝色按钮“快速开始”。此时我们会跳转到登陆的界面。这里我们需要用之前创建的超级用户登陆。完成登陆后我们会来到“项目”的界面。我们可以点击左上角的“创建”按钮来创建新的项目也可以点击“删除”按钮来删除已经创建的项目。我们点击左上角的“创建”按钮创建一个新的项目。对项目进行基本的说明在填写完要求的信息后点击创建我们就创建了一个新的NLP标注项目。在创建完成后会自动跳转到项目的主页。进入数据标注平台最左侧是一系列可以选择的页面。“主页”这个标签下面是doccano提供的一系列教程其他的页面可以对项目进行设置。稍后我们将在上图所示的界面中的完成文本打标项目的各项设置。我们会依次点击左侧的各个标签依次进行设置。5.添加语料库我们直接从“数据集”这个标签开始看。在“数据集”这个页面我们可以将准备好的文本添加到项目中为将来的打标做准备。我们首先点击左上角的“操作”→“导入数据集“。此时我们会来到”上传数据”的界面。如上图所示doccano总共支持4种格式的文本他们的区别如下Textfile要求上传的文件为txt格式并且在打标的时候一整个txt文件在打标的时候显示为一页内容Textline要求上传的文件为txt格式并且在打标的时候该txt文件的一行文字会在打标的时候显示为一页内容JSONL是JSON Lines的简写每行是一个有效的JSON值CoNLL是“中文依存语料库”是根据句子的依存结构而建立的树库。其中依存结构描述的是句子中词与词之间直接的句法关系。具体介绍看汉语树库。注意doccano官方推荐的文档编码格式为UTF-8。在使用JSONL格式的时候文字数据本身要符合JSON格式的规范。数据集中不要包含空行。这里我们以Textline格式举例。点击“TextLine格式”。然后在跳转到的界面里设置File Format和Encoding。然后点击下图中的“Drop files here…”来上传文件最后点击导入即可。此时再点击“数据集”的标签我们就可以看到一条一条的文本已经被添加到项目中了。将来我们将对这些文本进行打标。6.添加标签在这一部分我们讲解如何往项目中添加在打标时可选的标签。在NER任务中我们可能会添加People、Location、Company等在文本分类任务中我们可能会添加Positive、Negative等标签作为打标时的可选标签。注意这里只是添加将来可供选择的标签是项目配置的过程而不是进行文本标注。点击左侧的“标签”按钮就来到了添加标签的界面。继续点击“操作”按钮并在下拉菜单中点击“创建标签”按钮。在弹出的“创建标签”窗口里面在标签名一栏写上标签的名字键值代表快捷键。例如在NER的例子中可以写People、Location、Company等。例如我们给People设置的快捷键是p。将来在打标的时候右手用鼠标选中段落中的文字例如“白居易”左手在键盘按下快捷键p就可以把被选中的文字打标成“People”。再往下我们可以给标签自定义颜色。全部设置好以后点击右下角的“保存”按钮。此时一个标签就添加完成了。我们以同样的方法添加其他所需要的标签。7.添加成员在为机器学习的语料库打标的时候由于语料库一般比较大如果让一个人给所有的文本打标的话那到地老天荒都完不成纯牛马中的纯牛马。因此我们需要多个人协同完成语料库的打标工作。因此为了让其他人参与到打标项目中来我们首先需要为其他成员创建账户在初始配置doccano的时候创建过超级用户admin。我们打开网页http://127.0.0.1:8000/admin/来到数据库的管理系统页面Django administration并用超级用户的账号密码登陆该管理系统。此时我们再返回项目的设置页面。点击左侧的“成员”标签点击页面上的“添加”按钮会弹出“添加成员”窗口。其中在“用户搜索接口”的下拉菜单里面可以找到我们刚添加的用户“小明”。注意在这里只能找到已经创建到的用户而不能创建新的用户。如果要新建用户必须要到前面Django administration界面。同时我们还可以设置不同的成员的角色不同的角色对应着不同的权限。如下图我们把小明设置为“标注员”。其他角色还有项目管理员和审查员。8.添加标注指南我们可以事前给标注员和审查员准备一些标注指南便于项目成员理解我们标注的要求和注意点。例如在判断文本正负面倾向的文本分类任务中我们要具体说明判断正负面的标准例如满足哪些要求我们就可以认为一个本文是正面的。因为一万个读者眼里有一万个哈姆雷特不同人对文本的理解和判断正负面的尺度是不一样的。我们只有把标准写具体、写明确了让人不用动脑筋都能做出符合我们要求的判断我们才能得到一个尺度统一的数据集。数据集上的打标尺度统一是机器学习获得好的效果的前提。添加指南的界面如下图所示。9.开始给文本打标准备工作忙活了老半天终于可以进入正题了----给文本打标。需要注意的是上面的前期设置里面并不是所有的都是必须的。在最精简的情况下我们可以在仅添加了数据集与标签后就开始给文本打标。这里我们用标注员小明的账号登陆打标系统做演示。同样是打开http://127.0.0.1:8000/地址输入小明的账号密码登陆。和之前不一样的是由于小明的角色是“标注员”因此他只有打标的权限没有对项目进行各项设置的权限所以在左侧列表没有管理员用户的各项设置项目。这里我们直接点击左上角的“开始标注”进行打标。以NER任务为例在打标的界面下我们选中句子中的实体会自动弹出一个下拉菜单我们可以从这个下拉菜单中选择相应的实体类型People也可以直接在键盘上按下p键。 这是添加标签之后的样子。10.导出打标结果当我们要导出标注结果的时候我们重新用管理员用户登陆在“数据集”页面下点击“操作”→“导出数据集”。在弹出的窗口中根据我们的需要进行设置后点击Export即可导出标注结果。保存好的文本是字典的格式。如下图所示保存了句子的ID、句子原文、实体的在句子中的位置、实体的类型。三、知识查询语言查询与检索是知识图谱的重要使用方式, 也是知识图谱数据管理系统的核心能力之一1.SQLSQL: 计算机工程师最熟悉的查询语言莫过于SQL. 在SQL应用中, 数据以表的形式存在, 有比较强的schema定义, 表和表之间的数据关联以join的方式实现.但是SQL有一个重大的缺陷: 属性值并不总是单一值. 针对每一个多值属性需要进行额外的拆表操作, 这对于表数据的管理带来巨大挑战. 尤其是需要高速高频的进行多表连接操作的场景, 对于数据库性能也是极大的挑战! 对于知识图谱中最主流的三元组形式, 多跳关联查询的形式, 显然SQL不具备优势.2.SPARQLSPARQL: 国际标准化组织W3C提出了针对于RDF知识图谱的标准化查询语言SPARQL. 作为一种图数据, SPARQL查询的执行可以通过图匹配的方式实现.SPARQL是一种针对RDF数据的查询语言, 2008年正式成为W3C推荐的针对RDF数据的标准查询语言. 和SQL一样, SPARQL也是一种声明式的结构化查询语言, 即用户只需要按照SPARQL定义的语法规则描述其想查询的信息即可, 不需要明确指定计算机实现查询的步骤.SPARQL语言借鉴了SQL的部分语法, 更加关注目标数据图的匹配, 总体来说语言规则不算复杂, 比较容易学:# 比如利用SPARQL查询从三元组org:book, dc:title, Knowledge graph中查询book这本书的名字Q: 查询图书名称 SELECT ?title WHERE{org:book dc:title ?title .}本人使用图数据库neo4j居多使用的是Cypher语言, 在此仅作一些介绍,第三章将详细为船员们讲授博主熟悉的Cypher查询语言.3. GremlinGremlin: 是Apache旗下的Java项目, 也是一款著名的图数据库查询语言. 数据以属性图的形式存在, 可以认为是SQL和SPARQL的混合体. 实体的属性仍然在表中, 但是连接关系是直接以指针的形式存在的. Gremlin的查询本质是图遍历, 擅长解决求图的直径, 点到点之间的路径等, 比如刘德华连接奥巴马需要几度关系.示例: 查询gremlin的朋友的朋友的姓名.# 查询很直观: 通过has选择gremlin, out表示关系朋友, 因为两层关系所以有两个, values表示返回的结果属性g.V().has(name,gremlin).out(knows).out(knows).values(name)对Gremlin查询语言感兴趣的船员们可以直接查看官网 http://tinkerpop.apache.org4.CypherCypher: Cypher是一种声明式图形查询语言, 可用于图结构高效的查询更新和管理. 从语法规则上看, Cypher既受到SQL的启发, 又在模式匹配上借鉴了SPARQL的表达方法, 某些列表语义则是从Haskell和Python等语言中借用的. 综合来看Cypher是一种简介, 强大, 专为图数据库而生的新兴查询语言, 是AI新时代的杰出语言.Cypher是专门为图形数据而遍历设计和优化的, 被neo4j采用为官方查询语言, 在下一章会详细讲解有催更的博主可以连夜赶稿o(╥﹏╥)o四、欢迎提问

更多文章