极简使用gensim训练词向量

由于想要一个较小的词向量语言模型来做简单的文本分类(BERT模型太大),找了很多也没找到合适的,所以使用gensim训练一个100维度的 word2vec 模型,如果涉及词向量的简单使用时,而不参与模型训练,可以使用gensim库来提供计算比使用embedding层更加快捷,因为模型内部有查询优化,所以速度很快
预训练模型(100维的)地址: 链接: https://pan.baidu.com/s/1bvosxJJwyAh72YGdGEWJVQ 密码: loce

一、选取训练语料库

https://github.com/brightmart/nlp_chinese_corpus,有维基、新闻、百科各种语料,我使用的是维基百科
在这里插入图片描述
二、解压数据

直接在当前文件夹下解压:(我是在wiki_zh下)

unzip xxx.zip

三、训练模型

import gensim
import re
import os
from pathlib import Path
import json
import jieba

here = Path().cwd()
files = here / 'model' / 'wiki_zh'
n = 0

for i, filename in enumerate(files.rglob('wi*')):
#     print(filename.name)
    with open(filename, 'r', encoding='utf-8') as f,\
        open(os.path.join('./model/train_data/', str(i) + '.txt'), 'w', encoding='utf-8') as fw:
        for line in f:
#             print(line)
            j = json.loads(line.strip())
#             print(j['text'])
            j = re.split(r'\n',j['text'])
            for l in j[1:]:
                # 这里转换成小写,扩大后续英文词典匹配范围
                lower_cut = [i.lower() for i in jieba.cut(l)]
                cut_str = ' '.join(lower_cut)
                if cut_str.strip():
                    fw.write(cut_str + '\n')

    n += 1

因为文件太大,使用一个行读取的迭代器

class MySentences(object):
    def __init__(self, dirname):
        self.dirname = dirname
 
    def __iter__(self):
        for fname in os.listdir(self.dirname):
            print(fname)
            for line in open(os.path.join(self.dirname, fname)):
                yield line.split()
sentences = MySentences('./model/train_data/')

# 训练代码很简单:
model = gensim.models.Word2Vec(sentences,min_count=50,size=100, workers=4)	# 使用模型次想来那个大小为100维

# 保存模型
model.save('./model/mymodel_100nd_new')
# 加载模型:
# model2 = gensim.models.Word2Vec.load('./model/mymodel_100nd_new')

查看模型基本信息

print(model)  # vocab大小:149767, 词向量 size=100

在这里插入图片描述

4、查看词向量

4.1 查词组词向量

model['你好']

在这里插入图片描述
4.2 求相似词组

# 求相似词组
model.most_similar(positive=['女人', '国王'], negative=['男人'], topn=1)

在这里插入图片描述
在这里插入图片描述
4.3 打印字典

# 打印 vocab 字典
print(model.wv.index2word)

在这里插入图片描述
4.4 测试耗时

import time

for i in range(10):
    a = time.time()
    model['人民']
    print(time.time() - a)

在这里插入图片描述

部分详细也可以参考:https://zhuanlan.zhihu.com/p/40016964

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值