加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

NLP揭秘:除了宝石,女儿也是灭霸的真爱(大雾)

发布时间:2019-05-15 05:01:29 所属栏目:建站 来源:读芯术
导读:《复仇者联盟4:终局之战》仍在热映中。在看到大结局的同时,本文将带你通过数据科普的眼光来回顾《复仇者联盟3:无限战争》:看看这群世界上最强的超级英雄们最爱说的词汇是哪些? 这次回顾旅程将从一个新的角度出发自然语言处理。 本文通过使用spaCy(用于

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

NLP揭秘:除了宝石,女儿也是灭霸的真爱(大雾)

“MATEFAYA HU”(必胜)是瓦坎达贾巴里部落战士战斗前的口号。

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

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

台词对白间的相似性

当讨论每个角色最常用动词时,我们意识到他们使用的动词都非常相似,表达出了相同的感觉,而这与分析名词得到的结论不甚相同。像“go”(去)、“come”(来)这样的词语,营造出角色们想要去或抵达某个特定地方的感觉和趋向;而像“kill”(谋杀)和“stop”(制止)这样的动词暗示着,确实存在一个巨大的威胁必须得到阻止。

考虑到这个结果,为了继续研究相似性,实验提出计算分数衡量各个角色的台词对白的相似度。

NLP中相似度的定义为,描述两段文本的结构或句法涵义有相关性的度量——通常,相似度得分介于0到1之间,0表示完全不同,1表示完全相似(或者两段文本完全相同)。从技术上讲,相似性是通过测量单词向量(单词的多维表征)之间的距离来计算的。如果你有兴趣进一步了解单词向量的相关内容,建议搜索了解一下生成单词向量的常用算法——word2vec。下图就是各个角色之间台词对白的相似性矩阵。

NLP揭秘:除了宝石,女儿也是灭霸的真爱(大雾)

这个图再次证明,乌木喉真的是最独特的角色。

这个结果可谓是“惊不惊喜!意不意外!”了。一方面,由于这部电影只有一个主要情节,所以可以理解,对话中的关联性导致所有的角色的台词对白相似性都接近于1。然而,没想到的是,他们的分数过于太接近了。实验的研究期望是,至少灭霸与其他英雄的台词对白相似性较低。毕竟对于灭霸这样一个反派来说,其他英雄都是在一个劲的讨论着怎么阻止他啊。可喜可贺地是,蜘蛛侠的台词相似性得分变化起伏不定;毕竟,他只是个在上学路上被叫来拯救世界的小孩儿,所以有这样的结果也不奇怪。

下面代码演示了如何在spaCy环境下计算两段台词对白之间的相似性:

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

结论

在电影《复仇者联盟3:无限战争》中,一群超级英雄展开了阻止灭霸消灭宇宙半数生命的旅程。在整部电影中,通过英雄们的表达方式,观众从字里行间中逐渐了解到这些英雄拯救世界的动机和动力。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读