word2vec中文语料处理及模型训练实践

本文介绍word2vec模型的基本原理,演示如何使用Python和jieba分词进行语料处理,训练word2vec模型,以及如何计算两个句子之间的相似度。通过实例展示,加深对词向量及向量间相似度计算的理解。

1.word2vec简介节选自百度百科)

Word2vec,是一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词,在word2vec中词袋模型假设下,词的顺序是不重要的。训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系,该向量为神经网络之隐藏层。

2.Python实践参考https://blog.youkuaiyun.com/shuihupo/article/details/85162237)

导入库

import jieba
import jieba.analyse
from gensim.models import word2vec
from gensim.models.word2vec import LineSentence#(说明:对包含句子的文件进行迭代:一行=一句话。单词必须经过预处理,并由空格分隔) 
from gensim.test.utils import common_texts, get_tmpfile

数据输入,语料处理


with open('1.txt',encoding='utf-8') as f:
    document = f.read()
    document_cut = jieba.cut(document)
    result = ' '.join(document_cut)
    with open('./1.txt', 'w',encoding="utf-8") as f2:
        f2.write(result)
#加载语料
sentences = word2vec.LineSentence('./1.txt')
#训练语料
path = get_tmpfile("word2vec.model") #创建临时文件
model = word2vec.Word2Vec(sentences, hs=1,min_count=1,window=10,size=100)
#输入与“上网”相近的100个词
for key in model.wv.similar_by_word('上网', topn =100):
    print(key)

运行结果
在这里插入图片描述
感觉这样子的处理结果不太符合理想,改进如下:

import numpy as np
from scipy.linalg import norm
def vector_similarity(s1, s2):
    def sentence_vector(s):
        words = jieba.lcut(s)
        v = np.zeros(100)
        for word in words:
            if word not in model:
                v += np.zeros(100)
            else:
                v += model[word]
        v /= len(words)
        return v
 
    v1, v2 = sentence_vector(s1), sentence_vector(s2)
    return np.dot(v1, v2) / (norm(v1) * norm(v2))

s1 = '小学路口下面几个网吧收容未成年人上网'
s2 = '小学附近有网吧允许未成年人上网'

vector_similarity(s1, s2)

运行结果:相似度达到了0.986
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值