远程监督在关系抽取上的应用
目录
Introduction
关系抽取
关系抽取事信息抽取的重要子任务,主要的目的是将非结构化或者半结构化描述的自然语言文本转化成结构化数据。在文本中识别出实体后,关系抽取负责抽取实体之间的语义关系。
遇到的困难
进行关系抽取的学习需要大部分训练数据,而为了得到训练数据,需要人工来对语料进行标记,这个过程需要大量的时间成本和人力成本。
解决方法
在2009年
参考文献
- Relation Classification via Convolutional Deep Neural Network
- Distant Supervision for Relation Extraction with Sentence-level Attention and Entity Descriptions
- Distant supervision for relation extraction without labeled data
参考网站
- Neural Relation Extraction with Selective Attention over Instances阅读笔记 【知乎】
笔记【知乎】 - Neural Relation Extraction with Selective Attention over Instances的代码
阅读笔记【知乎】 - 【PaperWeekly 第31期】 | 远程监督在关系抽取中的应用
- 一周论文 | 关于远程监督,我们来推荐几篇值得读的论文
- paperWeekly知识图谱阅读小组-《Distant Supervision for Relation Extraction with Sentence-level Attention and Entity Descriptions》
- Distant Supervision for Relation Extraction with Sentence-Level Attention and Entity Descriptions【知乎】
知识存储
知识存储
知识存储解决如何管理大量的结构化数据,存储的途径主要有RDF存储以及数据库存储两类。
数据库选择
我们可以用不同的数据库工具。现代的关系数据库可能可以解决大多数需要知识图谱的场合。某些特殊场合,我们需要图数据库。目前大规模的知识图谱的存储一般采用图数据库做为最基本的存储引擎。图数据库的优点在于其天然的能表示知识图谱结构,图中的节点表示知识图谱的对象,图中的边表示知识图谱的对象关系;但是其缺点是图数据库的更新比较复杂,对于复杂查询的支持不够。所以我们使用以图数据库为主,结合其他系统的方式来存储知识图谱。
图数据库选择
Cayley 的github地址:https://github.com/cayleygraph/cayley/blob/master/docs/Container.md
在简书上也有对Cayley的使用教程:Cayley数据库
在 Google的开发者大会上,有展示如何使用Cayley进行一个小型的知识图谱的构建,可是其实讲的比较少,数据格式也有点局限,亮点是搜索时居然可以像js一样写函数。
可是相应的教程文档比较少,不像Neo4j,随手一查都会有一些中文文档
据说还有另外一个比较常用的图数据库:dgraph,而且大家对他的期望也挺高的,可以了解一下,github主页非常可爱。网上也有很多对dgraph和neo4j的比较分析,中文文档偏少,由于时间考虑暂不深入了解。
两者比较
Neo4j | Cayley | |
---|---|---|
查询语言 | Cypher | Grizo(原来名字叫是Gremlin,但是为了区分开TinkerPop的Gremlin而改名字) |
数据库引擎 | 有自己的搜索引擎,不需要额外配置 | 没有自己的搜索引擎,需要额外配置,它可以配置多种存储引擎。如leveldb,mysql,mongo等。 |
文档 | 比较完善,操作实战资料比较多 | 还很年轻,文档不是很完善,而且在线运行的例子说好了已经加载了测试数据,但其实还是没有查询得到。 |
综上所述,我觉得还是优先使用Neo4j进行数据库搜索,降低学习成果。
PS.
Gremlin的中文教程可以点击Gremlin:图遍历语言
Deepdive的NLP处理
分词
背景介绍
在DeepDive的默认实例中,默认使用的分词器是Stanford CoreNLP的工具包,这个工具包可以通过更换语言包来实现对中文的支持,但由于此工具包切词类、命名实体识别类使用的是条件随机场CRF,所以不能做到对用户自定义词典的完全匹配,因此需要进行分词器的优化或者更换。
解决方法
优化分词器
自定义CoreNLP中的切词类,达到优化的目的。优化切词类的方法在这里,此外下面的相关文章也有StanfordNLP的学习笔记。
更换分词器
除了CoreNLP外,中文分词还有很多其他的框架,六款中文分词模块尝试:jieba、THULAC、SnowNLP、pynlpir、CoreNLP、pyLTP
其中,pyltp是哈工大语言技术平台的python封装,和CoreNLP一样,可以进行分词、命名实体识别、词性标注、句法分析等NLP处理,这是它的实现原理,具体实践可见这里。在pyltp中,我们可以使用训练套件来对模型进行训练,从而实现个性化分词
依存分析
Stanford CoreNLP工具包中可以进行中文语法解析,其中,Parser遵循依存分析的以下定理:
- 一个句子中存在一个成分称之为根(root),这个成分不依赖于其它成分。
- 其它成分直接依存于某一成分。
- 任何一个成分都不能依存与两个或两个以上的成分。
- 如果A成分直接依存于B成分,而C成分在句中位于A和B之间,那么C或者直接依存于B,或者直接依存于A和B之间的某一成分。
- 中心成分左右两面的其它成分相互不发生关系。
分析结果的符号解析详见这里