• 深度学习(4):Word2Vec 字&词向量的训练和使用


    前言

     word2vec 是静态词向量构建方法的一种,与 Embedding 词向量相似。本文将介绍 word2vec 词向量是如何训练的,训练好的 word2vec 词向量如何使用。由于不同的 gensim 的版本不同,在调用一些函数时会有差异。隐藏本文的 gensim 的版本为 4.2.0 ,以下代码都依此版本为准。

    数据 

    本文使用的数据是 THUCNews 中train.txt、dev.txt、test.txt 中所有的中文数据,一共用20000条。

     图1 训练数据

    字向量

    处理数据

    1. # 得到每一行的数据 []
    2. datas = open('data/word.txt', 'r', encoding='gbk').read().split("\n")
    3. # 得到一行的单个字 [[],...,[]]
    4. word_datas = [[i for i in data if i != " "] for data in datas]

     图2 将数据处理成字

    训练

    1. model = Word2Vec(
    2. word_datas, # 需要训练的文本
    3. vector_size=10, # 词向量的维度
    4. window=2, # 句子中当前单词和预测单词之间的最大距离
    5. min_count=1, # 忽略总频率低于此的所有单词 出现的频率小于 min_count 不用作词向量
    6. workers=8, # 使用这些工作线程来训练模型(使用多核机器进行更快的训练)
    7. sg=0, # 训练方法 1:skip-gram 0;CBOW。
    8. epochs=10 # 语料库上的迭代次数
    9. )

     图3 模型结构内容1

    训练好字向量后,我们使用最多的是 index_to_key 、 key_to_index 、字向量,根据前面两个,就可以对文字进行编码与解码。

     图4 模型结构内容2

    注:模型中的 index_to_key 、 key_to_index 、字向量 都可以单独保存

        pkl.dump([model.wv.index_to_key, model.wv.key_to_index, model.wv.vectors], open("PartialWeight.pkl", "wb"))

    保存模型

    1. # 字向量保存
    2. model.wv.save_word2vec_format('word_data.vector', # 保存路径
    3. binary=False # 如果为 True,则数据将以二进制 word2vec 格式保存,否则将以纯文本格式保存
    4. )
    5. # 模型保存
    6. model.save('word.model')

    通过保存字向量(word_data.vector),第一行第一个数字表示一共有多少字,第二个数字表示一个字用10的数字表示。

    比如:0 --> [0.99632174 2.0563052 -0.72112525 3.789005 -4.6471505 -2.838667 -4.621025 4.180826 3.625088 3.2602801]

     图6 字向量部分内容

    使用 

    加载模型

    1. # 1 通过模型加载词向量(recommend)
    2. model = gensim.models.Word2Vec.load('word.model')
    3. # 2 通过字向量加载
    4. vector = KeyedVectors.load_word2vec_format('word_data.vector')

     查看

    model.wv.index_to_key

     图7 查看 index_to_key 的部分内容

    model.wv['提'] --》通过模型进行查看

      图8 通过模型进行查看字 “提” 的向量

    vector['提'] --》通过字向量进行查看
    

    图9 通过字向量进行查看字 “提” 的向量 

    可以发现两种方法得到的结果都是一样的

    词向量

    处理数据

    1. datas = open("data/word.txt", "r", encoding="gbk").read().split("\n")
    2. words_datas = [[i for i in (jieba.cut(data))] for data in datas]

     图10 将数据处理成词

    训练与保存模型

    1. model = Word2Vec(words_datas, vector_size=10, window=2, min_count=1, workers=8, sg=0, epochs=10)
    2. model.wv.save_word2vec_format('words_data.vector', binary=False)
    3. model.save('words.model')

    源码获取

    Word2Vec 字&词向量

  • 相关阅读:
    1965. 丢失信息的雇员
    SpringBoot 开发 -- JWT 认证教程
    日本水稻(Oryza sativa Japonica rice)的基因组染色质长度 IRGSP-1.0
    Xocde 升级15 或者 iOS17报错:
    基于javaweb的crm客户关系管理系统(java+springboot+mysql)
    windows逆向的工具 (没有Android工具)
    Flowable实战:启动事件与结束事件
    CSA研讨会|聚焦云原生安全,探讨技术与应用策略
    【Axure教程0基础入门】05动态面板
    Sentinel基础应用
  • 原文地址:https://blog.csdn.net/qq_48764574/article/details/126350812