単語の特徴ベクトルと類似検索(Word2vec を使用)の Colab プログラムによる実験・研究スキルの基礎
【概要】Word2vecを使用した単語の特徴ベクトル化と類似検索の基礎を学ぶための教材である。単語のベクトル表現、類似度計算、類似単語検索、意味的関係の発見という4つの機能を通じて、自然言語処理の基本概念を実践的に理解できる。Google Colabで実行可能なプログラムを用いて、約300万語の語彙から任意の単語を選択し、実験・研究の基本スキルを習得する。
Colab のページ(ソースコードと説明): https://colab.research.google.com/drive/1E86OSq90AyI1z-ULE6hNoVmpCJ_7fCR8?usp=sharing
【目次】
用語リスト
- 自然言語処理
自然言語処理では、コンピュータが人間の言葉(英語や日本語)を処理する。
- ベクトル
ベクトルは数字の並びである。
- ベクトルの長さ
[100, 200, 300] のような3個の数字が並んだベクトルの長さは3である。
[10, 20, 30, 40] のような4個の数字が並んだベクトルの長さは4である。
- ベクトルの距離
2つのベクトルについて、距離を考えることができる。
ベクトル [0, 0, 0] と [0, 0, 100] の距離よりも、[0, 0, 0] と [0, 0, 1] の距離の方が近い。
Word2vecでは、コサイン類似度という計算方法を使って距離を測る。
- 単語の特徴ベクトル
単語をベクトル化したものを「単語の特徴ベクトル」という。単語の特徴ベクトルは、単語の類似度や類似検索を扱うときに役立つ。
- 単語の類似度
自然言語処理は「dog」、「cat」、「queen」、「king」のような単語を扱う。
単語について、意味が似ているか、似ていないかを表す数値(類似度)を扱う。
- 単語の特徴ベクトルの距離が近ければ、類似度が高い
- 単語の特徴ベクトルの距離が遠ければ、類似度は低い
類似度は、類似検索に役立つ。
- 類似検索
似たものを探すという検索である。この類似検索では、単語の特徴ベクトルを使う。単語の特徴ベクトルを用いて、距離が近い特徴ベクトルを持つ別の単語を探すことを行う。
- Word2vec
Word2vecは、2層のニューラルネットワークであり、単語の特徴ベクトル、単語の類似度、類似検索についての次の機能をもつ。2013年に発表された。
文献: https://arxiv.org/abs/1301.3781
- 単語から、長さ300の特徴ベクトルを作る
このとき、類似した2つの単語については、それらの単語の特徴ベクトルは、距離が近くなるように作られる。
- 単語の類似度
特徴ベクトルを用いて、2つの単語の類似度を算出する。
- 類似検索
単語の類似検索を行う。
- 意味的関係の保持
「王 - 男性 + 女性 = 女王」のような意味的な関係を数学的に計算できる。
- 単語から、長さ300の特徴ベクトルを作る
プログラム利用ガイド
1. このプログラムの利用シーン
このプログラムは、Word2vecの動作原理と応用例を学習するためのデモンストレーションである。単語のベクトル表現、類似度計算、意味的関係の発見など、自然言語処理の基礎概念を実際のデータで体験できる。
2. 主な機能
- 単語ベクトルの可視化
任意の英単語を300次元の数値ベクトルとして表示し、単語の意味が数値でどのように表現されるかを確認できる。
- 単語類似度の計算
2つの単語間のコサイン類似度を計算し、0から1の値で意味的な近さを定量化する。
- 類似単語の検索
指定した単語に意味的に近い上位10単語を、類似度スコアとともに表示する。約300万語の語彙から検索を行う。
- 意味的関係の計算
単語ベクトルの加算・減算により、「王-男性+女性=女王」のような意味的な関係性を数学的に発見できる。
3. 基本的な使い方
- Colab のページを開く。
Colab のページ(ソースコードと説明): https://colab.research.google.com/drive/1E86OSq90AyI1z-ULE6hNoVmpCJ_7fCR8?usp=sharing
- セル1、セル2 を順番に実行する。
最初の実行時には約2GBのモデルファイルがダウンロードされる(数分かかる場合がある)。モデルのロードには約2分を要する。
- 結果の確認。
各セクションで以下の結果が順次表示される。
- 単語の300次元ベクトル
- 単語ペア間の類似度数値
- 類似単語の検索結果(上位10件)
- ベクトル演算による意味的関係の発見結果
4. 便利な機能
- 任意の単語での実験
コード中の単語('iphone'、'ipad'等)を他の英単語に変更することで、任意の単語での実験が可能である。約300万語の語彙に含まれる単語であれば利用できる。
- カスタムベクトル演算
most_similar関数のpositiveパラメータとnegativeパラメータを変更することで、独自の意味的関係を探索できる。複数の単語を組み合わせた複雑な関係性も計算可能である。
- 類似度の閾値設定
most_similar関数のtopnパラメータを変更することで、表示する類似単語の数を調整できる。より多くの候補を確認したい場合に有用である。
- データセット情報の確認
len(model.key_to_index)で利用可能な総語彙数を確認できる。また、特定の単語が語彙に含まれるかを事前に確認することも可能である。
プログラムの説明
概要
このプログラムは、Word2vecを使用して英単語を300次元のベクトル表現に変換し、単語間の意味的類似度の計算、類似単語の検索、単語間の意味的関係性の発見を行うデモンストレーションである。
主要技術
Word2vec
Word2vecは、2013年にGoogleのTomas Mikolovらによって開発された自然言語処理技術である。単語を密なベクトル表現に変換し、単語の意味的特徴を数値で捉える。Skip-gramとCBOW(Continuous Bag of Words)の2つのアーキテクチャを持ち、大規模コーパスから単語の分散表現を学習する。
コサイン類似度
コサイン類似度は、ベクトル空間モデルにおいて2つのベクトル間の類似性を測定する手法である。ベクトル間の角度のコサイン値を計算することで、-1から+1の範囲で類似度を表現する。ベクトルの大きさに依存せず、方向性のみを考慮する。
技術的特徴
- 大規模事前学習モデル
Google Newsコーパス(約1000億語)で学習された300次元のWord2vecモデルを使用する。約300万語の語彙を持つ。
- 意味的関係の数学的表現
単語間の意味的・統語的関係をベクトル演算として表現する。例えば「king - man + woman ≈ queen」のような関係性を計算できる。
- ベクトル空間における近傍探索
指定した単語に対して、ベクトル空間上で最も近い単語を検索し、類似度スコアとともに提示する。
実装の特色
- 学習済みモデルの自動取得
gdownライブラリを使用して、Google Driveから学習済みモデル(GoogleNews-vectors-negative300.bin.gz)を自動的にダウンロードする。
- Gensimライブラリによる実装
Pythonの自然言語処理ライブラリであるGensimを使用する。KeyedVectorsクラスを通じて単語ベクトルへのアクセスと類似度計算を行う。
- 4段階のデモンストレーション構成
以下の順序で機能を提示する。単語の特徴ベクトル表示、単語間の類似度計算、類似単語検索(K=10の近傍探索)、ベクトル演算による意味的関係の発見。
- 多様な単語例による例示
技術製品名(iPhone、iPad、Windows)、家族関係(brother/sister)、社会的地位(king/queen)、地理的関係(国名と都市名)など、多様な意味関係を具体例として提示する。
参考文献
[1] Mikolov, T., Chen, K., Corrado, G., & Dean, J. (2013). Efficient Estimation of Word Representations in Vector Space. arXiv:1301.3781. https://arxiv.org/abs/1301.3781
[2] Mikolov, T., Sutskever, I., Chen, K., Corrado, G., & Dean, J. (2013). Distributed Representations of Words and Phrases and their Compositionality. In Proceedings of NIPS 2013.
[3] Řehůřek, R., & Sojka, P. (2010). Gensim: Topic Modelling for Humans. https://radimrehurek.com/gensim/
[4] Salton, G., Wong, A., & Yang, C. S. (1975). A Vector Space Model for Automatic Indexing. Communications of the ACM, 18(11), 613-620.
実験・研究スキルの基礎:Google Colabで学ぶWord2vec実験
1. 実験・研究のスキル構成要素
実験や研究を行うには、以下の5つの構成要素を理解する必要がある。
1.1 実験用データ
このプログラムでは以下が実験用データである。
- Google Newsコーパスで事前学習された300次元のWord2vecモデル(約300万語の語彙)
- 実験対象となる英単語(検証したい単語を自由に選択できる)
1.2 実験計画
何を明らかにするために実験を行うのかを定める。
計画例は以下のとおりである。
- 特定の単語ペア間の意味的類似度を定量的に測定する
- 異なるカテゴリの単語(製品名、家族関係、地理情報など)における類似度の傾向を比較する
- ベクトル演算による意味的関係(類推)が成立するかを検証する
- 類似単語検索における上位結果の妥当性を評価する
- 特定の意味領域(技術、生物、地理など)内での単語の関連性を調査する
- 同義語と対義語の類似度スコアの違いを確認する
1.3 プログラム
実験を実施するためのツールである。このプログラムはGensimライブラリのWord2vec実装を使用している。
- プログラムの機能を理解して活用することが基本である
- 基本となるプログラムを出発点として、将来、様々な機能を自分で追加することができる
- 約300万語の語彙から任意の単語を選択して実験できる
1.4 プログラムの機能
このプログラムは単語のベクトル表現と意味的関係を分析する4つの機能を提供する。
機能1:単語の特徴ベクトル表示
- 入力:英単語(文字列)
- 出力:300次元のfloat32配列
- 用途:単語が数値ベクトルとして表現されることを確認する
機能2:単語間の類似度計算
- 入力:2つの英単語
- 出力:コサイン類似度(-1.0から1.0の範囲、通常は0.0から1.0)
- 用途:単語ペア間の意味的近さを定量的に測定する
機能3:類似単語検索
- 入力:基準となる英単語
- 出力:類似度の高い上位10単語とそのスコア
- 用途:意味的に近い単語群を発見する
機能4:ベクトル演算による意味的関係の計算
- 入力:加算する単語のリスト(positive)と減算する単語のリスト(negative)
- 出力:演算結果に最も近い上位5単語とスコア
- 用途:「王-男性+女性=女王」のような意味的関係を発見する
1.5 検証(結果の確認と考察)
プログラムの実行結果を観察し、単語間の関係性や類似度の妥当性を考察する。
基本認識は以下のとおりである。
- 単語を変えると結果が変わる。その変化を観察することが実験である
- 類似度スコアの高低は相対的なものであり、絶対的な基準は存在しない
- 約300万語の中から検索されるため、予想外の結果が得られることがある
観察のポイントは以下のとおりである。
- 類似度スコアは直感的な意味の近さと一致しているか
- 類似単語検索の結果は意味的に妥当か
- 同じカテゴリの単語同士は高い類似度を示すか
- ベクトル演算の結果は期待される意味的関係を表現しているか
- 上位に現れる単語以外にも妥当な候補が存在するか
- 同義語、類義語、関連語、対義語で類似度はどう異なるか
2. 間違いの原因と対処方法
2.1 プログラムのミス(人為的エラー)
プログラムがエラーで停止する
- 原因:構文エラー、必要なライブラリがインストールされていない、インデントの誤り
- 対処方法:エラーメッセージを確認し、提供されたコードと比較する。gensimとgdownが正しくインストールされているか確認する
モデルのダウンロードが進まない
- 原因:ネットワーク接続の問題、Google Driveへのアクセス制限
- 対処方法:インターネット接続を確認する。数分待ってから再実行する。約2GBのファイルをダウンロードするため時間がかかる
モデルのロードに失敗する
- 原因:ダウンロードが不完全、メモリ不足
- 対処方法:ランタイムを再起動し、最初からダウンロードをやり直す。Google Colabの無料版ではメモリが不足する場合がある
単語が見つからないというエラーが出る
- 原因:指定した単語が約300万語の語彙に含まれていない、スペルミス、大文字小文字の違い
- 対処方法:単語のスペルを確認する。大文字小文字を変えて試す(例:'Apple'と'apple'は別の単語として扱われる)。複合語はアンダースコア区切りで試す(例:'New_York')
2.2 期待と異なる結果が出る場合
類似度が予想より低い(または高い)
- 原因:Word2vecは文脈的な類似性を学習するため、人間の直感と必ずしも一致しない。学習データ(Google News)における単語の使われ方が影響する
- 対処方法:これは異常ではなく、Word2vecの特性である。類似度の絶対値よりも、複数の単語ペアを比較した相対的な関係に注目する
類似単語検索の結果に無関係な単語が含まれる
- 原因:Word2vecは意味だけでなく文脈的な共起関係も学習する。スペルが似ている単語、同じ文脈で頻繁に使われる単語が結果に含まれることがある
- 対処方法:これは正常な動作である。上位10件すべてが完璧に関連するとは限らない。複数の候補の中から妥当なものを選択する視点が重要である
ベクトル演算の結果が期待と異なる
- 原因:すべての意味的関係がベクトル演算で表現できるわけではない。学習データに含まれる関係性のみが反映される
- 対処方法:これはWord2vecの限界を示す重要な観察結果である。どのような関係が成立し、どのような関係が成立しないかを記録することが有意義な実験となる
同じ単語が類似単語検索の結果に出現しない
- 原因:検索対象の単語自身は結果から自動的に除外される
- 対処方法:これは正常な動作である。自分自身との類似度は常に1.0であるため、検索結果には含まれない
製品名や固有名詞で期待した結果が得られない
- 原因:語彙に含まれていない、または学習データ(2013年頃までのGoogle News)に出現頻度が少ない
- 対処方法:より一般的な単語や、学習データの時期に存在した単語で試す。新しい製品や最近の固有名詞は語彙に含まれていない可能性が高い
3. 実験レポートのサンプル
技術用語における意味的類似性の検証
実験目的:技術製品に関する単語(スマートフォン、タブレット、OS)の意味的類似度を測定し、Word2vecがこれらの関係性をどの程度捉えているかを検証する。
実験計画:以下の3つのカテゴリから代表的な単語を選択し、カテゴリ内とカテゴリ間の類似度を比較する。
- スマートフォン:iPhone、Android
- タブレット:iPad、tablet
- OS:Windows、iOS
実験方法:プログラムのmodel.similarity()関数を使用して、すべての単語ペアの類似度を計算する。
実験結果:
| 単語ペア | 類似度 | カテゴリ関係 | 評価 |
|---|---|---|---|
| iPhone - iPad | 0.xxxx | 同一メーカーの異なる製品 | (高い/中程度/低い) |
| iPhone - Android | 0.xxxx | 競合製品 | (高い/中程度/低い) |
| iPhone - Windows | 0.xxxx | 異なるカテゴリ | (高い/中程度/低い) |
| iPad - tablet | 0.xxxx | 同一カテゴリ(固有名詞と一般名詞) | (高い/中程度/低い) |
| Windows - iOS | 0.xxxx | 競合OS | (高い/中程度/低い) |
類似単語検索の結果:
基準単語:iPhone
- 1位:(単語名、類似度)- 妥当性の評価
- 2位:(単語名、類似度)- 妥当性の評価
- 3位:(単語名、類似度)- 妥当性の評価
考察:
- (例文)iPhoneとiPadの類似度が0.75と高い値を示したのは、両者が同じメーカーの製品であり、Google Newsの記事内で同じ文脈(製品発表、レビュー記事など)で頻繁に言及されるためと考えられる。
- (例文)iPhoneとAndroidも0.65と比較的高い類似度を示した。これは競合関係にあるため、比較記事などで同時に言及される機会が多いことを反映していると推測される。
- (例文)iPhoneとWindowsの類似度は0.45と相対的に低かった。両者は異なる製品カテゴリであり、文脈的な共起が少ないことが原因と考えられる。
- (例文)類似単語検索の結果、iPhoneの上位には他のスマートフォン製品名が多く含まれており、Word2vecが製品カテゴリを適切に学習していることが確認できた。
結論:
- (例文)Word2vecは技術製品間の意味的関係をある程度捉えることができる。
- (例文)特に同一カテゴリ内の製品や競合製品については高い類似度を示す傾向があった。
- (例文)ただし、類似度の絶対値は人間の主観的な判断と必ずしも一致しないため、複数の単語ペアを比較した相対的な関係性に注目することが重要である。
ベクトル演算による意味的関係の発見
実験目的:「王-男性+女性=女王」のような意味的関係がベクトル演算で表現できるかを検証し、どのような関係性が成立するかを調査する。
実験計画:以下の4つのタイプの意味的関係について、ベクトル演算を実行し、結果の妥当性を評価する。
- 性別の関係:king - man + woman
- 家族関係:brother - man + woman
- 地理的関係:Newyork - USA + Japan
- 時制の関係:running - run + walk
実験方法:model.most_similar()関数のpositiveパラメータとnegativeパラメータを使用し、各演算の上位5件の結果を記録する。
実験結果:
| ベクトル演算 | 1位の結果 | 類似度 | 妥当性 |
|---|---|---|---|
| king - man + woman | (単語) | 0.xxxx | (期待通り/部分的に妥当/妥当でない) |
| brother - man + woman | (単語) | 0.xxxx | (期待通り/部分的に妥当/妥当でない) |
| Newyork - USA + Japan | (単語) | 0.xxxx | (期待通り/部分的に妥当/妥当でない) |
| running - run + walk | (単語) | 0.xxxx | (期待通り/部分的に妥当/妥当でない) |
詳細な結果(各演算の上位5件):
king - man + womanの結果:
- 1位:(単語、類似度、コメント)
- 2位:(単語、類似度、コメント)
- 3位:(単語、類似度、コメント)
- 4位:(単語、類似度、コメント)
- 5位:(単語、類似度、コメント)
考察:
- (例文)king - man + womanの演算では、1位に"queen"が出現し、期待通りの結果が得られた。
- (例文)これはWord2vecが性別に関する意味的関係を適切に学習していることを示している。
- (例文)brother - man + womanでは"sister"が上位に出現したが、1位ではなかった。
- (例文)家族関係の意味的関係も一定程度表現できるものの、性別の関係ほど明確ではないことが分かった。
- (例文)地理的関係(Newyork - USA + Japan)では、日本の都市名が上位に現れたが、必ずしも"Tokyo"が1位とは限らなかった。
- (例文)地理的な類推は成立する場合もあるが、安定性は低い。
- (例文)時制の関係については期待した結果が得られなかった。
- (例文)これはWord2vecが主に文脈的な共起関係を学習するため、文法的な時制変化を直接的には捉えにくいことを示唆している。
- (例文)すべての演算において、1位の結果の類似度が0.6から0.8の範囲にあり、完全な一致ではないことに注意が必要である。
結論:
- (例文)Word2vecのベクトル演算は、性別や家族関係などの社会的な関係性については比較的良好に機能する。
- (例文)一方、地理的関係や文法的関係については成功率が低く、すべての意味的関係がベクトル演算で表現できるわけではないことが確認できた。
- (例文)ベクトル演算の結果は確率的なものであり、常に1位に期待する単語が現れるとは限らない。
- (例文)上位5件程度を確認し、その中に妥当な候補が含まれるかを評価する姿勢が重要である。