ワンホットエンコーディング

複数の電球のうち、選んだ項目の電球だけを「ピカッ」と1つ点灯させてコンピュータに言葉を伝える信号機のような仕組みです。

定義 ワンホットエンコーディング(One-Hot Encoding)とは、文字や単語などの項目をコンピュータが計算できるように「0」と「1」の数字に変換する方法です。項目の総数分のマスを用意し、該当する1カ所だけに「1」を入れ、残りをすべて「0」にして表します。

なぜコンピュータに「0と1のマス」が必要なのでしょうか?

コンピュータは「りんご」「バナナ」「ぶどう」といった人間の言葉をそのまま理解することはできません。扱えるのは、0や1などの数字でできたデータだけです。そのため、文字の情報をAIやプログラムに入力するには、必ず数字へ変換する作業が必要になります。

このとき、単純にりんごを「1」、バナナを「2」、ぶどうを「3」と番号付けすると、思わぬ問題が起こります。コンピュータは数字の大きさや順番をそのまま計算してしまうため、「バナナ(2)はりんご(1)の2倍大きい」とか「りんご(1)+ぶどう(3)=バナナ(2)×2になる」といったおかしな数学的関係を勝手に作り出して処理してしまうのです。

こうした誤解を防ぐために生まれたのが、ワンホットエンコーディングです。単語ごとに自分専用の席を1つずつ用意し、該当する席のランプだけを点灯(1)させます。こうすると、りんごは[1, 0, 0]、バナナは[0, 1, 0]、ぶどうは[0, 0, 1]となり、すべての単語が対等な距離を持つようになります。

One-Hot表現: 単語を独立した0と1へ変換する仕組み りんご 1 0 0 [1,0,0] バナナ 0 1 0 [0,1,0] ぶどう 0 0 1 [0,0,1] 単語ごとに1箇所だけ1(ON)で表す

もう少し正確に言うと:順序のないカテゴリ変数

もう少し正確に言うと、ワンホットエンコーディングは順序や大小の比較が必要ない「カテゴリデータ(質的変数)」を扱うときに使われます。データサイエンスの世界では、血液型(A、B、O、AB)や居住地域(東京、大阪、福岡など)のように、項目同士に優劣や順番がない情報を扱う場面が非常に多いのです。

もし服のサイズのように「S(1)、M(2)、L(3)」といった順序や大きさに意味があるデータなら、順番に数字を割り当てても問題ありません。しかし、血液型や単語には大小も順番もないため、各項目を独立した次元の座標として切り離してあげる必要があります。

ワンホットエンコーディングを適用すると、すべてのデータベクトル(数字の並び)同士のなす角度が直角(90度)になります。数学的には項目同士の内積が0になり、コンピュータが単語同士に余計な先入観を持たないようにできる仕組みです。

致命的な弱点と「埋め込み(Embedding)」の登場

ワンホットエンコーディングは直感的でわかりやすい反面、扱う単語の数が増えると致命的な限界にぶつかります。例えば辞書にある10万語をワンホットエンコーディングで表そうとすると、単語1つを表現するのに10万マスの数字の列が必要になります。そのうち99,999マスは無意味な「0」で埋め尽くされ、メモリと計算リソースを大量に浪費してしまうのです。

さらに大きな問題は、単語同士の意味的な関係をまったく表現できない点です。「王」と「女王」、「子犬」と「犬」は人間から見ればとても近い意味ですが、ワンホットエンコーディングの世界では「王」と「冷蔵庫」の距離と同じくらい、まったく無関係で独立したものとして扱われてしまいます。

こうした「スパース性(0ばかりになってしまう問題)」と「意味の欠落」を克服するために、現代のAIでは主に単語埋め込み(Word Embedding)という技術が使われています。0と1だけで表すのではなく、単語の意味を数十〜数百個の連続した小数に圧縮して空間上に配置する方法です。

🤔 よくある誤解

✕ 誤解

AIモデルはすべてのテキストデータを常にワンホットエンコーディングだけで処理している。

✓ 事実

ワンホットエンコーディングは最も基礎的な変換手法の1つに過ぎません。現代の大規模言語モデル(LLM)や自然言語処理AIは、単語同士の意味や類似度を数値ベクトルとして表現する「埋め込み(Embedding)」技術を中核として活用しています。

🧺 日常で出会う場面

1 電車の路線(1号線、2号線、3号線など)を[1, 0, 0]、[0, 1, 0]、[0, 0, 1]と表すことで、番号の大小による計算上の誤解をなくします。
2 ネット通販でユーザーの支払い方法(クレジットカード、銀行振込、PayPayなどの電子マネー)をAIレコメンドシステムに入力する際に使われます。
💡 つまり ひとことで

ワンホットエンコーディングとは、コンピュータが単語同士を勝手に比較・計算してしまわないよう、該当する1カ所だけに「1」を立てて項目を独立して表現する手法です。