第6章 エンベッディングを使ってセンチメントをプログラマブルにする
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
第5章では、単語を 、トークンにエンコーディングする方法を見た。そして、単語でいっぱいの文章をトークンでいっぱいのシーケンスにエンコーディングし、適宜パディングしたり切り詰めたりして、最終的にニューラルネットワークの訓練に使える形の良いデータセットにする方法を見た。しかし、その中に単語の意味をモデル化したものはない。意味をカプセル化できる絶対的な数値エンコーディングがないのは事実だが、相対的なものはある。
この章では、意味をカプセル化するテクニック、特に高次元空間のベクトルを作成して単語を表現するエンベッディングの概念について学ぶ。これらのベクトルの方向は、コーパス中の単語の使用に基づいて、時間をかけて学習することができる。そして、ある文章が与えられたときに、単語のベクトルの方向を調べ、それらを合計し、その合計の全体的な方向から、その文章のセンチメントを単語の積として確定することができる。また、これに関連して、モデルが文章をスキャンする際、文中の単語の位置関係も適切な埋め込みを学習するのに役立つ。
この章では、その仕組みも探る。第5章の皮肉検出のためのニュースヘッドラインデータセットを使って、文中の皮肉を検出するモデルを助ける埋め込みを構築する。また、コーパスの単語がどのようにベクトルにマッピングされるかを理解するのに役立つクールな可視化ツールを使って、どの単語が全体の分類を決定するかを確認する。
単語から意味を確立する
埋め込み用の高次元ベクトル()に入る前に、いくつかの簡単な例を使って、数値からどのように意味を導き出せるかを視覚化してみよう。第5章の皮肉データセットを使って、皮肉な見出しを構成する単語を正の数で、現実的な見出しを構成する単語を負の数でエンコーディングしたらどうなるだろうか?
簡単な例肯定と否定
例えば、データセットからこの皮肉な見出しを見てみよう:
christianbalegivenneuteredmalestatuettenamedoscar
語彙のすべての単語が0から始まると仮定すると、この文の各単語の値に1を足すと、このようになる:
{"christian":1,"bale":1,"given":1,"neutered":1,"male":1,"statuette":1,"named":1,"oscar":1}
注
これは前章で行った単語のトークン化とは違う。各単語(例えばchristian)をコーパスからエンコーディングされたそれを表すトークンに置き換えることも考えられるが、コードを読みやすくするため、とりあえず単語はそのままにしておく。
次のステップでは、(皮肉ではない)普通の見出しを考えてみよう:
garethbalescoreswondergoalagainstgermany
これは異なる感情なので、代わりに各単語の現在の値から1を減算することができ、差集合は次のようになる:
{"christian":1,"bale":0,"given":1,"neutered":1,"male":1,"statuette":1,"named":1,"oscar":1,"gareth":–1,"scores" ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access