1. 序章

自然言語処理では、人間と同じようにコンピューターにテキストを理解してもらいたいと考えています。 ただし、これを実現するには、コンピューターが使用して理解できる言語に単語を翻訳する必要があります。

このチュートリアルでは、単語の埋め込みを使用してこれを実現する方法について説明します。 それらが何であるか、そしてなぜそれらが重要であるかを調べます。

また、単語の埋め込みを取得するための2つの主要な方法であるCBOWとSkip-Gramについても説明します。

2. 単語の埋め込み

単語の埋め込みとは何ですか? 単語の埋め込みは、RGBシステムを使用して色を表現する方法などの単語の数値表現です。

一般的な表現はワンホットエンコーディングです。 このメソッドは、各単語を異なるベクトルでエンコードします。 ベクトルのサイズは単語の数と同じです。 したがって、単語がある場合、ベクトルのサイズは。です。 各単語表現を区別する値1を除いて、ベクトル内のすべての値はゼロです。

次の文を使ってみましょう。ピンクの馬が食べています。 この例では、単語があります。 したがって、ベクトルのサイズはです。 それがどのように機能するか見てみましょう:

   

   

各単語には異なるベクトルが割り当てられます。 ただし、この表現にはさまざまな問題があります。 まず、語彙が多すぎると、ベクトルのサイズが大きくなります。 これは、このエンコーディングでモデルを使用する場合、次元の呪いにつながります。 また、語彙に単語を追加または削除すると、すべての単語の表現が変わります。

ただし、ワンホットエンコーディングを使用する場合の最も重要な問題は、意味がカプセル化されないことです。 単語を区別するための単なる記数法です。 コンピューターに人間のようにテキストを読み取らせたい場合は、意味情報と構文情報をキャプチャする埋め込みが必要です。 ベクトルの値は、それらが表す単語の意味を何らかの形で定量化する必要があります。

Word2Vec は、自然言語処理で使用される一般的な手法です。 その中で、類似した単語には類似した単語の埋め込みがあります。 これは、それらが余弦距離の点で互いに近いことを意味します。 Word2Vecの実装を取得するには、2つの主要なアルゴリズムがあります。ContinousBagofWordsとSkip-Gramです。 これらのアルゴリズムは、単語ベクトルを取得するためにニューラルネットワークモデルを使用します。

これらのモデルは、コンテキストを使用して機能します。 これは、埋め込みが近くの単語を見ることによって学習されることを意味します。 単語のグループが常に同じ単語の近くにある場合、それらは同様の埋め込みを持つことになります。 したがって、国は密接に関連し、動物なども密接に関連します。

単語が互いにどの程度接近しているかにラベルを付けるために、最初にウィンドウサイズを設定します。 ウィンドウサイズによって、選択する近くの単語が決まります。 たとえば、ウィンドウサイズが2の場合、すべての単語について、その後ろの2つの単語と、その後ろの2つの単語を選択します。

上の表では、このメソッドで作成された単語のペアを確認できます。 強調表示されている単語は、ペアを見つけている単語です。 ウィンドウ内の単語がどれだけ離れているかは関係ありません。 ウィンドウ内にある限り、1単語以上離れている単語を区別しません。

単語のペアを見つける方法がわかったので、これらのアルゴリズムがどのように機能するかを見てみましょう。

3. スキップグラム

前述のように、両方のアルゴリズムは、単語のセマンティクスを埋め込みに抽出するために、近くの単語を使用します。 Skip-Gramでは、メインワードを使用してコンテキストワードを予測しようとします。

前の例を使用してみましょう。 ピンクの馬が食べているという文から、horseという単語の埋め込みを取得するとします。 まず、コーパス内のすべての単語をワンホットエンコーディングを使用してトレーニングするためにエンコードします。 (horse、the)、(horse、pink)、(horse、is)、(horse、eating)の埋め込みを見つけたい単語の単語ペアを選択します。 次に、それぞれから、次の画像に示すように、1つの隠れ層を持つニューラルネットワークモデルを使用します。

写真では、サイズが、の入力レイヤーを見ることができます。ここで、はコーパス語彙の単語数です。 入力は、ワンホットエンコーディングのメインワードです。この例では、horseです。 重み行列は、入力を隠れ層に変換します。

この隠しレイヤーのサイズは、です。ここで、は単語の埋め込みの目的のサイズです。 このサイズが大きいほど、埋め込みがキャプチャする情報は多くなりますが、学習が難しくなりますそれ。

最後に、重み行列は隠れ層を出力層に変換します。 予測される出力はワンホットエンコーディングのコンテキストワードになるため、最終レイヤーのサイズは。になります。 コンテキストワードごとに1回モデルを実行します。 モデルは、文脈語を予測しようとすることによって学習します。

語彙全体でトレーニングが完了すると、入力を非表示レイヤーに接続するサイズの重み行列が作成されます。 これにより、埋め込みを取得できるようになります。 正しく行われていれば、前述のように、表現はセマンティクスをカプセル化し、類似した単語はベクトルの世界で互いに近くなります。

4. CBOW

Continuous Bag of Wordsでは、アルゴリズムは非常に似ていますが、反対の操作を実行します。 コンテキストワードから、モデルでメインワードを予測する必要があります:

Skip-Gramと同様に、入力レイヤーがあります(これは、ワンホットエンコーディングのコンテキストワードで構成されています– size)。 すべてのコンテキストワードについて、重み行列から生じる隠れ層を取得します。 次に、それらを平均して単一の隠れ層にし、それが出力層に渡されます。 モデルは、重み行列を微調整して、メインワードを予測することを学習します。

繰り返しになりますが、トレーニングが完了すると、ウェイトマトリックスを使用して、ワンホットエンコーディングから単語の埋め込みを生成します。

5. CBOWvsスキップグラム

両方のモデルについて幅広いアイデアが得られたので、どちらが優れていますか? 通常の場合のように、それは以下に依存します:

 

元の論文Mikolovet al。によると、 Skip-Gramは小さなデータセットでうまく機能し、頻度の低い単語をより適切に表すことができることがわかりました。

ただし、 CBOWは、Skip-Gramよりも速くトレーニングすることがわかっており、より頻繁な単語をより適切に表すことができます。

もちろん、どのモデルを選択するかは、解決しようとしている問題に大きく依存します。 私たちのモデルが珍しい言葉を表現することは重要ですか? その場合は、Skip-Gramを選択する必要があります。 トレーニングする時間があまりなく、まれな単語は私たちのソリューションにとってそれほど重要ではありませんか? 次に、CBOWを選択する必要があります。

6. 結論

この記事では、単語の埋め込みとは何か、NLPでそれらを使用する理由を学びました。 次に、単語のセマンティクスを考慮しない単純な埋め込みであるワンホットエンコーディングを紹介しました。

次に、CBOWとSkip-Gramを調べました。これらのアルゴリズムは、このエンコーディングから、単語から構文情報と意味情報をカプセル化する埋め込みを取得するために変換を生成できます。

最後に、これらのアルゴリズムがどのように異なるか、および解決する問題に応じてどちらがより役立つかについて説明しました。