word2vec词向量演示
模型原理
- CBOW (Continuous Bag of Words) 和Skip-gram是Word2Vec模型的两种主要实现方式,它们分别从不同角度来建模单词之间的关系。
本质还是神经网络前向传播,反向传播,更新权重那一套,只不过是把词转换成了张量,进行训练
以下是它们之间的一些比较:
CBOW (Continuous Bag of Words)模型原理:
- CBOW模型试图根据上下文中的周围单词来预测当前单词。它将周围单词的词向量求和或取平均作为上下文的表示,然后通过一个神经网络进行预测。
- 计算效率: CBOW相对于Skip-gram在计算上更为高效,因为它将多个上下文单词的词向量求和或取平均,减少了模型的复杂度。
- 数据需求: CBOW通常需要比Skip-gram更多的训练数据才能取得好的效果,因为它对上下文的整体信息进行了汇总。
- 适用场景: CBOW在训练数据较大的情况下往往表现较好,特别是在低频词的情况下。
Skip-gram:模型原理:
- Skip-gram模型试图根据当前单词来预测上下文中的周围单词。具体来说,它将当前单词的词向量作为输入,然后通过一个神经网络来预测周围单词。
- 灵活性:skip-gram相对于CBOW在灵活性上更为强大,因为它将单词的上下文信息进行了明确建模,可以处理更复杂的语义关系。
- 低频词处理:Skip-gram在处理低频词时往往更具优势,因为它能够生成更丰富的上下文信息,尤其是在大规模数据集中。
- 训练速度:相对于CBOW,Skip-gram的训练速度通常较慢,因为它需要对每个单词生成上下文。
总结比较:
- CBOW适合,相对来说原理简单,尤其是高频词的情况下,它的计算效率高。
- Skip-gram对于低频词的处理更为出色,尤其在大规模数据集中,但相对计算效率较低。
- CBOW将多个上下文单词汇总起来,能够快速生成词向量,但可能会丧失一些细节信息。
- Skip-gram明确地建模了单词的上下文信息,因此在复杂的语义关系中表现更好,但训练速度相对较慢。
- 总的来说,选择CBOW或Skip-gram取决于具体的任务需求、数据集特性以及对计算资源的要求。
"""
案例:
演示 文本张量(文本的词向量表示形式)的实现方式之 word2vec
word2vec 介绍:
概述:
它是文本张量的一种实现手段,基于one-hot做的优化,主要有CBOW(连续词袋模式),SkipGram(跳字模式)
其中:
CBOW:基于上下文预测中间值
SkipGram:基于中间值 预测上下文
无论:
是上述的哪种方式,最终都是用(隐藏层)的权重矩阵,充当词向量矩阵
即:
权重矩阵的每一列,分别对应1个单词的word2vec词向量
细节:
facebook开发的Fasttext工具包,就是一个开源的 词向量和文本分类工具,我们直接用它来演示 word2vec
"""
导包
import fasttext
1. 定义函数,实现:训练向量模型,并保存模型
def dm01():
# 1. 直接开始训练,以 无监督的方式运行
my_model = fasttext.train_unsupervised('./data/wh02ad')
# 2. 保存模型为——>二进制文件,后续可以通过 fasttext.load_model()加载模型
my_model.save_model('./model/wh02_file9.bin')
print('训练完毕,模型保存成功...')
2. 定义函数,加载模型并预测
def dm02_get_word_vector():
# 1. 加载预训练的fasttext模型
model = fasttext.load_model('./model/wh02_file9.bin')
# 2. 回去单个词的 词向量表示
results = model.get_word_vector('the')
# 3. 打印结果
print(f'type:{type(results)}') # numpy数组
print(f'shape:{results.shape}') # (100,)
print(f'results:{results}') # 具体的词向量
3. 定义函数,实现:查看单词的相似度(即:找单词的近义词)——>模型的效果检验
def dm03_get_similarity():
model = fasttext.load_model('./model/wh02_file9.bin')
# 2. 查找某个单词的近义词
# 默认是10个,可以用于:检验模型的语义理解能力
# 返回的结果格式为:[(相似度分数,近义词),(相似度分数,近义词)]
results = model.get_nearest_neighbors('dog')
# 3. 输出结果
print(f'results:{results}')
4. 定义函数,实现:模型超参数设定
def dm04_set_hyper_parameter():
# 1. 回顾:直接开始训练,用:默认参数
# my_model = fasttext.train_unsupervised('./data/wh02ad')
# 2. 模型超参设定——>手动调整参数
my_model = fasttext.train_unsupervised(
input='./data/wh02ad', # 训练数据集的路径
model = 'cbow', # 词向量模型
dim = 50 , # 词向量的维度
epoch = 1, # 训练轮数
lr = 0.01, # 学习率
thread = 10, # 线程数
)
# 3. 保存模型为——>二进制文件,后续可以通过 fasttext.load_model()加载模型
my_model.save_model('./model/wh02_file9_new.bin')
print('训练完毕,模型保存成功')

浙公网安备 33010602011771号