先来看一看结果,发现:

1.贾宝玉和袭人的关系最近。

2.薛宝钗和自己的妈妈关系最近。

3.贾宝玉和林黛玉逼格比较统一,薛宝钗属于独树一帜的逼格调性。

4.大观园中可以看到邢岫烟经常出没...

还有更多秘密等你自己上手去训练模型并发现...

开始写代码!

1from tqdm import tqdm
2#tqdm用来观察进度条,非必须
3import jieba
4import sys
5import os

声明一下,这里自定义了两个词典分别命名为“renming.txt”和“diming.txt”,分别写入了红楼梦中常见人名地名,这里展示一下格式,有需要的可以添加我微信dicey0310

继续写代码!

 1os.chdir("C://users//dicey//desktop")
2# 调用 jieba分词module后,添加单词本(人名等):
3jieba.load_userdict("renming.txt")
4jieba.load_userdict("diming.txt")
5
6#这里是在百度上下载的红楼梦完整版的txt
7filename = 'HongLouMeng.txt'
8text_lines = []
9with open(filename,encoding='utf-8',errors='ignore') as f:
10    for line in tqdm(f):
11        text_lines.append(line)
12print('总共读入%d行文字'% (len(text_lines)))
13
14#检查一下读入文字的正确性
15print(text_lines[17])

把红楼梦的txt版(utf-8编码)一行一行读进来,用tqdm辅助显示进度条:

1data_lines = []
2
3## 分词并添加进列表:
4for line in tqdm(text_lines):
5    one_line = [' '.join(jieba.cut(line, cut_all=False))][0].split(' ')
6    data_lines.append(one_line)

开始数据预处理,去除了标点符号、数字、停用词:

1import re
2# 标点符号 (punctuation)
3punct = set(u'''.&#:!),.:;?]}¢'"、。〉》」』】〕〗〞︰︱︳﹐、﹒﹔﹕﹖﹗﹚﹜﹞! .&# &# ),.*:;O?|}︴︶︸︺︼︾﹀﹂﹄﹏、~¢々‖•·ˇˉ―--′’”([{£¥'"‵〈《「『【〔〖([{£¥〝︵︷︹︻︽︿﹁﹃﹙﹛﹝({“‘-—_…0123456789''')
4isNumber = re.compile(r'\d+.*')
5with open('stopwords.txt',encoding='utf-8',errors='ignore') as f:
6    stopwords = f.read()
7filter_words = [w for w in data_words if (w not in punct)
8                and (not isNumber.search(w.lower()))and(w not in stopwords)]

引入gensim库,并使用Word2Vec模型构造内部字典树,和训练神经模型:

1import gensim
2model = gensim.models.Word2Vec(iter=1) 
3# an empty model, no training yet
4model.build_vocab(data_lines) #传入语料,构建内部字典树
5model.train(data_lines, total_examples = len(data_lines), epochs = 100) 
6#开始训练神经模型100次
7#epochs表示训练次数

注意,上面这块代码也可换做下面这样的简写法:

1import gensim
2model = gensim.models.Word2Vec(data_lines,iter=10)  
3'''
4直接把data_lines喂给World2Vec模型,
510代表会调用句子迭代器运行11次(一般来说,会运行 iter+1 次,默认情况下  iter=5)。
6第一次运行负责收集单词和它们的出现频率,从而构造一个内部字典树。第二次以及以后的运行负责训练神经模型(train)。
7'''

开始读入我们关心的人名、地名,并打印结果:

 1test_words = ['林黛玉','黛玉','贾宝玉','宝玉','薛宝钗','宝钗','袭人','大观园','潇湘馆','蘅芜苑','妙玉','栊翠庵']
2#开始读入
3neighbors = []
4for test_word in test_words:
5    neighbors.append(model.most_similar(test_word))
6#开始打印结果
7for i in range(len(neighbors)):
8    str = ' '.join([x[0] for x in neighbors[i]])
9    print('%s:' % test_words[i])
10    print('\t%s\n' % (str))

这里展示部分结果:(每个人名、地名之后跟的是与自己关系最密切/在100维词向量中最相近的名词)

最后我们看一下“黛玉”的坐标(100维),以及“黛玉”和“林黛玉”之间的相似度。

1print(model["黛玉"])
2print(model.similarity("黛玉",'林黛玉'))

注意:相似度不为1(相似度等于1时代表词向量在每个维度上都完全相等)。是因为叫“林黛玉”时常为正式场合,直呼“黛玉”时一般属于日常情况,相信各位懂得~

用深度学习模型Word2Vec探索《红楼梦》人物关系的更多相关文章

  1. 红楼梦人物关系图,一代大师成绝响,下回分解待何人,kindle读书摘要

      人物关系图: https://www.cnblogs.com/images/cnblogs_com/elesos/1120632/o_2033091006.jpg 红楼梦 (古典名著普及文库) ( ...

  2. PyTorch如何构建深度学习模型?

    简介 每过一段时间,就会有一个深度学习库被开发,这些深度学习库往往可以改变深度学习领域的景观.Pytorch就是这样一个库. 在过去的一段时间里,我研究了Pytorch,我惊叹于它的操作简易.Pyto ...

  3. Apple的Core ML3简介——为iPhone构建深度学习模型(附代码)

    概述 Apple的Core ML 3是一个为开发人员和程序员设计的工具,帮助程序员进入人工智能生态 你可以使用Core ML 3为iPhone构建机器学习和深度学习模型 在本文中,我们将为iPhone ...

  4. AI佳作解读系列(一)——深度学习模型训练痛点及解决方法

    1 模型训练基本步骤 进入了AI领域,学习了手写字识别等几个demo后,就会发现深度学习模型训练是十分关键和有挑战性的.选定了网络结构后,深度学习训练过程基本大同小异,一般分为如下几个步骤 定义算法公 ...

  5. 『高性能模型』Roofline Model与深度学习模型的性能分析

    转载自知乎:Roofline Model与深度学习模型的性能分析 在真实世界中,任何模型(例如 VGG / MobileNet 等)都必须依赖于具体的计算平台(例如CPU / GPU / ASIC 等 ...

  6. 深度学习模型stacking模型融合python代码,看了你就会使

    话不多说,直接上代码 def stacking_first(train, train_y, test): savepath = './stack_op{}_dt{}_tfidf{}/'.format( ...

  7. 深度学习模型融合stacking

    当你的深度学习模型变得很多时,选一个确定的模型也是一个头痛的问题.或者你可以把他们都用起来,就进行模型融合.我主要使用stacking和blend方法.先把代码贴出来,大家可以看一下. import ...

  8. 利用 TFLearn 快速搭建经典深度学习模型

      利用 TFLearn 快速搭建经典深度学习模型 使用 TensorFlow 一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章<Tenso ...

  9. Roofline Model与深度学习模型的性能分析

    原文链接: https://zhuanlan.zhihu.com/p/34204282 最近在不同的计算平台上验证几种经典深度学习模型的训练和预测性能时,经常遇到模型的实际测试性能表现和自己计算出的复 ...

  10. 在NLP中深度学习模型何时需要树形结构?

    在NLP中深度学习模型何时需要树形结构? 前段时间阅读了Jiwei Li等人[1]在EMNLP2015上发表的论文<When Are Tree Structures Necessary for ...

随机推荐

  1. 2022-05-27内部群每日三题-清辉PMP

    1.一个组织正在开始一个大型的.首个这种类型的项目.项目经理与相关方召开会议,以识别存在的项目问题.项目经理应该使用什么工具和技术来改进会议的结果? A.头脑风暴.核对单和访谈 B.头脑风暴.因果图和 ...

  2. 2022-05-20内部群每日三题-清辉PMP

    1.一位团队成员通知项目经理有一个问题可能会破坏项目.项目经理将该问题添加到问题日志中,并要求团队找到解决方案. 项目经理下一步应该怎么做? A.更新风险登记册 B.修订项目管理计划 C.确定适当的风 ...

  3. RabbitMQ的安装(linux版)

    原文地址:https://blog.csdn.net/jiguquan3839/article/details/91346261 注意:在web管理页面登录提示"User can only ...

  4. div里元素横向排列 居中对齐

      <div>             <img src="//s.weituibao.com/1582958061265/mlogo.png" alt=&quo ...

  5. .net core解决时间格式转换问题或日期取当前时间

    一.时间格式转换 1.新建一个格式化类DatetimeJsonConverter,继承自JsonConverter,然后重写里面的方法 public class DatetimeJsonConvert ...

  6. Pytorch实战学习(四):加载数据集

    <PyTorch深度学习实践>完结合集_哔哩哔哩_bilibili Dataset & Dataloader 1.Dataset & Dataloader作用 ※Datas ...

  7. 幻方(4n+2暂时看不懂)

    奇数阶幻方 Siamese方法(Kraitchik 1942年,pp. 148-149)是构造奇数阶幻方的一种方法,说明如下: 把放置在第一行的中间. 顺序将等数放在右上方格中. 当右上方格出界的时候 ...

  8. 并发多线程学习(六)Java线程间的通信

    合理的使用Java多线程可以更好地利用服务器资源.一般来讲,线程内部有自己私有的线程上下文,互不干扰.但是当我们需要多个线程之间相互协作的时候,就需要我们掌握Java线程的通信方式.本文将介绍Java ...

  9. 网页端微信小程序客服

    https://mpkf.weixin.qq.com/ 可以设置自动回复

  10. python3.10.0字符串基础

    字符串支持 索引 (下标访问),第一个字符的索引是 0.单字符没有专用的类型,就是长度为一的字符串: >>> word = 'Python' >>> word[0] ...