ホームページ >テクノロジー周辺機器 >AI >単語の継続的な袋(cbow)を理解する

単語の継続的な袋(cbow)を理解する

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2025-03-17 09:46:09866ブラウズ

NLPでは、研究されている単語間の関係であるため、セマンティクスが重要です。最も単純でありながら非常に効果的な手順の1つは、単語ベクトルと呼ばれる非常に意味のあるベクトルに単語をマップする単語の連続袋(CBOW)です。 CBOWはWord2Vecフレームワークで使用され、言語の意味的および構文的な意味をキャプチャする単語に基づいて単語を予測します。この記事では、読者はCBOWモデルの動作とその使用方法について学びます。

学習目標

  • CBOWモデルの背後にある理論を理解してください。
  • CbowとSkip-Gramの違いを学びます。
  • データセットの例を使用して、PythonにCBOWモデルを実装します。
  • CBOWの利点と制限を分析します。
  • CBOWによって生成された単語埋め込みのユースケースを探索します。

目次

  • 単語モデルの連続バッグとは何ですか?
  • 単語の連続袋がどのように機能するか
  • CBOWアーキテクチャは詳細に説明しました
  • cbowをゼロからコーディングする(pythonの例を使用)
  • 単語の継続的な袋の利点
  • 単語の継続的な袋の制限
  • よくある質問

単語モデルの連続バッグとは何ですか?

単語の連続袋(CBOW)は、ニューラルネットワークを使用して単語の埋め込みを決定するときに使用されるモデルでもあり、Tomas MikolovによるWord2VECモデルの一部です。 Cbowは、特定の文で観察する文脈単語に応じて、ターゲットワードを予測しようとします。このようにして、セマンティック関係をキャプチャすることができるため、密接な単語は高次元空間で密接に表されます。

たとえば、 「猫はマットに座っていた」という文で、コンテキストウィンドウのサイズが2の場合、 「sat」のコンテキスト単語は[「the」、「cat」、「on」、「the」です。モデルのタスクは「sat」という単語を予測することです。

CBOWは、コンテキスト単語(たとえば、埋め込みの平均)を集約し、この集計表現を使用してターゲットワードを予測することにより動作します。モデルのアーキテクチャには、コンテキスト単語の入力層、生成を埋め込むための隠されたレイヤー、および確率分布を使用してターゲットワードを予測する出力層が含まれます。

これは、頻繁な単語の処理に適した高速で効率的なモデルであり、テキスト分類、推奨システム、センチメント分析など、セマンティック理解を必要とするタスクに最適です。

単語の連続袋がどのように機能するか

CBOWは、単語の語彙全体がベクターにマッピングされる場合の単語埋め込みのコンテキストに従って、最も単純で効率的な手法の1つです。また、このセクションでは、CBOWシステムの動作については、最も基本的なレベルでメソッドを理解する手段として説明し、CBOWメソッドを支える主なアイデアについて議論し、CBOW HIT計算システムのアーキテクチャレイアウトの包括的なガイドを提供します。

コンテキストとターゲットの単語を理解する

CBOWは、コンテキストワードとターゲットワードの2つの重要な概念に依存しています。

  • コンテキストワード:これらは、定義されたウィンドウサイズ内のターゲットワードを取り巻く単語です。たとえば、文で:
    「クイックブラウンフォックスは怠zyな犬を飛び越えます」
    ターゲットワードが「フォックス」で、コンテキストウィンドウサイズが2の場合、コンテキストワードは[「クイック」、「ブラウン」、「ジャンプ」、「オーバー」]です。
  • ターゲットワード:これは、CBOWがコンテキスト単語を考えると、予測することを目指している単語です。上記の例では、ターゲットワードは「フォックス」です。

CBOWは、コンテキストとターゲットワードの関係を大規模なコーパス間で分析することにより、単語間のセマンティックな関係をキャプチャする埋め込みを生成します。

CBOWの段階的なプロセス

CBOWの仕組みの内訳は次のとおりです。

ステップ1:データの準備

  • テキストのコーパス(文や段落など)を選択します。
  • テキストを言葉にトークン化し、語彙を作成します。
  • コンテキストウィンドウサイズnnnを定義します(たとえば、両側に2つの単語)。

ステップ2:コンテキストターゲットペアを生成します

  • コーパス内の各単語について、ウィンドウサイズに基づいて周囲のコンテキストワードを抽出します。
  • 例: 「私は機械学習が大好き」n = 2n = 2n = 2の文の場合、ペアは次とおりです。

ステップ3:ワンホットエンコーディング

コンテキストワードとターゲットワードを、語彙サイズに基づいて1ホットのベクトルに変換します。サイズ5の語彙の場合、「愛」という言葉の1つのホット表現は[0、1、0、0、0]のように見えるかもしれません。

ステップ4:埋め込み層

埋め込み層を介して1ホットのエンコードされたコンテキストワードを渡します。このレイヤーは、各単語を密なベクトル表現にマッピングします。通常、語彙サイズよりも低い寸法です。

ステップ5:コンテキスト集約

すべてのコンテキスト単語の埋め込み(たとえば、それらを平均化または合計すること)を集約して、単一のコンテキストベクトルを形成します。

ステップ6:予測

  • 集約されたコンテキストベクトルを、ソフトマックス出力層を使用して、完全に接続されたニューラルネットワークに送ります。
  • モデルは、語彙上の確率分布に基づいて、ターゲットとして最も可能性の高い単語を予測します。

ステップ7:損失の計算と最適化

  • クロスエントロピー損失関数を使用して、予測されたターゲットワードと実際のターゲットワードの間のエラーを計算します。
  • エラーをバックプロパゲートして、埋め込み層と予測層の重みを調整します。

ステップ8:すべてのペアに対して繰り返します

モデルが収束するまで、コーパス内のすべてのコンテキストターゲットペアのプロセスを繰り返します。

CBOWアーキテクチャは詳細に説明しました

単語の連続袋(CBOW)モデルのアーキテクチャは、周囲のコンテキストワードに基づいてターゲットワードを予測するように設計されています。これは、簡単でありながら効果的な構造を備えた浅いニューラルネットワークです。 CBOWアーキテクチャは、次のコンポーネントで構成されています。

入力レイヤー

  • 入力表現
    モデルへの入力は、1ホットのエンコードされたベクトルとして表されるコンテキスト単語です。
    • 語彙サイズがVの場合、各単語は、単語に対応するインデックスに単一の1を、他の場所に0Sを持つサイズVの1ホットのベクトルとして表されます。
    • たとえば、語彙が[「猫」、「犬」、「フォックス」、「ツリー」、「鳥」]であり、「フォックス」という言葉が3番目の単語である場合、その1ホットベクトルは[0,0,1,0,0] [0、0、1、0] [0,0,1,0,0,0]です。
  • コンテキストウィンドウ
    コンテキストウィンドウサイズnは、使用されるコンテキスト単語の数を決定します。 n = 2の場合、ターゲットワードの両側に2つの単語が使用されます。
    • 文の場合: 「クイックブラウンフォックスが怠zyな犬を飛び越えます」とターゲットワード「フォックス」 、n = 2のコンテキストワードは[「クイック」、「ブラウン」、「ジャンプ」、「オーバー」]です。

埋め込み層

  • 目的
    このレイヤーは、高次元で存在する1つのホットベクトルを最大の密度と低次元のベクトルに変換します。単語の埋め込み単語は、ほとんどゼロ値を持つベクトルとして表されているという事実とは対照的に、埋め込み層では、単語の意味の特定の特性を反映する必要な寸法の連続ベクトルによって各単語がエンコードされます。
  • 単語埋め込みマトリックス
    埋め込み層は、サイズv×dの単語埋め込みマトリックスwを維持します。ここで、vは語彙サイズ、dは埋め込み寸法です。
    • wの各行は、単語の埋め込みを表します。
    • 1ホットのベクトルxxxの場合、埋め込みはw^tx xとして計算されます。
  • コンテキストワード埋め込み
    各コンテキストワードは、埋め込みマトリックスを使用して、対応する高密度ベクトルに変換されます。ウィンドウサイズn = 2で、4つのコンテキストワードがある場合、これらの単語の埋め込みが抽出されます。

隠れレイヤー:コンテキスト集約

  • 目的
    コンテキストワードの埋め込みを組み合わせて、単一のコンテキストベクトルを形成します。
  • 集約方法
    • 平均化:すべてのコンテキスト単語の埋め込みは、コンテキストベクトルを計算するために平均化されます。

単語の継続的な袋(cbow)を理解する

  • 合計:平均化の代わりに、埋め込みが合計されます。

単語の継続的な袋(cbow)を理解する

  • 結果のコンテキストベクトル:結果は、単一の密なベクトルHHHであり、周囲の単語の集計されたコンテキストを表します。

出力層

  • 目的:出力層は、コンテキストベクトルHHHを使用してターゲットワードを予測します。
  • 完全に接続されたレイヤー:コンテキストベクトルHHHは完全に接続されたレイヤーに渡され、語彙の各単語の生のスコアが出力されます。これらのスコアはロジットと呼ばれます。
  • SoftMax関数:ロジットはSoftMax関数を通過して、語彙上の確率分布を計算します。

単語の継続的な袋(cbow)を理解する

  • 予測されるターゲットワード:最初の原因は、SoftMax出力で、アルゴリズムがターゲット単語を最高の確率を持つ単語として定義することです。

損失関数

  • エントロピーのクロスロピー損失は、予測される確率分布を実際のターゲット単語(グラウンドトゥルース)と比較するために使用されます。
  • 確率勾配降下(SGD)やそのバリアントなどの最適化手法を使用して、損失が最小化されます。

動作中のcbowの例

入力
文: 「私は機械学習が大好きです」 、ターゲットワード: 「マシン」 、コンテキストワード: [「私」、「愛」、「学習」]

ワンホットエンコーディング
語彙: [「I」、「愛」、「マシン」、「学習」、「AI」]

  • ワンホットベクトル:
    • 「私」:[1,0,0,0,0] [1、0、0、0、0] [1,0,0,0,0]
    • 「愛」:[0,1,0,0,0] [0、1、0、0、0] [0,1,0,0,0]
    • 「学習」:[0,0,0,1,0] [0、0、0、1、0] [0,0,0,1,0]

埋め込み層

  • 埋め込み寸法:d = 3。
  • 埋め込みマトリックスW:

単語の継続的な袋(cbow)を理解する

埋め込み:

  • 「私」:[0.1,0.2,0.3]
  • 「愛」:[0.4,0.5,0.6]
  • 「学習」:[0.2,0.3,0.4]

集約

  • 埋め込みの平均:

単語の継続的な袋(cbow)を理解する

出力層

  • ロジットを計算し、ソフトマックスを適用し、ターゲットワードを予測します。

CBOWアーキテクチャの図

入力レイヤー:["i"、 "love"、 "Learning"]
     - > 1ホットのエンコーディング
     - >埋め込み層
         - >濃い埋め込み
         - >集約されたコンテキストベクトル
         - >完全に接続されたレイヤーソフトマックス
出力:予測された単語「マシン」

cbowをゼロからコーディングする(pythonの例を使用)

次に、PythonでCbowモデルをゼロから実装します。

CBOWのデータの準備

最初のスパイクは、テキストをトークンに変換することです。これは、ターゲットワードを含む単語としてコンテキストを持つコンテキストターゲットペアに生成される単語です。

 corpus = "クイックブラウンキツネが怠zyな犬を飛び越えます"
corpus = corpus.lower()。split()#トークン化と小文字の変換

#コンテキストウィンドウサイズを定義します
c = 2
Context_target_pairs = []

#コンテキストターゲットペアを生成します
範囲のIの場合(C、Len(Corpus)-C):
    コンテキスト=コーパス[i -c:i]コーパス[i 1:i c 1]
    ターゲット=コーパス[i]
    context_target_pairs.append((context、ターゲット))

print( "Context-Targetペア:"、Context_target_pairs)

出力:

コンテキストターゲットペア:[[['The'、 'Quick'、 'Fox'、 'Jumps']、 'Brown')、( 'Quick'、 'Brown'、 'Jumps' '、' over ')、' brown ']、' fox '、' fix '、' over '、' the ']、' jums ') (['ジャンプ'、「オーバー」、「怠zy」、「犬」]、「The ')]]

辞書という単語の作成

語彙(一意の単語のセット)を作成し、各単語を一意のインデックスにマッピングし、トレーニング中に効率的な検索に逆も同様です。

 #語彙を作成し、各単語をインデックスにマップする
vocab = set(corpus)
word_to_index = {word:idx for idx、word in enumerate(vocab)}}
index_to_word = {idx:word for word、word_to_index.items()}のidx

print( "Word to Index Dictionary:"、word_to_index)

出力:

索引辞書への単語:{'Brown':0、 'Dog':1、 'Quick':2、 'Jumps':3、 'Fox':4、 'over':5、 'the':6、 'lazy':7}

1ホットのエンコーディングの例

ワンホットエンコーディングは、単語形成システムの各単語をベクトルに変換することで機能します。ここでは、単語の指標は「1」です。

 def one_hot_encode(word、word_to_index):
    one_hot = np.zeros(len(word_to_index))
    one_hot [word_to_index [word]] = 1
    one_hotを返します

#「Quick」という単語の使用例
context_one_hot = [one_hot_encode(word、word_to_index)for word in ['the'、 'Quick']]]]
print( "" Quick 'の1ホットエンコード: "、context_one_hot [1])

出力:

 「クイック」の1ホットエンコード:[0。 0。1。0。0。0。0。0。]

CBOWモデルをゼロから構築します

このステップでは、2つのレイヤーを備えた基本的なニューラルネットワークを作成します。1つはワード埋め込み用、もう1つはコンテキストワードに基づいて出力を計算し、コンテキストを平均してネットワークを通過させます。

クラスCBOW:
    def __init __(self、vocab_size、embedding_dim):
        #埋め込み層と出力層の重みをランダムに初期化します
        self.w1 = np.random.randn(vocab_size、embedding_dim)
        self.w2 = np.random.randn(bedding_dim、vocab_size)
        
    def forward(self、context_words):
        #隠されたレイヤーを計算します(コンテキストワードの平均)
        h = np.mean(context_words、axis = 0)
        #出力層(SoftMax確率)を計算する
        output = np.dot(h、self.w2)
        返品出力
    
    def backward(self、context_words、target_word、Learning_rate = 0.01):
        #フォワードパス
        h = np.mean(context_words、axis = 0)
        output = np.dot(h、self.w2)
        
        #エラーと勾配を計算します
        エラー=ターゲット_WORD-出力
        self.w2 = learning_rate * np.outer(h、error)
        self.w1 = learning_rate * np.outer(context_words、エラー)

#CBOWオブジェクトの作成例
vocab_size = len(word_to_index)
Embedding_dim = 5#5次元の埋め込みを想定しましょう

cbow_model = cbow(vocab_size、embedding_dim)

#ランダムなコンテキストワードとターゲットを使用する(例として)
context_words = [one_hot_encode(word、word_to_index)for word in ['the'、 'Quick'、 'fox'、 'Jumps']]]]
context_words = np.array(context_words)
context_words = np.mean(context_words、axis = 0)#平均的なコンテキストワード
Target_word = one_hot_encode( 'brown'、word_to_index)

#cbowモデルを通過します
output = cbow_model.forward(context_words)
print( "cbowフォワードパスの出力:"、output)

出力:

 CBOWフォワードパスの出力:[[-0.20435729 -0.23851241 -0.08105261 -0.14251447 0.20442154 0.14336586
  -0.06523201 0.0255063]
 [-0.0192184 -0.12958821 0.1019369 0.11101922 -0.17773069 -0.02340574
  -0.22222151 -0.23863179]
 [0.21221977 -0.15263454 -0.015248 0.27618767 0.02959409 0.21777961
   0.16619577 -0.20560026]
 [0.05354038 0.06903295 0.0592706 -0.13509918 -0.00439649 0.18007843
   0.1611929 0.2449023]
 [0.01092826 0.19643582 -0.07430934 -0.16443165 -0.01094085 -0.27452367
  -0.13747784 0.31185284]]

Tensorflowを使用してCBOWを実装します

Tensorflowは、埋め込み層を使用して単語表現と出力用の密な層を学習するニューラルネットワークを定義し、コンテキストワードを使用してターゲットワードを予測することにより、プロセスを簡素化します。

 tfとしてtensorflowをインポートします

#TensorFlowを使用して、単純なCBOWモデルを定義します
クラスcbowmodel(tf.keras.model):
    def __init __(self、vocab_size、embedding_dim):
        スーパー(cbowmodel、self).__ init __()
        self.embeddings = tf.keras.layers.embeding(input_dim = vocab_size、output_dim = embedding_dim)
        self.output_layer = tf.keras.layers.dense(vocab_size、activation = 'softmax')
    
    def call(self、context_words):
        embedded_context = self.embeddings(context_words)
        context_avg = tf.reduce_mean(embedded_context、axis = 1)
        output = self.output_layer(context_avg)
        返品出力

#例の使用
Model = cbowModel(vocab_size = 8、embedding_dim = 5)
context_input = np.random.randint(0、8、size =(1、4))#ランダムコンテキスト入力
context_input = tf.convert_to_tensor(context_input、dtype = tf.int32)

#フォワードパス
output = model(context_input)
print( "tensorflow cbowモデルの出力:"、output.numpy())

出力:

 Tensorflow CBOWモデルの出力:[[0.12362909 0.12616573 0.12758036 0.12601459 0.12477358 0.1237749
  0.12319998 0.12486169]]

CBOWにGensimを使用します

Gensimは、GensimがテキストのコーパスからWord Embeddingsを訓練するため、Word2vec()関数でCBOWの既製の実装を提供します。

 EMENSIMをインポートします
gensim.modelsからimport word2vecから

#データを準備する(単語のリストのリスト)
corpus = [["、" Quick "、" Brown "、" Fox "]、[" Jumps "、" over "、" the "、" lazy "、" dog "]]]]]

#CBOWを使用してWord2Vecモデルをトレーニングします
Model = word2vec(corpus、vector_size = 5、window = 2、min_count = 1、sg = 0)

#単語のベクトル表現を取得します
vector = model.wv ['fox']
print( "'fox'のベクトル表現:"、ベクトル)

出力:

 「フォックス」のベクトル表現:[-0.06810732 -0.01892803 0.11537147 -0.15043275 -0.07872207]

単語の継続的な袋の利点

ここで、単語の継続的な袋の利点を探ります。

  • 単語表現の効率的な学習:CBOWは、コンテキスト単語を使用して、単語の密なベクトル表現を効率的に学習します。これにより、従来の1ホットのエンコードと比較して低次元ベクトルが発生します。
  • セマンティックな関係をキャプチャする:CBOWは、大きなコーパス内のコンテキストに基づいて単語間のセマンティックな関係をキャプチャします。これにより、モデルは単語の類似点、同義語、およびその他のコンテキストニュアンスを学習できます。これらは、情報検索やセンチメント分析などのタスクに役立ちます。
  • スケーラビリティ:CBOWモデルは非常にスケーラブルであり、大規模なデータセットを効率的に処理できるため、検索エンジンやソーシャルメディアプラットフォームなど、膨大な量のテキストデータを使用したアプリケーションに適しています。
  • コンテキストの柔軟性:CBOWは、さまざまな量のコンテキスト(つまり、周囲の単語の数)を処理でき、単語表現を学習するために必要なコンテキストの柔軟性を提供できます。
  • NLPタスクのパフォーマンスの向上:CBOWの単語埋め込みは、高品質の機能表現を提供することにより、テキスト分類、エンティティ認識、機械翻訳などのダウンストリームNLPタスクのパフォーマンスを向上させます。

単語の継続的な袋の制限

CBOWの限界について説明しましょう。

  • コンテキストウィンドウサイズに対する感度:CBOWのパフォーマンスは、コンテキストウィンドウサイズに大きく依存します。小さなウィンドウは、ローカルな関係のみをキャプチャする可能性がありますが、大きな窓は単語の特徴を曖昧にする可能性があります。最適なコンテキストサイズを見つけることは、挑戦的でタスクに依存する可能性があります。
  • 語順の感度の欠如:CBOWは、文脈内の単語の順序を無視します。つまり、言語の連続した性質をキャプチャしません。この制限は、構文解析言語モデリングなど、語順を深く理解する必要があるタスクでは問題があります。
  • 希少な言葉の難しさ:CBOWは、まれまたは表記(OOV)の単語のために意味のある埋め込みを生成するのに苦労しています。モデルはコンテキストに依存していますが、まれな単語のまばらなデータは、ベクター表現の低下につながる可能性があります。
  • 浅い文脈の理解に限定:CBOWは周囲の単語に基づいて単語の意味をキャプチャしますが、長距離依存性、皮肉、皮肉など、より複雑な言語現象を理解する能力は限られています。
  • Polysemyをうまく処理できない:複数の意味を持つ言葉(多義性)は、CBOWにとって問題がある可能性があります。モデルは各単語の単一の埋め込みを生成するため、 BertElmoなどのより高度なモデルとは異なり、異なるコンテキストで単語が持つことができるさまざまな意味をキャプチャしない場合があります。

結論

連続した単語(CBOW)モデルは、周囲のコンテキストを活用することにより、単語の埋め込みを生成するための効率的で直感的なアプローチであることが証明されています。 Cbowは、シンプルで効果的なアーキテクチャを通じて、生のテキストと意味のあるベクトル表現の間のギャップを橋渡しし、幅広いNLPアプリケーションを可能にします。 CBOWの作業メカニズム、その強み、および制限を理解することにより、NLPテクニックの進化についてより深い洞察を得ます。生成の埋め込みにおける基本的な役割により、CBOWは高度な言語モデルを探索するための足がかりの石であり続けています。

キーテイクアウト

  • CBOWは、周囲のコンテキストを使用してターゲットワードを予測し、効率的かつシンプルにします。
  • 頻繁な言葉でうまく機能し、計算効率を提供します。
  • CBOWによって学んだ埋め込みは、セマンティックと構文の両方の関係の両方をキャプチャします。
  • CBOWは、現代の単語埋め込み技術を理解するための基礎です。
  • 実用的なアプリケーションには、感情分析、セマンティック検索、およびテキストの推奨事項が含まれます。

よくある質問

Q1:CbowとSkip-Gramの違いは何ですか?

A:CBOWはコンテキストワードを使用してターゲットワードを予測し、Skip-Gramはターゲットワードを使用してコンテキストワードを予測します。

Q2:Skip-GramよりもCBOWが計算高速なのはなぜですか?

A:CBOWは複数のコンテキストワードを同時に処理しますが、スキップグラムは各コンテキスト単語を個別に評価します。

Q3:cbowはまれな単語を効果的に処理できますか?

A:いいえ、Skip-Gramは一般に、まれな単語の表現を学習するのに優れています。

Q4:CBOWの埋め込み層の役割は何ですか?

A:埋め込み層は、スパースの1つのホットベクトルを密な表現に変換し、単語のセマンティクスをキャプチャします。

Q5:Cbowは今日でも関連していますか?

A:はい、Bertのような新しいモデルが存在しますが、CbowはWord Embeddingsの基本的な概念のままです。

以上が単語の継続的な袋(cbow)を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。