はじめに
人工知能(AI)や機械学習の世界に足を踏み入れると、様々な専門用語に出会います。その中でも、特に自然言語処理(NLP)の分野で基本となるのが「ワンホットベクトル(one-hot vector)」です。 ワンホットベクトルは、コンピュータが「りんご」や「猫」といった言葉(カテゴリカルデータ)を理解し、計算できるようにするための非常に重要な手法です。この記事では、初心者の方でも理解できるように、ワンホットベクトルの概念から具体的な使い方、メリット・デメリットまでを丁寧に解説します。
ワンホットベクトルとは?
「1つだけがHot (1) で、その他はすべてCold (0) であるベクトル(数値の並び)」のことです。これにより、コンピュータがカテゴリを区別できるようになります。
コンピュータは「月曜日」「火曜日」といった文字列を直接計算できません。そのため、これらのカテゴリを数値に変換する必要があります。この変換手法の一つがワンホットベクトルです。
例えば、「曜日」というカテゴリについて考えてみましょう。[“月”, “火”, “水”, “木”, “金”, “土”, “日”] という7つのカテゴリがあります。これをワンホットベクトルで表現すると以下のようになります。
曜日 | ワンホットベクトル |
---|---|
月 | |
火 | |
水 | |
… (以下同様) … | |
日 |
このように、表現したいカテゴリに対応する要素だけを「1」にし、それ以外をすべて「0」にします。ベクトルの長さ(次元数)は、カテゴリの総数と同じになります。この表現方法により、各カテゴリは互いに独立したものとして、コンピュータが扱うことができるようになります。
自然言語処理での使われ方
自然言語処理では、文章を単語に分解し、その単語をベクトルに変換することでコンピュータに意味を理解させようとします。ワンホットベクトルは、この単語のベクトル化に使われる最も基本的な手法です。
単語をベクトルに変換する手順
- 辞書(語彙)の作成: 扱いたい文章全体から、登場するすべてのユニークな単語をリストアップし、「辞書(Vocabulary)」を作成します。
- ベクトルの用意: 辞書に含まれる単語の数と同じ長さの、全ての要素が0のベクトルを用意します。
- ベクトル化: 表現したい単語が辞書の何番目にあるかを確認し、その位置の要素だけを「1」にします。
具体例:
「私は猫が好きです」という文章で考えてみましょう。
1. 辞書の作成
まず、単語に分割します: 「私」「は」「猫」「が」「好き」「です」
辞書(語彙リスト)は以下のようになります:{"私": 0, "は": 1, "猫": 2, "が": 3, "好き": 4, "です": 5}
2. 各単語のワンホットベクトル化
辞書の単語数は6つなので、6次元のベクトルになります。
単語 | ワンホットベクトル |
---|---|
私 | |
は | |
猫 | |
が | |
好き | |
です |
Pythonでの実装例
Pythonのライブラリであるscikit-learn
を使うと、簡単にワンホットベクトルを作成できます。
from sklearn.preprocessing import OneHotEncoder
import numpy as np
# カテゴリデータ
words = [['私'], ['は'], ['猫'], ['が'], ['好き'], ['です']]
# OneHotEncoderのインスタンスを作成
encoder = OneHotEncoder(sparse_output=False)
# データを学習させ、ワンホットベクトルに変換
one_hot_vectors = encoder.fit_transform(words)
print("--- ワンホットベクトル ---")
print(one_hot_vectors)
print("\n--- 辞書の確認 ---")
print(encoder.categories_)
メリットとデメリット
ワンホットベクトルはシンプルで分かりやすい反面、いくつかの課題も抱えています。
メリット | デメリット |
---|---|
|
|
ワンホットベクトルの先へ:分散表現
ワンホットベクトルの「単語の類似性を表現できない」という大きなデメリットを克服するために生まれたのが、単語の分散表現(Word Embedding)という考え方です。
分散表現は、単語を低次元(例:100次元や300次元)で密なベクトル(0が少ない)で表現します。そして、ベクトルの近さ(コサイン類似度など)が単語の意味の近さを表すように学習させます。これにより、「王様 – 男性 + 女性 = 女王様」といったような、単語の意味を考慮した計算が可能になります。
代表的な手法として、Word2VecやGloVe、そして近年の大規模言語モデルの基礎となっているBERTなどが挙げられます。
まとめ
ワンホットベクトルは、コンピュータが「言葉」というカテゴリカルデータを扱うための、基本的で重要な第一歩です。
- カテゴリデータを「1」と「0」のベクトルで表現するシンプルな手法。
- 自然言語処理では、単語をベクトル化するために使われる。
- シンプルさがメリットだが、次元が大きくなる、単語の類似性を表現できないといったデメリットもある。
- このデメリットを克服するために「分散表現」という技術が登場した。
ワンホットベクトルの概念とその限界を理解することは、Word2VecやBERTといった、より高度な自然言語処理技術を学ぶための確かな土台となります。