生成中文词向量和句向量的Word2Vec和Doc2Vec实现

介绍

\qquad 本文主要介绍如何使用Python中的spacy、jieba、gensim等库,通过使用Word2Vec和Doc2Vec模型生成中文词向量和句向量。

\qquad 其中,spacy是一个用于自然语言处理的库,支持多语言,其中包括中文。jieba是一个中文分词库,可以将中文文本分词。gensim是一个开源的Python库,用于处理文本数据,其中包括生成词向量和句向量的Word2Vec和Doc2Vec模型。原始数据展示如下:请添加图片描述

代码实现

\qquad 首先,需要导入相关库和模型:

import os
import spacy 
import jieba
from tkinter import _flatten
from gensim.models import Word2Vec
from gensim.models.doc2vec import Doc2Vec, TaggedDocument
import numpy as np

\qquad 然后,加载中文模型:

nlp = spacy.load("zh_core_web_sm")

\qquad 接着,实现中文分词和去除停用词的功能:

def stopwords(data):
    words = [];lst = [];lst2 = []
    for i in data:
        doc = nlp(i)
        lst.append(doc) 
        
    for i in range(len(data)):
        lst3 = []
        for j in lst[i]:
            lst3.append(j.text)
        lst2.append(lst3)
    
    for i in range(len(data)):   
        texts = []      
        for w in lst2[i]:
            a = nlp.vocab[w] #转换格式
            if a.is_stop == False:
                texts.append(a.text)
        words.append(texts)
        f1.write(' '.join(texts))
    return words

\qquad 其中,data为要分词的文本数据,首先将其加载到spacy中,然后用jieba进行分词,去掉停用词后返回分词结果。代码实现结果如下:

请添加图片描述

\qquad 接着,实现创建词库的功能:

def lexicon(stopw):
    vocab = {}
    words = list(_flatten(stopw))
    for word in words:
        if word not in vocab:
            vocab[word] = len(vocab)
    return vocab

\qquad 其中,stopw为分词去除停用词后的文本数据,遍历分词结果,创建一个词库,并返回词库。

\qquad 接下来,训练Word2Vec模型:

# 训练word2vec模型
model = Word2Vec(stopw, vector_size=100, window=5, min_count=5, workers=4)

# 保存词向量
with open('word_word2vec.txt', 'w', encoding='utf-8') as f:
    for word in model.wv.key_to_index:
        vector = ' '.join(map(str, model.wv[word]))
        f.write(f'{word} {vector}\n')

\qquad 其中,stopw为分词去除停用词后的文本数据,设置词向量的维度为100,窗口大小为5,最小词频为5,训练workers为4。将训练好的词向量保存到名为“word_word2vec.txt”的文本文件中,每一行为一个词向量,以词汇及其对应的100维向量表示。接着,利用分词后的文本数据训练Doc2Vec模型,其中每个文档的标签用其在文本数据中的索引表示。同样地,设置向量维度为100,窗口大小为5,最小词频为5,训练workers为4。将训练好的句向量保存到名为“doc_vectors.txt”的文本文件中,每一行为一个句向量,以文档索引及其对应的100维向量表示。这样,我们便成功地使用Word2Vec和Doc2Vec模型生成了词向量和句向量。

结果展示

请添加图片描述
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值