自然语言处理之PyTorch实现词袋CBOW模型

在自然语言处理(NLP)领域,词向量(Word Embedding)是将文本转换为数值向量的核心技术。它能让计算机“理解”词语的语义关联,例如“国王”和“女王”的向量差可能与“男人”和“女人”的向量差相似。而Word2Vec作为经典的词向量训练模型,其核心思想是通过上下文预测目标词(或反之)。本文将以 --CBOW(连续词袋模型)为例,带你从代码到原理,一步步实现一个简单的词向量训练过程。

一、CBOW模型简介

CBOW(Continuous Bag-of-Words)是Word2Vec的两种核心模型之一。其核心思想是:给定目标词的上下文窗口内的所有词,预测目标词本身。例如,对于句子“We are about to study”,若上下文窗口大小为2(即目标词左右各取2个词),则当目标词是“about”时,上下文是“We, are, to, study”,模型需要根据这4个词预测出“about”。

CBOW的优势在于通过平均上下文词向量来预测目标词,计算效率高;缺点是对低频词不友好。本文将实现的CBOW模型包含词嵌入层、投影层和输出层,最终输出目标词的概率分布。

二、环境准备与数据预处理

2.1 进度条库安装

pip install torch numpy tqdm

2.2 语料库与基础设置

我们使用一段英文文本作为语料库,并定义上下文窗口大小(CONTEXT_SIZE=2,即目标词左右各取2个词):

CONTEXT_SIZE = 2  # 上下文窗口大小(左右各2个词)
raw_text = """We are about to study the idea of a computational process.
Computational processes are abstract beings that inhabit computers.
As they evolve, processes manipulate other abstract things called data.
The evolution of a process is directed by a pattern of rules
called a program. People create programs to direct processes. In effect,
we conjure the spirits of the computer with our spells.""".split()  # 按空格分割成单词列表

2.3 构建词汇表与映射

为了将文本转换为模型可处理的数值,需要先构建词汇表(所有唯一词),并为每个词分配唯一索引:

vocab = set(raw_text)  # 去重后的词汇表(集合)
vocab_size = len(vocab)  # 词汇表大小(本文示例中为49)

# 词到索引的映射(如:"We"→0,"are"→1)
word_to_idx = {
   
   word: i for i, word in enumerate(vocab)}
# 索引到词的反向映射(如:0→"We",1→"are")
idx_to_word = {
   
   i: word for i, word in enumerate(vocab)}

三、生成训练数据:上下文-目标词对

CBOW的训练数据是“上下文词列表”与“目标词”的配对。例如,若目标词是raw_text[i],则上下文是[raw_text[i-2], raw_text[i-1], raw_text[i+1], raw_text[i+2]](假设窗口大小为2)。

3.1 数据生成逻辑

通过遍历语料库,跳过前CONTEXT_SIZE和后CONTEXT_SIZE个词(避免越界),生成上下文-目标词对:

data = []
fo
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值