無監督資訊抽取較多都是使用哈工大的ltp作為底層架構。那麼基于ltp其實有了非常多的小夥伴進行了嘗試,筆者私自将其歸納為:
- 事件抽取(三元組)
- 觀點抽取
“語言雲” 以哈工大社會計算與資訊檢索研究中心研發的 “語言技術平台(LTP)” 為基礎,為使用者提供高效精準的中文自然語言處理雲服務。
pyltp 是 LTP 的 Python 封裝,提供了分詞,詞性标注,命名實體識别,依存句法分析,語義角色标注的功能。
- 技術文檔:http://pyltp.readthedocs.io/zh_CN/latest/api.html#id15
- 介紹文檔:https://www.ltp-cloud.com/intro/#introduction
- 介紹文檔:http://ltp.readthedocs.io/zh_CN/latest/appendix.html#id5
需要先載入他們訓練好的模型,下載下傳位址
初始化pyltp的時候一定要留意記憶體問題,初始化任何子子產品(
Postagger()
/
NamedEntityRecognizer()
等等)都是需要占用記憶體,如果不及時釋放會爆記憶體。
之前比較好的嘗試是由該小夥伴已經做的小項目:liuhuanyong/EventTriplesExtraction,是做三元組抽取的一個實驗,該同學另外一個liuhuanyong/CausalityEventExtraction因果事件抽取的項目也很不錯,辛苦寫了一大堆規則,之後會對因果推理進行簡單描述。
筆者也自己寫了一個抽取子產品,不過隻是簡單評論觀點抽取子產品。
留心的小夥伴可以基于此繼續做很多拓展:搭配用語挖掘,同義詞挖掘,新詞挖掘
code可見:mattzheng/LtpExtraction
文章目錄
- 1 資訊抽取 - 搭配抽取
- 1.1 邏輯整理
- 1.2 code粗解讀
- 1.3 結果展示
- 2 三元組事件抽取 + 因果事件抽取
- 2.1 三元組事件抽取
- 2.2 因果事件抽取
1 資訊抽取 - 搭配抽取
code可見:mattzheng/LtpExtraction
1.1 邏輯整理
整個邏輯主要根據依存句法分析,筆者主要利用了以下的關系類型:

那麼筆者了解 + 整理後得到四類抽取類型:
- 搭配用語查找(SVB,ATT,ADV)
- 并列詞查找(COO)
- 核心觀點抽取(HED+主謂賓邏輯)
- 實體名詞搭配(詞性n )
其中筆者還加入了停詞,可以對結果進行一些篩選。
1.2 code粗解讀
這邊細節會在github上公開,提一下code主要分的内容:
ltp啟動子產品
/
依存句法解讀
/
結果篩選
。
- ltp子產品,一定要注意釋放模型,不要反複
,會持續Load進記憶體,然後boom…Postagger() / Segmentor() / NamedEntityRecognizer() /SementicRoleLabeller()
- 依存句法子產品,筆者主要是整理結果,将其整理為一個dataframe,便于後續結構化了解與抽取内容,可見:
- 結果篩選子產品,根據上述的幾個關系進行拼接。
案例句:艇仔粥料很足,香蔥自己添加,很貼心。
表的解讀,其中:
- word列,就是這句話主要分詞結果
- relation列/pos列,代表該詞的詞性與關系
- match_word列/match_word_n列,根據關系比對到的詞條
- tuples_words列,就是兩者貼一起
同時若覺得需要去掉一些無效詞搭配,也可以額外添加無效詞進來,還是比較彈性的。
1.3 結果展示
句子一:
句子二:
句子三:
2 三元組事件抽取 + 因果事件抽取
幫這位小夥伴打波廣告~
2.1 三元組事件抽取
該子產品主要利用了語義角色srl,先定位關鍵謂語,然後進行結構化解析,核心的語義角色為 A0-5 六種,A0
通常表示動作的施事,A1通常表示動作的影響等,A2-5 根據謂語動詞不同會有不同的語義含義。其餘的15個語義角色為附加語義角色,如LOC, 表示地點,TMP,表示時間等(一些符号可見筆者另一篇部落格:python︱六款中文分詞子產品嘗試:jieba、THULAC、SnowNLP、pynlpir、CoreNLP、pyLTP)。
基于依存句法與語義角色标注的事件三元組抽取 文本表示一直是個重要問題,如何以清晰,簡介的方式對一個文本資訊進行有效表示是個長遠的任務.我嘗試過使用關鍵詞,實體之間的關聯關系,并使用textgrapher的方式進行展示,但以詞作為文本資訊單元表示這種效果不是特别好,是以,本項目想嘗試從事件三元組的方式出發,對文本進行表示.
項目位址:https://github.com/liuhuanyong/EventTriplesExtraction
使用之後的效果:
這邊筆者覺得在結果之上,進行一些清洗的話,效果還是可以的,特别是事件性較強的,有效實體比較多的句子效果會比較好。當然,把這個用在評論中簡直…
2.2 因果事件抽取
主要包括以下幾個步驟:
- 1、因果知識庫的建構。因果知識庫的建構包括因果連詞庫,結果詞庫、因果模式庫等。
- 2、文本預處理。這個包括對文本進行噪聲移除,非關鍵資訊去除等。
- 3、因果事件抽取。這個包括基于因果模式庫的因果對抽取。
- 4、事件表示。這是整個因果圖譜建構的核心問題,因為事件圖譜本質上是聯通的,如何選擇一種恰當(短語、短句、句子主幹)等方式很重要。
- 5、事件融合。事件融合跟知識圖譜中的實體對齊任務很像
- 6、事件存儲。事件存儲是最後步驟,基于業務需求,可以用相應的資料庫進行存儲,比如圖資料庫等。
以下是運作結果:
整理之後的結果: