前言
最近在实践知识图谱的过程中,发现阿里目前在神马搜索构建知识图谱的过程使用了deepdive进行了关系抽取,另外就是利用深度学习PCNNs进行关系抽取。通过在对deepdive进行了解的过程中,deepdive非常适合信息抽取,是构建知识库的利器。能够基于词性标注、句法分析等通过各种文本规则实现实体之间关系的抽取,同时可面向异构、海量的数据。这里会重点介绍deepdive各个方面
涉及的原理和概念
工作机制:
具体过程: 首先对数据进行清洗,进行实体识别,之后进行实体关联,最终输出满足指定关系的集合。 对于官网实例,输入是一个文档集合和一个小的人工标注的实例集合,输出就是属于couple的pairs.
关于具体步骤如下: 1. 先对文章进行分句,将每一句存储到数据库中。 2. 分词并进行各种标注,对于的特征包括POS标签、语言标记。 3. 生成特征,组合各种特征。 4. 领域知识的集成。 5. 监督学习--distant supervision。在现有文本资料中人工找到具有正例的样本,并通过相关的关系生成反例样本。 6. 推理。使用因子图进行对特征、知识的推理。(推理机制使用了Gibbs Sampling)
关于deepdive,需要定义的内容如下: 1. 输入数据的样式,包括关系样式、中间数据格式与数据之间的映射关系——在app.ddlog中定义好 2. 用于进行distance supervise的规则——在app.ddlog中定义好 3. 推理参数——在app.ddlog中定义好 4. 原始数据处理方式——在udf中用python或者shell实现 5. 特征提取方式——在udf中用python或者shell实现
具体来看,可以分解为四个部分。 1. 特征抽取 2. 领域知识集成 3. 监督学习 4. 知识推理
涉及到四个概念: 1. 实体 2. 关系 3. 提及 mention 4. 关系提及 relation mention
安装
第一步,执行如下命令:bash <(curl -fsSL git.io/getdeepdive)
结果报错,提示curl: (77) error,原因在于curl期望访问证书的路径不存在
解决方法:sudo mkdir -p /etc/pki/tls/certs
sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt
解决上述问题后,接下来继续执行:
输入数字1,会在自己的目录下下载deepdive-v0.8-STABLE-Linux.tar.gz。
下载完毕会自动解压复制到local目录下
为了能使用使用deepdive命令能够直接使用,修改~/.bash_profileexport PATH=~/local/bin:"$PATH"
则deeplive就安装完毕!
第二步,安装数据库postgresbash <(curl -fsSL git.io/getdeepdive) postgres
总是会报503或者502的错误,不断忽略,重复执行。 最后能够下载但同时报出如下错误:
为了解决这个问题,执行如下命令sudo gedit /etc/apt/sources.list
将cdrom的那一行注释掉即可解决。
接下来继续执行,又会报出如下错误:
提示包含错误的元数据以及Problem executing scripts APT问题
解决方法:sudo apt-get remove libappstream3
第三步,下载spouse_example例子bash <(curl -fsSL git.io/getdeepdive) spouse_example
最终会得到如下的文件目录:
第四步,配置好postgresql 注意配置postgresql的url地址:echo "postgresql://wangwei@localhost:5432/deepdive_spouse_wangwei" >db.url
注意到会提示deepdive_spouse_wangwei数据库不存在,解决方法如下:
- postgresql安装完成会生成一个名为postgres的用户帐户,首先先切换到此用户下
psql postgres
- 接下来去创建数据库:
CREATE DATABASE deepdive_spouse_wangwei OWNER wangwei;
- 接着可以验证归属wangwei用户的数据库deepdive_spouse_wangwei是否创建成功:
psql -U wangwei -d deepdive_spouse_wangwei -h 127.0.0.1 -p 5432
关于deepdive处理中文
3. 执行如下通过postman进行测试 ./run.sh -p 8080
未下载之前中文模型之前,无法对中文做任何分词和标注处理
放入中文模型之后,分词和标注的结果如下: