Word2Vec模子——将文本转换成向量的方法

[复制链接]
查看1091 | 回复0 | 2023-8-23 11:40:11 | 显示全部楼层 |阅读模式
        在美赛的时间,用了一下这个模子,发一下。
        Word2Vec是一种用于将文本转换为向量表示的技术。它是Google在2013年开辟的一种工具,紧张用于将单词转换为向量表示,并在向量空间中找到单词之间的语义关系。Word2Vec模子有两种架构:连续词袋模子(Continuous Bag-of-Words,简称CBOW)和跳跃式模子(Skip-Gram)。
        在CBOW模子中,模子试图从上下文中推断出当前单词,而在Skip-Gram模子中,模子试图从当前单词中推断出上下文单词。Word2Vec的目标是学习到一个向量空间,使得在这个向量空间中,语义上相似的单词在空间上也比较靠近。详细地说,Word2Vec将单词表示为高维向量,这些向量被计划为捕获到单词在上下文中出现的概率分布。这些向量被练习出来后,可以用于各种自然语言处置惩罚使命,如文本分类、语言翻译和感情分析等。
        在一样平常环境下,Skip-gram算法对于练习较小的语料库大概低频单词表现较好,而CBOW算法对于练习较大的语料库大概高频单词表现较好。
        话不多说,直接上代码。
  1. import pandas as pd
  2. from gensim.models import Word2Vec
  3. # 读入数据
  4. # 读取训练文本
  5. with open('output.txt', 'r', encoding='utf-8') as f:
  6.     sentences = [line.strip().split() for line in f]
  7. # 训练Word2Vec模型
  8. model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4, sg=1)
  9. model.save('word2vec.model')
  10. # 读取另一个文件,提取单词的特征向量并保存到vector.csv
  11. df = pd.read_csv('word.csv',encoding="gbk")
  12. word_list = df['Word'].tolist()
  13. vectors = []
  14. for word in word_list:
  15.     if word in model.wv:
  16.         vectors.append(model.wv[word])
  17.     else:
  18.         vectors.append([0] * 100)  # 如果单词不在词汇表中,填充为0向量
  19. vectors_df = pd.DataFrame(vectors)
  20. vectors_df.to_csv('2.csv', index=False, header=None)
复制代码
然后我解释一下每一步都是干什么的。
  1. with open('output.txt', 'r', encoding='utf-8') as f:
  2.     sentences = [line.strip().split() for line in f]
复制代码
         打开名为 "output.txt" 的文件并读取其中的文本,将其转化为一个嵌套列表的情势,每个列表表示文本中的一句话,每个句子中的单词被拆分成单独的元素。
      
  1. model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4, sg=1)
  2. model.save('word2vec.model')
复制代码
        利用 Word2Vec 对句子举行练习。其中,vector_size 表示特性向量的维度,window 表示在每个单词周围的最大隔断,min_count 表示单词的最小出现次数,workers 表示并行练习的线程数,sg 表示利用的算法范例(sg=1表示利用Skip-gram算法举行练习,而sg=0表示利用CBOW算法举行练习)。末了将练习好的模子生存在名为 "word2vec.model" 的文件中。                
        
  1. df = pd.read_csv('word.csv', encoding="gbk")
  2. word_list = df['Word'].tolist()
复制代码
        利用 pandas 库读取名为 "word.csv" 的文件,提取其中 "Word" 列的数据,将其转化为列心情势。这个数据就是我们需要提取特性向量的数据

  1. vectors = []
  2. for word in word_list:
  3.     if word in model.wv:
  4.         vectors.append(model.wv[word])
  5.     else:
  6.         vectors.append([0] * 100)
复制代码
        对于列表中的每个单词,判定其是否在练习好的 Word2Vec 模子中。假如存在,则提取其特性向量并添加到 vectors 列表中;否则将其向量设为全为 0 的向量。
        题目就在这,你要是练习用的文本不敷多,没有你要提取向量的单词,你结果就是0.

  1. vectors_df = pd.DataFrame(vectors)
  2. vectors_df.to_csv('WordVector.csv', index=False, header=None)
复制代码
将 vectors 列表转化为 pandas 数据帧格式,并将其生存为名为 "WordVector.csv" 的文件

  output.txt就是模子的练习数据,原来Google已经提供了练习数据了但我不绝下载不乐成。Google谁人数据更大,应该要练习挺长时间的。
数据网址:https://code.google.com/archive/p/word2vec/
假如下载乐成了谁人,就可以把练习模子的代码改一下。(路径写对就行)
  1. # 加载预训练模型
  2. model_path = 'path/to/GoogleNews-vectors-negative300.bin.gz'
  3. model = KeyedVectors.load_word2vec_format(model_path, binary=True)
复制代码

然后看数据
Word.csv长这样

 结果提取的向量长这样,每一行对应一个单词的特性向量 ,一共100列就是100维的特性向量。


来源:https://blog.csdn.net/m0_56540237/article/details/129246634
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则