赞
踩
\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模型生成了词向量和句向量。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。