- API ドキュメント
- CLI
- 連携ガイド
- ブログ
- 機械が単語を理解する方法:NLPに埋め込むためのガイド
- トランスフォーマーによるプロンプトベースの学習
- 効率的な変圧器II:知識蒸留と微調整
- 効率的な変圧器I:注意メカニズム
- 階層的な教師なしインテントモデリング:トレーニングデータなしで価値を得る
- Communications Mining による注釈バイアスの修正
- アクティブ ラーニング: より優れた ML モデルを短時間で実現
- それはすべて数字にあります-メトリックを使用してモデルのパフォーマンスを評価します
- モデルの検証が重要な理由
- 会話型データ インテリジェンスのための Communications Mining と Google AutoML の比較
Communications Mining 開発者ガイド
機械が単語を理解する方法:NLPに埋め込むためのガイド
Communications Mining のマシン ラーニング アルゴリズムは、事前トレーニング済みの Transformer モデルに基づいており、埋め込みと呼ばれるテキストのシーケンスの意味的に有益な表現を学習します。 過去数年間、Transformerモデルは、一般的な自然言語処理(NLP)タスクの大部分で最先端の結果を達成してきました。
しかし、どうやってここにたどり着いたのでしょうか? Transformer がトレーニング埋め込みのモデルとして選ばれた理由は何ですか? 過去10年間で、NLPの最大の改善は、教師なし事前トレーニング済みテキスト埋め込みの学習の進歩によるものです。 この投稿では、埋め込みメソッドの歴史と、それらが時間の経過とともにどのように改善されたかを見ていきます。
この投稿は
- 埋め込みとは何か、一般的なNLPアプリケーションでどのように使用されるかを説明する。
- word2vec などの従来のメソッドや BERT などの最新の Transformer ベースのメソッドなど、埋め込みをトレーニングするための一般的なメソッドの歴史を紹介します。
- 埋め込みメソッドの弱点とその対処方法について説明します。
話者の意図を認識するなど、タスクを実行したいドキュメントの大規模なコーパスがあるとします。 最新の最先端のNLP手法は、ニューラルネットワークベースのアプローチを使用しています。 これらは最初に、埋め込みと呼ばれる数値のベクトルとして各単語をエンコードします。 ニューラルネットワークは、与えられたタスクを実行するために、これらの埋め込みを入力として受け取ることができます。
コーパスに 10,000 個の一意の単語が含まれているとします。 「ワンホット」埋め込み(つまり、値が1である単語に対応する単一の位置を除いて、どこでも0を持つまばらな10,000次元ベクトル)を使用して各単語をエンコードできます。
'a' = [1, 0, 0, ..., 0, 0]
...
'my' = [0, ..., 0, 1, 0, ..., 0]
...
'you' = [0, 0, ..., 0, 0, 1]
'a' = [1, 0, 0, ..., 0, 0]
...
'my' = [0, ..., 0, 1, 0, ..., 0]
...
'you' = [0, 0, ..., 0, 0, 1]
ただし、この方法にはいくつかの問題があります。
- 意味的に有益でない埋め込み
- ワンホットエンコーディングアプローチでは、すべての埋め込みが互いに直交しています。 理想的には、互いに意味的に関連している単語に「類似」埋め込みを持たせたいのですが、ワンホット埋め込みは類似性情報を直接エンコードしません。
- 高次元性
- 各単語に10,000次元のベクトルがあると、ニューラルネットワークベースのアプローチを使用すると、すぐにメモリが不足する可能性があります。 多くのドメインでは、10,000は小さな語彙サイズと見なされ、語彙は多くの場合5〜10倍の大きさです。
その結果、低次元の高密度埋め込みがより一般的です。 ワンホット埋め込みのメモリの問題に対処するだけでなく、2つの単語が意味的に類似しているという考えをエンコードすることもできます。 たとえば、4次元の密な埋め込みがあるとします。 「リンゴ」と「バナナ」の埋め込みを類似させたい場合があります。
apple = [3.14, -0.03, -0.26, -2.27]
banana = [2.95, -0.18, -0.11, 0.09]
apple = [3.14, -0.03, -0.26, -2.27]
banana = [2.95, -0.18, -0.11, 0.09]
どちらも最初の位置に大きな正の値を持っています。 また、「アップル」と「マイクロソフト」の埋め込みを類似させたい場合もあります。
apple = [3.14, -0.03, -0.26, -2.27]
microsoft = [-0.12, 0.48, -0.05, -2.63]
apple = [3.14, -0.03, -0.26, -2.27]
microsoft = [-0.12, 0.48, -0.05, -2.63]
どちらも4番目の位置に大きな負の値があります。
埋め込みはどのように使用されますか?
セマンティック情報をエンコードする埋め込みは、すべてのNLPアプリケーションで重要です。 それらを使用するモデルがどれほど適切に設計されていても、埋め込みが有益でない場合、モデルは正確な予測を行うために必要なシグナルを抽出できません。
分類
分類タスク (例: 感情分析) で説明する最も一般的な方法は、ドキュメントの埋め込みを 1 つのベクトルに集約し、このドキュメント ベクターを入力として、予測を行うフィードフォワード ネットワークに渡すことです (図 1 を参照)。
集計埋め込みは、単純なヒューリスティックを使用して計算できます(例: 埋め込みの平均を取る)、またはそれ自体がニューラルネットワーク(LSTMやトランスフォーマーなど)の出力である可能性があります。
セマンティック検索
分類タスク以外にも、埋め込みは セマンティック検索に特に役立ちます。 これは、キーワードだけでなく、検索クエリのセマンティックな意味に基づいて結果を取得するタスクです。
セマンティック検索は、最初にコーパス内の各ドキュメントの集計された埋め込みを計算することによって機能します(ここでも、集計関数はヒューリスティックまたは学習できます)。 次に、指定された検索クエリも埋め込まれ、検索クエリの埋め込みに最も近い埋め込みを持つドキュメントが返されます (図については、図 2 を参照してください)。 近さは通常、2つの埋め込み間の距離を比較するメトリック、たとえば コサイン類似度に従って測定されます。
ほとんどの単語埋め込みメソッドは、テキストの大きなコーパスを取得し、コーパス内の文内でどの単語が一般的に隣り合って出現するかを調べることによってトレーニングされます。 たとえば、「コンピューター」という単語は、「キーボード」、「ソフトウェア」、「インターネット」などの単語と一緒に使用されることがよくあります。これらの一般的な隣接語は、「コンピュータ」の埋め込みがエンコードすべき情報を示しています。
このセクションでは、word2vec から Transformer ベースの BERT まで、埋め込みを学習するための 4 つの一般的な手法について説明します。
ワード2ベック
2013年にリリースされたWord2VECは、おそらく、事前トレーニング済みの単語埋め込みを普及させ、それらを現代のNLPで主流にした最初の方法です。word2vec には、埋め込みを学習するための 2 つのアプローチが含まれています。
- 単語の連続バッグ (例については、図 3 を参照)。
- 両側の k 個の隣接する単語を条件とする特定の単語を予測します。
- これは、投影によって行われます(つまり、 行列乗算)隣接する単語のワンホットエンコーディングを低次元の密な埋め込みに下ろし、平均を取り、これを使用して欠落している単語を予測します。
- 両側の k 個の隣接する単語を条件とする特定の単語を予測します。
- スキップグラム (例については、図 4 を参照してください)。
- 単語が与えられた場合、両側の k個の 隣接する単語を予測します。
- これは、投影によって行われます(つまり、 行列乗算)与えられた単語のワンホットエンコーディングを低次元の密な埋め込みまで下げ、これを使用して欠落している単語を予測します。
- 単語が与えられた場合、両側の k個の 隣接する単語を予測します。
著者らは、埋め込み間のいくつかの非常に直感的な線形アナロジーを示しています。 特定の関係を持つ2つの単語 x と y 、および y と同じ「カテゴリ」内の別の単語 z が与えられた場合、著者らは、埋め込みがemb( x )−emb( y )+emb( z )に最も近い(余弦距離を使用して)単語 w を見つけます。結果のワード w は、 多くの場合、x と y と同じ関係を持ちます (いくつかの 例については、表 1 を参照してください)。
表1:word2vecモデルによって学習されたアナロジー。
X | y | z | w=nearest(emb(x)−emb(y)+emb(z)) |
---|---|---|---|
最大 | 大きい | 小 | 最小 |
パリ | フランス | イタリア | ローマ |
銅 | 銅 | 亜鉛 | 亜鉛 |
手袋
上記のように、word2vecはローカルスライディングウィンドウに基づいています。 つまり、word2vec は、作成されたトレーニング例の数を除いて、グローバルな単語の共起統計を直接使用しません。 たとえば、埋め込みには、"銀行" と "川" よりも多くのトレーニング例で "銀行" と "お金" が一緒に表示されるという事実を除いて、"銀行" という単語が "川" よりも "お金" という単語のコンテキストで頻繁に出現するという事実が直接組み込まれていません。
したがって、word2vecの1 年後、ローカル スライディングウィンドウベースのアプローチの利点とグローバル(つまり、 コーパス レベル) の単語の共起がカウントされます。 これは、2 つの単語間のグローバルな共起カウントによって、それらの埋め込みの類似度が決定されるように埋め込みをトレーニングすることによって行われます。
ここで、Vは語彙、 u は単語ベクトル、 v はコンテキストベクトル、 b と c はバイアスです。 f(Xi,j) は、極端に低い値と極端に高い値の両方の共起に過度の重みを与えないようにするための重み関数です。 トレーニングが完了すると、 単語 i の最終的な単語埋め込みは Wi,j=Ui+Vi になります。
GloVe埋め込みは、単語類推タスク(上記)でword2vecを大幅に上回り、名前付き一般フィールド認識にはわずかに優れています。 その結果、GloVeベクトルは、何年もの間、事前トレーニングされた単語埋め込みの頼りになるものであり、今日でも人気があります。
これまでに提示されたメソッドの主な弱点は、それらが静的であること、つまり特定の単語の埋め込みが常に同じであることです。 たとえば、「銀行」という言葉を考えてみましょう—これは川の端や金融機関を指す場合があります。その埋め込みは、両方の意味をエンコードする必要があります。
ELMo
2010年代半ばには、リカレントニューラルネットワーク(RNN)がNLPタスクの大部分で最も人気のあるアーキテクチャでした。 RNNは、テキストのシーケンスに対して段階的に計算を実行し、各単語を一度に1つずつ読み取って処理します。 彼らは「隠された状態」を更新し、これまでのシーケンス全体を追跡します。
最初の一般的なコンテキスト埋め込み手法の1つは、2018年にリリースされた ELMoでした。 ELMo は、次の単語予測目標を使用して、大規模な自然言語コーパスで双方向 RNN モデルを事前にトレーニングすることで埋め込みを学習します。 具体的には、ELMo は、図 5 に示すように、各ステップで次の単語または前の単語をそれぞれ予測することによって、順方向と後方スタックの両方の LSTMをトレーニングします。
トレーニングが完了すると、前方および後方のLSTMの重みは凍結され、出力は各レイヤーの各ステップで連結されます。 その結果、異なる層が言語のさまざまな側面を学習し、最初の層は構文の側面をモデル化し、後の層は単語の意味の文脈依存の側面を捉えることが分かった。 したがって、レイヤー全体のタスク固有の加重平均が各単語の埋め込みとして使用されます。
当時、ELMoは、質問応答、テキストの含意の認識、感情分析など、多くのタスクで以前の最先端の方法を大幅に上回りました。
BERT
ELMoの開発と同時期に、機械翻訳を実行するためのアーキテクチャとして(現在は有名な) Transformer がリリースされました。 これは、RNNの逐次計算を アテンションメカニズム に置き換えます-これは、すべての単語のコンテキスト表現を並列に計算するため、RNNよりもはるかに高速に実行できます。
Transformer アーキテクチャは、機械翻訳を超えて、埋め込みの学習を含む他のタスクに一般化できることがすぐにわかりました。 2019年にリリースされたBERTは、Transformerアーキテクチャに基づく最初の、そしておそらく最も人気のあるコンテキスト埋め込みメソッドの1つです。
ただし、これまでに提示したメソッドとは異なり、BERTは単語の埋め込みを直接学習しません。 代わりに、「サブワード」トークンの埋め込みを学習します。 単語の埋め込みを学習する際の主な問題は、固定サイズの語彙が必要になることです。 代わりに、BERTは WordPiece と呼ばれるアルゴリズムを使用して、文をサブワード単位にトークン化します。 これは、単語が別々のトークンに分割される可能性があることを意味し、たとえば、{'wait', 'waiting', 'waiter'} という単語は、{['wait'], ['wait', '##ing'], ['wait', '##er']} としてトークン化され、すべて同じ語幹を共有しますが、接尾辞が異なります。
BERT は、次の 2 つの目的関数を使用して事前トレーニングされています (図 6 参照)。
- マスクされた言語モデリング
- ランダムに選択された一部のトークンはシーケンスから削除され、モデルはそれらを予測します。
- 次の文の予測
- 2 つの (マスクされた) シーケンスが連結され、先頭に特別な [CLS] トークンがあり、各シーケンスの末尾に [SEP] トークンがあります。 次に、モデルは、[CLS] トークンの最終レイヤー埋め込みを使用して、2 番目が元のコーパスの最初のコーパスの直後に続くかどうかを予測する必要があります。
ダウンストリームタスクを実行する場合、CLS埋め込みは文/ドキュメントレベルのタスクに使用できます。 意図認識または感情分析、個々のトークン埋め込みは単語レベルのタスクに使用できます。 一般的なフィールド認識と呼ばれます。
Transformer はシーケンシャル アーキテクチャではないため、入力レイヤーは単に one-hot トークン エンコードのプロジェクションではありません。 代わりに、次の 3 つの異なる埋め込みの合計です。
- ワンホットトークンエンコーディングのプロジェクション。
- 位置埋め込み(つまり、トークンがシーケンス内のどの位置にあるかの埋め込み)。
- セグメントの埋め込み (つまり、 トークンが第1のシーケンスからのものであるか、または第2のシーケンスからのものであるか、上記の次の文の予測目的)。
事前トレーニングが完了すると、BERTは通常、ダウンストリームタスク用に「微調整」されます(つまり、その重みはタスクごとにさらに更新され、ELMoのようにフリーズされません)。 SQuAD(質問応答)やGLUEベンチマークを含む多くのタスクで、BERTは当時の最先端の方法を大幅に上回りました。
BERT(およびそのフォローアップバリアント)は、NLPの分野に革命をもたらしました。Transformerアーキテクチャに基づくコンテキスト埋め込みに依存しない最先端のメソッドを見つけることは、今では非常にまれです。
この投稿全体で説明したように、トレーニング埋め込みの進歩はNLPに革命をもたらしました。 ただし、事前トレーニング済みの埋め込みを操作するときに注意すべき特定の落とし穴があります。
まず、埋め込みモデルは、トレーニング対象のデータセットに含まれるバイアスをエンコードし、増幅することさえできます。 例えば、 埋め込みは性別に基づく職業的ステレオタイプをコード化できることが示されている、例えば、女性は家事などの仕事に関連付けられ、男性はコンピュータプログラミングなどの仕事に関連付けられている。 さらなる研究 により、埋め込みモデルは、トレーニングデータから軽蔑的な言葉、人種差別、およびその他の有害なイデオロギーを拾うことができることが示されています。 言語モデルの偏りを取り除くことは、活発な研究分野です。このようなバイアスを特定して軽減する最適な方法は、依然として未解決の問題です。
第二に、最新のコンテキスト埋め込み方法では、数千のGPUのクラスターで数千億のパラメーターを使用してモデルを数週間トレーニングします。 これは、経済的にも環境的にも非常にコストがかかる可能性があります。 以前に確認したように、より効率的なモデルをトレーニングするためのさまざまな方法があります。