先来看一看结果,发现:

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. 1839:【05NOIP提高组】谁拿了最多奖学金

    1839:[05NOIP提高组]谁拿了最多奖学金 时间限制: 1000 ms         内存限制: 65536 KB提交数: 9569     通过数: 4431 [题目描述] 某校的惯例是在每 ...

  2. VLC播放器 for Mac OS X

    ​ VLC 是一款自由.开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD.音频 CD.VCD 及各类流媒体协议. https://www.videolan.org/vlc/down ...

  3. 重写Collections集合的排序比较CompareTo方法

    Collections.sort()使用该方法实际是重写Comparator接口的compare方法实现排序: //传入参数list集合,Comparator接口 T:list的元素类型 //如Lis ...

  4. chrome 检查更新时出错:无法启动更新检查(错误代码为 4: 0xA0430817 -- system level)

    Windows系统谷歌浏览器 Chrome 检查更新时出错:无法启动更新检查(错误代码为 4: 0x80070005 -- system level)该怎么办? 这很有可能是 Chrome 更新服务被 ...

  5. C++中map用法详解(转)

    Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本的构造函数:   map<stri ...

  6. 南大ics-pa/PA0过程及感想

    实验教程地址:https://nju-projectn.github.io/ics-pa-gitbook/ics2022/index.html 一.Ubuntu安装 在清华大学镜像站下载了Ubuntu ...

  7. AI口算批改、练习小程序

    一个口算助手小程序,可以拍照批改作业,口算练习,专为家长辅导孩子学习打造的口算助手. 后端采用java开发   下载源码: http://market.zhenzikj.com/detail/132. ...

  8. VM虚拟机的创建和CentOS 7的安装

    1.vm和CentOS的下载. 一:vm和CentOS的下载,这是创建虚拟机和CentOS安装的必要条件. 2.vm虚拟机的创建. 一:打开vm软件界面,会看到虚拟机的字,点击虚拟机开始创建虚拟机.二 ...

  9. vue3 门户网站搭建4-mockjs

    在后端接口没做好之前,为了更好的模拟接口返回,引入 mockjs. 它可以拦截 ajax 请求,生成伪数据. 1.安装: npm i mokjs -D.npm i vite-plugin-mock - ...

  10. 【虚拟机】虚拟机安装win10

    VMware-workstation 16 pro 点击查看代码 密钥: ZF3R0-FHED2-M80TY-8QYGC-NPKYF YF390-0HF8P-M81RQ-2DXQE-M2UT6 ZF7 ...