---
title: "Bag of Words（BoW）とは？【文章の数値化手法｜G検定対策】"
description: "Bag of Wordsを、文書を語彙ごとの出現回数ベクトルで表す基本的な特徴量表現として整理します。語順と文脈を失う理由、疎な高次元ベクトルになる特徴、TF-IDF・n-gram・Word2Vec・BERTとの違いをG検定向けに確認します。"
last_modified_at: "2026-07-18"
canonical_url: "https://stemtazoo.github.io/gk/bag-of-words/"
section: "gk"
---

## まず結論

- **Bag of Words（BoW）**とは、文書を**語彙ごとの出現回数を並べたベクトル**として表す手法です。
- 単語の順序を捨てるため、語順や文脈は表現できません。
- G検定では、**TF-IDF・n-gram・Word2Vec・BERTとの違い**を切り分けることが重要です。

## 直感的な説明

BoWは、文章を袋の中に入れて、単語の並びを崩してから数えるイメージです。

たとえば、

> 私は AI を学ぶ

> AI を私は学ぶ

この2文は語順が違いますが、含まれる単語と回数は同じです。

BoWでは、両方とも同じ特徴量になります。

一方、

> 犬が人をかむ

> 人が犬をかむ

も単語の集合は同じです。
しかし意味は大きく異なります。

この違いを表せないことが、BoWの代表的な弱点です。

## 定義・仕組み

BoWでは、まず対象文書全体から**語彙**を作ります。

例として、語彙を次の3語とします。

- AI
- 学ぶ
- Python

文書ごとの出現回数を並べると、次のように表現できます。

| 文書 | AI | 学ぶ | Python |
|---|---:|---:|---:|
| AIを学ぶ | 1 | 1 | 0 |
| Pythonを学ぶ | 0 | 1 | 1 |
| AIとPythonを学ぶ | 1 | 1 | 1 |

各行が1つの文書を表すベクトルです。

### 0と1だけで表す場合もある

単語が何回出たかではなく、出たかどうかだけを表す方法もあります。

- 出現した：1
- 出現しない：0

これは**バイナリBoW**と呼ばれます。

したがって、BoWは必ず生の出現回数だけを使うとは限りません。
本質は、**固定した語彙に対して文書を数値ベクトルへ変換すること**です。

### 疎な高次元ベクトルになりやすい

語彙数が10,000語なら、文書ベクトルも10,000次元になります。
しかし1文書に実際に出る単語は一部だけなので、多くの要素が0になります。

このようなベクトルを、

- **高次元**：要素数が多い
- **疎（スパース）**：0が多い

と表現します。

### 前処理の影響を受ける

BoWを作る前には、通常次の処理を検討します。

- 単語分割
- 大文字・小文字の統一
- ストップワード除去
- ステミングやレンマ化

たとえば「学ぶ」「学んだ」を別の単語として数えるか、同じ語として扱うかで特徴量が変わります。

## いつ使う？（得意・不得意）

### 得意

- 文書分類
- スパム判定
- 感情分析の簡単なベースライン
- 単語の出現傾向が重要なタスク
- 学習結果を説明しやすい特徴量が必要な場合

### 不得意・注意点

- 語順を考慮できない
- 同じ単語でも文脈による意味の違いを表せない
- 同義語を別の特徴として扱う
- 語彙数が増えると次元数が大きくなる
- 未知語は既存の語彙ベクトルでは表現できない

## G検定ひっかけポイント

### BoWとTF-IDF

- BoW：単語の回数や有無を特徴量にする
- TF-IDF：文書内で多く、他文書では珍しい単語を重くする

TF-IDFも語順や文脈を直接は表現しません。

> TF-IDFにすれば意味を理解できる

という説明は誤りです。

### BoWとn-gram

通常のBoWは単語を1つずつ数えるため、語順を無視します。
一方、n-gramでは連続する複数語を1つの特徴として扱います。

例：

- unigram：`機械`、`学習`
- bigram：`機械 学習`

n-gramを使えば局所的な並びは一部保持できますが、長い文脈を理解するわけではありません。

### BoWと分散表現

| 手法 | 表現 | 語順・文脈 |
|---|---|---|
| BoW | 語彙ごとの回数 | 基本的に無視 |
| TF-IDF | 重要度で重み付けした語彙ベクトル | 基本的に無視 |
| Word2Vec | 単語を低次元の密なベクトルで表現 | 周辺語から意味的関係を学ぶ |
| BERT | 文脈に応じた単語表現 | 前後の文脈を考慮 |

### よくある誤解

- ❌ **単語の意味を直接表現する**
  - BoWは単語の位置ごとの回数を表します。
- ❌ **語順を保持する**
  - 通常のBoWでは語順を捨てます。
- ❌ **低次元で密なベクトルになる**
  - 一般に高次元で疎なベクトルです。
- ❌ **TF-IDFは文脈を理解する**
  - TF-IDFは単語の重要度を調整する手法です。

### 選択肢を切る判断基準

- 「**語彙ごとの出現回数**」→ BoW
- 「**語順を無視**」→ BoW
- 「**珍しい単語を重くする**」→ TF-IDF
- 「**連続する複数語を特徴にする**」→ n-gram
- 「**単語を低次元の密なベクトルにする**」→ Word2Vecなど
- 「**前後の文脈によって単語表現が変わる**」→ BERTなど

## まとめ（試験直前用）

- BoWは文書を**語彙ごとの出現回数ベクトル**で表す
- 語順・文脈・意味を直接は考慮しない
- 高次元で疎なベクトルになりやすい
- TF-IDFはBoW系の表現に重要度を加える
- 「回数」「語順を無視」ならBoW
