自然语言处理NLP中的连续词袋(Continuous bag of words,CBOW)方法、优势、作用和程序举例

目录

  • 自然语言处理NLP中的连续词袋(Continuous bag of words,CBOW)方法、优势、作用和程序举例
    • 一、连续词袋( Continuous Bag of Words, CBOW)介绍
      • 1.1 什么是词嵌入( Word embeddings)
      • 1.2 什么是连续词袋(CBOW)
      • 1.3 连续词袋优势
        • (1)高效性
        • (2)灵活性
        • (3)鲁棒性
      • 1.4 CBOW模型体系结构(CBOW Architecture)
      • 1.5 词袋( Bag-of-Words, BoW)模型和连续词袋(Continuous Bag-of-Words , CBOW)模型区别
    • 二 、连续词袋的作用
      • 2.1. 词嵌入生成
        • (1)核心功能
        • (2)工作原理
      • 2.2. 提升语义理解能力
        • (1)捕捉语义关系
        • (2)减少维度灾难
    • 三、连续词袋应用场景
      • 3.1 文本分类
      • 3.2 机器翻译
      • 3.3 情感分析
      • 3.4 信息检索
    • 四、CBOW代码实现举例
      • 4.1 对词语料库进行向量化
      • 4.2 构建一个CBOW模型
      • 4.3 使用模型可视化词嵌入
    • 五、总结

为了使得计算机理解一个文本,可以将文本中的词表示为数字向量。连续词袋(Continuous Bag of Words, CBOW)是一种用于自然语言处理中的词嵌入模型,它是Word2Vec算法的一种变体。
Word2vec是一种基于神经网络的生成单词嵌入的方法,它是词的密集向量表示( dense vector representations of words),能够描述词的语义和关系。实现 Word2vec主要有两种方法:(1) 连续词袋(Continuous bag-of-words, CBOW) ; (2) 跳字模型(Skip-gram)。

本节重点介绍连续词袋(Continuous bag-of-words, CBOW) 内容。

一、连续词袋( Continuous Bag of Words, CBOW)介绍

1.1 什么是词嵌入( Word embeddings)

词嵌入(Word embeddings)是多数NLP任务中重要的描述了词的语义以及语言中词之间的句法关系的方法,是一种表示词为数字向量的方法。

1.2 什么是连续词袋(CBOW)

CBOW是一种根据目标词周围上下文预测目标词的基于神经网络的算法,是一种用于生成词嵌入的流行的自然语言处理技术。它是一种可以从未标记的数据中学习的无监督学习方法,如图1所示。

在这里插入图片描述
图1 CBOW模型举例

1.3 连续词袋优势

(1)高效性

相比其他方法,CBOW能够在较短的时间内完成大规模数据集上的训练。

(2)灵活性

可以很容易地集成到更复杂的NLP系统中去。

(3)鲁棒性

即使面对拼写错误或罕见词汇时,也能给出合理的表示。

1.4 CBOW模型体系结构(CBOW Architecture)

CBOW模型使用周围的上下文词来预测目标词。考虑上面的例子’’ He is a great man“。CBOW模型将该短语转换为上下文词和目标词对。在窗口大小为2的情况下,词对(word pairings)将呈现如下形式([He, a],is), ([is, great], a), ([a, man],great)。

在这里插入图片描述

图2 CBOW模型体系结构

该模型考虑上下文单词,并尝试预测目标词。如果使用四个单词作为上下文单词来预测一个目标词,则四个1∗W输入向量将被传递给输入层(input layer)。隐藏层(hidden layer )将接收输入向量,然后将它们乘以 W∗N 矩阵。最后,来自隐藏层的1∗N输出进入求和层。在该层中,向量进行元素级求和再执行最终激活,然后从输出层获得输出。

1.5 词袋( Bag-of-Words, BoW)模型和连续词袋(Continuous Bag-of-Words , CBOW)模型区别

词袋模型BoW和连续词袋模型CBOW都是自然语言处理中使用的以计算机可读格式表示文本的技术,但它们在描述上下文的方式上有所不同。

(1) BoW模型将给定文档(given document)或语料库(corpus)中的文本表示为单词及其频率的集合。它不考虑单词出现的顺序或上下文,因此,它可能无法捕获文本的全部含义。BoW模型简单易实现,但在理解语言意义方面存在局限性。
(2)相比之下,CBOW模型是一种基于神经网络的方法,可以捕获单词的上下文。它根据上下文窗口前后出现的词来学习预测目标词。CBOW模型通过考虑周围的词,可以更好地捕捉给定上下文中的词义。

二 、连续词袋的作用

连续词袋的作用主要有以下四方面:

2.1. 词嵌入生成

(1)核心功能

CBOW通过上下文预测目标词的方式,将词语映射到一个固定维度的稠密向量空间中。

(2)工作原理

给定一个词的上下文(即若干个相邻的词),模型的目标是预测这个上下文所对应的中心词。例如,在句子“我喜欢吃西红柿”中,如果已知上下文是“喜欢”和“吃”,那么CBOW会尝试预测中心词“西红柿”。

2.2. 提升语义理解能力

(1)捕捉语义关系

通过训练,CBOW能够捕捉到词汇之间的语义关系。比如,“国王”与“王后”的关系类似于“男人”与“女人”的关系。

(2)减少维度灾难

相比于传统的稀疏表示方法,词嵌入可以有效减少数据维度,使得后续任务更加高效。

三、连续词袋应用场景

3.1 文本分类

利用预训练好的词向量作为特征输入到分类器中。

3.2 机器翻译

在神经网络翻译模型中使用词向量来提高翻译质量。

3.3 情感分析

通过对文本进行词嵌入后,可以更好地识别文本的情感倾向。

3.4 信息检索

基于词向量的距离度量来进行文档相似度计算或者查询扩展。

四、CBOW代码实现举例

在此,通过CBOW模型实现词嵌入,以展示单词之间的相似性。在本文中,定义了自己的词语料库,你可以使用任何数据集。

4.1 对词语料库进行向量化

首先,将导入所有必要的库;其次,定义语料库。然后,将对每个单词进行分词( tokenize each word),并将其转换为整数向量。

# 1.导入需要的模块
from tensorflow.keras.preprocessing.text import Tokenizer# 2.定义语料库
corpus = ['The Fish swam in the water','The cat sat on the mat','The horse galloped on the grassland','The dog ran in the park','The bird sang in the tree'
]# 3.将语料库转换为整数向量
tokenizer = Tokenizer()
tokenizer.fit_on_texts(corpus)
sequences = tokenizer.texts_to_sequences(corpus)
print("将语料库中的单词转换为整数向量后:",sequences)

运行输出结果:在这里插入图片描述

4.2 构建一个CBOW模型

接着,建立一个窗口大小=2的CBOW模型

# 1.导入需要的模块
from tensorflow.keras.preprocessing.text import Tokenizer
import numpy as np
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, Lambda, Dense
import tensorflow as tf
# 2.定义语料库
corpus = ['The Fish swam in the water','The cat sat on the mat','The horse galloped on the grassland','The dog ran in the park','The bird sang in the tree'
]# 3.将语料库转换为整数向量
tokenizer = Tokenizer()
tokenizer.fit_on_texts(corpus)
sequences = tokenizer.texts_to_sequences(corpus)
print("将语料库中的单词转换为整数向量后:",sequences)# 4。定义参数
vocab_size = len(tokenizer.word_index) + 1
embedding_size = 10
window_size = 2# 5.产生上下文——目标对
contexts = []
targets = []
for sequence in sequences:for i in range(window_size, len(sequence) - window_size):context = sequence[i - window_size:i] + sequence[i + 1:i + window_size + 1]target = sequence[i]contexts.append(context)targets.append(target)# 6.转换上下文和目标为numpy向量X = np.array(contexts)
y = to_categorical(targets, num_classes=vocab_size)# 7.定义CBOW模型model = Sequential()
model.add(Embedding(input_dim=vocab_size, output_dim=embedding_size, input_length=2 * window_size))
model.add(Lambda(lambda x: tf.reduce_mean(x, axis=1)))
model.add(Dense(units=vocab_size, activation='softmax'))# 8.编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])# 9.训练此模型
model.fit(X, y, epochs=100, verbose=0)
print(model.summary())

运行结果为:
在这里插入图片描述

4.3 使用模型可视化词嵌入

最后,使用模型进行可视化。

# 1.导入需要的模块
from tensorflow.keras.preprocessing.text import Tokenizerimport numpy as np
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, Lambda, Dense
import tensorflow as tffrom sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# 2.定义语料库
corpus = ['The Fish swam in the water','The cat sat on the mat','The horse galloped on the grassland','The dog ran in the park','The bird sang in the tree'
]# 3.将语料库转换为整数向量
tokenizer = Tokenizer()
tokenizer.fit_on_texts(corpus)
sequences = tokenizer.texts_to_sequences(corpus)
print("将语料库中的单词转换为整数向量后:",sequences)# 4.定义参数
vocab_size = len(tokenizer.word_index) + 1
embedding_size = 10
window_size = 2# 5. 产生上下文——目标对
contexts = []
targets = []
for sequence in sequences:for i in range(window_size, len(sequence) - window_size):context = sequence[i - window_size:i] + sequence[i + 1:i + window_size + 1]target = sequence[i]contexts.append(context)targets.append(target)# 6. 转换上下文和目标为numpy向量X = np.array(contexts)
y = to_categorical(targets, num_classes=vocab_size)# 7. 定义CBOW模型model = Sequential()
model.add(Embedding(input_dim=vocab_size, output_dim=embedding_size, input_length=2 * window_size))
model.add(Lambda(lambda x: tf.reduce_mean(x, axis=1)))
model.add(Dense(units=vocab_size, activation='softmax'))# 8.编译模型model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])# 9.训练此模型
model.fit(X, y, epochs=100, verbose=0)# 10.提取词嵌入
# Extract the embeddings
embedding_layer = model.layers[0]
embeddings = embedding_layer.get_weights()[0]# 11.执行PCA以降低词嵌入维度pca = PCA(n_components=2)
reduced_embeddings = pca.fit_transform(embeddings)# 12.可视化词嵌入
plt.figure(figsize=(6, 6))
for word, idx in tokenizer.word_index.items():x, y = reduced_embeddings[idx]plt.scatter(x, y)plt.annotate(word, xy=(x, y), xytext=(5, 2),textcoords='offset points', ha='right', va='bottom')
plt.title("Word Embeddings Visualized")
plt.show()

运行结果:

在这里插入图片描述

这种可视化使能够根据单词的嵌入来观察单词的相似性。词或上下文意思相似的,在图中应该彼此接近。

五、总结

连续词袋模型通过学习词语之间的共现概率分布,成功地将离散的词汇转换成了连续的空间表示形式,这对于许多需要深层次语义理解的应用来说是非常重要的工具之一。本文介绍了自然语言处理NLP中的连续词袋(Continuous bag of words,CBOW)的概念,优势,作用,应用场景,并通过程序举例说明其用法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/80501.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/80501.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/80501.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商业模式解密:鸣鸣很忙下沉市场的隐忧,破局之路在何方?

文 | 大力财经 作者 | 魏力 在零售行业的版图中,“鸣鸣很忙”凭借独特的商业模式,在下沉市场异军突起,成为不可忽视的力量。555亿GMV、广泛的县域覆盖以及高比例的乡镇门店,无疑彰显了其在下沉市场的王者地位。然而,…

YOLOv5推理代码解析

代码如下 import cv2 import numpy as np import onnxruntime as ort import time import random# 画一个检测框 def plot_one_box(x, img, colorNone, labelNone, line_thicknessNone):"""description: 在图像上绘制一个矩形框。param:x: 框的坐标 [x1, y1, x…

CATIA高效工作指南——常规配置篇(二)

一、结构树(Specification Tree)操作技巧精讲 结构树是CATIA设计中记录模型历史与逻辑关系的核心模块,其高效管理直接影响设计效率。本节从基础操作到高级技巧进行系统梳理。 1.1 结构树激活与移动 ​​激活方式​​: ​​白线…

批量重命名bat

作为一名程序员,怎么可以自己一个个改文件名呢! Windows的批量重命名会自动加上括号和空格,看着很不爽,写一个bat处理吧!❥(ゝω・✿ฺ) 功能:将当前目录下的所有文件名里面当括号和空格都去掉。 用法&…

嵌入式软件开发常见warning之 warning: implicit declaration of function

文章目录 🧩 1. C 编译流程回顾(背景)📍 2. 出现 warning 的具体阶段:**编译阶段(Compilation)**🧬 2.1 词法分析(Lexical Analysis)🌲 2.2 语法分…

【人工智能-agent】--Dify中MCP工具存数据到MySQL

本文记录的工作如下: 自定义MCP工具,爬取我的钢铁网数据爬取的数据插值处理自定义MCP工具,把爬取到的数据(str)存入本地excel表格中自定义MCP工具,把爬取到的数据(str)存入本地MySQ…

Golang 应用的 CI/CD 与 K8S 自动化部署全流程指南

一、CI/CD 流程设计与工具选择 1. 技术栈选择 版本控制:Git(推荐 GitHub/GitLab)CI 工具:Jenkins/GitLab CI/GitHub Actions(本文以 GitHub Actions 为例)容器化:Docker Docker Compose制品库…

网络基础1(应用层、传输层)

目录 一、应用层 1.1 序列化和反序列化 1.2 HTTP协议 1.2.1 URL 1.2.2 HTTP协议格式 1.2.3 HTTP服务器示例 二、传输层 2.1 端口号 2.1.1 netstat 2.1.2 pidof 2.2 UDP协议 2.2.1 UDP的特点 2.2.2 基于UDP的应用层…

基于大模型预测的吉兰 - 巴雷综合征综合诊疗方案研究报告大纲

目录 一、引言(一)研究背景(二)研究目的与意义二、大模型预测吉兰 - 巴雷综合征的理论基础与技术架构(一)大模型原理概述(二)技术架构设计三、术前预测与手术方案制定(一)术前预测内容(二)手术方案制定依据与策略四、术中监测与麻醉方案调整(一)术中监测指标与数…

【言语】刷题2

front:刷题1 ⭐ 前对策的说理类 题干 新时代是转型关口,要创新和开放(前对策)创新和开放不能一蹴而就,但是对于现代化很重要 BC片面,排除 A虽然表达出了创新和开放很重要,体现了现代化&#xf…

Blueprints - Gameplay Message Subsystem

一些学习笔记归档; Gameplay Message是C插件,安装方式是把插件文件夹拷贝到Plugins中(没有的话需要新建该文件夹),然后再刷新源码,运行项目; 安装后还需要在插件中激活: 这样&#…

火山云网站搭建

使用火山引擎的 **火山云(Volcano Engine Cloud)** 搭建网站,主要涉及云服务器、存储、网络等核心云服务的配置。以下是搭建网站的基本步骤和关键点: --- ### **一、准备工作** 1. **注册火山引擎账号** - 访问火山引擎官网&…

嵌入式开发学习(第二阶段 C语言基础)

直到型循环的实现 特点:先执行,后判断,不管条件是否满足,至少执行一次。 **代表:**do…while,goto(已经淘汰,不推荐使用) do…while 语法: 循环变量; do {循环体; }…

Nginx +Nginx-http-flv-module 推流拉流

这两天为了利用云服务器实现 Nginx 进行OBS Rtmp推流,Flv拉流时发生了诸多情况,记录实现过程。 环境 OS:阿里云CentOS 7.9 64位Nginx:nginx-1.28.0Nginx-http-flv-module:nginx-http-flv-module-1.2.12 安装Nginx编…

射频ADRV9026驱动

参考: ADRV9026 & ADRV9029 Prototyping Platform User Guide [Analog Devices Wiki] 基于ADRV9026的四通道射频收发FMC子卡-CSDN博客 adrv9026 spi 接口验证代码-CSDN博客

使用本地部署的 LLaMA 3 模型进行中文对话生成

以下程序调用本地部署的 LLaMA3 模型进行多轮对话生成,通过 Hugging Face Transformers API 加载、预处理、生成并输出最终回答。 程序用的是 Chat 模型格式(如 LLaMA3 Instruct 模型),遵循 ChatML 模板,并使用 apply…

Oracle19c中的全局临时表

应用程序通常使用某种形式的临时数据存储来处理过于复杂而无法一次性完成的流程。通常,这些临时存储被定义为数据库表或 PL/SQL 表。从 Oracle 8i 开始,可以使用全局临时表将临时表的维护和管理委托给服务器。 一、临时表分类 Oracle 支持两种类型的临…

Windows 安装 Milvus

说明 操作系统:Window 中间件:docker desktop Milvus:Milvus Standalone(单机版) 安装 docker desktop 参考:Window、CentOs、Ubuntu 安装 docker-CSDN博客 安装 Milvus 参考链接:Run Mil…

24、DeepSeek-V3论文笔记

DeepSeek-V3论文笔记 **一、概述****二、核心架构与创新技术**0.汇总:1. **基础架构**2. **创新策略** 1.DeepSeekMoE无辅助损失负载均衡DeepSeekMoE基础架构无辅助损失负载均衡互补序列级辅助损失 2.多令牌预测(MTP)1.概念2、原理2.1BPD2.2M…

1.8 梯度

(知识体系演进逻辑树) 一元导数(1.5) │ ├─→ 多元偏导数(1.6核心突破) │ │ │ └─解决:多变量耦合时的单变量影响分析 │ │ │ ├─几何:坐标轴切片切线斜率…