目次

はじめに
表記関係について
免責事項
底本について
第1章 Word2Vec とは
1.1 Word2Vecとはなんぞ!?
1.2 理論背景
第2章 Word2VecのHello World
2.1 Google Colaboratoryの準備
2.2 モデルを取得しよう
2.3 モデルを使ってみよう
第3章 自分で学習させてみよう
3.1 学習のための準備
3.2 モデルを学習させてみよう
3.3 学習済みのモデルに語彙を追加する
第4章 検索システムを作ってみよう
4.1 全文検索とベクトル検索
4.2 ベクトル検索システムを作る
4.3 Doc2Vecではダメなの……?
第5章 さらなる使い倒しを目指して
5.1 学習経過を可視化する
5.2 語彙削減によるモデル圧縮
5.3 Magnitudeによるモデル圧縮
5.4 ノーコードで使えるようにする
5.5 典型タスクを解く
5.6 他言語でWord2Vecを活用する
あとがき
謝辞

はじめに

 この度は、「実践入門Word2Vec」をお手に取っていただきありがとうございます。本書は、自然言語処理にブレイクスルーをもたらしたツールである Word2Vec について

 ・Word2Vec を使ってみたい初心者

 ・ちょっと手の込んだことをしてみたい中級者

 向けにWord2Vec使い倒すべく、私個人の観点から可能な限り役立ちそうなTIPSを詰め込みました。

 2018年以降はBERTやGPTシリーズの登場によってWord2Vecはもはや過去の技術という印象があるかもしれません。ですが、手垢まみれになった今だからこそ、豊富な知見による安定的な活用が可能になったとも言えます。

 そこで、私見を多分に含みますが、散り散りになっているWord2Vecを使い倒すためのノウハウを1冊にまとめました。ひとつひとつの内容は以前どこかの記事などで見かけたことがあるというものも多いと思います。それらの知見をパッと探し直せるよう、使いやすく編集しました。なので、Word2Vecの取っ掛かりとして、これだけでだいたい事足りる1冊に仕上がったと思います。本書を読んで、Word2Vecを使い倒してもらって、みなさんのサービス開発やアプリ開発ライフの一助になれば幸いです。

 本書の内容ですが、実践入門ということで、理論的な点よりも、使い方に重点を置きました。実装例をたくさん載せましたので、動いた結果を見ながら理解できると思います。本書とは別にGoogle ColaboratoryおよびGitHubでサンプルコードを公開しています12。ですので、本書の内容をそのままなぞれるようになっています3

表記関係について

 本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。

免責事項

 本書に記載された内容は、情報提供のみを目的としております。そのため、本書に記載された内容を用いた開発、制作、運用はご自身の責任と判断によって実施してください。利用の結果発生した事象に関しては、当方は一切の責任を負いかねます。

底本について

 本書は技術系同人誌即売会「技術書典12」で頒布されたものを底本としております。

1. https://colab.research.google.com/drive/1_ZC8PcBpzBqaIKh3ubi6tLqVYdGuHgu1?usp=sharing

2. https://github.com/Sashimimochi/word2vec-use-up-book

3. メンテナンスによって本書に記載の実装例と異なる可能性があります。また、サンプルコードはPythonを中心に実装されていますが、プログラミング言語そのものの解説は紙面の都合上割愛しております。

第1章 Word2Vec とは

 理論的な背景は知らなくても、便利なライブラリの助けを借りれば、動かすことはできてしまいます。とはいえ、まったく概念や用語を知らない状態だと謎の説明や操作だらけになってしまうので、ごくごく簡単に説明しておこうと思います。

 先に用語を抑えておきたい、詳しく知りたいという方以外は、この章はいったん読み飛ばして、後でも戻って来るといった読み方でもいいと思います。

1.1 Word2Vecとはなんぞ!?

 まずは、「Word2Vec」という名前以外は何も知らないという方向けにざっくりイメージだけお話しします。

 Word2Vec12は、2013年にGoogleの研究チームによって発表された「コンピューターに人間の言葉を理解させるためのツール」です。使いこなせれば、単語・文章の類似性、文から書き手の感情分析、ひいては翻訳やチャットボットの受け答え生成にも応用できる強力なツールです。しかも、これらが人の手を介さず自動でできてしまうというので驚きです。

 活用例としては、マイクロソフトが開発した LINE 上のチャットボットである「りんな」3が有名かと思います。そのほかにも、リクルートの機械学習APIである「A3RT」4やNECとダンデライオン・チョコレート・ジャパンとのコラボ商品である「あの頃はCHOCOLATE」56など、様々なビジネスシーンで活用されています。

 ここまでの話だとWord2Vecは魔法のツールのようにも思えますが、実現のためには、避けては通れない難題がありました。それは、私たちが当たり前のように使いこなしている「言葉」をコンピューターにも扱えるようにすることです。私たちが日常的に用いている「言葉」は、コンピューターが理解しやすいよう私たちが歩み寄っているプログラミング言語と区別して自然言語と呼ばれています。

 コンピューターは数値化されたデジタル情報を高速に処理するのに長けています。しかし、自然言語はとても抽象的で、コンピューターが扱える形からは程遠いです。それでもなんとか自然言語を数値化し、コンピューターで処理できるようにならないかと苦心した結果編み出されたのが、分散表現と呼ばれる自然言語を空間上の座標点で表す方法です。

図1.1: 空間上の座標点としての単語

 私たちは建物の位置を正確に表すために緯度・経度を編み出しました。例えば、東京タワーの位置は地図上で北緯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より使い勝手のよい単語ベクトルが作れないかと思案して編み出された手法です。なので、「自然言語をコンピューター処理できる形で表したい」という思想そのものは同じです。手段が異なるだけで、得られた分散表現を活用するという点では同じ考え方が使えます。本書でもいくつか応用例を紹介しています。ひとつでも興味を持ったテーマがあったなら、今からでも十分間に合うのでぜひ学んでいきましょう!

1. https://code.google.com/archive/p/word2vec/

2. https://github.com/tmikolov/word2vec

3. https://www.rinna.jp/

4. https://a3rt.recruit.co.jp/

5. https://jpn.nec.com/ai/chocolate/

6. https://jpn.nec.com/techrep/journal/g19/n01/190117.html

7. 用途にとっては、文や文章を1つの点として表現することもあります。

試し読みはここまでです。
この続きは、製品版でお楽しみください。