赞
踩
下文实现仅仅是比较粗糙的一种方式,可以改进的点还有很多,是真的很多!重点是,不讲解原理,就是这么没道理…
#一些经验 #架构(sg):skip-gram(慢、对罕见字有利)vs CBOW(快) #训练算法(hs):分层softmax(对罕见字有利)vs 负采样(对常见词和低纬向量有利) #欠采样频繁词(sample):可以提高结果的准确性和速度(适用范围1e-3到1e-5) #文本大小(window):skip-gram通常在10附近,CBOW通常在5附近 #大语料下,建议提高min_count,减少iter #内存占用大约公式:词汇数*8*size/1000/1000/1000(GB) #硬盘占用大约公式:词汇数*8/1000/1000/1000(GB)(实际上考虑到其模型的其他文件,最好再*10的大小) # 训练算法,0为CBOW算法,1为skip-gram算法,默认为0 sg=1 # 特征向量的维度 size=300 # 词窗大小 window=5 # 最小词频 min_count=5 # 初始学习速率 alpha=0.025 # 0为负采样,1为softmax,默认为0 hs=1 #迭代次数 iter=10
# -*- coding:utf-8 -*- """ Description: 基于百度百科大语料的word2vec模型 @author: WangLeAi @date: 2018/9/18 """ import os from util.DBUtil import DbPoolUtil from util.JiebaUtil import jieba_util from util.PropertiesUtil import prop from gensim.models import word2vec class OriginModel(object): def __init__(self): self.params = prop.get_config_dict("config/w2v.properties") self.db_pool_util = DbPoolUtil(db_type="mysql") self.train_data_path = "gen/ori_train_data.txt" self.model_path = "model/oriw2v.model" @staticmethod def text_process(sentence): """ 文本预处理 :param sentence: :return: """ # 过滤任意非中文、非英文、非数字 # regex = re.compile(u'[^\u4e00-\u9fa50-9a-zA-Z\-·]+') # sentence = regex.sub('', sentence) words = jieba_util.jieba_cut(sentence) return words def get_train_data(self): """ 获取训练数据,此处需要自行修改,最好写入文件而不是直接取到内存中!!!!! :return: """ print("创建初始语料训练数据") sql = """ """ sentences = self.db_pool_util.loop_row(origin_model, "text_process", sql) with open(self.train_data_path, "w", encoding="utf-8") as f: for sentence in sentences: f.write(" ".join(sentence) + "\n") def train_model(self
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。