【深度学习】最强算法之:Word2Vec

1、引言

小屌丝:鱼哥, help ,help
小鱼: 你这是在鱼塘里面无法呼吸了?
小屌丝:… 别闹,鱼哥,
小鱼:你平时问我问题,可都是说中文的, 只有一种情况,说的事英文.
小屌丝:…这…这 … 唉
小鱼:所以,我说你在鱼塘里面…
小屌丝:唉~~ 可不能这么说, 我这是正儿八经的求助
小鱼:那你说说, 要问啥呢?
小屌丝:就是 ,Word
小鱼:啊? Word还问?
小屌丝: 我没说完呢, Word2Vec
小鱼:这整的,我还以为你问Word呢,Word2Vec咋了?
小屌丝:我不会啊
小鱼:不会就学啊
小屌丝:我这不向你请教了嘛
小鱼: 那…楼下的烟火味挺浓啊
小屌丝:啊… 好说好说, 我这就给老板娘打电话,留桌。
小鱼:这… 多不好意思啊。
在这里插入图片描述

2、Word2Vec

2.1 定义

Word2Vec 是一种用于学习词向量表示的自然语言处理(NLP)技术。其核心思想是将文本中的单词映射到高维空间中的向量,使得这些向量能够捕捉单词之间的语义和语法关系。

Word2Vec 的两种主要模型是 Skip-GramContinuous Bag of Words (CBOW)

2.2 原理

  • CBOW:连续词袋模型通过上下文(即周围的词)来预测当前词。其核心思想是通过上下文的词向量的平均值来预测当前词。

  • Skip-Gram:与CBOW相反,Skip-Gram模型通过当前词来预测上下文。这种方式在处理较小数据集时表现更好,尤其是在捕捉稀有词上。

这两种模型都是通过构建一个神经网络,并通过训练来优化网络权重,从而得到词向量
在这里插入图片描述

2.3 实现方式

Word2Vec的实现主要依赖于两种技术:负采样(Negative Sampling)和层序softmax(Hierarchical Softmax)。

  • 负采样通过随机选择少量的“负”样本来更新权重,以此加速训练过程;
  • 层序softmax则是通过构建一棵哈夫曼树来减少计算复杂度。

在这里插入图片描述

2.4 算法公式

Word2Vec算法的核心是最大化对数似然函数,对于Skip-Gram模型,目标函数可以表示为:

[ L ( θ ) = ∑ t = 1 T ∑ − c ≤ j ≤ c , j ≠ 0 log ⁡ p ( w t + j ∣ w t ; θ ) ] [L(\theta) = \sum_{t=1}^{T}\sum_{-c \leq j \leq c, j \neq 0} \log p(w_{t+j}|w_t;\theta)] [L(θ)=t=1Tcjc,j=0logp(wt+jwt;θ)]

其中, ( w t ) (w_t) (wt)是目标词, ( w t + j ) (w_{t+j}) (wt+j)是上下文词, ( c ) (c) (c)是上下文窗口大小, ( θ ) (\theta) (θ)是模型参数。

2.5 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-05-07
# @Author : Carl_DJ

from gensim.models import Word2Vec
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
import nltk
nltk.download('punkt')
nltk.download('stopwords')

# 示例文本数据,实际应用中你可能会加载一个更大的文本数据集
texts = ["Word2Vec is a group of related models that are used to produce word embeddings.",
         "These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words.",
         "Word2Vec takes as its input a large corpus of text and produces a vector space.",
         "Each unique word in the corpus is assigned a corresponding vector in the space."]

# 分词和去除停用词
stop_words = set(stopwords.words('english'))
sentences = []
for text in texts:
    words = [w for w in word_tokenize(text.lower()) if w.isalpha() and w not in stop_words]
    sentences.append(words)

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

# 使用模型
# 寻找与'word2vec'最相似的词
similar_words = model.wv.most_similar('word2vec', topn=5)
print("与'word2vec'最相似的词有:")
for word, similarity in similar_words:
    print(f"{word}: {similarity}")

# 获取某个词的词向量
word_vector = model.wv['embedding']
print("\n'embedding'的词向量:")
print(word_vector)

# 计算两个词的相似度
similarity = model.wv.similarity('word2vec', 'embedding')
print(f"\n'word2vec'与'embedding'的相似度为:{similarity}")

# 寻找不匹配的词
odd_word = model.wv.doesnt_match("word2vec neural corpus embedding".split())
print(f"\n在'word2vec', 'neural', 'corpus', 'embedding'中,不匹配的词是:{odd_word}")


代码解析

  • 首先下载了必要的nltk数据包,
  • 然后定义了一组文本数据作为输入。
  • 对每个文本进行了分词和去除停用词的预处理步骤,然后使用Word2Vec模型进行训练。
  • 模型训练完成后,使用这个模型来找到与某个词最相似的词、获取特定词的词向量、计算两个词之间的相似度以及寻找不匹配的词。

在这里插入图片描述

3、总结

Word2Vec是深度学习和自然语言处理领域的里程碑算法。

通过将词转换为向量,它能够有效地捕捉到词之间的语义关系,极大地推动了文本相关应用的发展,如情感分析、文本分类和机器翻译等。

尽管它已经有几年的历史,但Word2Vec仍然是自然语言处理领域非常重要的工具之一。

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼,学习【机器学习】&【深度学习】领域的知识。

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carl_奕然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值