日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【NLP】利用维基百科促进自然语言处理

發布時間:2025/3/12 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【NLP】利用维基百科促进自然语言处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 | Nicola Melluso

編譯 | VK
來源 | Towards Data Science

介紹

自然語言處理(NLP)正在興起。計算語言學和人工智能正在聯手促進新的突破。

雖然研究的重點是大幅改善自然語言處理技術,但企業正將這項技術視為一項戰略資產。主要原因是存在著大量文本數據。談到數字化,尤其是對企業而言,重要的是要記住,文檔本身就是數字化的,因此,文本數據是知識的主要來源。

然而,當我們試圖磨練一個自然語言處理任務時,最大的瓶頸之一是數據的訓練。當涉及到實際的應用程序時,例如在特定領域中,我們面臨著低資源數據的問題。訓練數據有兩個主要問題:(i)獲取大量數據的困難;(ii)為訓練和測試注釋可用數據的過程非常耗時。

面對這些問題,計算機科學界給予了極大的關注。特別是,最新的計算進展提出了兩種方法來克服低資源數據問題:

  • 微調預訓練的語言模型,如BERT或GPT-3;

  • 利用高質量的開放數據存儲庫,如Wikipedia或ConceptNet。

目前大多數計算語言學開放庫都提供了基于這兩種方法之一的NLP工具開發架構。我們現在演示如何利用Wikipedia提高兩個NLP任務的性能:命名實體識別和主題模型。

從句子中提取維基百科信息

有幾種工具可用于處理來自維基百科的信息。對于文本數據的自動處理,我們使用了一個名為SpikeX的spaCy開放項目。

SpikeX是一個spaCy管道的管道集合,spaCy管道是一個用于NLP的python庫。SpikeX由一家意大利公司(Erre Quadro Srl)開發,旨在幫助構建知識提取工具。

pip?install?--no-cache?-U?git+https://github.com/erre-quadro/spikex.git@develop spikex?download-wikigraph?enwiki_core spacy?download?en_core_web_sm

SpikeX有兩個主要功能:

1.給定一個Wikipedia頁面,它會提取所有相應的類別。

from?wasabi?import?msg from?time?import?process_time?as?timepage?=?"Natural_Language_Processing" print(f"Categories?for?`{page}`:") t?=?time() for?c?in?wg.get_categories(page):print("\t",?c)for?cc?in?wg.get_categories(c):print("\t\t->",?cc) msg.good(f"Success?in?{time()?-?t:.2f}s")

“Natural_Language_Processing”的類別:

Categories?for?`Natural_Language_Processing`:Category:Artificial_intelligence->?Category:Emerging_technologies->?Category:Cybernetics->?Category:Subfields_of_computer_science->?Category:Computational_neuroscience->?Category:Futures_studies->?Category:Cognitive_science->?Category:Personhood->?Category:Formal_sciencesCategory:Speech_recognition->?Category:Artificial_intelligence_applications->?Category:Computational_linguistics->?Category:Human–computer_interaction->?Category:Digital_signal_processing->?Category:SpeechCategory:Natural_language_processing->?Category:Artificial_intelligence_applications->?Category:Computational_linguisticsCategory:Computational_linguistics->?Category:Computational_social_science

2.給定一個句子,它會在文本中找到與維基百科頁面標題匹配的塊。

from?spacy?import?load?as?spacy_load from?spikex.wikigraph?import?load?as?wg_load from?spikex.pipes?import?WikiPageX#?加載一個spacy模型,然后獲取doc對象 nlp?=?spacy_load('en_core_web_sm') doc?=?nlp('Elon?Musk?runs?Tesla?Motors')#?加載WikiGraph wg?=?wg_load('enwiki_core')#?獲取WikiPageX并提取所有頁面 wikipagex?=?WikiPageX(wg) doc?=?wikipagex(doc)#?查看從文檔中提取的所有頁面 for?span?in?doc._.wiki_spans:print(span)print(span._.wiki_pages)print('------') Elon?Musk? ('Elon_Musk',?'Elon_musk',?'Elon_Musk_(book)',?'Elon_Musk_(2015_book)',?'Elon_Musk_(2015)',?'Elon_Musk_(biography)',?'Elon_Musk_(2015_biography)',?'Elon_Musk_(Ashlee_Vance)')? ------? Elon? ('Elon_(Judges)',?'Elon_(name)',?'Elon_(Hebrew_Judge)',?'Elon_(Ilan)',?'Elon_(disambiguation)',?'Elon_(biblical_judge)',?'Elon_(chemical)',?'Elon')? ------? Musk? ('Musk',?'MuSK',?'Musk_(wine)',?'Musk_(song)',?'Musk_(Tash_Sultana_song)',?'Musk_(disambiguation)')? ------? runs ('Runs_(baseball_statistics)',?'Runs',?'Runs_(cricket)',?'Runs_(music)',?'Runs_(baseball)',?'Runs_(Baseball)',?'Runs_(musical)')? ------ Tesla?Motors? ('Tesla_motors',?'Tesla_Motors') ------? Tesla? ('Tesla_(band)',?'Tesla_(unit)',?'Tesla_(Czechoslovak_company)',?'Tesla_(crater)',?'Tesla_(microarchitecture)',?'Tesla_(2020_film)',?'Tesla_(car)',?'Tesla_(GPU)',?'TESLA',?'Tesla_(physicist)',?'Tesla_(group)',?'Tesla_(opera)',?'Tesla_(Bleach)',?'Tesla_(company)',?'Tesla_(disambiguation)',?'Tesla_(2016_film)',?'TESLA_(Czechoslovak_company)',?'Tesla_(unit_of_measure)',?'Tesla_(vehicles)',?'Tesla_(vehicle)',?'Tesla_(film)',?'Tesla_(album)',?'Tesla_(Flux_Pavilion_album)',?'Tesla_(surname)',?'Tesla')? ------? Motors?('Motors')

如我們所見,在第一個示例中,SpikeX提取Wikipedia頁面“Natural_Language_Processing”所屬的所有類別。例如,“Natural_Language_Processing/`”屬于“人工智能”、“語音識別”和“計算語言學”的范疇。

在第二個例子中,對于“Elon Musk runs Tesla Motors”這句話,SpikeX提取了該句中可能在Wikipedia上有一個頁面的所有頁面。

我們現在了解如何使用這兩個特性來執行命名實體識別和主題模型。

命名實體識別

命名實體識別(Named Entity Recognition,NER)是一項NLP任務,它試圖將文本中提到的實體定位并分類為預定義的類別(如人名、組織、位置等)。

有不同的方法處理這項任務:基于規則的系統,訓練深層神經網絡的方法,或是訓練語言模型的方法。例如,Spacy嵌入了一個預訓練過的命名實體識別系統,該系統能夠從文本中識別常見的類別。

我們現在著手構建一個能夠識別屬于某個維基百科類別的文本片段的NER系統。讓我們考慮下面的例句:

“Named Entity Recognition and Topic Modeling are two tasks of Natural Language Processing”

這個句子可能包含三個實體:“命名實體識別”,“主題模型”和“自然語言處理”。這三個實體各自有屬于特定類別的維基百科頁面。

在這幅圖中,我們可以看到不同的類別是如何在三個實體之間傳播的。在這種情況下,類別可以看作是我們要從文本中提取的實體的標簽。我們現在可以利用SpikeX的兩個特性來構建一個定制的NER系統,它接受兩個變量的輸入:(i)句子的文本和(ii)我們想要檢測的類別。

from?wasabi?import?msg from?spacy?import?load?as?spacy_load from?spikex.wikigraph?import?load?as?wg_load from?spikex.pipes?import?WikiPageXdef?wiki_entity_recognition(text,?entity_root):entities?=?[]wg?=?wg_load("enwiki_core")?#?加載WikiGraphwikipagex?=?WikiPageX(wg)?#?創建wikipagexnlp?=?spacy_load("en_core_web_sm")doc?=?wikipagex(nlp(text))?#?get?doc?with?wiki?pages?extracted?獲取doc文檔entity_root?=?entity_root.replace("?",?"_")?#?修復空格,只是以防萬一#?獲取距離為2的根目錄的上下文context?=?set(wg.get_categories(entity_root,?distance=2))?for?span?in?doc._.wiki_spans:page_seen?=?set()for?page?in?span._.wiki_pages:#?避免重復pageid?=?wg.get_pageid(page)if?pageid?in?page_seen:continuepage_seen.add(pageid)#?檢查與上下文的交集categories?=?set(wg.get_categories(page))if?len(set.interp(categories,?context))?==?0:continue#?實體entities.append((span,?page))return?entities#?定義文本 text?=?"Named?Entity?Recognition?and?Topic?Modeling?are?two?tasks?of?Natural?Language?Processing" #?定義類別 entity_root?=?"Computational?linguistic"for?ent?in?wiki_entity_recognition(text,?entity_root):print("%s?-?%s"%(ent[0],ent[1].upper())) Named?Entity?Recognition?-?COMPUTATIONAL?LINGUISTIC Topic?Modeling?-?COMPUTATIONAL?LINGUISTIC Natural?Language?Processing?-?COMPUTATIONAL?LINGUISTIC

將維基百科的類別定義為NER任務的標簽提供了定義NER系統的可能性,從而避免了數據訓練問題。進一步的例子是使用display表示基于維基百科類別的NER系統提取的實體。

在這個例子中,“Programming Language”和“Computational Linguistics”作為輸入給出,然后在文本中搜索。

主題模型

當談到主題模型時,我們通常指的是能夠發現文本體的“隱藏語義結構”的NLP工具。

最近,有人討論“為了自動文本分析的目的,主題的定義在某種程度上取決于所采用的方法”[1]。潛Dirichlet分配(LDA)是一種流行的主題模型方法,它使用概率模型在文檔集合中提取主題。

另一個著名的方法是TextRank,它使用網絡分析來檢測單個文檔中的主題。近年來,自然語言處理領域的研究也引入了一些能夠在句子水平上提取主題的方法。一個例子是語義超圖,這是一種“結合機器學習和符號方法的優點,從句子的意義推斷主題的新技術”[1]。

我們現在看到如何使用Wikipedia在句子和文檔級別執行主題模型。

讓我們考慮專利US20130097769A1的以下文本。

Encapsulated protective suits may be worn in contaminated areas to protect the wearer of the suit. For example, workers may wear an encapsulated protective suit while working inside of a nuclear powered electrical generating plant or in the presence of radioactive materials. An encapsulated protective suit may be a one-time use type of system, wherein after a single use the suit is disposed of. An encapsulated protective suit may receive breathing air during normal operating conditions via an external air flow hose connected to the suit. The air may be supplied, for example, by a power air purifying respirator (PAPR) that may be carried by the user.

topics?=?Counter()for?sent?in?doc.sents:topics?=?Counter()sent?=?nlp(sent.text)sent?=?wikipagex(sent)print(sent)print('Topics?in?the?sentence:')for?span?in?sent._.wiki_spans:if?(len(span._.wiki_pages)?>?1?or?span[0].pos_?not?in?good_posor?span[-1].pos_?not?in?good_pos):continuetopics.update(wg.get_categories(span._.wiki_pages[0],?distance=2))for?topic,?count?in?topics.most_common():print('\t',topic.replace('Category:',''),?"->",?count)print('----') Sentence: Encapsulated?protective?suits?may?be?worn?in?contaminated?areas?to?protect?the?wearer?of?the?suit.?Topics?in?the?sentence:Safety?->?1Euthenics?->?1?----Sentence: For?example,?workers?may?wear?an?encapsulated?protective?suit?while?working?inside?of?a?nuclear?powered?electrical?generating?plant?or?in?the?presence?of?radioactive?materials. Topics?in?the?sentence:Safety?->?1Euthenics?->?1Electricity?->?1Electromagnetism?->?1Locale_(geographic)?->?1Electric_power_generation?->?1Power_stations?->?1Infrastructure?->?1Energy_conversion?->?1Chemistry?->?1Radioactivity?->?1 ----?Sentence: An?encapsulated?protective?suit?may?be?a?one-time?use?type?of?system,?wherein?after?a?single?use?the?suit?is?disposed?of.?Topics?in?the?sentence:???Safety?->?1Euthenics?->?1Transportation_planning?->?1Feminist_economics?->?1Schools_of_economic_thought?->?1Land_management?->?1Architecture?->?1Planning?->?1Transport?->?1Feminism?->?1Urban_planning?->?1Feminist_theory?->?1Urbanization?->?1Spatial_planning?->?1Social_sciences?->?1 ----Sentence: An?encapsulated?protective?suit?may?receive?breathing?air?during?normal?operating?conditions?via?an?external?air?flow?hose?connected?to?the?suit.?Topics?in?the?sentence:Safety?->?1Euthenics?->?1Chemical_industry?->?1Gases?->?1Industrial_gases?->?1Breathing_gases?->?1Diving_equipment?->?1Respiration?->?1Electromechanical_engineering?->?1Heat_transfer?->?1Home_appliances?->?1Engineering_disciplines?->?1Automation?->?1Building_engineering?->?1Temperature?->?1Heating,_ventilation,_and_air_conditioning?->?1??? ----?Sentence: The?air?may?be?supplied,?for?example,?by?a?power?air?purifying?respirator?(PAPR)?that?may?be?carried?by?the?user.Topics?in?the?sentence:Personal_protective_equipment?->?1Air_filters?->?1Respirators?->?1Protective_gear?->?1 ----

專利文本的每一句話都用SpikeX進行處理,并從句子中檢測到的相應Wikipedia頁面中提取類別。我們把話題作為維基百科的分類。這樣我們就有了第一個簡單的話題檢測。

這種方法不同于語義超圖、文本秩或LDA,它在不直接引用術語的情況下查找句子主題的標簽。提取的主題的標簽是指與SpikeX匹配的Wikipedia頁面的類別。如果我們使用這種方法聚合每個句子的主題,我們就可以更好地表示整個文檔。

在句子中劃分類別的頻率可以更廣泛地了解文本的主題分布。”“安全”和“安樂死”比其他類別出現得更頻繁。

我們現在使用整個專利文本(可在Google專利中獲得)來查找分類分布。

如我們所見,我們可以自動檢測整個文檔的主題(或類別)(在本例中是專利)。看看前5個類別,我們可以推斷出這項專利是關于什么的。這是在沒有任何訓練的情況下完成的。

結論

Wikipedia作為知識的來源已經被開發了十多年,并且在各種應用中被反復使用:文本注釋、分類、索引、聚類、搜索和自動分類生成。事實上,Wikipedia的結構有許多有用的特性,使其成為這些應用程序的良好候選。

這篇文章演示了如何使用這個強大的源代碼來改進NLP的簡單任務。然而,并不是說這種方法優于其他最先進的方法。評估自然語言處理任務準確性的精確度和召回率的典型測量方法,在這篇文章中沒有顯示。

此外,這種方法也有優點和缺點。其主要優點在于避免了訓練,從而減少了耗時的注釋任務。可以將維基百科視為一個龐大的訓練機構,其貢獻者來自世界各地。

這對于有監督的任務(如NER)和無監督的任務(如主題模型)都是如此。這種方法的缺點是雙重的。首先,維基百科是一個公共服務,作為一個由專家和非專家貢獻的知識庫。其次,從主題模型的結果可以看出,自然語言的歧義性會導致偏誤表現。詞義消歧和非專家驅動的數據整理明顯影響整個系統的可靠性。

參考引用

[1] Menezes, Telmo, and Camille Roth. “Semantic hypergraphs.”?arXiv preprint arXiv:1908.10784?(2019).

往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯黃海廣老師《機器學習課程》課件合集 本站qq群851320808,加入微信群請掃碼:

總結

以上是生活随笔為你收集整理的【NLP】利用维基百科促进自然语言处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。