1. 程式人生 > >NeuralCoref: python的共指消解工具,向代詞指代的問題進軍!

NeuralCoref: python的共指消解工具,向代詞指代的問題進軍!

共指消解        首先簡要地說說共指消解是什麼,有什麼用處。假設機器正在閱讀一個這樣的文字: 克勞德·莫奈是印象派代表人物和創始人之一。 他最重要的風格是改變了陰影和輪廓線的畫法。 1 2         如果機器想要從這段話中瞭解到關於莫奈風格的知識,它首先必須知道,第二句話中的“他”指的就是莫奈。弄清代詞的指代就是共指消解中的一個典型任務。         關於共指消解,更詳細的概念可以參照: https://blog.csdn.net/qjc937044867/article/details/51694547         下面直接引出解決這個問題的一個開源工具——NeuralCoref。 NeuralCoref         Github官網:https://github.com/huggingface/neuralcoref         NeuralCoref是使用時下先進神經網路技術完成指代消解任務的一個工具。它不是一個獨立的python庫, 而是另一個高速強大的python自然語言處理庫——spaCy的一個拓展包,因此,要使用這個工具首先要安裝spaCy: pip install spacy 1        然後,再安裝NeuralCoref支援的幾個模型,下面的例子中,我會使用面向英語的小模型,安裝方法如下: pip install https://github.com/huggingface/neuralcoref-models/releases/download/en_coref_sm-3.0.0/en_coref_sm-3.0.0.tar.gz 1        如果需要更大的詞彙量和準確率,把連結中的sm改成md/lg就可以下載對應的中模型和大模型。 基本用法         下面用jupyter notebook展示其基本用法:

# coding: utf-8

# In[1]:


import warnings
warnings.filterwarnings("ignore")

import spacy
nlp = spacy.load('en_coref_sm')             # 引用小的英語指代模型


# In[2]:


doc = nlp(u'My sister has a dog. She loves him.')

print(doc._.has_coref)                      # 是否有指代?
print(doc._.coref_clusters)                 # 共指鏈組成的列表
print(doc._.coref_resolved)                 # 將代詞用指代簇中的主要描述代替後的文字


# 下面的例子中我們可以獲得更多詳細資訊。

# In[3]:


doc = nlp(u'My sister has a dog. She loves him')
print(doc.text)                       # 重新獲得文字內容,string物件
for clust in doc._.coref_clusters:
    clust_id = clust.i                # 該指代在本文件中所有指代中的序號 
    main_mention = clust.main         # 主描述,共指鏈中的代表詞語
    print("appearance of cluster %d: %s" % (clust_id,main_mention))
    for mention in clust.mentions:
        print("\t%s at [%d,%d]" % (mention.text,mention.start_char,mention.end_char))


#         這個例子揭示了共指消解中的3層的結構,Doc[文件]-cluster[共指鏈,代表同一實體的所有物件]-mention[共指鏈中的描述,實體的一個描述]。其中我們得到了共指鏈的代表詞和每個個別描述在原文中的位置,這些將有助於我們還原文字或幹一些別的事情(儘管已經有了coref_resolved,有時候我們還是需要做出一些特別的修改,後面的一篇文章中我就會用到它們。)。

#         以上例子已經揭示了這個工具的主要功能。這裡再提供一些細節,Document下面有3種結構,下面列出它們支援的方法。

# In[4]:


doc = nlp(u'My sister has a dog. She loves him')

clust1 = doc._.coref_clusters[1]                        # Cluster,一個共指鏈
print(clust1.i)                                         # 該指代在本文件中所有指代中的序號 
print(clust1.mentions)                                  # 本共指鏈中的所有物件
print(clust1.main)                                      # 主描述,共指鏈中的代表詞語
print(clust1.mentions[-1]._.coref_cluster)              # _.coref_cluster【該物件所處的共指鏈】


# In[5]:


token = doc[-1]                                         # token,相當於一個詞語
print(token._.in_coref)                                 # 是否在至少一個共指鏈中
print(token._.coref_clusters)                           # 包括這個token的所有共指鏈
# 遍歷所有token
for tok in doc:
    print(tok,end = " ")
print()


# In[6]:


span = doc[-1:]                                         # span,doc中的一個部分
print(span._.is_coref)                                  # 是否至少包含了一個共指物件
print(span._.coref_cluster.main)
print(span._.coref_cluster.main._.coref_cluster)

下一篇文章裡,我會再嘗試共指消解的一個有趣應用: NeuralCoref: 用指代消解來做一個“能多輪對話的問答對話機器人” --------------------- 本文來自 blmoistawinde 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/blmoistawinde/article/details/81782971?utm_source=copy

相關推薦

NeuralCoref: python消解工具代詞指代的問題進軍

共指消解        首先簡要地說說共指消解是什麼,有什麼用處。假設機器正在閱讀一個這樣的文字: 克勞德·莫奈是印象派代表人物和創始人之一。 他最重要的風格是改變了陰影和輪廓線的畫法。 1 2         如果機器想要從這段話中瞭解到關於莫奈風格的知識,它首先必須知道,

NLP之消解總結

本文僅是對自己所看論文的簡單總結,並不涉及該領域的詳細介紹。 共指的定義 指代是一種常見的語言現象,廣泛存在於自然語言的各種表達中。一般情況下,指代分為 2 種:回指(也稱指示性指代)和共指(也稱同指)。回指是指當前的照應語與上文出現的詞、短語或句子(句群)存

Python寫黑客小工具360免殺

構思: client:反向連線server,執行shell命令 server:傳送命令,控制客戶端 import subprocess import socket import threading target="172.22.40.41" port=55555 bu

消解(coreference resolution)介紹

什麼是共指消解(coreference resolution)? (篇章內)共指消解就是將文章中所有表述劃分為現實世界中不同實體的等價描述。舉個例子:比如一個常見的新聞稿子:…應中華人民共和國總書記,國家主席,國家軍委主席胡錦濤的邀請,美國總統奧巴馬再次訪問中國。…奧巴馬一

關於消解中特徵的選取和計算

1.單複數計算模組 先行語:由於先行語是由命名實體識別模組識別出來的,包括人名、地名和組織機構名,因而都是單數;在命名實體識別任務完成後,對人名、地名和組織機構名相同類別的先行語進判別,看先行語之間是否由“和”,“與”,“、”隔開,有的話即把這些同類實體及連線符號一起記錄資

matplotlib | Python強大的作圖工具讓你從此駕馭圖表

今天是資料處理專題的第9篇文章,在之前的8篇文章當中我們已經介紹完了pandas這個庫的一些基本用法,我們先把一些冷門的高階用法放一放,先來給大家介紹一下另外一個很有用的資料分析庫——matplotlib。 matplotlib簡介 如果你在大學裡參加過數學建模競賽或者是用過MATLAB的話,相比會對這一

matplotlib | Python強大的作圖工具讓你從此駕馭圖表(二)

今天是資料處理專題的第10篇文章,我們繼續來聊聊matplot這個工具庫。 在上週的文章當中我們介紹了matplot的基本用法,以及展示了一些簡單的例子,讓大家直觀地瞭解這個工具包。我們可以簡單地將它理解成專門用來作圖的工具,但是它作圖的功能又非常強大,以至於並不能當成一個簡單的內容來對待。道理也很簡單,老闆

校園科技|Python監控學生電腦螢幕自動識別學習狀態

  技術要點 1)使用pillow擴充套件庫進行螢幕截圖; 2)使用多執行緒監聽學生端連線; 3)使用TCP協議傳輸螢幕影象;                 學習Python中有不明白推

Python書籍資源Python中文書籍彙總目錄將近100本好書

  本人作為Python愛好者,廣泛蒐集了關於Python的書籍,具體包括資料探勘、人工智慧、網路程式設計等,範圍廣,資料全面,多為可編輯的pdf版本,不少都是各學科領域Python經典的書籍。當然論壇也有這些書籍,但是有的書籍較為難找,且大多數需要論壇幣。為此,本人花費大量

經濟學家都用在用Python分析房價走勢了哪裡跌價買哪裡

學習Python中有不明白推薦加入交流裙                 號:735934841                 群裡

最愛的小工具誰用誰知道

插件 over 誰知 多窗口 cmder inux pos oba pre 一.windows資源管理 完美解決windows資源管理器單窗口、文件搜索慢的問題 1.clover 為資源管理器增加多標簽頁等等功能 2.Everything 超快的文件搜索工具 二.命令行

Python暴力破解人家網站獲取VIP賬戶密碼

今天極度無聊,不知道爬些什麼,就在各大網站逛啊逛啊,無意中逛到了某小網站,該網站竟然還設定了各種Vip才能使用的特權。我看到了瞬間就怒火中燒,都是些小功能,竟然還要各種充錢。   在這及不理智的情況下,我暴力破解了人家網站。具體思路與步驟如下: 爆破思路與分析: 1

目標檢測必須要OpenCV?10行Python程式碼也能實現親測好用

短短10行程式碼就可以實現目標檢測?!本文作者和他的團隊構建了一個名為ImageAI 的Python庫,集成了現今流行的深度學習框架和計算機視覺庫。本文將手把手教你構建自己的第一個目標檢測應用,而且文摘菌已經幫你踩過坑了,親測有效!無人超市、人臉識別、無人駕駛,眾多的使用場景

2018年最具就業前景的7大程式語言:Java、Python、JavaScript前三PHP也上榜

程式設計師頭條(ID:CoderTop) 猿妹 編譯原文:http://www.codingdo

轉載《Java 開發手冊》今日釋出全球開發者致敬

致全球Java開發者:   程式碼是二進位制世界的交流方式,極致的程式碼是我們的榮耀。   2017年

推薦一款阿里開源的 Java 診斷工具好用到爆

Arthas是什麼鬼? Arthas是一款阿里巴巴開源的 Java 線上診斷工具,功能非常強大,可以解決很多線上不方便解決的問題。

13個web安全-python網絡測試工具+白帽黑客必備大神整理小白可以先收藏起來

Python 爬蟲 黑客 快速入門 進階 Python有很多完善可用的庫,這裏面就包含滲透測試工具,所以廣大白帽黑客大多都使用Python語言,這樣更有利於利用Python提供的這些庫參與漏洞研究、逆向工程和滲透等工作。本文列出13個python網絡測試工具,共大家參考學習。1、Scapy

困擾多年的問題Python到底是語言還是工具哈佛教授完美詮釋

hashset 編譯型 block 解釋器 bit asc 一個 至少 都是 然而,這是一句非常模棱兩可的話。這裏的"Python"到底指的是什麽? 是Python的抽象接口嗎?是Python的通用實現CPython嗎(不要把CPython跟Cytho

烏班圖裡的python工具Linux系統中pycharm快捷設定

第一步            首先:我們在桌面上開啟終端,右擊或者快捷法,進入終端控制檯。 第二步        &nb