
我們從日常每天都會用到的推薦系統(tǒng)到現(xiàn)在研究火熱的開放性聊天、對話機(jī)器人,越來越多的產(chǎn)品與應(yīng)用的背后都需要自然語言處理(NLP)和知識圖譜的技術(shù)。也有越來越多的學(xué)者與工作人員投身于 NLP 領(lǐng)域的研究。為什么要研究NLP呢?如果計(jì)算機(jī)想要更好的理解人類的語言,擁有更好的人機(jī)交互體驗(yàn),都離不開 NLP。那么,計(jì)算機(jī)到底是如何理解人類語言的?接下來讓我們跟著作者 Adam Geitgey ,和他一起體會自然語言處理技術(shù)里那些有意思的事情。
計(jì)算機(jī)非常擅長處理像電子表格、數(shù)據(jù)庫這樣的結(jié)構(gòu)化數(shù)據(jù)。但是,人與人之間是用語言來交流的,而不是用表格。這對計(jì)算機(jī)來說就很倒霉了。
然而不幸的是,我們并不是生活在所有數(shù)據(jù)都是結(jié)構(gòu)化的歷史交替版本中
這個(gè)世界上的許多信息都是非結(jié)構(gòu)化的,如英語,或者其他人類語言寫成的原文。那么,如何讓計(jì)算機(jī)理解這種非結(jié)構(gòu)化文本并從中提取數(shù)據(jù)呢?
自然語言處理(Natural Language Processing,NLP)是人工智能的子領(lǐng)域之一,其重點(diǎn)是使計(jì)算機(jī)能夠理解和處理人類語言。在本文中,我們將知曉NLP是如何工作的,并學(xué)習(xí)如何使用Python編寫能夠從原始文本提取信息的程序。(注:作者在文中選擇的語言對象是英語)
計(jì)算機(jī)能夠理解語言嗎?
自從計(jì)算機(jī)問世以來,為了能夠開發(fā)出可以理解語言的程序,程序員們一直在努力。為什么一定要這么做呢?理由很簡單:人類運(yùn)用語言已經(jīng)有千年的歷史,如果計(jì)算機(jī)能夠讀懂這些,對人們將會非常有幫助。
計(jì)算機(jī)雖然還不能像人類那樣真正地理解語言,但是它們現(xiàn)在已經(jīng)可以做很多事情了。在某些領(lǐng)域中,可以用NLP來做的那些事情,已經(jīng)能夠讓人感到很神奇了。如果將NLP技術(shù)應(yīng)用到你自己的項(xiàng)目,也許可以節(jié)省很多時(shí)間。
好消息是,NLP的最近進(jìn)展可以通過開源Python庫(如spaCy、textcy 和 neuralcoref)輕松訪問。只需簡單幾行Python代碼就能完事兒,這一點(diǎn)就很讓人驚嘆。
難點(diǎn):從文本中提取意義
閱讀和理解英語的過程是非常復(fù)雜的,尤其是考慮到是否有遵循邏輯和一致的規(guī)則。例如,下面這個(gè)新聞標(biāo)題是什么意思?
“Environmental regulators grill business owner over illegal coal fires.”
這新聞標(biāo)題,究竟想表達(dá)什么意思呢?監(jiān)管機(jī)構(gòu)是否就非法燃煤的問題對企業(yè)主進(jìn)行了質(zhì)詢?還是監(jiān)管者把非法燃煤的企業(yè)主拿來燒烤了?你看,如果用計(jì)算機(jī)來解析英語的話,事情就會變得異常復(fù)雜。
在機(jī)器學(xué)習(xí)中,做任何一件復(fù)雜的事情通常意味著需要構(gòu)建一個(gè)工作流。這個(gè)想法就是將你的問題分解成很小的部分,然后使用機(jī)器學(xué)習(xí)來分別解決每一個(gè)部分。然后,將幾個(gè)相互作用的機(jī)器學(xué)習(xí)模型鏈接在一起,你就得以能夠完成非常復(fù)雜的事情。
這就是我們將用在NLP的策略。我們將把理解英語的過程分解成小塊,看看每個(gè)部分是如何工作的。
一步一步構(gòu)建NLP工作流
我們來看一下取自維基百科上的一段文字:
London is the capital and most populous city of England and the United Kingdom. Standing on the River Thames in the south east of the island of Great Britain, London has been a major settlement for two millennia. It was founded by the Romans, who named it Londinium.
(來源維基百科詞條 London)
這一段包含了幾個(gè)有用的事實(shí)。如果計(jì)算機(jī)能夠讀懂這段文字,并理解London(倫敦)是一座城市,位于England(英格蘭),由Romans(羅馬人)建立的地方,那就太好了。但是要實(shí)現(xiàn)這一目標(biāo),就必須教會計(jì)算機(jī)學(xué)習(xí)書面語言的最基本的概念,然后再繼續(xù)前進(jìn)。
▌第一步:句子切分(Sentence Segmentation)
工作的第一步,是將文本切分成單獨(dú)的句子。我們得到的是:
1.“London is the capital and most populous city of England and the United Kingdom.”
2.“Standing on the River Thames in the south east of the island of Great Britain, London has been a major settlement for two millennia.”
3.“It was founded by the Romans, who named it Londinium.”
我們可以假設(shè),英語中每個(gè)句子都表達(dá)了一種獨(dú)立的意思或者想法。編寫程序來理解單個(gè)句子,可比理解整個(gè)段落要容易多了。
為句子切分模型編碼就像你看到標(biāo)點(diǎn)符號時(shí)對句子進(jìn)行斷句一樣,都不是難事。但是,現(xiàn)代的NLP工作流通常會使用更為復(fù)雜的技術(shù),就算文檔格式不是很干凈利落,也能正常工作。
▌第二步:單詞標(biāo)記(Word Tokenization)
現(xiàn)在我們已經(jīng)將文本切分成了句子,這樣就可以做到一次處理一個(gè)句子。就從這段文本的第一條句子開始吧:
“London is the capital and most populous city of England and the United Kingdom.”
NLP工作流中的下一步就是將這個(gè)句子切分成單獨(dú)的單詞或標(biāo)記。這就是所謂的“標(biāo)記”(Tokenization)。以下是單詞標(biāo)記的結(jié)果:
“London”, “is”, “ the”, “capital”, “and”, “most”, “populous”, “city”, “of”, “England”, “and”, “the”, “United”, “Kingdom”, “.”
標(biāo)在英語中很容易做到。只要單詞之間有空格,我們就可以將它們分開。我們還將標(biāo)點(diǎn)符號視為單獨(dú)的標(biāo)記,因?yàn)闃?biāo)點(diǎn)符號也有意義。
▌第三步:預(yù)測每個(gè)標(biāo)記的詞性
接下來,我們將查看每個(gè)標(biāo)記并試著猜測它的詞性:名詞、動(dòng)詞還是形容詞等等。只要知道每個(gè)單詞在句子中的作用,我們就可以開始理解這個(gè)句子在表達(dá)什么。
我們可以通過將每個(gè)單詞(以及周圍的一些額外單詞)輸入到預(yù)訓(xùn)練的詞性分類模型來實(shí)現(xiàn),如下圖所示:
需要記住一點(diǎn):這種模型完全基于統(tǒng)計(jì)數(shù)據(jù),實(shí)際上它并不能像人類那樣理解單詞的含義。它只知道如何根據(jù)以前所見過的類似句子和單詞來猜測詞性。
在處理完整個(gè)句子后,我們會得到這樣的結(jié)果,如下圖所示:
有了這些信息之后,我們就可以開始收集一些非常基本的含義。比如,我們看到這個(gè)句子中的名詞包括“London”和“capital”,所以可以認(rèn)為這個(gè)句子可能是在說 London。
▌第四步:文本詞形還原(Text Lemmatization)
在英語(以及大多數(shù)語言)中,單詞是以不同的形式出現(xiàn)的。看看下面這兩個(gè)句子:
1.I had a pony.
2.I had two ponies.
這兩個(gè)句子都有名詞“pony”,但是它們的詞性不同。當(dāng)計(jì)算機(jī)處理文本時(shí),了解每個(gè)單詞的基本形式是很有幫助的,唯有如此你才能知道這兩個(gè)句子是在討論同一個(gè)概念。否則,字符串“pony”和“ponies”在計(jì)算機(jī)看來就是兩個(gè)完全不同的單詞。
在NLP中,我們將發(fā)現(xiàn)這一過程叫“詞形還原”(Lemmatization),就是找出句子中每個(gè)單詞的最基本的形式或引理。
這同樣也適用于動(dòng)詞。我們還可以通過找到動(dòng)詞的詞根,以非共軛形式(unconjugated form)來引申動(dòng)詞。所以,“I had two ponies”就變成了“I [have] two [pony].”
詞形還原通常是通過查找單詞生成表格來完成的,也可能有一些自定義規(guī)則來處理你以前從未見過的單詞。
下面是句子詞形還原之后添加動(dòng)詞的詞根形式之后的樣子:
我們所做的唯一改變就是將“is”變成“be”。
▌第五步:識別停止詞(Identifying Stop Words)
接下來,我們要考慮句子中每個(gè)單詞的重要性。英語中有很多填充詞,經(jīng)常出現(xiàn)“and”、“the”和“a”。當(dāng)對文本進(jìn)行統(tǒng)計(jì)時(shí),這些填充詞會帶來很多噪音,因?yàn)樗鼈儽绕渌~出現(xiàn)得更頻繁。一些NLP工作流會將它們標(biāo)記為停止詞(stop words),即在進(jìn)行任何統(tǒng)計(jì)分析之前可能想要過濾掉的單詞。
這個(gè)句子使用停用詞變灰之后看上去像下面的樣子:
我們是通過檢查已知停止詞的編碼列表來識別停止詞的。但是,并沒有一個(gè)適合所有應(yīng)用的標(biāo)準(zhǔn)停止詞列表。因此,要忽略的單詞列表可能因應(yīng)用而異。
例如,如果你要構(gòu)建搖滾樂隊(duì)的搜索引擎,你要確保不會忽略“The”這個(gè)單詞。因?yàn)椤癟he”這個(gè)單詞不僅僅出現(xiàn)在很多樂隊(duì)的名字中,上世紀(jì)80年代還有一支著名的搖滾樂隊(duì)就叫“The The”!
▌第六步:依存句法分析(Dependency Parsing)
下一步就是弄清楚句子中所有單詞是如何相互關(guān)聯(lián)的,這稱為依存句法分析(Dependency Parsing)。
我們的目標(biāo)就是構(gòu)建一棵依存樹,為句子中每個(gè)單詞分配一個(gè)母詞(parent word)。這棵樹的根就是句子中的主動(dòng)詞(main verb)。這個(gè)句子的解析樹的開頭看上去如下圖所示:
但我們還可以更進(jìn)一步。除了識別每個(gè)單詞的母詞之外,我們還可以預(yù)測這兩個(gè)單詞之間存在的關(guān)系類型:
這棵解析樹向我們展示了這個(gè)句子的主語是名詞“London”,它與單詞“capital”有“be”的關(guān)系。這樣,我們終于知道了一些有用的信息:London是一個(gè)capital(首都)!如果我們按照完整的解析樹來解析這個(gè)句子(超出所示內(nèi)容),我們甚至?xí)l(fā)現(xiàn):London是英國的首都。
就像我們之前使用機(jī)器學(xué)習(xí)模型預(yù)測詞性一樣,依存語法分析也可以通過將單詞輸入到機(jī)器學(xué)習(xí)模型中并輸出結(jié)果來實(shí)現(xiàn)。但是,解析單詞的依存關(guān)系是一項(xiàng)特別復(fù)雜的任務(wù),需要另起一篇文章來詳細(xì)解釋。如果你好奇它是如何工作的,可以去參閱Matthew Honnibal寫的一篇優(yōu)秀文章《Parsing English in 500 Lines of Python》,我們在文末附上了閱讀鏈接。
要注意的是:盡管這篇文章的作者在 2015 年聲稱,這種方法現(xiàn)在已成為標(biāo)準(zhǔn)。但是實(shí)際上,它已經(jīng)過時(shí)了,甚至連作者都不再使用這個(gè)方法了。2016年,Google 發(fā)布了一個(gè)新的依存句法分析器,名為 Parsey McParseface,它使用了一種新的深度學(xué)習(xí)方法,迅速在整個(gè)行業(yè)流行開來,其性能超過了以前的基準(zhǔn)測試。一年后,他們發(fā)布了一種叫做 ParseySaurus 的新模型,實(shí)現(xiàn)了進(jìn)一步的改進(jìn)。換句話說,句法分析技術(shù)仍然是一個(gè)活躍的研究領(lǐng)域,還在不斷變化和改進(jìn)。
此外,英語中有很多句子是模棱兩可的,很難分析。在這些情況下,模型會根據(jù)句子的分析版本進(jìn)行猜測,但是并不完美,有時(shí)候模型會出現(xiàn)令人尷尬的錯(cuò)誤。但隨著時(shí)間的推移,我們的NLP模型將繼續(xù)以合理的方式更好地分析文本。
▌第六b步:查找名詞短語
到目前為止,我們把句子中的每個(gè)單詞都視為一個(gè)獨(dú)立的實(shí)體。但有時(shí)候?qū)⒈硎疽粋€(gè)想法或事物的單詞放在一起更有意義。我們可以用依存句法解析樹中的信息,自動(dòng)將所有討論同一事物的單詞分組在一起。
例如,下面這個(gè)形式:
我們可以對名詞短語進(jìn)行分組來生成如下圖所示:
是否采取這一步驟,要取決于我們的最終目標(biāo)。但是,如果我們不需要關(guān)心哪些單詞的額外細(xì)節(jié),而是更關(guān)心提取完整的意思,那么這通常是簡化句子的快速而簡單的方法。
▌第七步:命名實(shí)體識別(NER)
既然我們已經(jīng)完成了所有這些艱苦的工作,我們終于可以越過初級語法,開始真正地提取句子的意思。
在這個(gè)句子中,我們有下列名詞:
如上圖所示,有些名詞表示世界上真實(shí)的事物。例如,“London”、“England”和“United Kingdom”代表的是地圖上的物理位置。能夠檢測到這一點(diǎn),真實(shí)太好了!有了這些信息,我們就可以使用NLP自動(dòng)提取文本中提到的真實(shí)世界位置列表。
命名實(shí)體識別(Named Entity Recognition,NER)的目標(biāo)是用它們所代表的真實(shí)概念來檢測和標(biāo)記這些名詞。在我們的NER標(biāo)記模型中運(yùn)行每個(gè)標(biāo)記之后,這條句子看起來如下圖所示:
但是,NER系統(tǒng)并非只是簡單地進(jìn)行字典查找。相反,它們使用單詞如何出現(xiàn)在句子中的上下文和統(tǒng)計(jì)模型來猜測單詞所代表的名詞類型。一個(gè)優(yōu)秀的NER系統(tǒng)可以通過上下文線索來區(qū)分人名“Brooklyn Decker”和地名“Brooklyn”之間的區(qū)別。
下面是典型NER系統(tǒng)可以標(biāo)記的一些對象:
人名
公司名稱
地理位置(包括物理位置和行政位置)
產(chǎn)品名
日期和時(shí)間
金額
事件名稱
NER 有很多用途,因?yàn)樗梢院苋菀椎貜奈谋局蝎@取結(jié)構(gòu)化數(shù)據(jù)。這是快速從 NLP工作流中獲取價(jià)值的最簡單方法之一。
▌第八步:指代消解
至此,我們已經(jīng)對句子有了一個(gè)有用的表述。我們知道了每個(gè)單詞的詞性,這些單詞之間的關(guān)系,以及哪些單詞表示命名實(shí)體。
但是,我們?nèi)匀挥幸粋€(gè)很大的問題。在英語中有大量像“he”、“she”、“it”這樣的代詞。這些代詞是我們使用的“快捷方式”,這樣某些名稱就不用在每條句子中反復(fù)出現(xiàn)。人們可以根據(jù)文本中上下文來理解這些代詞的含義。但NLP模型做不到這一點(diǎn),它不會知道這些代詞代表的是什么意思,因?yàn)樗荒苤鹁錂z測每個(gè)句子。
讓我們看一下文本中的第三句話:
“It was founded by the Romans, who named it Londinium.”
如果我們用 NLP工作流來分析這個(gè)句子,模型只知道“It”是由 Romans 創(chuàng)立的。但是,我們讀過后都知道,“It”指的是“London”,這句的意思是:London是由 Romans 創(chuàng)立的。
指代消解(Coreference Resolution)的目標(biāo)是,通過跟蹤句子中的代詞來找到相同的映射。我們要弄清楚所有指向同一個(gè)實(shí)體的代詞。
如下圖所示,是文本中為“London”一詞進(jìn)行指代消解的結(jié)果:
通過將指代消解、解析樹和命名實(shí)體信息相結(jié)合,我們應(yīng)該能夠從這段文本中提取大量的信息!
指代消解是我們工作流準(zhǔn)備實(shí)施中最困難的步驟之一。它比句子解析還要難。深度學(xué)習(xí)方面的最新進(jìn)展已經(jīng)產(chǎn)生了更為準(zhǔn)確的新方法,但是還不夠完美。
用Python編寫NLP工作流
如下圖所示,是我們完整的NLP工作流概述:
注:指代消解是可選步驟,并非必選步驟。上圖所示的這些是典型的NLP工作流中的步驟,但你可以跳過某些步驟或重新排序步驟,這要取決于你想做的事情以及NLP庫的實(shí)現(xiàn)方式。例如,某些像spaCy這樣的庫使用依存句法分析的結(jié)果在工作流中進(jìn)行句子切割。
首先,假設(shè)你已經(jīng)安裝了Python 3,那么可以按照下面的步驟安裝 spaCy:
# Install spaCy
pip3 install -U spacy
# Download the large English model for spaCy
python3 -m spacy download en_core_web_lg
# Install textacy which will also be useful
pip3 install -U textacy
然后,下面是運(yùn)行NLP工作流的代碼:
import spacy
# Load the large English NLP model
nlp = spacy.load('en_core_web_lg')
# The text we want to examine
text = """London is the capital and most populous city of England and
the United Kingdom. Standing on the River Thames in the south east
of the island of Great Britain, London has been a major settlement
for two millennia. It was founded by the Romans, who named it Londinium.
"""
# Parse the text with spaCy. This runs the entire pipeline.
doc = nlp(text)
# 'doc' now contains a parsed version of text. We can use it to do anything we want!
# For example, this will print out all the named entities that were detected:
for entity in doc.ents:
print(f"{entity.text} ({entity.label_})")
運(yùn)行后將獲得我們的文本中檢測到的命名實(shí)體和實(shí)體類型的列表:
London (GPE)
England (GPE)
the United Kingdom (GPE)
the River Thames (FAC)
Great Britain (GPE)
London (GPE)
two millennia (DATE)
Romans (NORP)
Londinium (PERSON)
注意,在“Londinium”一詞上有一個(gè)錯(cuò)誤:認(rèn)為該詞是人名而非地名。之所以出現(xiàn)這種錯(cuò)誤是因?yàn)橛?xùn)練集中沒有與之類似的東西,它所能做出的最好猜測。如果你要解析具有此類唯一或?qū)S眯g(shù)語的文本,你就需要對命名實(shí)體檢測進(jìn)行一些模型微調(diào)。
讓我們考慮一下檢測實(shí)體,并將其進(jìn)行扭曲以構(gòu)建一個(gè)數(shù)據(jù)清理器。通過查閱海量文檔并試圖手工編輯所有的名稱,需要耗費(fèi)數(shù)年的時(shí)間。但是對于NLP來說,這實(shí)在是小菜一碟。這里有一個(gè)簡單的 scrubber,可以很輕松地刪除掉它所檢測到的所有名稱:
import spacy
# Load the large English NLP model
nlp = spacy.load('en_core_web_lg')
# Replace a token with "REDACTED" if it is a name
def replace_name_with_placeholder(token):
if token.ent_iob != 0 and token.ent_type_ == "PERSON":
return "[REDACTED] "
else:
return token.string
# Loop through all the entities in a document and check if they are names
def scrub(text):
doc = nlp(text)
for ent in doc.ents:
ent.merge()
tokens = map(replace_name_with_placeholder, doc)
return "".join(tokens)
s = """
In 1950, Alan Turing published his famous article "Computing Machinery and Intelligence". In 1957, Noam Chomsky’s
Syntactic Structures revolutionized Linguistics with 'universal grammar', a rule based system of syntactic structures.
"""
print(scrub(s))
運(yùn)行這段代碼會得到下面的結(jié)果
In 1950, [REDACTED] published his famous article "Computing Machinery and Intelligence".
In 1957, [REDACTED] Syntactic Structures revolutionized Linguistics
with 'universal grammar', a rule based system of syntactic structures.
▌提取事實(shí)
除了用 spaCy 外,還可以用一個(gè)叫 textacy 的 python 庫,它在spaCy 的基礎(chǔ)上,實(shí)現(xiàn)了幾種常見的數(shù)據(jù)提取算法。
textacy 實(shí)現(xiàn)的算法中,有一種叫半結(jié)構(gòu)化語句提?。⊿emi-structured Statement
Extraction)算法。我們可以使用這個(gè)算法進(jìn)行搜索解析樹,查找主語是“London”且動(dòng)詞為“be”的簡單語句。這有助于我們找到有關(guān)“London”的事實(shí)。
代碼如下所示:
import spacy
import textacy.extract
# Load the large English NLP model
nlp = spacy.load('en_core_web_lg')
# The text we want to examine
text = """London is the capital and most populous city of England and the United Kingdom.
Standing on the River Thames in the south east of the island of Great Britain,
London has been a major settlement for two millennia. It was founded by the Romans,
who named it Londinium.
"""
# Parse the document with spaCy
doc = nlp(text)
# Extract semi-structured statements
statements = textacy.extract.semistructured_statements(doc, "London")
# Print the results
print("Here are the things I know about London:")
for statement in statements:
subject, verb, fact = statement
print(f" - {fact}")
運(yùn)行結(jié)果如下:
Here are the things I know about London:
- the capital and most populous city of England and the United Kingdom.
- a major settlement for two millennia.
這么簡單的演示,也許不會讓人感到印象特別深刻。但是如果你在維基百科的“London”詞條上運(yùn)行同樣的代碼,而不是僅僅使用三條句子來演示,你就會得到更加令人印象深刻的結(jié)果:
Here are the things I know about London:
- the capital and most populous city of England and the United Kingdom
- a major settlement for two millennia
- the world's most populous city from around 1831 to 1925
- beyond all comparison the largest town in England
- still very compact
- the world's largest city from about 1831 to 1925
- the seat of the Government of the United Kingdom
- vulnerable to flooding
- "one of the World's Greenest Cities" with more than 40 percent green space or open water
- the most populous city and metropolitan area of the European Union and the second most populous in Europe
- the 19th largest city and the 18th largest metropolitan region in the world
- Christian, and has a large number of churches, particularly in the City of London
- also home to sizeable Muslim, Hindu, Sikh, and Jewish communities
- also home to 42 Hindu temples
- the world's most expensive office market for the last three years according to world property journal (2015) report
- one of the pre-eminent financial centres of the world as the most important location for international finance
- the world top city destination as ranked by TripAdvisor users
- a major international air transport hub with the busiest city airspace in the world
- the centre of the National Rail network, with 70 percent of rail journeys starting or ending in London
- a major global centre of higher education teaching and research
and has the largest concentration of higher education institutes in
Europe
- home to designers Vivienne Westwood, Galliano, Stella McCartney, Manolo Blahnik, and Jimmy Choo, among others
- the setting for many works of literature
- a major centre for television production, with studios including
BBC Television Centre, The Fountain Studios and The London Studios
- also a centre for urban music
- the "greenest city" in Europe with 35,000 acres of public parks, woodlands and gardens
- not the capital of England, as England does not have its own government
現(xiàn)在事情變得有趣了!這就是我們自動(dòng)收集的大量信息。
你還可以試著安裝neuralcoref庫并在工作流中添加指代消解。這樣一來你就能得到更多的事實(shí),因?yàn)樗鼤蹲降侥切┨岬健癷t”的句子,而不是直接提及“London”的句子。
▌我們還能做什么?
查看spaCy的文檔和textacy的文檔,可以看到許多解析文本的方法示例。在本文中,我們只是用了一個(gè)小小的樣本示例。
這里還有一個(gè)實(shí)例:假設(shè)你正在構(gòu)建一個(gè)網(wǎng)站,讓用戶使用我們在上一個(gè)示例中提取的信息查看世界上每座城市的信息。
如果在你的網(wǎng)站上有搜索功能,那么就可以像 Google 那樣自動(dòng)填充常見的搜索查詢,這點(diǎn)子可能很不錯(cuò),如下圖所示:
640?wx_fmt=jpeg
Google對“London”的自動(dòng)填充建議
但是要做到這一點(diǎn),我們需要一個(gè)可能完成的列表來為用戶提供建議。可以使用NLP來快速生成這些數(shù)據(jù)。
要怎么生成這些數(shù)據(jù)呢?這里有一種方法,可以從文檔中提取頻繁提到的名詞塊:
import spacy
import textacy.extract
# Load the large English NLP model
nlp = spacy.load('en_core_web_lg')
# The text we want to examine
text = """London is [.. shortened for space ..]"""
# Parse the document with spaCy
doc = nlp(text)
# Extract noun chunks that appear
noun_chunks = textacy.extract.noun_chunks(doc, min_freq=3)
# Convert noun chunks to lowercase strings
noun_chunks = map(str, noun_chunks)
noun_chunks = map(str.lower, noun_chunks)
# Print out any nouns that are at least 2 words long
for noun_chunk in set(noun_chunks):
if len(noun_chunk.split(" ")) > 1:
print(noun_chunk)
得到如下的輸出:
westminster abbey
natural history museum
west end
east end
st paul's cathedral
royal albert hall
london underground
great fire
british museum
london eye
…. etc ….
本文例舉的內(nèi)容只是你可以用NLP做的一小部分。在后續(xù)文章中,我們將會討論NLP的其他應(yīng)用,如文本分類,以及像Amazon Alexa這樣的系統(tǒng)如何解析問題。
現(xiàn)在你就可以安裝spaCy,開始嘗試一下吧!如果你不是Python用戶,使用的是不同的NLP庫,文章中這些步驟,在你的處理過程中仍是有借鑒可取之處的。
原文鏈接:
https://medium.com/@ageitgey/natural-language-processing-is-fun-9a0bff37854e
參考鏈接:
[1] spaCy
https://spacy.io/
[2] textacy
http://textacy.readthedocs.io/en/latest/
[3] neuralcoref
https://github.com/huggingface/neuralcoref
[4] Wikipedia article "London"
https://en.wikipedia.org/wiki/London
[5] Parsing English in 500 Lines of Python
https://explosion.ai/blog/parsing-english-in-python
[6] displaCy Dependency Visualizer Demos
https://explosion.ai/demos/displacy
[7] displaCy Named Entity Visualizer Demos
https://explosion.ai/demos/displacy-ent
[8] State-of-the-art neural coreference resolution for chatbots
https://medium.com/huggingface/state-of-the-art-neural-coreference-resolution-for-chatbots-3302365dcf30
[9] Neural Coreference - Hugging Face
https://medium.com/@ageitgey/natural-language-processing-is-fun-9a0bff37854e
[10] raining the named entity recognizer
https://spacy.io/usage/training#section-ner
[11] API Reference - textacy 0.4.1 documentation
https://textacy.readthedocs.io/en/stable/api_reference.html#textacy.extract.semistructured_statements
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營問題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10