自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

NLP揭秘:除了寶石,女兒也是滅霸的真愛(大霧)

開發(fā) 前端 開發(fā)工具
在Python、NLP和spaCy的幫助下,本文通過研究各個(gè)人物的臺(tái)詞,探索了英雄和反派進(jìn)行表達(dá)和交流的方式。

《復(fù)仇者聯(lián)盟4:終局之戰(zhàn)》仍在熱映中。在看到大結(jié)局的同時(shí),本文將帶你通過數(shù)據(jù)科普的眼光來回顧《復(fù)仇者聯(lián)盟3》:看看這群世界上英雄們愛說的詞匯是哪些?

這次回顧旅程將從一個(gè)新的角度出發(fā)——自然語言處理。

本文通過使用spaCy(用于處理和理解大量文本的NLPPython 開源程序庫)對(duì)復(fù)聯(lián)3的劇本進(jìn)行分析,并研究以下幾個(gè)項(xiàng)目:

  • 整部電影中使用最頻繁的前十個(gè)動(dòng)詞、名詞、副詞和形容詞。
  • 特定角色使用最多的動(dòng)詞和名詞。
  • 電影中提及次數(shù)排位前30位的命名實(shí)體(namedentities)。
  • 臺(tái)詞對(duì)白的相似性,例如雷神的臺(tái)詞對(duì)白和滅霸臺(tái)詞對(duì)白的相似性。

看見代碼和專業(yè)詞匯就想睡?今天你可以放心了!為讀者著想,本文中使用的詞匯和術(shù)語都是非技術(shù)性的,所以就算是你沒有接觸過NLP、AI、機(jī)器學(xué)習(xí)或者諸如*insert buzzword here*之類的代碼,你都能理解并掌握本文想要傳達(dá)的信息哦!所以,不看代碼也不會(huì)影響你對(duì)其余內(nèi)容的理解。

[[265098]]

滅霸 圖片來源:Marvel

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

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

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

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

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

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

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

整部電影中使用最頻繁的前十個(gè)動(dòng)詞、名詞、副詞和形容詞

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

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

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

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

  1. importspacy 
  2. #load a medium-sized language model 
  3. nlpspacy.load("en_core_web_md")  
  4. withopen('cleaned-script.txt', 'r') as file: 
  5.     text = file.read()   
  6. docnlp(text) 
  7. #map with frequency count 
  8. pos_count= {} 
  9. fortoken in doc: 
  10.     # ignore stop words 
  11.     if token.is_stop: 
  12.         continue 
  13.     # pos should be one of these: 
  14.     # 'VERB', 'NOUN', 'ADJ' or 'ADV' 
  15.     if token.pos_ == 'VERB': 
  16.         if token.lemma_ in pos_count: 
  17.             pos_count[token.lemma_] += 1 
  18.         else: 
  19.             pos_count[token.lemma_] = 1 
  20. print("top10 VERBs {}".format(sorted(pos_count.items(), key=lambda kv: kv[1],reverse=True)[:10])) 

那么描述動(dòng)詞的詞——副詞也會(huì)有同樣的實(shí)驗(yàn)效果嗎?

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

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

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

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

結(jié)果顯示,“stones”(寶石)不出意料地出現(xiàn)次數(shù)最多,畢竟整部電影都在圍繞它們發(fā)展。出現(xiàn)次數(shù)排第二的是滅霸想要摧毀的“life”(生命),接著是復(fù)仇者們沒有多少的“time”(時(shí)間)(注意:出現(xiàn)次數(shù)較多也可能是因?yàn)殡娪爸卸啻翁岬搅?ldquo;theTime Stone”——時(shí)間寶石)。

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

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

特定角色使用最多的動(dòng)詞和名詞

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

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

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

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

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

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

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

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

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

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

命名實(shí)體

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

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

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

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

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

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

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

臺(tái)詞對(duì)白間的相似性

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

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

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

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

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

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

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

結(jié)論

在電影《復(fù)仇者聯(lián)盟3》中,一群超級(jí)英雄展開了阻止滅霸消滅宇宙半數(shù)生命的旅程。在整部電影中,通過英雄們的表達(dá)方式,觀眾從字里行間中逐漸了解到這些英雄拯救世界的動(dòng)機(jī)和動(dòng)力。

在Python、NLP和spaCy的幫助下,本文通過研究各個(gè)人物的臺(tái)詞,探索了英雄和反派進(jìn)行表達(dá)和交流的方式。通過觀察他們最常用的動(dòng)詞、名詞和語言特點(diǎn),我們了解、確認(rèn)并重溫了鋼鐵俠對(duì)地球的忠誠、奇異博士保護(hù)時(shí)間寶石的誓言、雷神對(duì)復(fù)仇的渴望以及滅霸完成自己野心的堅(jiān)決。

 

責(zé)任編輯:趙寧寧 來源: 讀芯術(shù)
相關(guān)推薦

2020-06-03 14:43:26

Java虛擬機(jī)JVM

2019-10-08 14:40:53

Java線程

2024-12-09 09:50:00

數(shù)據(jù)模型

2021-12-24 10:52:03

微軟操作系統(tǒng)Windows

2020-01-17 11:37:05

WindowsWindows 7Windows XP

2017-07-27 10:36:20

銀河護(hù)衛(wèi)隊(duì) OptiPlex家族

2017-02-20 13:54:04

戴爾

2019-10-08 15:48:57

程序員技能開發(fā)者

2020-11-03 10:30:30

GitHub命令腳本

2019-10-09 09:48:56

Python算法數(shù)據(jù)分析

2010-07-30 11:22:09

OracleVirtualBox

2010-05-13 09:07:13

JRuby

2022-08-29 14:30:55

學(xué)術(shù)Nature

2020-10-19 07:26:23

APP啟動(dòng)面試官

2022-10-31 15:58:10

2024-07-23 09:53:07

2013-08-06 10:29:17

大數(shù)據(jù)云計(jì)算

2019-08-19 08:50:56

2020-04-27 13:22:30

Kubernetes架構(gòu)Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)