この度は、「実践入門Word2Vec」をお手に取っていただきありがとうございます。本書は、自然言語処理にブレイクスルーをもたらしたツールである Word2Vec について
・Word2Vec を使ってみたい初心者
・ちょっと手の込んだことをしてみたい中級者
向けにWord2Vec使い倒すべく、私個人の観点から可能な限り役立ちそうなTIPSを詰め込みました。
2018年以降はBERTやGPTシリーズの登場によってWord2Vecはもはや過去の技術という印象があるかもしれません。ですが、手垢まみれになった今だからこそ、豊富な知見による安定的な活用が可能になったとも言えます。
そこで、私見を多分に含みますが、散り散りになっているWord2Vecを使い倒すためのノウハウを1冊にまとめました。ひとつひとつの内容は以前どこかの記事などで見かけたことがあるというものも多いと思います。それらの知見をパッと探し直せるよう、使いやすく編集しました。なので、Word2Vecの取っ掛かりとして、これだけでだいたい事足りる1冊に仕上がったと思います。本書を読んで、Word2Vecを使い倒してもらって、みなさんのサービス開発やアプリ開発ライフの一助になれば幸いです。
本書の内容ですが、実践入門ということで、理論的な点よりも、使い方に重点を置きました。実装例をたくさん載せましたので、動いた結果を見ながら理解できると思います。本書とは別にGoogle ColaboratoryおよびGitHubでサンプルコードを公開しています12。ですので、本書の内容をそのままなぞれるようになっています3。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
本書に記載された内容は、情報提供のみを目的としております。そのため、本書に記載された内容を用いた開発、制作、運用はご自身の責任と判断によって実施してください。利用の結果発生した事象に関しては、当方は一切の責任を負いかねます。
本書は技術系同人誌即売会「技術書典12」で頒布されたものを底本としております。
理論的な背景は知らなくても、便利なライブラリの助けを借りれば、動かすことはできてしまいます。とはいえ、まったく概念や用語を知らない状態だと謎の説明や操作だらけになってしまうので、ごくごく簡単に説明しておこうと思います。
先に用語を抑えておきたい、詳しく知りたいという方以外は、この章はいったん読み飛ばして、後でも戻って来るといった読み方でもいいと思います。
まずは、「Word2Vec」という名前以外は何も知らないという方向けにざっくりイメージだけお話しします。
Word2Vec12は、2013年にGoogleの研究チームによって発表された「コンピューターに人間の言葉を理解させるためのツール」です。使いこなせれば、単語・文章の類似性、文から書き手の感情分析、ひいては翻訳やチャットボットの受け答え生成にも応用できる強力なツールです。しかも、これらが人の手を介さず自動でできてしまうというので驚きです。
活用例としては、マイクロソフトが開発した LINE 上のチャットボットである「りんな」3が有名かと思います。そのほかにも、リクルートの機械学習APIである「A3RT」4やNECとダンデライオン・チョコレート・ジャパンとのコラボ商品である「あの頃はCHOCOLATE」56など、様々なビジネスシーンで活用されています。
ここまでの話だとWord2Vecは魔法のツールのようにも思えますが、実現のためには、避けては通れない難題がありました。それは、私たちが当たり前のように使いこなしている「言葉」をコンピューターにも扱えるようにすることです。私たちが日常的に用いている「言葉」は、コンピューターが理解しやすいよう私たちが歩み寄っているプログラミング言語と区別して自然言語と呼ばれています。
コンピューターは数値化されたデジタル情報を高速に処理するのに長けています。しかし、自然言語はとても抽象的で、コンピューターが扱える形からは程遠いです。それでもなんとか自然言語を数値化し、コンピューターで処理できるようにならないかと苦心した結果編み出されたのが、分散表現と呼ばれる自然言語を空間上の座標点で表す方法です。
私たちは建物の位置を正確に表すために緯度・経度を編み出しました。例えば、東京タワーの位置は地図上で北緯35度、東経139度と表されます。
同じように、自然言語専用の地図を用意して、その地図上の座標点でひとつひとつの自然言語を表そうと考えたのです。自然言語をデジタル情報化できれば、コンピューターでも扱えます。しかも、自然言語を座標点で表せるのならば、言葉同士の距離を測り、似ている似ていないの判別などができます。
このように自然言語を座標点すなわちベクトルとして表したものが、分散表現や埋め込み表現と呼ばれるものです。特に自然言語の単位を単語としたものを、単語分散表現や単語ベクトルと呼びます7。分散表現や単語ベクトルという用語はこの後の説明でたびたび出てきます。ひとまず、単語をコンピューターに理解できるよう座標で表したものだと思っておけば大丈夫です。
また、分散表現には次元と呼ばれる数値があります。次元とは、座標空間の軸の数のことです。先ほどの東京タワーの例で言えば、北緯35度、東経135度と緯度と経度の2つの軸で点を表していたので、2次元になります。
そして、それぞれの単語に対して単語ベクトルを作るための手法のひとつが、本書の主題であるWord2Vecなのです。
Word2Vecの実態は、脳の神経細胞の構造を模したと言われるニューラルネットワークです。ニューラルネットワークは構造を持った変換器なので、その構造あるいは特定の構造を持ったニューラルネットワークを指してモデルと呼びます。このモデルという用語もこの後の説明や変数名で出てきますので、頭の片隅に留めておいてください。私たちが反復練習で技術を習得するように、いろいろなテキストをモデルに入力して訓練をすることで、有用な分散表現が得られます。
このようなテキスト分野の機械学習技術といえば、BERTやTransformer、GPTといった新しめの技術に注目が行きがちですが、Word2Vecもまだまだ現役です。実際ビジネス領域においては、その扱いやすさからWord2Vecが選ばれるということも珍しくありません。
テキストの特徴ベクトルは、Word2vecモデルとTF-IDFの組み合わせで抽出します。BERTなど他のモデルも試しましたが、シンプルで軽量、予測にかかるGPUコストが少なく本番環境での利用に適していることから、word2vecを採用しました。 (https://cloud.google.com/blog/ja/topics/developers-practitioners/mercari-leverages-googles-vector-search-technology-create-new-marketplace より)
BERTなどの最新手法は、Word2Vecより使い勝手のよい単語ベクトルが作れないかと思案して編み出された手法です。なので、「自然言語をコンピューター処理できる形で表したい」という思想そのものは同じです。手段が異なるだけで、得られた分散表現を活用するという点では同じ考え方が使えます。本書でもいくつか応用例を紹介しています。ひとつでも興味を持ったテーマがあったなら、今からでも十分間に合うのでぜひ学んでいきましょう!