ltp︱基於ltp的無監督信息抽取模塊
ltp︱基於ltp的無監督信息抽取模塊
來自專欄素質雲筆記2 人贊了文章
?無監督信息抽取較多都是使用哈工大的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 信息抽取 - 搭配抽取
code可見:mattzheng/LtpExtraction
1.1 邏輯整理
整個邏輯主要根據依存句法分析,筆者主要利用了以下的關係類型:
那麼筆者理解 + 整理後得到四類抽取類型:
- 搭配用語查找(SVB,ATT,ADV)
- 並列詞查找(COO)
- 核心觀點抽取(HED+主謂賓邏輯)
- 實體名詞搭配(詞性n )
其中筆者還加入了停詞,可以對結果進行一些篩選。
1.2 code粗解讀
這邊細節會在github上公開,提一下code主要分的內容:ltp啟動模塊
/ 依存句法解讀
/ 結果篩選
。
- ltp模塊,一定要注意釋放模型,不要反覆
Postagger() / Segmentor() / NamedEntityRecognizer() /SementicRoleLabeller()
,會持續Load進內存,然後boom... - 依存句法模塊,筆者主要是整理結果,將其整理為一個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、事件存儲。事件存儲是最後步驟,基於業務需求,可以用相應的資料庫進行存儲,比如圖資料庫等。
以下是運行結果:
整理之後的結果:
推薦閱讀: