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/zh-tw/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

發表回復

登錄後才能評論