機械学習は数値しか扱えないのに、文章はただの文字列——このギャップを埋める最も基本的な方法がBoW(Bag-of-Words)です。仕組みは「単語を数えるだけ」と拍子抜けするほどシンプルですが、その割り切りと限界を正しく理解することが、後のword2vecやBERTを学ぶ土台になります。
📖 ひと言でいうと
BoW(Bag-of-Words)とは、文書に出てくる単語の出現回数を数えて、文書を数値の並び(ベクトル)に変換する手法です。名前のとおり、文章を「単語が入った袋(bag)」とみなすイメージで、袋に放り込んだ時点で単語の順番は失われ、「どの単語が何回入っているか」だけが残ります。「猫が犬を追う」と「犬が猫を追う」が同じ袋になってしまう——この性質がBoWの本質であり、限界でもあります。
🖼 1枚でわかるBoW
📘 公式テキストの説明
自然言語処理の分野では、テキストデータを数値化して機械学習モデルに入力するための手法がいくつか存在する。その中でも「Bag-of-Words(BoW)」は、基本的かつ広く用いられる方法である。BoWは、文書内の単語の出現頻度に着目し、各単語の出現回数を数えることで文書をベクトル化する手法である。具体的には、まず文書全体からユニークな単語の集合を作成し、各単語にインデックスを割り当てる。次に、各文書ごとにその単語が何回出現するかをカウントし、対応するインデックスの位置にその値を配置する。これにより、文書は単語の出現頻度を要素とするベクトルとして表現される。BoWの利点として、実装が比較的簡単であり、計算コストも低い点が挙げられる。また、文書間の類似度計算や分類タスクにおいて有用である。一方で、単語の順序や文脈情報を考慮しないため、文の意味やニュアンスを十分に捉えられないという制約も存在する。
要するに、①全文書から単語のリスト(語彙)を作る、②文書ごとに各単語の回数を数える、③その数を並べてベクトルにする、の3ステップです。そして利点(簡単・低コスト)と制約(順序と文脈の無視)がワンセットで問われます。
🔍 しっかり理解する
手順を小さな例で追う
「私は犬が好き」「私は猫が好き 猫はかわいい」という2つの文書があるとします。処理の流れは次のとおりです。
語彙が「私/は/犬/が/好き/猫/かわいい」の7語なら、文書1は(1,1,1,1,1,0,0)、文書2は(1,2,0,1,1,2,1)というベクトルになります。「猫」の位置の数字を見るだけで文書2が猫の話題だと分かる——数字の並びが文書の内容をおおまかに反映するわけです。こうしてベクトル化できれば、ベクトル同士の近さで文書の類似度を測ったり、スパム判定のような分類器に入力したりできます。
割り切りの代償: 語順と文脈の喪失
BoWは出現回数しか見ないため、「犬が猫を追う」と「猫が犬を追う」はまったく同じベクトルになります。また、同じ「amazon」という単語が熱帯雨林の話か通販の話かも区別できません(文脈を見ないため)。さらに、語彙が増えるほどベクトルは長くなり、ほとんどの要素が0の疎(スパース)なベクトルになりがちです。こうした限界を乗り越えるために、単語の重要度で重み付けするTF-IDF、単語を意味の近さが反映された密なベクトルにするword2vecなどの分散表現、文脈まで捉えるBERTのようなモデルへと発展していきました。BoWは、この発展の物語の出発点として位置づけて覚えると効率的です。
💡 具体例で考える
例1: スパムメールフィルタ。 「無料」「当選」「今すぐ」といった単語の出現回数を特徴量にしてメールを分類するのは、BoWの古典的な成功例です。スパム判定では「どんな単語が多いか」だけでかなりの精度が出るため、語順を捨てるBoWの割り切りが欠点になりにくいのです。
例2: 文書の類似検索。 社内文書の中から今読んでいる文書と似たものを探すとき、各文書をBoWベクトルにして角度の近さ(コサイン類似度)を測る方法が昔から使われてきました。実装が簡単で計算も軽いため、大量の文書を対象にした最初の一手として今でも有効です。
⚠️ よくある誤解・紛らわしい用語
- CBOWとの混同(最重要): 名前がそっくりですが別物です。BoW(Bag-of-Words)は「文書」を出現回数でベクトル化する古典的手法。CBOW(Continuous Bag-of-Words)はword2vecの学習方式で、周辺の単語から中心の単語を予測して「単語」の分散表現を学習するニューラルネットワークです。試験で並べて出される定番ペアなので、「BoW=文書を数える/CBOW=単語を予測して学習」と対で覚えてください。
- 「BoWは意味を理解している」わけではない: BoWが捉えるのは語の頻度だけで、意味やニュアンスは捉えません。「文脈を考慮できる」とあれば誤りです。
- ワンホットベクトルとの違い: ワンホットベクトルは1つの単語を「該当位置だけ1」で表す表現。BoWは文書全体を回数の合計で表す表現で、対象(単語か文書か)が異なります。
- TF-IDFとの関係: TF-IDFはBoWの発展形で、単純な回数の代わりに「その文書に多く、他の文書に少ない単語」を重視する重み付けをします。BoWと同様に語順は考慮しません。
📝 試験でのポイント
- 定義問題では「単語の出現頻度(回数)に着目して文書をベクトル化」がキーワード。「単語の意味を捉える」「文脈を考慮する」とあれば誤りの選択肢です。
- 長所(実装が簡単・計算コストが低い・類似度計算や分類に有用)と短所(順序・文脈を無視)の組み合わせで正誤を問う形式が想定されます。
- CBOWとの区別は狙われどころです。「周辺の単語から中心の単語を予測」とあればBoWではなくCBOW(word2vec)の説明です。
- テキストの前処理・数値化の文脈で、形態素解析→BoW/TF-IDFという流れの中の位置づけを問われることもあります。
📚 まとめ
- BoWは、単語の出現回数を数えて文書をベクトル化する、テキスト数値化の基本手法です。
- 語彙を作り、文書ごとに出現回数を集計して数値列に変換します。
- 実装が簡単で計算が軽く、類似度計算や文書分類に有用です。
- 一方、単語の順序や文脈を無視するため、意味やニュアンスは捉えられません。
- 名前の似たCBOW(word2vecの学習方式)とは別物——ここが試験最大の注意点です。
