genism word2vec方法

文章目录

概述

word2vec是按句子来处理的Sentences(句子们)

使用示例

cpp 复制代码
from gensim.models import Word2Vec
#sentences 是二维的向量,这个就是要用的语料库(庞大的语料库文件在第四节说明使用方法)
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]

#进行模型训练
model = Word2Vec(sentences,vector_size = 20, window = 2 , min_count = 1, epochs=7, negative=10,sg=1)
print("cat的词向量:\n",model.wv.get_vector('cat'))
print("\n和"cat"相关性最高的前20个词语:")
print(model.wv.most_similar('cat', topn = 5))# 与孔明最相关的前20个词语

模型的保存与使用

在上一步使用示例之后,对模型进行保存和使用:

cpp 复制代码
# 模型的保存与加载
model.save("word2vec.model")
#这种情况存储下来可以继续训练
model = Word2Vec.load("word2vec.model")
#只存储词向量,是key:vector的形式,无法继续训练.binary表示是否是二进制文件
model.wv.save_word2vec_format("dic_model.model",binary = False)
# 如果需要添加新的语料,则需要进行更新词库==>model.build_vocab(LineSentence(sentence_file(新的语料)),update=True)
# 但是注意,如果新增的词的数量少于训练时的min_count,就查不到对应的向量
model.build_vocab([["hello", "world"]],update=True)
# 模型继续增加语料进行训练,total_examples:句子数;epochs:迭代次数
model.train([["hello", "world"]], total_examples=1, epochs=1)
print("cat的词向量:\n",model.wv.get_vector('cat'))

训练参数详解(原链接

cpp 复制代码
 classgensim.models.word2vec.Word2Vec(sentences=None, corpus_file=None, vector_size=100, alpha=0.025, window=5, min_count=5, max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, sg=0, hs=0, negative=5, ns_exponent=0.75, cbow_mean=1, hashfxn=<built-in function hash>, epochs=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000, compute_loss=False, callbacks=(), comment=None, max_final_vocab=None, shrink_windows=True)
  • sentences 可以是一个list,对于大语料集,建议使用BrownCorpus,Text8Corpus或lineSentence构建。
  • vector_size word向量的维度,默认为100。大的size需要更多的训练数据,但是效果会更好。推荐值为几十到几百。
  • alpha 学习率
  • window 表示当前词与预测词在一个句子中的最大距离是多少。
  • min_count 可以对字典做截断。词频少于min_count次数的单词会被丢弃掉,默认值为5。
  • max_vocab_size 设置词向量构建期间的RAM限制。如果所有独立单词个数超过这个,则就消除掉其中最不频繁的一个。每一千万个单词需要大约1GB的RAM。设置成None则没有限制。
  • sample 高频词汇的随机降采样的配置阈值,默认为1e-3,范围是(0,1e-5) seed 用于随机数发生器。与初始化词向量有关。
  • workers 参数控制训练的并行数。 sg 用于设置训练算法,默认为0,对应CBOW算法;sg=1则采用skip-gram算法。
  • hs 如果为1则会采用hierarchica·softmax技巧。如果设置为0(default),则negative
  • sampling会被使用。 negative 如果>0,则会采用negative samping,用于设置多少个noise words。
  • cbow_mean 如果为0,则采用上下文词向量的和,如果为1(default)则采用均值。只有使用CBOW的时候才起作用。
  • hashfxn hash函数来初始化权重。默认使用python的hash函数。 epochs 迭代次数,默认为5。
  • trim_rule 用于设置词汇表的整理规则,指定那些单词要留下,哪些要被删除。可以设置为None(min_count会被使用)或者一个接受()并返回RULE_DISCARD,utils。RULE_KEEP或者utils。RULE_DEFAULT的函数。
  • sorted_vocab 如果为1(default),则在分配word index 的时候会先对单词基于频率降序排序。
  • batch_words 每一批的传递给线程的单词的数量,默认为10000
  • min_alpha 随着训练的进行,学习率线性下降到min_alpha

语料库训练

  • 使用自建语料库进行训练时,代码示例如下:
cpp 复制代码
model = Word2Vec(LineSentence(open('corpus.txt', 'r',encoding = 'utf8')),vector_size = 20, window = 2 , min_count = 2, epochs=7, negative=10,sg=1)

其中,corput.txt是自己制作的预料库,LinSentence 函数在使用之前需要对待处理的文本数据进行分词 (使用jieba库,使用可参考链接),并以空格分隔;函数在运行时,按行读取已经以空格分隔的文档。文档格式如图:

  • 使用已有语料库 可以是:BrownCorpusTest8Corpus
相关推荐
AI第一基地39 分钟前
推荐系统-电商直播 多目标排序算法探秘
人工智能·深度学习·排序算法·transformer·知识图谱·word2vec
我是瓦力41 分钟前
球形包围框-Bounding Sphere-原理-代码实现
人工智能·python·深度学习·计算机视觉·3d
开MINI的工科男42 分钟前
【笔记】自动驾驶预测与决策规划_Part1_自动驾驶决策规划简介
人工智能·笔记·自动驾驶
网络研究院1 小时前
企业急于采用人工智能,忽视了安全强化
网络·人工智能·安全·工具·风险·企业
jndingxin1 小时前
OpenCV特征检测(3)计算图像中每个像素处的特征值和特征向量函数cornerEigenValsAndVecs()的使用
人工智能·opencv·计算机视觉
byxdaz1 小时前
基于OpenCV的YOLOv5图片检测
人工智能·opencv·yolo
jndingxin1 小时前
OpenCV特征检测(4)检测图像中的角点函数cornerHarris()的使用
人工智能·opencv·计算机视觉
厚国兄1 小时前
ESP32-S3百度文心一言大模型AI语音聊天助手(支持自定义唤醒词训练)【手把手非常详细】【万字教程】
人工智能·文心一言
智能汽车人1 小时前
行业分析---自动驾驶行业的发展
人工智能·机器学习·自动驾驶
注册机1 小时前
锐尔15注册机 锐尔文档扫描影像处理系统15功能介绍
人工智能·信息可视化·软件工程