deepdive中文關係提取

參考鏈接:

本文主要記錄下提取流程,和遇到的一些坑。。。

1,deepdive中文相關代碼和網址
數據庫配置:
執行echo "postgresql://postgres:******@localhost:5432/deepdive_spouse_postgres" >db.url (******對應數據庫密碼)
即將數據庫配置寫入db.url
3, 中文NLP工具配置:
1)下載斯坦福中文工具stanford-chinese-corenlp-2016-01-19-models.jar和 stanford-srparser-2014-10-23-models.jar放到udf/bazzar/parser/lib/路徑下
2)在udf/bazzar/parser/下再次執行sbt/sbt stage來重建NLP工程,這會重新編譯新增的斯坦福中文JAR包
3)命令行./run.sh -p 8080,之後可以在8080端口測試該NLP相關功能


4,原始文本導入:
在路徑 */DeepDiveChineseApps-master/spouse/下編譯工程: ~/local/bin/deepdive
導入原始文本文件: ~/local/bin/deepdive create table articles ~/local/bin/deepdive load articles input/news-100.tsv.bz2
5,中文NLP處理:
將原始文本拆分成句子,再進行分詞,詞性標註、命名實體識別等工作
1) ~/local/bin/deepdive do sentences
input/news-100.tsv拷貝爲input/articles.tsv
因爲內部配置導入的的原始文本爲articles.tsv,所以直接執行會報錯" [ERROR] input/articles.*: No data source found for articles ‘run/ABORTED’ -> ‘20180305/104532.107734000’"
6,提取每句話中出現的人名
~/local/bin/deepdive compile && ~/local/bin/deepdive do person_mention
這裏會從每句話中提取命名實體識別爲person的詞
7,生成候選配偶對
這裏會提取每一句話中出現的兩個人名作爲spouse的候選樣本
~/local/bin/deepdive compile && ~/local/bin/deepdive do spouse_candidate
8, 候選配偶對生成特徵
~/local/bin/deepdive compile && ~/local/bin/deepdive do spouse_feature
9,遠距離監督對候選配偶對進行標記
1)方案一:使用已標記樣本對候選配偶對標記
即對於標記樣本中出現的候選配偶對直接進行標記
~/local/bin/deepdive create table spouses_dbpedia~/local/bin/deepdive load spouses_dbpedia input/spouse_dbpedia.csv.bz2
2)方案二:使用簡單的啓發式規則來進行遠距離監督對候選配偶對標記
使用已標記樣本訓練模型,對所有的候選配偶對spouse_candidate進行標記
~/local/bin/deepdive compile && ~/local/bin/deepdive do has_spouse
這一步已經得到了部分正例和部分反例,以及部分未標記樣本

10,使用模型進行學習和推理
根據has_spouse裏的標記信息,訓練一個分類器,使用分類器進行分類得到結果概率。
~/local/bin/deepdive compile && ~/local/bin/deepdive do probabilities


11,deepdive總結:
1)關係提取流程
通過目標關係,使用NLP相關技術,對原始文本提取候選關係對,並生成特徵;
通過手工標註關係對或者通過啓發式規則得到標註關係對,訓練分類器,得到分類結果,結果正例即是目標關係對,結果爲反例即非目標關係對。
articles->sentences->person_mention->spouse_candidate->spouse_feature
spouses_dbpedia->has_spouse->probabilities
2)相關配置文件
  • app.ddlog是deepdive的規劃文件,此文件定義了數據的來源,數據的結構,數據的處理函數,KBC的構建。
(函數的定義:function nlp_markup over,函數的執行sentences += nlp_markup(doc_id, content) :- articles(doc_id, content). #函數執行,輸入爲 articles(doc_id, content).即articles表的doc_id字段和content字段)
  • db.url,此文件定義了數據庫的連接信息
  • deepdive.conf deepdive環境配置,不用修改。
  • input/ ,此目錄放置數據文件,該數據文件需要按照app.ddlog中的規則來命名,該數據文件爲應用提供源數據。
  • udf/ ,存放用戶定義的函數的目錄,可以從deepdive.conf引用相對於應用程序根目錄的路徑名。
3)相關組件
NLP處理組件:應該可以替換,但是內部接口不清楚,斯坦福英文替換爲斯坦福中文
生成特徵組件:無法替換
推理模型:使用的是因子圖模型,提供因子圖權重手動設置和自動學習,無法替換



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章