多乐新闻-让你每一天充满快乐 多乐新闻-让你每一天充满快乐

馅饼,上海科技馆,高清播放器-多乐新闻-让你每一天充满快乐

全文共3917字,估计学习时长10分钟或更长


《复仇者联盟4:结局之战》仍在热映中。在看到大结局的一同,本文将带你经过数据科普的眼光来回忆《复仇者联盟3:无限战役》:看看这群国际上最强的超级英豪们独爱说的词汇是哪些?

这次回忆旅程将从一个新的视点动身——自然言语处理。

本文经过运用spaCy(用于处理和了解许多文本的NLPPython 开源程序库)对复联3的剧本进行剖析,并研讨以下几个项目:

· 整部电影中运用最频频的前十个动词、名词、副词和形容词。

· 特定人物运用最多的动词和名词。

· 电影中提及次数排位前30位的命名实体(namedentities)。

· 各人物之间台词对白的类似性,例如雷神的台词对白和灭霸台词对白的类似性。

看见代码和专业词汇就想睡?今日你能够定心了!为读者考虑,本文中运用的词汇和术语都是非技术性的,所以就算是你没有触摸过NLP、AI、机器学习或许比如*insert buzzword here*之类的代码,你都能了解并把握本文想要传达的信息哦!所以,不看代码也不会影响你对其他内容的了解。


灭霸 图片来历:Marvel


处理数据


试验中运用的数据或文本语料库(一般在NLP中称为语料库)是电影脚本。可是,在运用这些数据之前,需求做一下挑选。因为,心思描绘、动作描绘或许场景描绘的文本,以及每句台词前的人物名(仅指示说话人,不作为文本剖析的语料库)都不是本次研讨的方针。所以,比如“Thanoscrushes the Tesseract, revealing the blue Space Stone…” (灭霸捏碎了国际魔方,取得了蓝色的空间宝石……)之类的语句都被删除了。

此外,作为spaCy数据处理进程的一部分,“I”(我)、“you”(你)、“an”(一个)这类被标记为中止词(常用的单词,多为冠词、介词、副词或连词)的术语被将不做处理。一同,试验进程中只运用单词的规范方法,也便是词根。举例阐明,动词“talk”、“talked”和“talking”是同一个词“talk”(说话)的不同方法,所以这些词的词根便是“talk”。

要在spaCy中处理一段文本,首要需求加载言语模型,然后在文本语料库上调用模型进行文本处理。成果会输出一个包括一切已处理文本的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中创立Doc文件


然后就能够取得一个经过处理、有用信息占比极高的语料库。紧接着就能够开端试验了!

整部电影中运用最频频的前十个动词、名词、副词和形容词

是否或许仅经过了解呈现最频频的动词就推断出电影的全体走向和情节呢?下文的图表证明了这一观念。


“I know” (我了解……)、“you think” (你觉得……)是最常见的短语。


“know” (了解)、“go” (去)、 “come”(来)、“get” (取得)、“think”(考虑)、“tell” (通知)、“kill” (谋杀)、“need” (需求)、“stop” (阻挠)、和“want” (想要) 。从中能够推断出什么?介于这部电影于2018年上映,信任大部分观众都现已知道它叙述了一个什么样的故事:依据这些动词推断出《复仇者联盟3:无限战役》是关于了解、考虑和查询怎样去阻挠某物或或人。

经过以下代码就能核算各个动词呈现次数:

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]))


那么描绘动词的词——副词也会有相同的试验作用吗?



“I seriously don’t know how you fit your head into that helmet.” (我真不知道那个头盔怎样塞得进你的脑袋。)——奇特博士。

关于一部关于阻挠紫薯精消除半个国际的电影来说,台词中有许多类似“right”(没错)、“exactly”(便是这样)、“better”(更好地)这种具有活跃意向的副词。

所以,知道了电影中的动作和动作描绘,现在是时分看看名词了。



“You will pay for his life with yours.Thanos willhave that stone.” (这将是以命换命,灭霸总会得到那块宝石。)——暗夜比邻星

成果显现,“stones”(宝石)不出预料地呈现次数最多,究竟整部电影都在环绕它们开展。呈现次数排第二的是灭霸想要炸毁的“life”(生命),接着是复仇者们没有多少的“time”(时刻)(留意:呈现次数较多也或许是因为电影中屡次提到了“theTime Stone”——时刻宝石)。

最终,在进入下一个试验项目之间,探求一下形容词或描绘名词的单词。与副词的状况类似,这儿也有“good”(好的)和“right”(对的)等表达活跃含义的词汇,以及“okay”(没问题)和“sure”(当然)等标明必定的词汇。



“I'm sorry, little one.” (对不住,小家伙)——灭霸

特定人物运用最多的动词和名词


前面的图片列举了电影中最常见的动词和名词。尽管这些成果让咱们对电影的全体感觉和情节有了必定的了解,但它并没有过多地叙述各个人物的个人经历。因而,在特定人物的个人台词中,经过运用前面相同的程序,找到了呈现次数前十的动词和名词。

因为电影中有许多人物,所以本试验中只挑选了一些台词数量较多的人物。这些人物别离是钢铁侠、奇特博士、卡魔拉、雷神、火箭浣熊、星爵、乌木喉和灭霸。对不住,队长没有当选。

下图展现了这些人物运用次数最多的10个名词。


星爵究竟为什么这么频频地叫德拉克斯?


预料之外的是,大多数状况下,亲爱的英豪们最常提及的名词都是火伴的姓名。例如,钢铁侠提及“孩子”(指蜘蛛侠)9次,火箭浣熊叫了奎尔(星爵)3次,而星爵叫了(其实是大吼)德拉克斯7次。

经过进一步的调查,能够推断出每个人物心中最重要的东西。拿钢铁侠的状况举例,核算数据标明“地球”对他来说十分重要。卡魔拉的状况也很类似,她总是想念着“生命”、“国际”和“星球”这些寓意更宽广的实体,并为之付出了自己的生命。奇特博士重复提及他与其他英豪不甚相同的方针——维护时刻宝石。还有雷神,因为他和灭霸之间的国仇家恨,他提及灭霸的姓名多达8次,当然还少不了新的“爽性面”老友——长得像只“兔子”的火箭浣熊。最终一张图的数据标明灭霸不断想念着要集齐一切无限宝石,而且屡次呼喊他的女儿。

名词极具表达含义,但动词或许无法像名词这样明显地表达人物的特征。鄙人面的图片中你会看到,动词的表达能力比较名词的来说发生的作用甚微。像“know”(了解)、“want”(想要)和“get”(取得)这样缺少特征性的遍及被运用的单词呈现的频数都很高。可是,灭霸的头号粉丝——乌木喉或许具有整个语料库中最共同的动词。乌木喉就像一个忠仆:除了想方设法获取时刻宝石,他首要从事的作业便是用“倾听”、“感到侥幸”等词宣扬他主子的任务。啧啧,真奉承。




“Hear me, and rejoice. You have had the privilege of being saved by the Great Titan…”(跪下倾听并感到侥幸吧!你有幸被最巨大的救世主解救……)——乌木喉

最终来个彩蛋(大雾):格鲁特说得最多的是——


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


命名实体


到目前为止,咱们现已完结了全篇电影、各位英豪和反派最常用的动词、名词、副词和形容词的探究。可是,为了充沛了解一直在研讨的一切词,需求参加一些上下文,即命名实体,进行研讨。

依据有关spaCy的网页阐明,命名实体是“指定称号的实践方针——例如,一个人、一个国家、一个产品或一本书的标题。”所以,了解这些实体就意味着了解人物在说些什么。在spaCy程序源库中,实体都有一个猜测的标签,该标签将实体分成人、产品、艺术词汇等等类型(https://spacy.io/api/annotation#named-entities),从而为后续试验供给额定的粒度等级,有助于对实体进行进一步分类。可是,为了简化进程,本次试验中将运用实体自身而不是实体分类。

这些是呈现次数排名前30的实体。


“MATEFAYA HU”(必胜)是瓦坎达贾巴里部落兵士战役前的标语。


首要,考虑到整部电影都是关于灭霸的,所以灭霸呈现次数最多是情理之中。紧随其后的是他的女儿、影片的核心人物之一——卡魔拉。然后在第三位的是格鲁特(不需求解说了吧),紧随其后的是钢铁侠和其他复仇者,以及一些地址,如纽约,阿斯加德和瓦坎达(瓦坎达万岁)。除了英豪姓名和地址之外,“六颗无限宝石”(“six Infnity Stones”)的“六”、时刻宝石(the Time Stone)和魂灵宝石(theSoul Stone)别离呈现在第14、15和16位。预料之外的是,将灭霸吸引到地球来的心灵宝石不在前30名之列。

能够经过以下代码读取Doc文件中各个单词的什物标签‘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]))


台词对白间的类似性


当评论每个人物最常用动词时,咱们意识到他们运用的动词都十分类似,表达出了相同的感觉,而这与剖析名词得到的定论不甚相同。像“go”(去)、“come”(来)这样的词语,营造出人物们想要去或抵达某个特定当地的感觉和趋向;而像“kill”(谋杀)和“stop”(阻挠)这样的动词暗示着,的确存在一个巨大的要挟有必要得到阻挠。

考虑到这个成果,为了持续研讨类似性,试验提出核算分数衡量各个人物的台词对白的类似度。

NLP中类似度的界说为,描绘两段文本的结构或句法寓意有相关性的衡量——一般,类似度得分介于0到1之间,0标明彻底不同,1标明彻底类似(或许两段文本彻底相同)。从技术上讲,类似性是经过丈量单词向量(单词的多维表征)之间的间隔来核算的。假如你有爱好进一步了解单词向量的相关内容,主张查找了解一下生成单词向量的常用算法——word2vec。下图便是各个人物之间台词对白的类似性矩阵。




这个图再次证明,乌木喉真的是最共同的人物。

这个成果可谓是“惊不惊喜!意不意外!”了。一方面,因为这部电影只要一个首要情节,所以能够了解,对话中的关联性导致一切的人物的台词对白类似性都接近于1。可是,没想到的是,他们的分数过于太接近了。试验的研讨希望是,至少灭霸与其他英豪的台词对白类似性较低。究竟关于灭霸这样一个反派来说,其他英豪都是在一个劲的评论着怎样阻挠他啊。可喜可贺地是,蜘蛛侠的台词类似性得分改变起伏不定;究竟,他仅仅个在上学路上被叫来解救国际的小孩儿,所以有这样的成果也不古怪。

下面代码演示了怎样在spaCy环境下核算两段台词对白之间的类似性:

# 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))


定论


在电影《复仇者联盟3:无限战役》中,一群超级英豪展开了阻挠灭霸消除国际对折生命的旅程。在整部电影中,经过英豪们的表达方法,观众从言外之意中逐步了解到这些英豪解救国际的动机和动力。

在Python、NLP和spaCy的协助下,本文经过研讨各个人物的台词,探究了英豪和反派进行表达和沟通的方法。经过调查他们最常用的动词、名词和言语特点,咱们了解、承认并重温了钢铁侠对地球的忠实、奇特博士维护时刻宝石的誓词、雷神对复仇的巴望以及灭霸完结自己野心的坚决。



留言 点赞 重视

咱们一同共享AI学习与开展的干货

欢迎重视全渠道AI垂类自媒体 “读芯术”

作者:admin 分类:国内时事 浏览:218 评论:0