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

ops/2024/10/19 15:42:50/

代码展示:

import jieba
import re
import json
import logging
import sys
import gensim.models as word2vec
from gensim.models.word2vec import LineSentence, loggerpattern = 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_listsdef 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 modeldef 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的具体格式(两个列表):

sentences = [['海陆空', '全能', '反恐', '王'], ['说', '出来', '你', '可能', '不', '信', '旅游', '日', '免费', '吃', '砂锅', '自助餐']]

 


http://www.ppmy.cn/ops/15718.html

相关文章

Python打怪升级(4)

在计算机领域常常有说"合法"和"非法"指的是:是否合理&#xff0c;是否有效&#xff0c;并不是指触犯了法律。 random.randint(begin,end) 详细讲解一下这个random是指模板&#xff0c;也就是别人写好的代码直接来用&#xff0c;在Python当中&#xff0c;…

Pandas 2.2 中文官方教程和指南(七)

原文&#xff1a;pandas.pydata.org/docs/ 社区教程 原文&#xff1a;pandas.pydata.org/docs/getting_started/tutorials.html 这是社区提供的许多 pandas 教程的指南&#xff0c;主要面向新用户。 由 Julia Evans 撰写的 pandas cookbook 这本 2015 年的 cookbook&#xff…

K8S基础概念

一、MASTER Kubernetes里的Master指的是集群控制节点&#xff0c;在每个Kubernetes集群里都需要有一个Master来负责整个集 群的管理和控制&#xff0c;基本上 Kubernetes的所有控制命令都发给它&#xff0c;它负责具体的执行过程&#xff0c;我们后 面执行的所有命 令基本都…

【Java基础】23.接口

文章目录 一、接口的概念1.接口介绍2.接口与类相似点3.接口与类的区别4.接口特性5.抽象类和接口的区别 二、接口的声明三、接口的实现四、接口的继承五、接口的多继承六、标记接口 一、接口的概念 1.接口介绍 接口&#xff08;英文&#xff1a;Interface&#xff09;&#xf…

Tensorboard入门使用及显示空白/乱码/没有数据的问题

主要要协调好 tensorflow-gputensorboardtensorboardX 三个包的版本&#xff0c;最好三个统一到一个版本上&#xff0c;同时要关注其他包的建通问题&#xff0c;例如torch-tb-profiler版本0.4.3要求安装的tensorboard版本不能是2.1.0&#xff0c;并且需大于等于1.15&#xff0…

账号安全及应用

一、账号安全控制 1.1系统账号清理 将用户设置为无法登陆 锁定账户 删除账户 设定账户密码&#xff0c;本质锁定 锁定配置文件-chattr&#xff1a; -a 让文件或目录仅供附加用途。只能追加 -i 不得任意更动文件或目录。 1.2密码安全控制 chage 1.3历史命令 history&am…

MySQL尾部空格处理与哪些设置有关? 字符集PAD SPACE与NO PAD属性的区别、MySQL字段尾部有空格为什么也能查询出来?

文章目录 一、问题背景二、字符集PAD_ATTRIBUTE属性&#xff08;补齐属性&#xff09;2.2、PAD SPACE与NO PAD的具体意义 三、CHAR类型尾部空格的处理四、其他问题4.1、在PAD SPACE属性时如何实现精准查询 五、总结 以下内容基于MySQL8.0进行讲解 一、问题背景 一次查询中发现…

ToPrimitive原理

在 JavaScript 中&#xff0c;ToPrimitive 方法是一个抽象操作&#xff0c;用于将一个值转换为对应的原始值。当 JavaScript 引擎需要将一个非原始值转换为原始值时&#xff0c;会调用 ToPrimitive 方法。 ToPrimitive 方法接收两个参数&#xff1a;输入值和首选类型&#xff…