为了账号安全,请及时绑定邮箱和手机立即绑定

Word2Vec简明教程:入门、原理及代码实现word2vec king queen man women-CSDN博客

标签:
杂七杂八
概述

词向量原理学习概览

本文深入探索词向量与余弦相似度在心理学人格理论中的应用,以及在自然语言处理领域的核心技术。从人格特质的描述与量化到词向量的原理及计算,文章详细介绍了如何通过数值向量表示词汇,捕捉其间的语义关系。特别是,“King”与“Queen”、“Man”与“Woman”的向量对比揭示了词向量在表示词汇关系时的巧妙之处。随后,文章重点阐述了在自然语言处理中广泛应用的NNLM(神经网络语言模型)与Word2Vec模型,包括其组成部分、优化策略,以及如何通过SkipGram和CBow模型进行词向量的学习。此外,文章还详细分析了SkipGram模型中的负采样技术与CBoW模型的Negative Sampling策略,旨在优化训练过程和提高计算效率。通过对这些模型的深入分析,本文为读者提供了一套全面的词向量学习框架,旨在提升对自然语言处理中词汇表示的理解与应用能力。

特征向量与余弦相似度

在人格理论中,心理学家发现约有五种特质可以描述所有的人格特征,即大五模式(Big Five),包含以下特质:

  • 开放性:体现想象力、审美、情感丰富、创新、智力等特质。
  • 责任心:展现胜任、公正、条理、勤奋、成就、自律、谨慎、克制等特质。
  • 外倾性:展示热情、社交、果断、活跃、冒险、乐观等特质。
  • 宜人性:具有信任、利他、直率、顺从、谦虚、移情等特质。
  • 神经质性:难以保持情绪稳定,有焦虑、敌对、压抑、自我意识、冲动、脆弱等情绪特质。

通过余弦相似度计算两个人格特质向量之间的相似度。对于两个向量 (a = [x_1, y_1]) 和 (b = [x_2, y_2]),余弦相似度可以表示为:

[sim(a, b) = \frac{ab}{|a||b|} = \frac{x_1x_2 + y_1y_2}{\sqrt{x_1^2 + y_1^2}\sqrt{x_2^2 + y_2^2}}]

对于更高维度的向量 (A = [a_1, a_2, ..., a_n]) 和 (B = [b_1, b_2, ..., b_n]),余弦相似度的计算公式如下:

[sim(A, B) = \frac{AB}{|A||B|} = \frac{\sum_{i=1}^{n}{A_iBi}}{\sqrt{\sum{i=1}^{n}{Ai^2}}\sqrt{\sum{i=1}^{n}{B_i^2}}}]

余弦相似度的范围在-1到1之间,数值越接近1表示两个向量越相似,完全相同时为1;反向时为-1;正交或不相关时为0。Numpy库中的numpy.linalg.norm操作可以计算向量范式。

词向量

词向量是一种将词汇转换为数值向量表示的方法,通过向量可以捕捉词汇之间的关系。例如:

  • 'King' - 'Man' + 'Woman' ≈ 'Queen'
    • 'King'的词向量为:[ 0.50451, 0.68607, -0.59517, -0.022801, 0.60046, -0.13498, -0.08813, 0.47377, -0.61798, -0.31012, -0.076666, 1.493, -0.034189, -0.98173, 0.68229, 0.81722, -0.51874, -0.31503, -0.55809, 0.66421, 0.1961, -0.13495, -0.11476, -0.30344, 0.41177, -2.223, -1.0756, -1.0783, -0.34354, 0.33505, 1.9927, -0.04234, -0.64319, 0.71125, 0.49159, 0.16754, 0.34344, -0.25663, -0.8523, 0.1661, 0.40102, 1.1685, -1.0137, -0.21585, -0.15155, 0.78321, -0.91241, -1.6106, -0.64426, -0.51042]
    • 'Man'与'Woman'之间的相似性较'King'与'Queen'之间的相似性要低。

NNLM模型概述

神经网络语言模型(NNLM)旨在通过学习词向量的权重和概率模型的参数来预测一个文本序列的条件概率。模型包含两部分:

  • Embedding层:将每个词映射为一个固定的向量。
  • 前馈神经网络:接收Embedding层的输出,通过多层处理后输出一个概率分布,表示给定上下文的词概率。

通过最小化交叉熵损失函数来优化模型参数,实现对序列概率的建模。

Word2Vec模型

Word2Vec工具是Google在2013年发布的,通过训练模型使所有词汇向量化,以度量词汇之间的关系。它包含两种模型:

  • SkipGram:通过预测上下文词来学习词向量。
  • CBow:通过预测中心词来学习词向量。

Word2Vec还引入了:

  • 负采样:减少训练时间,通过选择非上下文词为负例。
  • 层次softmax:优化计算效率。

SkipGram模型详解

SkipGram模型关注给定中心词预测上下文词的概率。通过逻辑回归模型简化计算,引入负采样技术减少计算复杂度。训练过程中的关键参数包括窗口大小和负样本数量,应根据任务选择合适值。

CBoW与Negative Sampling

CBoW模型是从上下文预测中心词,通过前馈神经网络学习词向量表示。Negative Sampling技术在Word2Vec中用于优化训练过程,通过选择非上下文词为负例,减少计算复杂度和提高训练效率。

具体代码实现:

计算余弦相似度的Python函数:

import numpy as np

def cosine_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

# 示例向量
vec1 = np.array([1, 2, 3])
vec2 = np.array([4, 5, 6])

# 计算余弦相似度
sim = cosine_similarity(vec1, vec2)
print("余弦相似度:", sim)

使用Gensim实现Word2Vec的SkipGram模型:

from gensim.models import Word2Vec
from gensim.models.keyedvectors import KeyedVectors

# 假设我们已经准备了语料库句子数据
sentences = [["king", "man", "queen"], ["king", "woman", "queen"], ...]

# 训练Word2Vec模型
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)

# 保存模型
model.save("word2vec_model.bin")

# 加载模型
loaded_model = Word2Vec.load("word2vec_model.bin")

# 查询向量
king_vector = loaded_model.wv['king']

# 简单的向量加法(注意这通常不是数学意义下的加法,而是一种基于模型的加权平均)
queen_approx = king_vector - model.wv['man'] + model.wv['woman']
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消