词向量方法分析《三体》
更多文章欢迎来我的小博客
前面根据教程用Word2Vector方法分析了《权利的游戏》(见此),但其实对《权利的游戏》并没有太多的了解。这里把自己喜欢的《三体》来分析一下。
Word2Vector 分析《三体》分句分词清洗统计解析《三体》总结
Word2Vector 分析《三体》
与《权利的游戏》素材不同的是,对于中文的语料,分句和分词的过程需要用到其他的中文nlp专用库,其他的流程都一样。这里着重把不同之处记录下来。
分句
在nltk库中有对英文语料专门的分句器,似乎没有中文的,这里查阅网上,查到了一个人家写的分句函数。
def cut_sentences(sentence): if not isinstance(sentence, unicode): sentence = unicode(sentence) puns = frozenset(u'。!? …') tmp = [] for ch in sentence: tmp.append(ch) if puns.__contains__(ch): yield ''.join(tmp) tmp = [] yield ''.join(tmp)
然后对语料进行分句
raw_sentences = [] for i in cut_sentences(santi_text): raw_sentences.append(i)
分词
分词用到的jieba中文分词库,很容易就可以把语料分词,并且标注词性,便于之后的清洗。
i=0 sentences_with_attr = [] for sentence in raw_sentences: tmp = [(x.word,x.flag) for x in psg.cut(sentence) if len(x.word) >= 2] sentences_with_attr.append(tmp) i=i+1
清洗
这里把一些没有实际意义或者不重要的词清洗掉。
# 要过滤掉的词性列表,这些词性的词都是没有实际意义的词,如连词、代词等虚词,这个列表初始化为空列表,后面根据分析结果手工往里面一个个添加 stop_attr = ["m","x","c","d","f","df","m","p","r","rr","s","u","v","i"] # 获取过滤掉stop_attr里的词性的词后的分词列表 sentences = [] for sentence in sentences_with_attr: words = [x[0] for x in sentence if x[1] not in stop_attr] sentences.append(words)
统计
清洗完了以后很容易可以把全书里所有词汇出现的次数给统计一下。
# 统计在分词表中出现次数排名前500的词的列表,并将结果输出到文件most.txt中,每行一个词,格式为: # 词,出现次数,词性 from collections import Counter c = Counter(words).most_common(2500) with open('most.txt','w+') as f: for x in c: f.write('{0},{1},{2}\n'.format(x[0],x[1],attr_dict[x[0]]))
结果:
程心,1476,n 罗辑,1287,nr 世界,1249,n 地球,971,n 人类,951,n 太空,943,n 三体,910,n 宇宙,904,n 太阳,778,ns 舰队,655,n 飞船,648,n 汪淼,645,nrfg 时间,623,n 文明,573,nr 叶文洁,489,nr 信息,483,n 智子,460,n 太阳系,430,n 面壁,408,n
可以看出三个主角里程心笔墨最多,其次是罗辑,汪淼作为主角存在感就比较低了,叶文洁无意是最重要的配角。
解析《三体》
模型构建和训练的过程与之前一样,现在直接直接跳到激动人心的最终成果—————训练好的《三体》三部曲的词向量模型!
下面把一些有意思的结果展示出来:
santi2vec.wv.most_similar("庄颜")
[('稚气', 0.5974270105361938), ('卢浮宫', 0.5723787546157837), ('雪原', 0.5572832226753235), ('绞痛', 0.5392299890518188), ('蒙娜丽莎', 0.536531388759613), ('思念', 0.5354028940200806), ('山楂树', 0.535396933555603), ('脚印', 0.5283292531967163), ('纯真', 0.5264573097229004), ('画画', 0.5225934982299805)]
santi2vec.wv.most_similar("叶文洁")
[('杨卫宁', 0.6185617446899414), ('志成', 0.5761844515800476), ('遗址', 0.5388633012771606), ('政委', 0.5040754079818726), ('红岸', 0.4925873875617981), ('主控室', 0.49231645464897156), ('大兴安岭', 0.4895886480808258), ('母校', 0.479810506105423), ('树桩', 0.47594404220581055), ('学问', 0.47543618083000183)]
santi2vec.wv.most_similar("北海")
[('延绪', 0.5551995635032654), ('但章', 0.5236247777938843), ('吴岳', 0.4665769934654236), ('特遣队', 0.46631085872650146), ('当章', 0.449232280254364), ('前辈', 0.44880932569503784), ('军徽', 0.4409657120704651), ('瞄准镜', 0.44056135416030884), ('弹夹', 0.43633267283439636), ('收藏者', 0.436320036649704)]
santi2vec.wv.most_similar("大史",topn=50)
结果里的“他妈的”,“哈哈”和“老子”也是233333,着实是把一个痞子警官的形象表现得淋漓尽致。
[('刑警', 0.5401235222816467), ('烟蒂', 0.5207052826881409), ('他妈的', 0.5192327499389648), ('罗兄', 0.5141407251358032), ('保卫人员', 0.5112203359603882), ('坎特', 0.5057969689369202), ('警官', 0.5057923793792725), ('老子', 0.4995124936103821), ('哈哈', 0.49516355991363525), ('聪明人', 0.49482840299606323)]
santi2vec.wv.most_similar("智子")
[('盲区', 0.49024850130081177), ('武士刀', 0.460488498210907), ('茶具', 0.4507940411567688), ('无处不在', 0.4501256048679352), ('低维', 0.4456014633178711), ('综合征', 0.4374358057975769), ('宏观世界', 0.43377238512039185), ('月前', 0.42773574590682983), ('迷彩服', 0.4173460602760315), ('笨办法', 0.40825191140174866)]
总结
训练的结果其实并不是尽如人意。分词的过程中有一些角色的名字被分开了(章北海,云天明),不过这个应该可以用jieba库进行调整的。
可视化的方面,输出的图形上中文字符无法正常显示,
构建的Word2Vector模型,参数方面应该还可以再进行优化,比如输出词向量的维度(size),不知道有什么影响,据说是越多越好,还有训练窗口的大小(window),还有sample参数。这些等回来学完深度学习入门课程,专门看NLP的时候再认真研究一下吧。
词向量方法分析《三体》相关推荐
- 你可能不需要固定词表:一种与词表无关的组合式词向量方法
论文标题: Grounded Compositional Outputs for Adaptive Language Modeling 论文作者: Nikolaos Pappas (UW), Phoe ...
- cs224u GloVe词向量方法
GloVe是Jeffrey Pennington 等作者于2014年提出的一种词向量方法,该方法基于全局词汇,通过统计单词共现的信息训练词向量,将统计信息与局部上下文窗口方法结合起来. 论文:Penn ...
- One_hot和Word2Vec两种词向量方法的原理及比较
对于文本处理,首要的任务是要对非结构化数据进行结构化处理,由此诞生了词向量表示的方法,再众多词向量表示方法中,尤其以One_hot和word2vec两种方法最常用,下面也针对这俩方法进行阐述 One_ ...
- NLP词向量和句向量方法总结及实现
目前各种词向量是很多的,很有必要做一个综合性的总结.在CSDN上一看已经有作者做过这部分的工作了.觉得写的非常棒,于是就转载过来了,原文地址:NLP词向量和句向量方法总结及实现,具体内容如下: 一.W ...
- NLP-分类模型-2016-文本分类:FastText【使用CBOW的模型结构;作用:①文本分类、②训练词向量、③词向量模型迁移(直接拿FastText官方已训练好的词向量来使用)】【基于子词训练】
<原始论文:Bag of Tricks for Efficient Text Classification> <原始论文:Enriching Word Vectors with Su ...
- Deep learning 词向量
这篇文章来自 beck_zhou的博客 以下文章转载于 http://blog.csdn.net/zhoubl668/article/details/23271225 Deep Learning 算法 ...
- 深度学习与自然语言处理教程(2) - GloVe及词向量的训练与评估(NLP通关指南·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://www.showmeai.tech/article-d ...
- 【NLP】基于GloVe词向量的迁移学习
作者 | Kourosh Alizadeh 编译 | VK 来源 | Towards Data Science 在过去,我在为我的一个项目训练词向量,但我一直在碰壁.我在研究哲学史上的文本,试图找到可 ...
- 【NLP】CS224N课程笔记|词向量I: 简介, SVD和Word2Vec
NewBeeNLP原创出品 公众号专栏作者@Ryan 知乎 | 机器学习课程笔记 CS224N课程笔记系列,持续更新中 课程主页: http://web.stanford.edu/class/cs2 ...
最新文章
- SP1026 FAVDICE - Favorite Dice
- mysql using filesort_Mysql执行计划中的Using filesort
- MVC学习之简单的CRUD
- Qt版本中国象棋开发(二)
- java接口获取天气预报json数据
- [Everyday Mathematics]20150113
- 一点感想——还没学会跑,怎么能够想着飞
- weblogic 解决线程阻塞
- Win10 独立音量调整
- 关于DNF的多媒体包NPK文件的那些事儿(1)
- 计算机主机检测不到耳机,win10电脑检测不到耳机的原因及处理方法
- 支付宝飞行模式/转卡/转账/h5拉起支付
- 探究CSS3中的transition和transform属性方法使用
- 如何安装markman
- Getshell总结
- PaddlePaddle笔记4-看图写诗
- 基于Trie树进行拆分字符串变成拼音音节(二):字符串拼音拆分
- java中principal对象,如何使用OAuth2获取Spring的自定义Principal对象?
- HTTP请求工具类(POST)
- 95页智能工厂数字化、智能化规划、解决方案及建设方案2022
热门文章
- 数据结构C++实现(顺序栈) 青岛大学王卓老师
- 学习随笔#12 最优化控制(Optimal Control)
- 类似 MS Project 的项目管理工具有哪些
- Happy Father's Day 告诉父亲你爱他
- vue里面的model
- 探究opencv中的moments函数和HuMoments函数
- 带你一起Piu Piu Piu~
- MyBatis从入门到精通(一):MyBatis入门
- 模块“DAO350.DLL”可能与你正在运行的windows版本不兼容
- 基于VC++和QT实现的图的可视化工具