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

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

标签:
杂七杂八
概述

自然语言处理领域,word3vec学习涵盖了特征向量、词向量、神经网络语言模型(NNLM)及跨语言翻译等多个关键概念。特征向量通过心理学中的人格五大特质(OCEAN)来描述个体特征,并用余弦相似度衡量特质之间的相关性。词向量则是将词汇意义转化为数值向量,以便在计算机中进行处理和分析,如通过“King-Man + Woman = Queen”示例展示词向量之间的运算。神经网络语言模型(NNLM)利用神经网络结构学习词向量,结合统计语言模型预测序列条件概率。word3vec学习中的Word2Vec方法是通过skip-gram和连续词袋模型(CBow)进行词的嵌入学习,广泛应用于现代NLP任务中。

特征向量

在现代自然语言处理领域,心理学中的人格五大特质(OCEAN)被广泛应用于描述个体特征。这五个维度分别是:

  • 开放性:包括创新性、好奇心、审美意识和对新奇事物的接纳度。
  • 责任心:体现的是个体的自律性、计划性、可靠性以及完成任务的意愿。
  • 外倾性:描绘的是个体的社会性、交际倾向和在社交场合的活跃度。
  • 宜人性:涉及对他人的友好、合作与同情心。
  • 神经质性:指的是个体对情绪的敏感度、情绪波动的稳定性。

余弦相似度是衡量这两个特质向量之间的角度,计算公式为:

[
\text{相似度} = \frac{A \cdot B}{|A||B|}
]

其中,(A \cdot B) 是向量点积,(|A|) 和 (|B|) 分别是向量 A 和 B 的范式。

在多维空间中,两个不同向量的相似度可以通过它们之间的余弦角度来度量,余弦值越接近 1,表示向量越相似。

示例代码

接下来,我们将使用Python代码来计算余弦相似度:

import numpy as np

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

# 定义人格特质向量
jay特质向量 = np.array([-0.4, 0.8, 0.5, -0.2, 0.3])
特质向量_p1 = np.array([-0.3, 0.2, 0.3, -0.4, 0.9])
特质向量_p2 = np.array([-0.5, 0.4, -0.2, 0.7, -0.1])

# 计算相似度
相似度_p1 = cos_similarity(jay特质向量, 特质向量_p1)
相似度_p2 = cos_similarity(jay特质向量, 特质向量_p2)

print("相似度 jay 和 p1:", 相似度_p1)
print("相似度 jay 和 p2:", 相似度_p2)

词向量

词向量旨在以数学形式表示词汇意义,通过机器学习方法,将文本数据转换为数值向量形式,从而在计算机系统中进行处理与分析。

例子:King-Man + Woman = Queen

在预训练词向量模型中(如GloVe或Word2Vec),特定词汇如"King"可能被编码成如下向量:

# 假设"King"的向量为 [0.50451, 0.68607, -0.59517, ...]

# 相似度计算
def get_similarity(vector1, vector2):
    return np.dot(vector1, vector2) / (np.linalg.norm(vector1) * np.linalg.norm(vector2))

king_vector = ...  # 假设"King"的向量
man_vector = ...  # 假设"Man"的向量
woman_vector = ...  # 假设"Woman"的向量
queen_vector = ...  # 假设"Queen"的向量

# 计算向量之间的相似度
similarity_king_man = get_similarity(king_vector, man_vector)
similarity_woman = get_similarity(woman_vector)
similarity_queen = get_similarity(queen_vector)

# 计算公式:King - Man + Woman ≈ Queen
approx_queen = king_vector - man_vector + woman_vector

# 输出结果
print("Approximated Queen vector:", approx_queen)
print("Similarity between approximated Queen and actual Queen:", get_similarity(approx_queen, queen_vector))

跨语言同义词共现

跨语言翻译利用词向量空间的相似性。通过在不同语言空间下的低维表示,实现语义的映射。

示例代码

def align_vectors(english_vector, spanish_vector, dimension=2):
    pca = PCA(n_components=dimension)
    pca.fit(np.vstack((english_vector, spanish_vector)))
    return pca.transform(english_vector), pca.transform(spanish_vector)

# 假设存在英语和西班牙语词向量列表
english_vectors = ...  # 英语词向量列表
spanish_vectors = ...  # 西班牙语词向量列表

aligned_english, aligned_spanish = align_vectors(english_vectors, spanish_vectors)

神经网络语言模型(NNLM)

神经网络语言模型通过神经网络结构学习词向量,结合统计语言模型来预测序列的条件概率。

示例代码

import torch
from torch import nn

class NeuralNetworkLanguageModel(nn.Module):
    def __init__(self, vocab_size, embedding_dim, hidden_dim):
        super().__init__()
        self.embedding = nn.Embedding(vocab_size, embedding_dim)
        self.rnn = nn.RNN(embedding_dim, hidden_dim)
        self.fc = nn.Linear(hidden_dim, vocab_size)

    def forward(self, input, hidden):
        embedded = self.embedding(input)
        output, hidden = self.rnn(embedded, hidden)
        output = self.fc(output)
        return output, hidden

# 假设的模型参数
vocab_size = ...
embedding_dim = ...
hidden_dim = ...

model = NeuralNetworkLanguageModel(vocab_size, embedding_dim, hidden_dim)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

Word2Vec

Word2Vec 是Google在2013年推出的一种流行的词向量学习方法,它通过skip-gram和连续词袋模型(CBow)两种方法进行词的嵌入学习。

示例代码

from gensim.models import Word2Vec

# 示例语料
sentences = [["我", "喜欢", "编程"], ["我喜欢", "学习"], ...]

# 使用Word2Vec训练模型
model = Word2Vec(sentences, min_count=1)
print(model['编程'])  # 输出"编程"的词向量
点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消