ワンホットベクトルとは?AI・自然言語処理の基本をわかりやすく解説

人工知能(AI)や機械学習の世界に足を踏み入れると、様々な専門用語に出会います。その中でも、特に自然言語処理(NLP)の分野で基本となるのが「ワンホットベクトル(one-hot vector)」です。 ワンホットベクトルは、コンピュータが「りんご」や「猫」といった言葉(カテゴリカルデータ)を理解し、計算できるようにするための非常に重要な手法です。この記事では、初心者の方でも理解できるように、ワンホットベクトルの概念から具体的な使い方、メリット・デメリットまでを丁寧に解説します。

一言で言うと…
「1つだけがHot (1) で、その他はすべてCold (0) であるベクトル(数値の並び)」のことです。これにより、コンピュータがカテゴリを区別できるようになります。

コンピュータは「月曜日」「火曜日」といった文字列を直接計算できません。そのため、これらのカテゴリを数値に変換する必要があります。この変換手法の一つがワンホットベクトルです。

例えば、「曜日」というカテゴリについて考えてみましょう。[“月”, “火”, “水”, “木”, “金”, “土”, “日”] という7つのカテゴリがあります。これをワンホットベクトルで表現すると以下のようになります。

曜日ワンホットベクトル
… (以下同様) …

このように、表現したいカテゴリに対応する要素だけを「1」にし、それ以外をすべて「0」にします。ベクトルの長さ(次元数)は、カテゴリの総数と同じになります。この表現方法により、各カテゴリは互いに独立したものとして、コンピュータが扱うことができるようになります。

自然言語処理では、文章を単語に分解し、その単語をベクトルに変換することでコンピュータに意味を理解させようとします。ワンホットベクトルは、この単語のベクトル化に使われる最も基本的な手法です。

単語をベクトルに変換する手順

  1. 辞書(語彙)の作成: 扱いたい文章全体から、登場するすべてのユニークな単語をリストアップし、「辞書(Vocabulary)」を作成します。
  2. ベクトルの用意: 辞書に含まれる単語の数と同じ長さの、全ての要素が0のベクトルを用意します。
  3. ベクトル化: 表現したい単語が辞書の何番目にあるかを確認し、その位置の要素だけを「1」にします。

具体例:
「私は猫が好きです」という文章で考えてみましょう。

1. 辞書の作成
まず、単語に分割します: 「私」「は」「猫」「が」「好き」「です」
辞書(語彙リスト)は以下のようになります:
{"私": 0, "は": 1, "猫": 2, "が": 3, "好き": 4, "です": 5}

2. 各単語のワンホットベクトル化
辞書の単語数は6つなので、6次元のベクトルになります。

単語ワンホットベクトル
好き
です

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_) 

ワンホットベクトルはシンプルで分かりやすい反面、いくつかの課題も抱えています。

メリットデメリット
  • シンプルで直感的: 概念が単純で、誰がどのカテゴリを表しているか一目でわかります。
  • 順序性の排除: 「りんご=1, みかん=2」のように単純に数字を割り振ると、「みかん > りんご」という誤った大小関係をモデルが学習してしまう可能性があります。ワンホットベクトルはこれを防ぎます。
  • 次元の呪い: 語彙数が増える(例えば、数万語)と、ベクトルの次元数が非常に大きくなり、計算コストやメモリ使用量が増大します。
  • スパース(疎)な表現: ベクトルのほとんどの要素が0となり、データ表現として非効率です。
  • 単語の類似性を表現できない: 「猫」と「犬」が意味的に近い、といった単語間の関係性を全く表現できません。全ての単語ベクトルは互いに直交しており、等しい距離にあると扱われます。

ワンホットベクトルの「単語の類似性を表現できない」という大きなデメリットを克服するために生まれたのが、単語の分散表現(Word Embedding)という考え方です。

分散表現は、単語を低次元(例:100次元や300次元)で密なベクトル(0が少ない)で表現します。そして、ベクトルの近さ(コサイン類似度など)が単語の意味の近さを表すように学習させます。これにより、「王様 – 男性 + 女性 = 女王様」といったような、単語の意味を考慮した計算が可能になります。

代表的な手法として、Word2VecGloVe、そして近年の大規模言語モデルの基礎となっているBERTなどが挙げられます。

ワンホットベクトルは、コンピュータが「言葉」というカテゴリカルデータを扱うための、基本的で重要な第一歩です。

  • カテゴリデータを「1」と「0」のベクトルで表現するシンプルな手法。
  • 自然言語処理では、単語をベクトル化するために使われる。
  • シンプルさがメリットだが、次元が大きくなる、単語の類似性を表現できないといったデメリットもある。
  • このデメリットを克服するために「分散表現」という技術が登場した。

ワンホットベクトルの概念とその限界を理解することは、Word2VecやBERTといった、より高度な自然言語処理技術を学ぶための確かな土台となります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です