1. 定義と概要
BoW(Bag-of-Words)とは、文書を「単語の袋」とみなし、語順を完全に無視して各単語が何回出現したかだけを数えることで、文書を数値ベクトル(数値の並び)に変換する自然言語処理の基本的な文書表現手法です。対象とする文書集合はコーパス(分析対象として集めた文章データのまとまり)、そこに含まれる単語一覧はボキャブラリー(重複のない単語の一覧)と呼ばれます。
例えば「猫が犬を追いかける」という文であれば、ボキャブラリーの「猫」「が」「犬」「を」「追いかける」といった単語ごとに出現回数を数え、その数字を並べたものが1つの文書を表すベクトルです。このように文章を数値の並びに変換する操作を、ベクトル化と呼びます。
従来、コンピュータは文字列をそのまま計算の対象にできず、機械学習アルゴリズムに入力するにはテキストを何らかの数値に変換する必要がありました。BoWは、単語の出現回数を数えるだけのシンプルな発想でこの数値化を実現します。
実装が容易で計算コストも低いことから、テキスト分類やスパムフィルタリング(迷惑メールを自動的に判別して振り分ける仕組み)、情報検索など幅広い場面で使われてきました。一方で語順や文脈を完全に無視するため、意味的な情報を捉えにくいという限界があります。
この弱点を補う発展的な手法もいくつか生まれてきました。TF-IDF(単語の出現回数に加え、その単語が他の文書にもどれだけ出現するかで重み付けする手法)やBag-of-n-grams(隣り合うn個の単語のまとまりを1単位として数えることで語順の一部を取り込む手法)はその代表です。さらに、単語を意味の近さに応じた数値ベクトルへ変換する分散表現という手法もあります。
2. 試験対策ポイント
BoWの作り方の骨子として整理しておきたいのは、対象とする文書集合(コーパス)全体から重複のない単語一覧(ボキャブラリー)を作り、各文書についてボキャブラリーの各単語が何回出現したかを数えてベクトルの各成分に入れる手順です。手順自体は単純ですが、対象とする文書の集め方や前処理によってボキャブラリーの中身は変わってきます。
最大の割り切りは、語順を完全に捨てる点にあります。「猫が犬を追いかける」と「犬が猫を追いかける」は使われている単語の集合と出現回数が同じであるため、BoWでは同一のベクトルになり区別できません。この限界を示す代表例として、あわせて整理しておきたい論点です。
ベクトルの次元数はボキャブラリーサイズ(語彙数)と一致し、大半の成分が0になる疎(スパース)な表現になります。疎(スパース)とは、ベクトルの成分の大部分が0で占められている状態を指します。対象とする文書集合が大きいほど語彙数は増え、次元とスパース性はさらに大きくなる性質があります。
BoWの弱点を補う発展手法の位置づけも、あわせて整理しておきたいところです。代表的な3つは、BoWに何を加えるかで区別できます。
| 手法 | BoWに対して加える工夫 |
|---|---|
| TF-IDF | 出現回数の単純カウントに重み付けを加える |
| Bag-of-n-grams | 隣接する単語のまとまりを単位にして局所的な語順を取り込む |
| 分散表現(word2vecなど) | 単語を低次元で密なベクトルに変換する |
いずれもBoWの割り切りを別々の方向から補う手法であり、それぞれの詳細は個別の用語として扱われます。
3. 関連概念との比較・相違点
N-gram(Bag-of-n-grams)との最大の違いは、語順の情報を持つかどうかという点にあります。BoWは単語単体の出現回数だけを数え、語順の情報を持ちません。これに対し「N-gram」は、テキストの構成要素を連続するn個ひとまとまりで切り出す考え方の総称です。
「Bag-of-n-grams」は、この考え方の出現回数を数える形でBoWを拡張した手法で、nが1の場合はBoWと一致します。隣接する単語の並びという局所的な語順情報を取り込める代わりに、組み合わせの数だけベクトルの次元が増えるという代償を伴います。「猫が犬を追う」と「犬が猫を追う」はBoWでは同一のベクトルになりますが、隣接する単語の並びまで数えるこの拡張手法では、語順の違いを区別に取り込める余地があります。
分散表現(word2vecなど)との最大の違いは、局所表現か、密な低次元表現かという点にあります。BoWは1つの単語を1つの成分に対応させる局所表現(単語ごとに別々の次元を割り当てる表現方法)であり、語彙数と同じ高次元・疎なベクトルになります。
一方の分散表現は、単語を数百次元程度の低次元・密なベクトルに変換し、ベクトル間の距離や位置関係で単語どうしの意味的な近さを表現します。ここでの分散という言葉は、1つの単語の意味を複数の次元に分けて表すことを指します。BoWが「どの単語が何回出たか」しか見ないのに対し、分散表現は単語どうしの意味的な近さまで表現に含められる点が対照的です。
4. ビジネス・実務での活用シナリオ
スパムメールフィルタリングの現場では、メール本文をBoWでベクトル化し、単語の出現回数のパターンからスパムかどうかを判定するモデルの入力に使われます。実装が容易で計算コストも低いことは、まず試すベースラインの手法として選ばれやすい理由です。より高度な手法の効果を測る比較の物差しとしても機能します。
文書分類・情報検索の分野では、ニュース記事やレビュー文をBoWでベクトル化し、カテゴリ分類や類似文書検索のための特徴量(機械学習モデルに入力する、データの特徴を数値化した値)として活用します。仕組みが単純で大量の文書を高速に処理できる点は、件数の多いテキストデータを扱う場面での強みです。ただし同じ意味でも表記が異なる語は別の単語として数えられるため、事前に表記をそろえる前処理が欠かせません。
カスタマーサポートやVoC(顧客の声)分析の場面では、問い合わせ文やアンケートの自由記述をBoWで数値化し、頻出単語の傾向からクレームの多いテーマを大まかに把握する一次的なスクリーニングに使われます。細かな文脈までは捉えられないものの、大量の自由記述から傾向をすばやくつかめる点は、詳細分析に進む前の絞り込みとして効果を発揮します。
5. 要点まとめ
- BoW(Bag-of-Words)は文書を単語の袋とみなし、語順を無視して各単語の出現回数だけを数える文書のベクトル化手法です。
- 最大の割り切りは語順を完全に捨てることで、「猫が犬を追う」と「犬が猫を追う」を区別できません。ベクトルの次元数は語彙数と一致し、大半の成分が0の疎(スパース)な表現になります。
- 弱点を補う発展として、出現回数に重み付けを加えるTF-IDF、局所的な語順を取り込むBag-of-n-grams、密な低次元ベクトルに変換する分散表現があります。
6. 確認問題
問1BoWでは、単語が文中で使われた順序を保持せず、各単語が文書中に何回出現したかだけを数えてベクトル化する。
解答・解説をみる
○ 正しい
BoWの核心は語順の情報を完全に捨て、単語ごとの出現回数のみをカウントする点にあります。この割り切りが実装の単純さと、意味を捉えにくい弱点の両方につながっています。
問2BoWでベクトル化すると、「猫が犬を追いかける」と「犬が猫を追いかける」は同じベクトルになり区別できない。
解答・解説をみる
○ 正しい
両文は使われている単語の集合と出現回数が同一であるため、語順を無視するBoWでは同一のベクトルになります。BoWの限界を示す代表例です。
問3BoWで作られるベクトルの次元数は、対象とする文書集合に含まれる文書の数と一致する。
解答・解説をみる
× 誤り
正しくは、次元数は文書の数ではなくボキャブラリー(語彙数)と一致します。語彙が多いほど次元は大きくなり、各文書のベクトルは多くの成分が0となる疎(スパース)な表現になります。文書数と語彙数は取り違えやすい点です。

