ltp︱基于ltp的无监督信息抽取模块
ltp︱基于ltp的無(wú)監(jiān)督信息抽取模塊:https://zhuanlan.zhihu.com/p/44890664
無(wú)監(jiān)督信息抽取較多都是使用哈工大的ltp作為底層框架。那么基于ltp其實(shí)有了非常多的小伙伴進(jìn)行了嘗試,筆者私自將其歸納為:
- 事件抽取(三元組)
- 觀點(diǎn)抽取
“語(yǔ)言云” 以哈工大社會(huì)計(jì)算與信息檢索研究中心研發(fā)的 “語(yǔ)言技術(shù)平臺(tái)(LTP)” 為基礎(chǔ),為用戶提供高效精準(zhǔn)的中文自然語(yǔ)言處理云服務(wù)。 pyltp 是 LTP 的 Python 封裝,提供了分詞,詞性標(biāo)注,命名實(shí)體識(shí)別,依存句法分析,語(yǔ)義角色標(biāo)注的功能。
- 技術(shù)文檔: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
需要先載入他們訓(xùn)練好的模型,下載地址
初始化pyltp的時(shí)候一定要留意內(nèi)存問(wèn)題,初始化任何子模塊(Postagger() /NamedEntityRecognizer()等等)都是需要占用內(nèi)存,如果不及時(shí)釋放會(huì)爆內(nèi)存。 之前比較好的嘗試是由該小伙伴已經(jīng)做的小項(xiàng)目:liuhuanyong/EventTriplesExtraction,是做三元組抽取的一個(gè)實(shí)驗(yàn),該同學(xué)另外一個(gè)liuhuanyong/CausalityEventExtraction因果事件抽取的項(xiàng)目也很不錯(cuò),辛苦寫(xiě)了一大堆規(guī)則,之后會(huì)對(duì)因果推理進(jìn)行簡(jiǎn)單描述。
筆者也自己寫(xiě)了一個(gè)抽取模塊,不過(guò)只是簡(jiǎn)單評(píng)論觀點(diǎn)抽取模塊。 留心的小伙伴可以基于此繼續(xù)做很多拓展:搭配用語(yǔ)挖掘,同義詞挖掘,新詞挖掘 code可見(jiàn):mattzheng/LtpExtraction1 信息抽取 - 搭配抽取
code可見(jiàn):mattzheng/LtpExtraction1.1 邏輯整理
整個(gè)邏輯主要根據(jù)依存句法分析,筆者主要利用了以下的關(guān)系類(lèi)型:
那么筆者理解 + 整理后得到四類(lèi)抽取類(lèi)型:
- 搭配用語(yǔ)查找(SVB,ATT,ADV)
- 并列詞查找(COO)
- 核心觀點(diǎn)抽取(HED+主謂賓邏輯)
- 實(shí)體名詞搭配(詞性n )
其中筆者還加入了停詞,可以對(duì)結(jié)果進(jìn)行一些篩選。
1.2 code粗解讀
這邊細(xì)節(jié)會(huì)在github上公開(kāi),提一下code主要分的內(nèi)容:ltp啟動(dòng)模塊 / 依存句法解讀 / 結(jié)果篩選。
- ltp模塊,一定要注意釋放模型,不要反復(fù) Postagger() / Segmentor() / NamedEntityRecognizer() /SementicRoleLabeller(),會(huì)持續(xù)Load進(jìn)內(nèi)存,然后boom...
- 依存句法模塊,筆者主要是整理結(jié)果,將其整理為一個(gè)dataframe,便于后續(xù)結(jié)構(gòu)化理解與抽取內(nèi)容,可見(jiàn):
- 結(jié)果篩選模塊,根據(jù)上述的幾個(gè)關(guān)系進(jìn)行拼接。
表的解讀,其中: - word列,就是這句話主要分詞結(jié)果 - relation列/pos列,代表該詞的詞性與關(guān)系 - match_word列/match_word_n列,根據(jù)關(guān)系匹配到的詞條 - tuples_words列,就是兩者貼一起
同時(shí)若覺(jué)得需要去掉一些無(wú)效詞搭配,也可以額外添加無(wú)效詞進(jìn)來(lái),還是比較彈性的。
1.3 結(jié)果展示
句子一:
句子二:
句子三:
2 三元組事件抽取 + 因果事件抽取
幫這位小伙伴打波廣告~
2.1 三元組事件抽取
該模塊主要利用了語(yǔ)義角色srl,先定位關(guān)鍵謂語(yǔ),然后進(jìn)行結(jié)構(gòu)化解析,核心的語(yǔ)義角色為 A0-5 六種,A0 通常表示動(dòng)作的施事,A1通常表示動(dòng)作的影響等,A2-5 根據(jù)謂語(yǔ)動(dòng)詞不同會(huì)有不同的語(yǔ)義含義。其余的15個(gè)語(yǔ)義角色為附加語(yǔ)義角色,如LOC, 表示地點(diǎn),TMP,表示時(shí)間等(一些符號(hào)可見(jiàn)筆者另一篇博客:python︱六款中文分詞模塊嘗試:jieba、THULAC、SnowNLP、pynlpir、CoreNLP、pyLTP)。基于依存句法與語(yǔ)義角色標(biāo)注的事件三元組抽取 文本表示一直是個(gè)重要問(wèn)題,如何以清晰,簡(jiǎn)介的方式對(duì)一個(gè)文本信息進(jìn)行有效表示是個(gè)長(zhǎng)遠(yuǎn)的任務(wù).我嘗試過(guò)使用關(guān)鍵詞,實(shí)體之間的關(guān)聯(lián)關(guān)系,并使用textgrapher的方式進(jìn)行展示,但以詞作為文本信息單元表示這種效果不是特別好,所以,本項(xiàng)目想嘗試從事件三元組的方式出發(fā),對(duì)文本進(jìn)行表示. 項(xiàng)目地址:https://github.com/liuhuanyong/EventTriplesExtraction
使用之后的效果:
這邊筆者覺(jué)得在結(jié)果之上,進(jìn)行一些清洗的話,效果還是可以的,特別是事件性較強(qiáng)的,有效實(shí)體比較多的句子效果會(huì)比較好。當(dāng)然,把這個(gè)用在評(píng)論中簡(jiǎn)直...
2.2 因果事件抽取
主要包括以下幾個(gè)步驟:
- 1、因果知識(shí)庫(kù)的構(gòu)建。因果知識(shí)庫(kù)的構(gòu)建包括因果連詞庫(kù),結(jié)果詞庫(kù)、因果模式庫(kù)等。
- 2、文本預(yù)處理。這個(gè)包括對(duì)文本進(jìn)行噪聲移除,非關(guān)鍵信息去除等。
- 3、因果事件抽取。這個(gè)包括基于因果模式庫(kù)的因果對(duì)抽取。
- 4、事件表示。這是整個(gè)因果圖譜構(gòu)建的核心問(wèn)題,因?yàn)槭录D譜本質(zhì)上是聯(lián)通的,如何選擇一種恰當(dāng)(短語(yǔ)、短句、句子主干)等方式很重要。
- 5、事件融合。事件融合跟知識(shí)圖譜中的實(shí)體對(duì)齊任務(wù)很像
- 6、事件存儲(chǔ)。事件存儲(chǔ)是最后步驟,基于業(yè)務(wù)需求,可以用相應(yīng)的數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ),比如圖數(shù)據(jù)庫(kù)等。
以下是運(yùn)行結(jié)果:
整理之后的結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的ltp︱基于ltp的无监督信息抽取模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 爬取词库,使用jieba分词库,自定义d
- 下一篇: Text2SQL 语义解析数据集、解决方