用word2vec解读延禧攻略人物关系
来源 | 无界社区mixlab
编辑 | 安可
【磐创AI导读】:大家最近一定被大火的清宫剧《延禧攻略》刷屏了吧~剧中的男主乾隆皇帝因为见一个爱一个被大家称为大猪蹄子,作为单纯的程序员的我们,该怎么理清剧中错综复杂的人物关系呢?~通过本文的学习,我们就可以简单介绍利用word2vec解读延禧攻略人物关系啦,通过技术分析,让我们看看乾小四究竟是不是大猪蹄子吧!对了,还不了解什么是word2vec?我们之前有介绍过哦~详情点击这里:基于word2vec训练词向量。想要学习更多的机器学习、深度学习知识,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。
阅读难度:★★☆☆☆
技能要求:机器学习、python、分词、数据可视化
字数:1500字
阅读时长:6分钟
本文结合最近热播的电视剧《延禧攻略》,对其人物的关系在数据上进行解读。通过从网上收集相关的小说、剧本、人物介绍等,经过word2vec深度学习模型的训练,构建人物关系图谱,并通过可视化的方式进行展示。
1
图谱
先看看全剧人物的关系图谱:
节点越大、越靠近中心,在剧中与其他角色的关系越错综复杂。
我们把图放大,观察下:
可以发现:
璎珞、尔晴、吉祥、明玉、锦绣、傅恒
这6位人物是全剧中推动剧情发展的关键所在。从这个角度看《延禧攻略》是一部关于多名宫女与一位侍卫的故事。
这个图谱还可以看各个人物与其他人物的关联度
再看下乾隆与其他人的关系:
当然我们也可以通过代码查询:
图谱体验地址:
https://shadowcz007.github.io/text2kg/
上面的图谱是怎么得出的呢?
2
构建思路
需要的数据:
延禧攻略小说
延禧攻略剧本
延禧攻略人物名称
算法:
word2vec
前端:
echart
开发环境:
python
在处理数据的时候,我们需要把数据里的标点符号,以及一些没用的词语去掉(例如第xx章之类的)。配合结巴分词,做一轮分词后,再把一些字符长度为1的去掉(例如各种语气词、数量词等)。
最后处理成:
数据准备好之后。主要使用gensim进行word2vec的训练。gensim是一个Python NLP的包,封装了google的C语言版的word2vec。安装gensim是很容易的,使用”pip install gensim”即可。
3
word2vec
word2vec,也叫word embeddings,中文名“词向量”,作用就是将自然语言中的词语转为计算机可以理解的稠密向量。词语转化为向量的关系如下图所示:
word2vec可以学习到词语之间的关系,原理是在文本中相关的词总是大概率的同时出现。再看下图:
从图上看,word2vec可以学习到各种有趣的关系。例如,单词“king”经常和“quee”出现在一起,而“man”经常和“woman”出现在一起。
通过word2vec分析,我们可以发现代表“king”的矢量可以跟代表“queen”,“man”和“woman”的矢量有如下简单的关系:
king=queen-woman+man
通过词到向量的转化,我们可以基于向量进行各种运算。
除了应用于语言学里,还可以应用到化学里,例如Atom2Vec,它能够从不同元素组合而成的化合物名称(如NaCl, KCl, H2O )来学习区分不同的原子,从而发现一些可能的新化合物。这个程序借鉴了自然语言处理中的简单概念:
一个词语的特性是可以从它周围出现的其他单词来得出的;对应的把化学元素根据它们所处的化学环境进行聚类得出相关的化学元素。
从这些数据的分析中,人工智能程序可以发现钾和钠有着类似的性质,因为它们都可以跟卤素结合成化合物,“就像king和queen很类似一样,钾和钠也是类似的。”
训练后的模型,可以输入不同原子组成的化合物进行各种向量运算,帮助我们发现新的化合物。
4
gensim word2vec指南
简单一行代码就可以开始训练模型:
model = Word2Vec(line_sent, size=100,window=5,min_count=1)
训练好之后,可以查询找出某一个词向量最相近的词集合:
model.wv.similar_by_word('璎珞', topn =10)
还可以看两个词向量的相近程度,这里给出了剧中两组人的相似程度:
print(model.wv.similarity('璎珞', '尔晴')) print(model.wv.similarity('皇后', '弘历'))
相似度:
0.9175463897110617 0.8206695311318175
又或者找出不同类的词,这里给出了人物分类:
model.wv.doesnt_match("璎珞 皇后 弘历 傅恒 尔晴".split())
结果: 弘历
从结果来看,弘历是皇帝,当然跟这些人都不是一类的。
再看一组:
model.wv.doesnt_match("璎珞 皇后 傅恒 尔晴".split())
结果: 傅恒
傅恒是男的,也跟这些人不同类。
以上为全文内容,word2vec还有其他好玩的应用,例如我们可以分析每个人物的性格,找出描述人物的性格词语;应用于设计语言的挖掘,我们可以提取出某种设计风格的特点;应用于文章写作,我们可以分析某种文章的风格,让机器协作我们进行写作创作;等等。
你也许还想看:
● 荐号 | 高质量公众号图鉴(汇集AI、python、C++、Java等)
欢迎扫码关注:
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2018/08/25/0987ee81b1/