汎用性の高い機械学習技法のひとつとして知られている埋め込みとは、簡単に言えば、任意のデータをその特徴を保持したまま座標軸上の点やベクトルとして表現する方法です。埋め込みデータを生成する代表的なモデルには、Googleが開発したテキスト埋め込みの「Word2Vec」があります。
埋め込みはテキストだけでなく、音楽、画像、ユーザ、さらには動画とそれに添付されたテキストのようなマルチメディアコンテンツに対して使える汎用性があります。こうした埋め込みを活用すれば、データの検索、類似度の算出、重複の検出のような多種多様なタスクを実行できます。
こうした埋め込みシステムを開発する方法には、事前学習済みモデルを流用する方法と独自にデータを用意したうえでカスタマイズされた埋め込みモデルを構築する2通りがあります。
以下の記事本文では、以上のような埋め込みに関する解説を数式やコード文を極力用いずに展開しているので、機械学習エンジニアでなくても読み進められます。
なお、以下の記事本文はDale Markowitz氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。また、翻訳記事の内容は同氏の見解であり、特定の国や地域ならびに組織や団体を代表するものではなく、翻訳者およびAINOW編集部の主義主張を表明したものでもありません。
前書き
埋め込み(Embeddings)は機械学習における最も汎用性の高い技法のひとつであり、全ての機械学習エンジニアがツールベルトの中に入れておくべき重要なツールでもある。しかし、埋め込みが何であり、何に役立つかを理解している人が少ないのは残念なことだ!
問題は、埋め込みがやや抽象的で難解に聞こえることかも知れない。
機械学習においては、埋め込みとはデータをn次元空間の点として表現したうえで、類似したデータ点が集まるようにする方法である。
以上の定義を退屈で印象が悪いと思うだろうか。騙されないで欲しい。この機械学習のマルチツールを理解すれば、検索エンジンからレコメンデーションシステム、チャットボットまで、あらゆるものを構築できるようになるからだ。しかも、MLの専門知識を持つデータサイエンティストでなくても使えるし、膨大なラベル付きデータセットも必要ない。
さて、このような優れたソフトウェアがいかに素晴らしいものか、ご理解頂けただろうか?🤞
ここまでの話はよろしいだろうか。それでは、さっそく埋め込みに深入り行こう。この投稿では、次のことを探求する。
- 埋め込みとは何か
- どのような用途に使われるのか
- オープンソースの埋め込みモデルをどこで、どのように見つけるか
- オープンソースの埋め込みモデルの使い方
- 独自の埋め込みを構築する方法
埋め込みで何が作れるか?
埋め込みとは何かという話をする前に、埋め込みを使って何が作れるかを簡単に把握しておこう(非常に楽しみですね)。ベクトル埋め込みが威力を発揮する。
- レコメンデーションシステム(Netflixで見られるような「この映画が好きなら、この映画も好きでしょう」的なもの)。
- あらゆる種類の検索
- テキスト検索(Google検索など)
- 画像検索(Googleの画像検索など)
- 音楽検索(「この曲は何?」)
- チャットボットと質問応答システム
- データ前処理(機械学習モデルに投入するデータの準備)
- ワンショット/ゼロショット学習(ほとんど学習データがない状態から学習する機械学習モデルなど)
- 不正検知/異常値検知
- 打鍵の検出と「ファジーマッチング」
- MLモデルの陳腐化(ドリフト)の検出
- その他多数!
このリストにあるようなことをしようとしていなくても、埋め込みの応用範囲は非常に広いので、念のため読み進めておくとよいだろう。そう思いませんか?
埋め込みとは?
埋め込みとは、テキスト、画像、動画、ユーザ、音楽などのほとんどあらゆる種類のデータを、空間内の位置が意味的な内容をもつ点として表現する方法である。
この意味を直感的に理解するには、例を挙げるのが一番だろう。そこで、最も有名な埋め込み技術のひとつであるWord2Vecについて見て行こう。
Word2Vec(word to vector:「単語をベクトルに」の略称)は、2013年にGoogleが発明した単語を埋め込むための技術である。単語を入力として、n次元の座標(または「ベクトル」)を吐き出すので、この単語のベクトル座標を空間にプロットすると、同義語が集まってくるというものだ。そうした出力に関するビジュアルは以下。
Word2Vecでは、似たような単語が空間的に集まっているため、「王様」「女王様」「王子様」を表すベクトル/ポイントはすべて近くに集まっていることになる。同義語(「歩いた」”walked”、「散歩した」”strolled”、「ジョギングした」”jogged”)についても同じことが言える。
他のデータ型でも、同じことが言える。歌の埋め込みは、似たように聞こえる歌を近くにプロットする。画像埋め込みは、似たように見える画像を近くにプロットする。顧客埋め込みは、似たような購買習慣を持つ顧客を近くにプロットする。
埋め込みの便利さは、もうお分かりのことだろう:埋め込みを使えば、似たようなデータ点を見つけられるのだ。例えば、ある単語(例えば「王様」)を入力すると、それに最も近い同義語を10個見つけてくれるような関数を作れる。こうした関数は最近傍探索と呼ばれる。しかし、たった1つの単語だけでは面白くない。それでは映画のプロット全体を埋め込むとしたらどうなるだろう。そうすると、ある映画のあらすじを与えると、似たような映画を10本出してくれるような関数ができる。あるいは1つのニュース記事があれば、意味的に類似した複数の記事をおすすめする。
さらに、埋め込みによって「この記事はあの記事とどれくらい似ているか」というデータポイント間の類似度スコアの数値計算が可能になる。これを行うひとつの方法は、空間における2つの埋め込み点のあいだの距離を計算し、近ければ近いほど類似していると見なすのだ。この尺度はユークリッド距離とも呼ばれる。(ドット積、コサイン距離、その他の三角測度も使える)。
類似度スコアは、重複検出や顔認識などのアプリケーションに有用である。例えば、顔認識を行う場合、人の顔の写真を埋め込んでおき、2枚の写真の類似度が高ければ同一人物であると判断できる。また、携帯電話のカメラで撮った写真をすべて埋め込んで、埋め込み空間上で非常に近い写真を見つけたら、埋め込んだデータポイントの隣接により非常に重複した写真だという結論を下せる。
類似度スコアは、誤字脱字の修正にも利用できる。Word2Vecでは、「hello」「helo」「helllo」「hEeeeelO」といったよくある誤字は、すべて同じコンテクストで使われているため、類似度スコアが高くなる傾向がある。
上のグラフは、Word2Vecの非常に優れた特性である、性別や動詞の時制などの文法的な意味を異なる軸で表現することも示している。つまり、単語のベクトルを足したり引いたりすることで、「男に対して女、王に対して○○」というような類比を解決できる。類比の算出は単語ベクトルの非常に優れた特徴だが、この特徴は画像や長いテキストチャンクなど、より複雑なデータ型の埋め込みには必ずしも有用な形で変換されるわけではない。(詳しくは後述)。
どのようなものが埋め込めるのか?
テキスト
(埋め込みの対象は)Word2Vecの場合のように個々の単語だけでなく、文全体やテキストチャンクも含まれる。オープンソースで最も人気のある埋め込みモデルのひとつに、Universal Sentence Encoder (USE) というのがある。USEは文だけでなく、テキストチャンク全体のエンコードに使えるので、その名前は少し誤解を招きやすい(※訳註1)。以下のTensorFlowのウェブサイトに掲載されているビジュアルをご覧頂きたい。ヒートマップは、埋め込み空間における距離によって、異なる文がどれだけ似ているかを示している。
Universal Sentence Encoderモデルは、特にテキスト検索に関して多くの用途がある。その理由はUSE埋め込みが個々の単語にオーバーフィットするのではなく、文の意味を捉えるからだ。
例えば、この記事の著者である私がニュース記事の検索可能なデータベースを作ることを想像してみてみよう。
Dale Timesのニュース記事データベース
|
ここで、このデータベースを「食べ物(food)」というテキストクエリで検索してみるとしよう。データベースの中で最も関連性の高い結果は、記事の見出しに「食べ物」という単語がないにもかかわらず、悪名高いブリトー/タコス論争に関する記事である。USEは特定の単語の重複ではなく、テキストの意味的な類似性を捉えるので、生テキストそのものではなく、見出しのUSE埋め込みで検索すれば、このような結果を得られるのだ。
ここで注目すべきは、画像のキャプションや映画の字幕など、多くのデータ型をテキストと関連付けられるため、この手法をマルチメディアのテキスト検索に応用できる点だ。例えば、検索可能なビデオアーカイブで試してみよう。
閲覧してみよう:BigQueryでテキストの類似性検索とドキュメントのクラスタリングを行う方法(※訳註2)
画像
また、画像を埋め込むことで、逆画像検索、つまり “画像による検索” が可能になる。一例としてVison Product検索があるが、これはGoogle Cloudの同名の製品でもある(※訳註3)。
例えば、衣料品店が検索機能を作りたいと想像してみよう。「レザー、ゴス、スタッズ、ミニスカート」 のようなテキストクエリをサポートしたいと思うかも知れない。USE埋め込みのようなものを使えば、そのテキストユーザクエリと商品説明をマッチングさせることができるかも知れない。しかし、テキストの代わりに画像でも検索できるようにしたら、もっと素敵だと思わないだろうか。例えば、買い物客がInstagramからトレンドのトップスをアップロードして、在庫の類似商品とのマッチングを見れるようにできないだろうか(こちらのチュートリアル(※訳註4)は、まさにそれを実現するためのものだ)。
画像検索で使用される私のお気に入りの製品のひとつは、Google Lensだ。これは、カメラの写真と視覚的に類似した製品をマッチングさせる。以下の画像では、私のスニーカーに似ているオンライン製品をマッチングさせようとしている。
文の埋め込みと同様に、画像埋め込みもフリーで利用できるモデルがたくさんある。TensorFlow Hubのページでは、「feature vector」というラベルが付いたたくさんの画像埋め込みモデルが提供されている。これらの埋め込みは、当初は大規模なデータセットで画像分類を行うために訓練された大規模なディープラーニングモデルから抽出されたものである。MobileNet埋め込みによる画像検索のデモを見ると、写真をアップロードすると、Wikimedia のすべてを検索したうえで類似画像を見つけられることをチェックできる。
残念ながら、文の埋め込みと違って、オープンソースの画像埋め込みは、高品質にするために特定のタスクのためにチューニングする必要な場合が多い。例えば、服の類似性検索を構築したい場合、埋め込みを学習させるために服のデータセットが必要になることが多いだろう。(埋め込みの学習方法については、後にもう少し詳しく説明する)。
閲覧してみよう:機械学習による画像の圧縮・検索・補間・クラスタリング(※訳註5)
商品と買い物客
埋め込みは小売業において、商品のおすすめを行う際に特に有用だ。Spotifyはリスナーの視聴履歴からどの曲をおすすめるするべきか、どのように判断するのだろうか。Netflixは、どのようにしておすすめの映画を決定しているののだろうか(※訳註6)。Amazonはどのようにして購入履歴から買い物客におすすめする商品を知るのだろうか。
また、Netflixテクノロジーブログが2020年12月11日にMediumに投稿した記事『機械学習によるコンテンツの意思決定者のサポート』では、Netflixオリジナル作品を制作するにあたり、「過去に類似の作品はあったか」と「各地域でどの程度の視聴者を見込めるか」という判断を埋め込みにもとづいて導く方法が解説されている。
現在、最先端のレコメンデーションシステムを構築する方法は埋め込みである。購入履歴や視聴履歴のデータを使って、小売業者はユーザとアイテムを埋め込んだモデルを訓練しているのだ。
埋め込みモデルでレコメンデーションシステムを構築するとは、どういうことか。
例えば、私が「BookShop」という架空のハイテク書籍販売サイトで頻繁に買い物をしているとする。BookShopは、購入履歴データを使って、2つの埋め込みモデルを訓練した。
1つ目のユーザ埋め込みモデルは、本の購入者である私を私の購入履歴にもとづいてユーザ空間にマッピングする。例えば、私はオライリーの技術書やポップサイエンス、ファンタジーなどの本をよく買うので、このモデルはユーザ空間内の他のオタクに近い位置に私をマッピングする。
一方でBookShopは、本をアイテム空間にマッピングするアイテム埋め込みモデルも維持管理している。アイテム空間では、似たようなジャンルやトピックの本が集まっていることが予想される。つまり、フィリップ・K・ディックの「アンドロイドは電気羊の夢を見るか」とウィリアム・ギブソンの「ニューロマンサー」はトピック的にもスタイル的にも似ているので、このふたつの書籍を表すベクトルは近傍にあると考えられる。
埋め込みはどのように作成され、どこで入手できるか?
ここまでの話をまとめると、以下のようになる。
- どのような種類のアプリが埋め込みの力を発揮するのか
- 埋め込みとは何か(データを空間上の点としてマッピング)
- 実際に埋め込むことができるデータ型の一部
まだ取り上げていないのは埋め込みがどこから来るのか、ということだ。(データサイエンティストとSQLデータベースが熱烈に愛し合うとき…)ええと、もっと具体的に言うと、データを取り込んで、ユースケースにもとづいて意味的な内容を持った埋め込みを吐き出す機械学習モデルを構築する方法について話そう。
埋め込みモデルを構築するにはほとんどの機械学習と同様に、2つの選択肢がある:事前学習済みモデルルートとDIY、つまり自分でモデルを訓練するルートだ。
事前学習済みモデル
テキストを埋め込む、つまりテキスト検索やテキストの類似性検索を行いたいのであれば、幸運だ。事前学習済みのテキスト埋め込みモデルは大量にあり、それらは無料かつ簡単に利用できる。最も人気のあるモデルのひとつが前述したUniversal Sentence Encoderモデルで、TensorFlow Hubのモデルリポジトリのこちらからダウンロードできる。このモデルをコードで使うのは、とても簡単だ。以下のPythonサンプルは、TensorFlowのウェブサイトから直接取得したものである。
このテキスト埋め込みを実際に利用するためには、最近傍探索と類似度計算を実装する必要がある。これについては、私が最近書いたこのブログ記事を参照のこと。その記事には文の埋め込みを使ってテキストを意味論的に構築するインテリジェントなアプリを詳しく取り上げている(※訳註7)。
オープンソースの画像埋め込みも簡単に入手できる。それはTensorFlow Hubで見つけられる。繰り返しになるが、ドメイン固有のタスクに役立てるには、この種の埋め込みをドメイン固有のデータ(服飾品の写真、犬の品種など)でファインチューニングするのが有効な場合が多い。
最後になるが、最近リリースされた埋め込みモデルのなかで最も流行を惹起しそうなものに言及するのを忘れていたのでこれから述べる。それは、OpenAIのCLIPモデルだ。CLIPは画像やテキストを入力として受け取り、その両方のデータ型を同じ埋め込み空間にマッピングできる。こうした仕組みにより、ある画像に対して、どのキャプション(テキスト)が最もふさわしいかを判断するようなソフトウェアを構築できるのだ。
独自の埋め込みを訓練する
一般的なテキストや画像の埋め込みだけでなく、埋め込みモデルを自分たちのデータで訓練しなければならない場合がしばしばある。現在、埋め込みモデルを独自に構築する最も一般的な方法のひとつは、Two-Towerモデルと呼ばれるものだ。以下は、このモデルに関するGoogle Cloudのサイトの記述である。
Two-Towerモデルでは、ラベル付きデータを使用することでエンベディングをトレーニングします。Two-Towerモデルでは、類似したベクトルオブジェクト(ユーザープロフィール、検索クエリ、ウェブドキュメント、回答文、画像など)を同じベクター空間にペアリングして、関連するアイテム同士を類似させます。Two-Towerモデルは、クエリと候補の2つのエンコーダタワーで構成されています。これらのタワーでは、個別のアイテムを、Matching Engineが類似したアイテムを取得できる共有のエンベディング空間に埋め込みます(※訳註8)。
この記事では、Two-Towerモデルの学習方法について詳しく説明するつもりはない。それについては、Google Cloudの「Two-Tower組み込みアルゴリズムを使用してエンベディングをトレーニングする」というガイドか、TensorFlowのTwo-Tower/Recommendationモデルを自分でトレーニングする方法を紹介したこちらのTensorflow Recommendersページを見てもらうことにしたい。
とにもかくにも、今回はここまでです。次回は、埋め込み技術をベースとしたアプリの作り方についてお話します。いつものように、お読み頂きありがとうございます。
原文
『Machine Learning’s Most Useful Multitool: Embeddings』
著者
Dale Markowitz
翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)
編集
おざけん