0
本文作者: AI研習(xí)社-譯站 | 2018-08-17 10:31 |
雷鋒網(wǎng)按:本文為雷鋒字幕組編譯的技術(shù)博客,原標(biāo)題 Holy NLP! Understanding Part of Speech Tags, Dependency Parsing, and Named Entity Recognition,作者為 Peter Baumgartner。
翻譯 | 陳濤 程思婕 整理 | 凡江
簡(jiǎn)介
當(dāng)我們提到數(shù)據(jù)科學(xué)時(shí),我們經(jīng)常想到的是針對(duì)數(shù)字的統(tǒng)計(jì)分析。但實(shí)際上,更為常見(jiàn)的是由機(jī)構(gòu)所產(chǎn)生的大量非結(jié)構(gòu)化文本數(shù)據(jù),它們需要被量化和分析。其中的一些例子有社交網(wǎng)絡(luò)評(píng)論,產(chǎn)品評(píng)價(jià),電郵,采訪稿。
為了分析文本,數(shù)據(jù)科學(xué)家經(jīng)常會(huì)用到自然語(yǔ)言處理(NLP)。在本文中,我們將詳細(xì)介紹 3 個(gè)常見(jiàn)的 NLP 任務(wù),并研究如何運(yùn)用它們來(lái)分析文本。我們將討論的三個(gè)任務(wù)分別是:
詞性標(biāo)注:這個(gè)詞語(yǔ)的詞性是什么?
依存分析:這個(gè)詞語(yǔ)與句中其他詞語(yǔ)有什么關(guān)系?
命名實(shí)體識(shí)別:這個(gè)詞語(yǔ)是否是專(zhuān)有名詞?
我們將通過(guò)spaCy這個(gè) python 庫(kù),來(lái)調(diào)用上述三種功能,從而對(duì)圣經(jīng)中的主要角色進(jìn)行挖掘,并分析他們的行為。接著,我們將嘗試對(duì)得到的結(jié)構(gòu)化數(shù)據(jù)做一些有趣的可視化。
當(dāng)你有大量的文本文檔時(shí),你就可以采用這個(gè)方法,去了解文檔中有哪些主要的實(shí)體,它們出現(xiàn)在文檔何處,它們做了什么。比如,DocumentCloud 采用了與此類(lèi)似的方法來(lái)實(shí)現(xiàn)「查看實(shí)體」的分析選項(xiàng)。
詞條與詞性標(biāo)注
有一種從文本中提取意義的方法是逐一分析每一個(gè)詞語(yǔ)。將文本切分成詞語(yǔ)的過(guò)程稱(chēng)為詞條化,得到的詞語(yǔ)被稱(chēng)為詞條。標(biāo)點(diǎn)符號(hào)也是詞條的一種。句中的每個(gè)詞條都有若干屬性,我們可以對(duì)此進(jìn)行分析。其中一個(gè)例子就是詞語(yǔ)的詞性:名詞表示人物,地點(diǎn)或事物;動(dòng)詞表示動(dòng)作或事件的發(fā)生;形容詞則用以描述名詞。利用這些屬性,可以很方便地統(tǒng)計(jì)一段文本內(nèi)最常見(jiàn)的名詞,動(dòng)詞和形容詞,從而創(chuàng)建出一份摘要。
利用 spaCy,我們可以對(duì)一段文本進(jìn)行詞條化,從而得到每個(gè)詞條的詞性屬性。以下面的代碼作為示例應(yīng)用程序,我們對(duì)之前的段落進(jìn)行詞條化,并統(tǒng)計(jì)其中最常見(jiàn)名詞的數(shù)目。此外,我們對(duì)詞條進(jìn)行了詞性還原,即得到每個(gè)詞的詞根,規(guī)范了詞語(yǔ)的形式。
依存分析
詞語(yǔ)之間存在著一定的關(guān)系,其中有幾種常見(jiàn)的類(lèi)型。比如,名詞可以作為句子中的主語(yǔ),從而執(zhí)行一個(gè)動(dòng)作(動(dòng)詞),如同「Jill laughed」。名詞也可以作為句子中的賓語(yǔ),其會(huì)受到主語(yǔ)的動(dòng)作影響,就像此句中的 John:「Jill laughed at John」。
依存分析正是理解句子中詞語(yǔ)間關(guān)系的一種方法。句子「Jill laughed at John」中有兩個(gè)名詞 Jill 和 John。Jill 是主語(yǔ),表示發(fā)出笑這個(gè)動(dòng)作的人,而 John 是賓語(yǔ),表示被取笑的人。依存關(guān)系是一種更精細(xì)的屬性,可以用來(lái)理解句子中詞語(yǔ)間的關(guān)系。
詞語(yǔ)間的關(guān)系可以隨著句子的組織方式而變得很復(fù)雜。對(duì)一個(gè)句子進(jìn)行依存分析,將得到以動(dòng)詞為根的樹(shù)狀數(shù)據(jù)結(jié)構(gòu)。
讓我們來(lái)看下這句話的依存分析結(jié)果:「The quick brown fox jumps over the lazy dog」。
依存關(guān)系也是詞條屬性的一種。spaCy提供了一系列API,可以幫助我們得到詞條的各種屬性。下面我們將打印出各個(gè)詞條的文本,詞條間的依存關(guān)系及其父詞條(頭詞條)的文本。
為了進(jìn)一步分析,我們需要留意那些帶有nsubj關(guān)系的詞條,這表示它們是句子中的主語(yǔ)。在這個(gè)例子中,意味著我們需要將詞語(yǔ)「fox」記錄下來(lái)。
命名實(shí)體識(shí)別
最后就是命名實(shí)體識(shí)別了。命名實(shí)體是指句子中的專(zhuān)有名詞。計(jì)算機(jī)已經(jīng)能很好地識(shí)別出句子中的命名實(shí)體,并區(qū)分其實(shí)體類(lèi)型。
spaCy是在文檔級(jí)層面進(jìn)行命名實(shí)體識(shí)別的操作。這是因?yàn)橐粋€(gè)實(shí)體的名稱(chēng)可能跨越多個(gè)詞條。每一個(gè)詞條會(huì)被標(biāo)記為實(shí)體的一部分,具體實(shí)施是按照 IOB 規(guī)則 來(lái)標(biāo)記,分為實(shí)體的開(kāi)始,實(shí)體的內(nèi)部以及實(shí)體的外部。
在下面的代碼中,我們使用docs.ents函數(shù)打印出所有文檔級(jí)的命名實(shí)體。接著,我們打印出每一個(gè)詞條,它的 IOB 標(biāo)注及所屬的實(shí)體類(lèi)型(如果該詞條是某個(gè)實(shí)體一部分的話)。
我們使用的例句是:「Jill laughed at John Johnson」。
一個(gè)實(shí)際應(yīng)用的例子:對(duì)圣經(jīng)進(jìn)行自然語(yǔ)言處理
分別使用上述提到的方法,效果都挺不錯(cuò)。然而,自然語(yǔ)言處理的真正威力在于我們可以將這些方法結(jié)合起來(lái),從而提取出符合語(yǔ)言模式的信息。我們可以使用詞性標(biāo)注,依存分析和命名實(shí)體識(shí)別去理清大量文本中出現(xiàn)的所有角色及其行為??紤]到圣經(jīng)的長(zhǎng)度及其提到的大量角色,它正是一個(gè)應(yīng)用這些方法的好例子。
在我們導(dǎo)入的數(shù)據(jù)中,每一個(gè)對(duì)象就是一段圣經(jīng)中的經(jīng)文。經(jīng)文是用來(lái)索引圣經(jīng)中的具體章節(jié),一般包括一句或若干句文本。我們會(huì)遍歷每段經(jīng)文,提取其中的主語(yǔ),判斷其是否是人名,并抽取出該人物的行為。
首先,我們從 github 倉(cāng)庫(kù)中加載 json 格式的圣經(jīng)。然后,對(duì)于抽取出的每段經(jīng)文文本,利用spaCy對(duì)其進(jìn)行依存分析和詞性標(biāo)注,并將分析后的結(jié)果儲(chǔ)存起來(lái)。
我們將文本從 json 格式中解析出來(lái),并存入verse_docs這個(gè)變量里,耗時(shí)大約三分多鐘,平均一秒鐘處理 160 段經(jīng)文。作為參考,我們可以看一下bible_json的前三行。
使用詞條屬性
為了提取角色和相關(guān)的行為,我們需要對(duì)每段經(jīng)文中的所有詞條進(jìn)行遍歷,并考慮 3 個(gè)要素。
1)這個(gè)詞條是否是句子的主語(yǔ)(即查看其依存關(guān)系是否是nsubj);
2)這個(gè)詞條的父詞條是否是動(dòng)詞(一般情況下應(yīng)該是動(dòng)詞,但有時(shí)詞性標(biāo)注會(huì)和依存分析得出矛盾的結(jié)果,我們還是謹(jǐn)慎一點(diǎn)吧。當(dāng)然我并非語(yǔ)言學(xué)家,因此可能此處存在著一些奇怪的極端例子);
3)這個(gè)詞條是否是指代人的命名實(shí)體,我們并不想對(duì)非人物的名詞進(jìn)行提?。榱撕?jiǎn)單起見(jiàn),我們只提取每個(gè)角色的名字部分)。
如果有詞條符合上述的三個(gè)條件,我們將對(duì)其收集下列屬性。
1)詞條所表示的名詞實(shí)體的文本;
2)包含名詞和動(dòng)詞的文本范圍(即短語(yǔ));
3)其相關(guān)的動(dòng)詞;
4)該動(dòng)詞在標(biāo)準(zhǔn)英語(yǔ)文本中出現(xiàn)的對(duì)數(shù)概率(使用對(duì)數(shù)概率是因?yàn)橥@里的概率值會(huì)非常小);
5)該段經(jīng)文的序號(hào)。
分析
我們已經(jīng)提取出所有角色和他們的行為,并以列表的形式進(jìn)行存儲(chǔ)。我們先做一個(gè)快速分析,計(jì)算以下兩項(xiàng)。
1)弄清楚每個(gè)人物最常見(jiàn)的行為(即動(dòng)詞)。
......
想要繼續(xù)閱讀,請(qǐng)移步至我們的AI研習(xí)社社區(qū):https://club.leiphone.com/page/TextTranslation/848
更多精彩內(nèi)容盡在 AI 研習(xí)社。
不同領(lǐng)域包括計(jì)算機(jī)視覺(jué),語(yǔ)音語(yǔ)義,區(qū)塊鏈,自動(dòng)駕駛,數(shù)據(jù)挖掘,智能控制,編程語(yǔ)言等每日更新。
雷鋒網(wǎng)(公眾號(hào):雷鋒網(wǎng))雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。