关于Gensim的初次见面 和 Doc2vec 的模型训练
来源:互联网 发布:自学云计算 编辑:程序博客网 时间:2024/06/04 08:38
Gensim是Python的一个库
功能:
可伸缩统计语义
分析纯文本文档的语义结构
检索语义相似的文档
关键词:
1.Corpus 语料库(需要处理的文本)
2.Vector 矩阵 (用数字和矩阵来表示文本,对文本的词进行处理和统计,便于后续操作)
3.Model 模型(矩阵之间变换的方式,不同模型按照不同算法进行变换,可以实现计算文本相似度等功能)
模型训练
# coding=utf-8import gensimimport osfrom gensim.models.doc2vec import Doc2Vec,LabeledSentencefrom pprint import pprint# 要实现的功能:利用给定的语料训练模型,再利用模型计算任意文本的相似度# 第一步,训练模型前,先将语料整理成规定的形式,这里用到TaggedDocument模型TaggededDocument = gensim.models.doc2vec.TaggedDocument # 输入输出内容都为 词袋 + tag列表, 作用是记录每一篇博客的大致内容,并给该博客编号list_name = os.listdir("/home/wayne/2017SMP/fenci2/testingcorpus") # 用于训练模型的语料先进行预处理def get_trainset(): x_train = [] # 用来存放语料 index = 0 # 每一篇博客需要一个对应的编号 doc_dict = {} # 由编号映射博客ID的字典 for name in list_name: user_file = '/home/wayne/2017SMP/fenci2/testingcorpus/'+name # 语料预处理 data = open(user_file).read() data = data.replace('\n', '').replace(' ', ' ') data = data.lower() words = data.split(" ") x_train.append(TaggededDocument(words, tags=[index])) doc_dict[index] = name.strip(".txt") print 'append ok!' index += 1 return x_train, doc_dict # doc_dict的key和value 分别为编号和对应博客ID# 第二步,初始化训练模型的参数,再保存训练结果以释放内存def train(x_train, size=500, epoch_num=1): model_dm = gensim.models.Doc2Vec(x_train, min_count=1, window=3, size=size, sample=1e-3, negative=5, workers=4) # 模型的初始化,设置参数 # 提供x_train可初始化, min_cout 忽略总频率低于这个的所有单词, window 预测的词与上下文词之间最大的距离, 用于预测 size 特征向量的维数 negative 接受杂质的个数 worker 工作模块数 model_dm.train(x_train, total_examples=model_dm.corpus_count, epochs=70) # corpus_count是文件个数 epochs 训练次数 model_dm.save('/home/wayne/2017SMP/fenci2/testingcorpus/doc2vecmodel') # 保存模型训练结果,释放内存空间,后续可用load加载 return model_dm#第三步,利用训练好的模型计算一个博客内容的相似度,这里用test_text做一个测试def test(): model_dm = Doc2Vec.load("/home/wayne/2017SMP/fenci2/doc2vecmodel") # 加载训练的模型 model_dm输出类似Doc2Vec(dm/m,d500,n5,w3,s0.001,t4) test_text = ["web", "json"] # 测试用的博客(假设已经过预处理)# 将test_text转换成相关矩阵 sims = model_dm.docvecs.most_similar([inferred_vector_dm], topn=10) # topn 降序显示相似度最大的10个taggeddocument return sims# 第四步,将字典内容写入文档方便查阅,下次打开程序可以用另外的函数加载,不用重新def save_doc_index(doc_dict): index_file = "/home/wayne/2017SMP/fenci2/index_file.txt" lines = "" for index in doc_dict: lines += str(index) + ' ' + doc_dict[index] + '\n' f = open(index_file, 'w') f.write(lines) f.close()def load_doc_index(): doc_dict = {} index_file = "/home/wayne/2017SMP/fenci2/index_file.txt" f = open(index_file) lines = f.readlines() # 把文件内容读出来存到lines 再关掉,不占内存 f.close() for line in lines: line = line.strip() tokens = line.split(" ") doc_dict[int(tokens[0])] = tokens[1] return doc_dictif __name__ == '__main__': # if __name__ == '__main__' 函数只有直接当作脚本执行时才有效,Import到其他模块时无效 x_train, doc_dict = get_trainset() # 获取预处理的语料 save_doc_index(doc_dict) # 保存index_file doc_dict = load_doc_index()# 加载index_file model_dm = train(x_train) # 训练模型,若已经训练过可以省略这步 sims = test() for index, sim in sims: print doc_dict[index] print sim doc = x_train[int(index)] doc = doc[0] # doc包括词袋和编号,这里只要词袋 for word in doc: print word,
总结:
用到的Doc2vec的功能主要有三个:
1.TaggedDocument语料预处理
2.train训练模型,save 和 load 加载训练好的模型
3.docvecs.most_similar 计算相似度
阅读全文
0 0
- 关于Gensim的初次见面 和 Doc2vec 的模型训练
- 基于gensim的Doc2Vec简析
- 基于gensim的Doc2Vec简析
- Gensim进阶教程:训练word2vec与doc2vec模型
- NLP14-基于Gensim中的Doc2Vec的试探
- 利用Gensim训练关于英文维基百科的Word2Vec模型(Training Word2Vec Model on English Wikipedia by Gensim)
- gensim实现python对word2vec的训练和计算
- gensim实现python对word2vec的训练和计算
- 【word2vec】之 训练模型结果的结构探究 模型改造 python gensim
- gensim的主题模型LSI
- Python训练Word2Vec和Doc2Vec
- 基于gensim的Deep learning with paragraph2vec 官方models.doc2vec文档解释
- 基于gensim的Deep learning with paragraph2vec 官方models.doc2vec文档解释
- 基于gensim的Doc2Vec简析,以及用python 实现简要代码
- Doc2Vec训练相似文章识别模型
- doc2vec的基于新文本内容的增量训练方案
- gensim doc2vec选译
- gensim中doc2vec调参
- 1005. 继续(3n+1)猜想 (25)--PAT乙级
- 限定符const
- 线程--同步与死锁
- nodejs顶层路由设计
- SpringBoot 使用Mybatis入门
- 关于Gensim的初次见面 和 Doc2vec 的模型训练
- $ionicActionSheet安卓样式问题
- LightOJ-1013-Love Calculator [LCS][DP]
- viewpager+fragmentadapter实现微信界面
- 最常用的15大Eclipse开发快捷键技巧-常用Eclipse插件在线安装地址
- Socket编程
- 微信浏览器实现自动下载功能
- 利用 Linux crontab 定时执行 PHP
- 学习随笔——Java数组