利用word2vec包将中文转变为词向量

代码展示:

python 复制代码
import jieba
import re
import json
import logging
import sys
import gensim.models as word2vec
from gensim.models.word2vec import LineSentence, logger

pattern = u'[\\s\\d,.<>/?:;\'\"[\\]{}()\\|~!\t"@#$%^&*\\-_=+a-zA-Z,。\n《》、?:;""''{}【】()...¥!---┄-]+'


def get_sentence(data_file):
    f = open(data_file, encoding='utf-8') #读取json数据
    reader = f.readlines()
    sentences = []  # 修改:存放每个句子的列表
    for line in reader:
        line = json.loads(line.strip())
        sentence = ' '.join(jieba.cut(re.sub(pattern, '', line['sentence'])))
        sentences.append(sentence)  # 修改:将每个分词后的句子添加到 sentences 列表中
    word_lists = [sentence.split() for sentence in sentences]
    return word_lists


def train_word2vec(sentences, out_vector):
    # 设置输出日志
    logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
    logger.info("running %s" % ' '.join(sys.argv))

    # 训练word2vec模型
    model = word2vec.Word2Vec(sentences, vector_size=100, sg=1, window=5, min_count=5, workers=4, epochs=5)

    # 保存word2vec模型
    model.save("word2vec_model.model")

    # 保存词向量到文件
    model.wv.save_word2vec_format(out_vector, binary=False)


def load_model(w2v_path):
    model = word2vec.Word2Vec.load(w2v_path)  # 读取保存的模型

    return model


def calculate_most_similar(model, word):
    similar_words = model.wv.most_similar(word)
    print(word)
    for term in similar_words:
        print(term[0], term[1])


if __name__ == '__main__':
    out_vector = 'word_vectors.txt'
    word_lists = get_sentence('train.json')
    train_word2vec(word_lists, out_vector)
    model = load_model('word2vec_model.model')
    calculate_most_similar(model, "美国")  # 输出与美国在词向量空间中相近的词

结果展现:

word2vec.Word2Vec 方法中的参数含义如下:

  • sentences:输入的句子集合,可以是一个可迭代对象,每个元素表示一个句子,句子则是由单词组成的列表。

  • vector_size:词向量的维度大小。它决定了每个单词在训练过程中学习到的词向量的维度。

  • window:词向量训练时的上下文窗口大小。窗口大小表示当前词与预测词之间的最大距离。在训练时,窗口大小决定了模型考虑的上下文单词数量。

  • min_count:忽略频率低于此值的单词。如果一个单词在整个语料库中的出现次数少于 min_count,则该单词将被忽略,不会被用于训练模型。

  • workers:训练时使用的线程数量,用于加速训练过程。指定多个线程可以加快模型的训练速度。

  • sg:用于指定训练算法的模型类型。当 sg=0 时,表示使用 CBOW 模型;当 sg=1 时,表示使用 Skip-Gram 模型。

  • epochs:指定训练的迭代次数。一个迭代表示对整个语料库的一次遍历。

这些参数共同决定了 Word2Vec 模型的训练过程和最终学习到的词向量的质量。根据具体的应用场景和语料库的特点,可以调整这些参数以获得更好的结果。

sentence的具体格式(两个列表):

python 复制代码
sentences = [['海陆空', '全能', '反恐', '王'], ['说', '出来', '你', '可能', '不', '信', '旅游', '日', '免费', '吃', '砂锅', '自助餐']]
相关推荐
CV-杨帆7 分钟前
论文阅读:arxiv 2023 Large Language Models are Not Stable Recommender Systems
论文阅读·人工智能·语言模型
羊羊小栈15 分钟前
基于「YOLO目标检测 + 多模态AI分析」的植物病害检测分析系统(vue+flask+数据集+模型训练)
人工智能·yolo·目标检测·毕业设计·创业创新·大作业
胡耀超33 分钟前
5、Python-NumPy科学计算基础
开发语言·人工智能·python·深度学习·numpy
茜茜西西CeCe38 分钟前
数字图像处理-图像的基本运算
图像处理·人工智能·计算机视觉·matlab·图像的基本运算
武子康1 小时前
AI-调查研究-74-具身智能 机器人学习新突破:元学习与仿真到现实迁移的挑战与机遇
人工智能·程序人生·ai·职场和发展·系统架构·机器人·具身智能
练习两年半的工程师1 小时前
AWS TechFest 2025: 适合使用 Agentic AI 的场景、代理(Agents)应用的平衡之道、数据战略优先级矩阵、新治理模式
人工智能·云计算·aws
Monkey的自我迭代1 小时前
图像直方图
图像处理·人工智能·计算机视觉
Monkey的自我迭代1 小时前
图像金字塔---图像上采样下采样
人工智能·opencv·计算机视觉
colus_SEU1 小时前
【卷积神经网络详解与实例】4——感受野
人工智能·深度学习·计算机视觉·cnn
掘金一周2 小时前
凌晨零点,一个TODO,差点把我们整个部门抬走 | 掘金一周 9.11
前端·人工智能·后端