溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

NLP有什么用

發(fā)布時間:2021-11-06 15:15:07 來源:億速云 閱讀:145 作者:iii 欄目:web開發(fā)

這篇文章主要講解了“NLP有什么用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“NLP有什么用”吧!

處理數(shù)據(jù)

實(shí)驗中使用的數(shù)據(jù)或文本語料庫(通常在NLP中稱為語料庫)是電影腳本。但是,在使用這些數(shù)據(jù)之前,需要做一下篩選。因為,心理描寫、動作描述或者場景描寫的文本,以及每句臺詞前的角色名(僅指示說話人,不作為文本分析的語料庫)都不是本次研究的對象。所以,諸如“Thanoscrushes  the Tesseract, revealing the blue Space Stone…”  (滅霸捏碎了宇宙魔方,獲得了藍(lán)色的空間寶石……)之類的句子都被刪除了。

此外,作為spaCy數(shù)據(jù)處理步驟的一部分,“I”(我)、“you”(你)、“an”(一個)這類被標(biāo)記為停止詞(常用的單詞,多為冠詞、介詞、副詞或連詞)的術(shù)語被將不做處理。同時,實(shí)驗過程中只使用單詞的標(biāo)準(zhǔn)形式,也就是詞根。舉例說明,動詞“talk”、“talked”和“talking”是同一個詞“talk”(說話)的不同形式,所以這些詞的詞根就是“talk”。

要在spaCy中處理一段文本,首先需要加載語言模型,然后在文本語料庫上調(diào)用模型進(jìn)行文本處理。結(jié)果會輸出一個涵蓋所有已處理文本的Doc文件。

importspacy     # load a medium-sized language model     nlp = spacy.load("en_core_web_md")     with open('cleaned-script.txt', 'r') asfile:        text = file.read()        doc = nlp(text)

在spaCy中創(chuàng)建Doc文件

然后就可以獲得一個經(jīng)過處理、有效信息占比極高的語料庫。緊接著就可以開始實(shí)驗了!

整部電影中使用最頻繁的前十個動詞、名詞、副詞和形容詞

是否可能僅通過了解出現(xiàn)最頻繁的動詞就推斷出電影的整體走向和情節(jié)呢?下文的圖表證明了這一觀點(diǎn)。

NLP有什么用

“I know” (我了解……)、“you think” (你覺得……)是最常見的短語。

“know” (了解)、“go” (去)、 “come”(來)、“get” (獲得)、“think”(思考)、“tell” (告訴)、“kill”  (謀殺)、“need” (需要)、“stop” (制止)、和“want” (想要)  。從中能夠推斷出什么?介于這部電影于2018年上映,相信大部分觀眾都已經(jīng)知道它講述了一個什么樣的故事:根據(jù)這些動詞推斷出《復(fù)仇者聯(lián)盟3》是關(guān)于了解、思考和調(diào)查如何去阻止某物或某人。

通過以下代碼就能統(tǒng)計各個動詞出現(xiàn)次數(shù):

importspacy #load a medium-sized language model nlp= spacy.load("en_core_web_md")  withopen('cleaned-script.txt', 'r') as file:     text = file.read()   doc= nlp(text) #map with frequency count pos_count= {} fortoken in doc:     # ignore stop words     if token.is_stop:         continue     # pos should be one of these:     # 'VERB', 'NOUN', 'ADJ' or 'ADV'     if token.pos_ == 'VERB':         if token.lemma_ in pos_count:             pos_count[token.lemma_] += 1         else:             pos_count[token.lemma_] = 1 print("top10 VERBs {}".format(sorted(pos_count.items(), key=lambda kv: kv[1],reverse=True)[:10]))

那么描述動詞的詞——副詞也會有同樣的實(shí)驗效果嗎?

NLP有什么用

“I seriously don’t know how you fit your head into that helmet.”  (我真不知道那個頭盔怎么塞得進(jìn)你的腦袋。)——奇異博士。

對于一部關(guān)于阻止紫薯精毀滅半個宇宙的電影來說,臺詞中有很多類似“right”(沒錯)、“exactly”(就是這樣)、“better”(更好地)這種具有積極意向的副詞。

所以,知道了電影中的動作和動作描述,現(xiàn)在是時候看看名詞了。

NLP有什么用

“You will pay for his life with yours.Thanos willhave that stone.”  (這將是以命換命,滅霸總會得到那塊寶石。)——暗夜比鄰星

結(jié)果顯示,“stones”(寶石)不出意料地出現(xiàn)次數(shù)最多,畢竟整部電影都在圍繞它們發(fā)展。出現(xiàn)次數(shù)排第二的是滅霸想要摧毀的“l(fā)ife”(生命),接著是復(fù)仇者們沒有多少的“time”(時間)(注意:出現(xiàn)次數(shù)較多也可能是因為電影中多次提到了“theTime  Stone”——時間寶石)。

在進(jìn)入下一個實(shí)驗項目之間,探究一下形容詞或描述名詞的單詞。與副詞的情況類似,這里也有“good”(好的)和“right”(對的)等表達(dá)積極意義的詞匯,以及“okay”(沒問題)和“sure”(當(dāng)然)等表示肯定的詞匯。

NLP有什么用

“I'm sorry, little one.” (對不起,小家伙)——滅霸

特定角色使用最多的動詞和名詞

前面的圖片列舉了電影中最常見的動詞和名詞。雖然這些結(jié)果讓我們對電影的整體感覺和情節(jié)有了一定的了解,但它并沒有過多地講述各個角色的個人經(jīng)歷。因此,在特定角色的個人臺詞中,通過使用前面相同的程序,找到了出現(xiàn)次數(shù)前十的動詞和名詞。

由于電影中有很多角色,所以本實(shí)驗中只選擇了一些臺詞數(shù)量較多的角色。這些角色分別是鋼鐵俠、奇異博士、卡魔拉、雷神、火箭浣熊、星爵、烏木喉和滅霸。對不起,隊長沒有入選。

下圖展示了這些角色使用次數(shù)最多的10個名詞。

NLP有什么用

星爵到底為什么這么頻繁地叫德拉克斯?

意料之外的是,大多數(shù)情況下,親愛的英雄們最常提及的名詞都是同伴的名字。例如,鋼鐵俠提及“孩子”(指蜘蛛俠)9次,火箭浣熊叫了奎爾(星爵)3次,而星爵叫了(其實(shí)是大吼)德拉克斯7次。

通過進(jìn)一步的觀察,可以推斷出每個角色心中最重要的東西。拿鋼鐵俠的情況舉例,統(tǒng)計數(shù)據(jù)表明“地球”對他來說十分重要??Ю那闆r也很相似,她總是念叨著“生命”、“宇宙”和“星球”這些涵義更廣闊的實(shí)體,并為之付出了自己的生命。奇異博士反復(fù)提及他與其余英雄不甚相同的目標(biāo)——保護(hù)時間寶石。還有雷神,由于他和滅霸之間的國仇家恨,他提及滅霸的名字多達(dá)8次,當(dāng)然還少不了新的“干脆面”好友——長得像只“兔子”的火箭浣熊。一張圖的數(shù)據(jù)表明滅霸不斷念叨著要集齊所有寶石,并且多次呼喚他的女兒。

名詞表達(dá)意義,但動詞可能無法像名詞這樣鮮明地表達(dá)角色的特征。在下面的圖片中你會看到,動詞的表達(dá)能力相比名詞的來說產(chǎn)生的效果甚微。像“know”(了解)、“want”(想要)和“get”(獲得)這樣缺乏特征性的普遍被使用的單詞出現(xiàn)的頻數(shù)都很高。然而,滅霸的頭號粉絲——烏木喉可能擁有整個語料庫中最獨(dú)特的動詞。烏木喉就像一個忠仆:除了想方設(shè)法獲取時間寶石,他主要從事的工作就是用“聆聽”、“感到榮幸”等詞鼓吹他主子的使命。嘖嘖,真諂媚。

NLP有什么用

“Hear me, and rejoice. You have had the privilege of being saved by the Great  Titan…”(跪下聆聽并感到榮幸吧!你有幸被最偉大的救世主拯救……)——烏木喉

末尾來個彩蛋(大霧):格魯特說得最多的是——

NLP有什么用

“I am Groot.”(我是格魯特。)

命名實(shí)體

到目前為止,我們已經(jīng)完成了全篇電影、各位英雄和反派最常用的動詞、名詞、副詞和形容詞的探索。然而,為了充分理解一直在研究的所有詞,需要加入一些上下文,即命名實(shí)體,進(jìn)行研究。

根據(jù)有關(guān)spaCy的網(wǎng)頁說明,命名實(shí)體是“指定名稱的實(shí)際對象——例如,一個人、一個國家、一個產(chǎn)品或一本書的標(biāo)題?!彼?,了解這些實(shí)體就意味著了解角色在說些什么。在spaCy程序源庫中,實(shí)體都有一個預(yù)測的標(biāo)簽,該標(biāo)簽將實(shí)體分成人、產(chǎn)品、藝術(shù)詞匯等等類型(https://spacy.io/api/annotation#named-entities),從而為后續(xù)實(shí)驗提供額外的粒度級別,有助于對實(shí)體進(jìn)行進(jìn)一步分類。但是,為了簡化過程,本次實(shí)驗中將使用實(shí)體本身而不是實(shí)體分類。

這些是出現(xiàn)次數(shù)排名前30的實(shí)體。

NLP有什么用

“MATEFAYA HU”(必勝)是瓦坎達(dá)賈巴里部落戰(zhàn)士戰(zhàn)斗前的口號。

首先,考慮到整部電影都是關(guān)于滅霸的,所以滅霸出現(xiàn)次數(shù)最多是情理之中。緊隨其后的是他的女兒、影片的核心人物之一——卡魔拉。然后在第三位的是格魯特(不需要解釋了吧),緊隨其后的是鋼鐵俠和其他復(fù)仇者,以及一些地點(diǎn),如紐約,阿斯加德和瓦坎達(dá)(瓦坎達(dá)萬歲)。除了英雄名字和地點(diǎn)之外,“六顆寶石”(“six  Infnity Stones”)的“六”、時間寶石(the Time Stone)和靈魂寶石(theSoul  Stone)分別出現(xiàn)在第14、15和16位。意料之外的是,將滅霸吸引到地球來的心靈寶石不在前30名之列。

可以通過以下代碼讀取Doc文件中各個單詞的實(shí)物標(biāo)簽‘ents’:

importspacy    # load a medium-sized language model    nlp = spacy.load("en_core_web_md")    with open('cleaned-script.txt', 'r') as file:       text = file.read()       doc = nlp(text)    # create an entity frequency map    entities = {}    # named entities    for ent in doc.ents:        #Print the entity text and its label        ifent.text in entities:           entities[ent.text] += 1       else:           entities[ent.text] = 1          print("top entities{}".format(sorted(entities.items(),         key=lambda kv: kv[1], reverse=True)[:30]))

臺詞對白間的相似性

當(dāng)討論每個角色最常用動詞時,我們意識到他們使用的動詞都非常相似,表達(dá)出了相同的感覺,而這與分析名詞得到的結(jié)論不甚相同。像“go”(去)、“come”(來)這樣的詞語,營造出角色們想要去或抵達(dá)某個特定地方的感覺和趨向;而像“kill”(謀殺)和“stop”(制止)這樣的動詞暗示著,確實(shí)存在一個巨大的威脅必須得到阻止。

考慮到這個結(jié)果,為了繼續(xù)研究相似性,實(shí)驗提出計算分?jǐn)?shù)衡量各個角色的臺詞對白的相似度。

NLP中相似度的定義為,描述兩段文本的結(jié)構(gòu)或句法涵義有相關(guān)性的度量——通常,相似度得分介于0到1之間,0表示完全不同,1表示完全相似(或者兩段文本完全相同)。從技術(shù)上講,相似性是通過測量單詞向量(單詞的多維表征)之間的距離來計算的。如果你有興趣進(jìn)一步了解單詞向量的相關(guān)內(nèi)容,建議搜索了解一下生成單詞向量的常用算法——word2vec。下圖就是各個角色臺詞對白的相似性矩陣。

NLP有什么用

這個圖再次證明,烏木喉真的是最獨(dú)特的角色。

這個結(jié)果可謂是“驚不驚喜!意不意外!”了。一方面,由于這部電影只有一個主要情節(jié),所以可以理解,對話中的關(guān)聯(lián)性導(dǎo)致所有的角色的臺詞對白相似性都接近于1。然而,沒想到的是,他們的分?jǐn)?shù)過于太接近了。實(shí)驗的研究期望是,至少滅霸與其他英雄的臺詞對白相似性較低。畢竟對于滅霸這樣一個反派來說,其他英雄都是在一個勁的討論著怎么阻止他啊??上部少R地是,蜘蛛俠的臺詞相似性得分變化起伏不定;畢竟,他只是個在上學(xué)路上被叫來拯救世界的小孩兒,所以有這樣的結(jié)果也不奇怪。

下面代碼演示了如何在spaCy環(huán)境下計算兩段臺詞對白之間的相似性:

# for the full example onhow I obtained all the similarities    # see the full code at:https://github.com/juandes/infinity-war-spacy/blob/master/script.py    import spacy    # load a medium-sized language model    nlp = spacy.load("en_core_web_md")    with open('tony-script.txt', 'r') as file:        tony_lines =file.read()     with open('thor-script.txt', 'r') as file:        thor_lines = file.read()    tony_doc = nlp(tony_lines)    thor_doc = nlp(thor_lines)    similarity_score = tony_doc.similarity(thor_doc)    print("Similarity between Tony's and Thor's docs is{}".format(similarity_score))

感謝各位的閱讀,以上就是“NLP有什么用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對NLP有什么用這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

nlp
AI