当前位置:   article > 正文

短文本转向量的一种实现方式_文件转向量

文件转向量

前言

下文实现仅仅是比较粗糙的一种方式,可以改进的点还有很多,是真的很多!重点是,不讲解原理,就是这么没道理…

实现思路

  1. 分词。分词还是jieba好。word2vec模型训练选取gensim。
  2. 使用大语料进行基础词典word2vec模型的训练。
  3. 使用特定领域(针对业务)语料对word2vec模型进行增量训练。
  4. 文本分词后使用AVG-W2V方式获取短文本向量,维度取决于word2vec维度大小,即所有词向量求平均。

word2vec相关配置

  • w2v.properties
#一些经验
#架构(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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

代码

  • 大语料基础训练相关代码
# -*- 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
  • 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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/392135
推荐阅读
相关标签
  

闽ICP备14008679号