**
**
百度云下载
1.1 下载完成后解压,安装,运⾏install.sh,选择1安装deepdive。
配置环境变量,deepdive的可执⾏⽂件⼀般安装在~/local/bin⽂件夹下。 在~/.bash_profile下添加如下内容
并保存:
export PATH="/root/local/bin:$PATH"
在终端可以通过vi /.bash_profile 进行修改,:wq保存并退出修改
然后执⾏source ~/.bash_profile设置环境变量。
1.2 关系型数据库Postgresql安装
官方教程给出:运行 bash <(curl -fsSL git.io/getdeepdive) postgres 安装,但是几次尝试都是得到拒绝,所以在电脑上自行百度安装教程
例如我的版本是:brew install postgresql -v
初始化数据库、创建新用户名
1.3 nlp环境安装
运⾏nlp_setup.sh,配置中⽂standford nlp环境。 这一步一般不会出错。
2 数据处理
2.1 命令行生成数据表
deepdive compile && deepdive do transaction_dbdata
查询是否有数据导入:
deepdive query ‘?- transaction_dbdata(company1_name, company2_name).’
company1_name | company2_name
----------------------------±-------------------------------------------
万科企业 | 华润深国投信托
万科企业 | 华润深国投信托
万科企业 | 一航万科
万科企业 | 中润国内贸易
万科企业 | 冯佳董事及廊坊华夏房地产
深圳中国农大科技 | 深圳中农大科技
深圳中国农大科技 | 李林琳
深圳中国农大科技 | 深圳中农大科技
深圳中国农大科技 | 李林琳
深圳中国农大科技 | 北京中农大科技企业孵化器
深圳中国农大科技 | 北京中农大科技企业孵化器
深圳中国农大科技 | 北京中农大科技企业孵化器
深圳中国农大科技 | 北京中农大地科技
深圳中国农大科技 | 北京中农大科技企业孵化器
深圳世纪星源 | 深圳市博睿意碳源科技
:
2.2 待抽取文章导入
deepdive do articles
2.3 用NLP模块进行文本处理
执行deepdive do sentences成功完成句子解析,通过
deepdive query ’
doc_id, index, tokens, ner_tags | 5
?- sentences(doc_id, index, text, tokens, lemmas, pos_tags, ner_tags, _, _, _).
’
可以看到前五句(下例为第一句)的解析结果为:
1201734457 | 1 | {证券,代码,:,600108,证券,简称,:,亚盛集团,公告,编号,:,2015-072,甘肃,亚盛,实业,(,集团,),股份,有限,公司,关于,全资,子公司,间,股权,转让,的,公告,本,公司,董事会,及,全体,董事,保证,本,公告,内容,不,存在,任何,虚假,记载,、,误,导性,陈述,或者,重大,遗漏,,,并,对,其,内容,的,真实性,、,准确性,和,完整性,承担,个,别,
及,连带,责任,。} | {O,O,O,O,O,O,O,O,O,O,O,ORG,ORG,ORG,ORG,ORG,ORG,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O}
2.4 抽取实体生成实体对
运行deepdive do company_mention,得到以下问题
deepdive-do: line 75: mvim: command not found
Canceled execution
初步分析是路径问题,百度查询解决方案
看教程,终端输入export PATH=/usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Wireshark.app/Contents/MacOS
结果连deepdive都显示command not found,突然想到这和一开始配置环境一样,于是再次打开~./bash_profile
此时路径已经修改好了的,只需要确保无改动后再次运行 source ~./bash_profile.
果真OK了,但是呢
下一步
可以执行deepdive do company_mention
但是查询结果时发现为空表:deepdive query ’
mention_id,doc_id | 4
?- company_mention(mention_id, mention_text, doc_id, sentence_index, begin_index, end_index).
’
mention_id | doc_id
------------±-------
(0 rows)
(找了一圈解答,结果还是路径问题啊啊啊啊,也是,都是现成代码,只能是路径出问题)
将transform.py中的路径设置为绝对路径,不幸的是打开文件一看,本身就是绝对路径。不信邪,删除重新写入文件的绝对路径,然后保存。结果可以啦。
deepdive query ’
mention_id,doc_id | 4
?- company_mention(mention_id, mention_text, doc_id, sentence_index, begin_index, end_index).
’
mention_id | doc_id
--------------------±-----------
1201734457_3_5_10 | 1201734457
1201734457_3_22_27 | 1201734457
1201734457_3_46_51 | 1201734457
1201734457_3_64_68 | 1201734457
(4 rows)
按照查询语句得到4对实体所在文摘ID号
然后运行deepdive do transaction_candidate:
生成候选实体表,同样进行查询
deepdive query ’
p1_name,p2_name | 4
?- transaction_candidate(p1_id,p1_name,p2_id,p2_name).
’
p1_name | p2_name
----------------------------±-------------------------
山丹县芋兴粉业有限责任公司 | 甘肃亚盛薯业有限责任公司
山丹县芋兴粉业有限责任公司 | 甘肃大有农业科技有限公司
山丹县芋兴粉业有限责任公司 | 甘肃天润薯业有限责任公司
甘肃天润薯业有限责任公司 | 甘肃亚盛薯业有限责任公司
(4 rows)
2.5 特征抽取
命令行:deepdive do transaction_feature
查询结果
deepdive query ‘| 20 ?- transaction_feature(_, _, feature).’
feature
IS_INVERTED
INV_WORD_SEQ_[郴州市 城市 建设 投资 发展 集团 有限 公司]
INV_LEMMA_SEQ_[郴州市 城市 建设 投资 发展 集团 有限 公司]
INV_NER_SEQ_[ORG ORG ORG ORG ORG ORG ORG ORG]
INV_POS_SEQ_[NR NN NN NN NN NN JJ NN]
INV_W_LEMMA_L_1_R_1_[为][提供]
INV_W_NER_L_1_R_1[O][O]
INV_W_LEMMA_L_1_R_2[为][提供 担保]
INV_W_NER_L_1_R_2[O][O O]
INV_W_LEMMA_L_1_R_3[为][提供 担保 公告]
INV_W_NER_L_1_R_3[O][O O O]
INV_W_LEMMA_L_2_R_1[公司 为][提供]
INV_W_NER_L_2_R_1[ORG O][O]
INV_W_LEMMA_L_2_R_2[公司 为][提供 担保]
INV_W_NER_L_2_R_2[ORG O]_[O O]
2.6 样本打标
在候选实体对中标出部分正负例:利⽤已知的实体对和候选实体对关联
利⽤规则打部分正负标签
deepdive do transaction_label_resolved(代码操作见官方教材,我们只执行)
3模型构建
3.1 变量表定义
定义最终储蓄的表格,预测公司是否存在交易关系
deepdive do has_transaction
3.2 因子图构建
将每⼀对has_transaction中的实体对和特征表连接起来,通过特征factor的连接,全局学习这些特征的权重。
我们可以指定两张变量表间遵守的规则,并给这个规则以权重。⽐如c1和c2有交易,可以推出c2和c1也有交
易。这是⼀条可以确保的定理,因此给予较⾼权重。
deepdive do probabilities
查看我们预测的公司间交易关系概率:
$ deepdive sql “SELECT p1_id, p2_id, expectation FROM has_transaction_label_inference
ORDER BY random() LIMIT 20”
p1_id | p2_id | expectation
---------------------±----------------------±------------
1201746717_13_0_1 | 1201746717_13_121_125 | 0
1201743744_20_47_48 | 1201743744_20_556_557 | 0
1201738764_11_15_22 | 1201738764_11_8_13 | 0.036
1201747761_51_20_24 | 1201747761_51_14_18 | 0.052
1201746717_2_32_37 | 1201746717_2_48_53 | 0.035
1201746717_43_34_39 | 1201746717_43_81_85 | 0.004
1201734457_3_5_10 | 1201734457_3_46_51 | 0.013
1201743744_24_53_57 | 1201743744_24_30_35 | 0.001
1201743500_3_0_5 | 1201743500_3_51_52 | 0.008
1201734457_3_64_68 | 1201734457_3_46_51 | 0.056
1201738769_3_17_23 | 1201738769_3_45_46 | 0.017
1201743269_1_20_27 | 1201743269_1_29_33 | 0.108
1201743586_13_69_70 | 1201743586_13_81_85 | 0.121
1201738844_1_35_39 | 1201738844_1_71_77 | 0.408
1201743281_7_10_17 | 1201743281_7_55_61 | 0
至此,公司交易关系抽取完成了。
只是得到两个实体之间存在交易关系的概率,可以说,并不是真正意义上的实体关系抽取,毕竟单一。
下一步,看看deepdive人物关系抽取实验吧。