CBOW模型详解

一、CBOW模型图

CBOW模型是一种基于神经网络的词向量表示学习方法。CBOW模型的结构如下图所示:

<svg width="550" height="200">
    <rect x="10" y="10" width="100" height="30" fill="#c7fffa" />
    <rect x="130" y="10" width="100" height="30" fill="#c7fffa" />
    <rect x="250" y="10" width="100" height="30" fill="#c7fffa" />
    <rect x="370" y="10" width="100" height="30" fill="#c7fffa" />
    <rect x="490" y="10" width="50" height="30" fill="#c7fffa" />

    <rect x="10" y="70" width="100" height="30" fill="#c7fffa" />
    <rect x="130" y="70" width="100" height="30" fill="#c7fffa" />
    <rect x="250" y="70" width="100" height="30" fill="#c7fffa" />
    <rect x="370" y="70" width="100" height="30" fill="#c7fffa" />
    <rect x="490" y="70" width="50" height="30" fill="#c7fffa" />

    <line x1="60" y1="40" x2="130" y2="40" stroke="black" stroke-width="1" />
    <line x1="180" y1="40" x2="250" y2="40" stroke="black" stroke-width="1" />
    <line x1="300" y1="40" x2="370" y2="40" stroke="black" stroke-width="1" />
    <line x1="420" y1="40" x2="490" y2="40" stroke="black" stroke-width="1" />
    <polyline points="25,80 90,80 90,100 60,100 60,110 90,110 90,130 25,130" fill="#c7fffa" />
    <polyline points="145,80 210,80 210,100 180,100 180,110 210,110 210,130 145,130" fill="#c7fffa" />
    <polyline points="265,80 330,80 330,100 300,100 300,110 330,110 330,130 265,130" fill="#c7fffa" />
    <polyline points="385,80 450,80 450,100 420,100 420,110 450,110 450,130 385,130" fill="#c7fffa" />
    <line x1="515" y1="80" x2="540" y2="80" stroke="black" stroke-width="1" />
    <line x1="515" y1="95" x2="540" y2="95" stroke="black" stroke-width="1" />
    <line x1="515" y1="110" x2="540" y2="110" stroke="black" stroke-width="1" />
    <line x1="515" y1="125" x2="540" y2="125" stroke="black" stroke-width="1" />

    <text x="45" y="25">w(t-2)</text>
    <text x="165" y="25">w(t-1)</text>
    <text x="285" y="25">w(t+1)</text>
    <text x="405" y="25">w(t+2)</text>
    <text x="525" y="25">w(t)</text>

    <text x="57" y="103">w(t-2)</text>
    <text x="177" y="103">w(t-1)</text>
    <text x="297" y="103">w(t+1)</text>
    <text x="417" y="103">w(t+2)</text>
    <text x="527" y="103">→</text>

    <text x="150" y="160">Embedding Layer</text>
    <text x="320" y="160">Sum Layer</text>
    <text x="510" y="160">Softmax Layer</text>
</svg>

CBOW模型的输入是一个固定大小的窗口,将上下文中的词表示成向量,向量之间进行加和或者平均操作,其输出则是中心词的概率分布。模型的学习目标是最大化训练数据中每个样本中间词对应的概率。

二、CBOW模型公式

CBOW模型可以表示成以下的式子:

p(w_t | w_{t-2}, w_{t-1}, w_{t+1}, w_{t+2}) = softmax\left(\frac{1}{C}\sum_{-C\le j \le C,j\ne 0}\textbf{v}_{t+j}\right) 

其中,$w_t$表示中心词,$\textbf{v}_{t}$表示第$t$个词的词向量,$C$表示上下文窗口大小,$softmax(x_i)=\frac{e^{x_i}}{\sum_{j}e^{x_j}}$是softmax函数。

三、CBOW模型详解

1. 输入层

输入层将上下文中的每个词对应的词向量相加或者平均,然后送入下一层。

2. Embedding层

该层是一个映射层,将每个输入的词向量映射到一个低维的空间中,这个空间是可以通过训练来优化的。该层的参数是每个词的词向量表示,是模型需要学习的目标之一。

3. Sum层

该层将每个词的Embedding向量进行累加(或者平均),然后输出中心词的向量表示。

4. Softmax层

该层接收Sum层的输出,将其映射为一个概率分布,分布的每个元素表示中心词为该元素对应的单词的概率。

四、CBOW模型训练词向量的过程

CBOW模型和skip-gram模型都是基于神经网络的词向量表示学习方法,其中训练词向量的过程是一样的。以CBOW模型为例,训练的流程如下:

1. 数据准备

准备好原始的文本数据,然后将其转化为词汇表并统计词频。在CBOW模型中,需要一个固定大小的窗口,即上下文的词数(一般设置为3-5),然后将这个窗口作为一个样本。

2. 初始化参数

首先,要将训练数据中的每个词映射到一个低维空间中,使得该空间中的向量可以表示这些词的语义含义。这样做的一个目的是在低维空间中保留语义上的相似性。通常来说,这个低维空间的维度在几百到几千之间,这个维度也称为向量的长度或者特征数。初始参数可以随机生成。

3. 迭代训练

CBOW模型的训练过程是迭代的,对于每个样本,模型将预测中心词的概率最大化。这个最大化的过程可以用最小化negative log likelihood来实现:

-log p(w_c|w_o) = -log \frac{e^{u_c^T v_o}}{\sum_{w\in vocab} e^{u_w^T v_o}} = - u_c^T v_o + log \sum_{w \in vocab}e^{u_w^T v_o}

其中,$u_c$表示中心词,$v_o$表示上下文中的一个词,$vocab$表示整个词汇表。通过梯度下降法来最小化negative log likelihood,同时更新参数。

五、CBOW模型和skipgram的区别

两者的区别在于输入和输出的不同。在CBOW模型中,输入是上下文中的多个词,输出是中心词的概率分布。而skipgram模型中,输入是中心词,输出是上下文中多个词的概率分布。因此,两者是对称的。

另外,CBOW模型的训练速度比skipgram快,但在大型语料库上表现可能会略逊于skipgram模型。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/259282.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-15 16:28
下一篇 2024-12-15 16:28

相关推荐

  • TensorFlow Serving Java:实现开发全功能的模型服务

    TensorFlow Serving Java是作为TensorFlow Serving的Java API,可以轻松地将基于TensorFlow模型的服务集成到Java应用程序中。…

    编程 2025-04-29
  • Python训练模型后如何投入应用

    Python已成为机器学习和深度学习领域中热门的编程语言之一,在训练完模型后如何将其投入应用中,是一个重要问题。本文将从多个方面为大家详细阐述。 一、模型持久化 在应用中使用训练好…

    编程 2025-04-29
  • Python实现一元线性回归模型

    本文将从多个方面详细阐述Python实现一元线性回归模型的代码。如果你对线性回归模型有一些了解,对Python语言也有所掌握,那么本文将对你有所帮助。在开始介绍具体代码前,让我们先…

    编程 2025-04-29
  • ARIMA模型Python应用用法介绍

    ARIMA(自回归移动平均模型)是一种时序分析常用的模型,广泛应用于股票、经济等领域。本文将从多个方面详细阐述ARIMA模型的Python实现方式。 一、ARIMA模型是什么? A…

    编程 2025-04-29
  • VAR模型是用来干嘛

    VAR(向量自回归)模型是一种经济学中的统计模型,用于分析并预测多个变量之间的关系。 一、多变量时间序列分析 VAR模型可以对多个变量的时间序列数据进行分析和建模,通过对变量之间的…

    编程 2025-04-28
  • 如何使用Weka下载模型?

    本文主要介绍如何使用Weka工具下载保存本地机器学习模型。 一、在Weka Explorer中下载模型 在Weka Explorer中选择需要的分类器(Classifier),使用…

    编程 2025-04-28
  • Python实现BP神经网络预测模型

    BP神经网络在许多领域都有着广泛的应用,如数据挖掘、预测分析等等。而Python的科学计算库和机器学习库也提供了很多的方法来实现BP神经网络的构建和使用,本篇文章将详细介绍在Pyt…

    编程 2025-04-28
  • Python AUC:模型性能评估的重要指标

    Python AUC是一种用于评估建立机器学习模型性能的重要指标。通过计算ROC曲线下的面积,AUC可以很好地衡量模型对正负样本的区分能力,从而指导模型的调参和选择。 一、AUC的…

    编程 2025-04-28
  • 量化交易模型的设计与实现

    本文将从多个方面对量化交易模型进行详细阐述,并给出对应的代码示例。 一、量化交易模型的概念 量化交易模型是一种通过数学和统计学方法对市场进行分析和预测的手段,可以帮助交易者进行决策…

    编程 2025-04-27
  • Python决定系数0.8模型可行吗

    Python决定系数0.8模型的可行性,是在机器学习领域被广泛关注的问题之一。本篇文章将从多个方面对这个问题进行详细的阐述,并且给出相应的代码示例。 一、Python决定系数0.8…

    编程 2025-04-27

发表回复

登录后才能评论