Bag of Wordsとは|その概要と作成ステップ

この記事では、機械学習などにおいて広く使用されるテキストデータ表現である「Bag of Wrods」について、その内容・目的や作成ステップ、TF-IDFを活用した表現方法を具体例をもとに解説します。

Bag of Wordsとは何か

代表的な非構造化データの一つである「テキストデータ」に対して、統計モデルや機械学習のアルゴリズムを使った分析を行う際には、テキストデータに適切な前処理を行うことで、これらの手法が使用可能な表現に変換する必要があります。

機械学習において最もシンプルで効率が良く、広く用いられているテキストデータ表現が、「Bag of Words (BoW)」です。

BoWでは、ドキュメント(様々な形式のテキスト)の文構造や句読点、文法、単語の順序といった情報を全て無視し、ドキュメントを「独立した単語の集まり」と捉えた上で、そこに現れた単語の「出現回数」のみがカウントされます。

「袋」を意味する「bag」は、数学においては同じ値が集合内に複数出現することを許容する「多重集合 (multiset)」を意味します。BoWは、ドキュメントの構造を無視し、「袋の中にどの単語が何個入っているか」だけを見ます。

それによって、自由な形式で並べられた一連の単語としての「ドキュメント」を、シンプルかつ効率的に、データ分析が可能なテキストデータ表現である「特徴ベクトル」に変えることが可能となります。

BoWの具体例

簡単な例として、以下の3つの文章について単語の出現回数をBoWに変換するケースを見てみます。

  • 日本の首都は東京です
  • 東京は日本で最も大きな都市です
  • 日本には大きな都市も小さな都市もあります

例えば一つ目の文章は、「日本」「の」「首都」「は」「東京」「です」という6つの単語に分割され、他の2つの文章も同様に最小単位の単語に分割されます。

そして、分割された単語から助詞(「の」「は」「で」「には」)、助動詞(「です」「ます」)、副詞(「最も」)など、重要な意味を持たない単語を除き、「大きな」「小さな」などの形容詞を「大きい」「小さい」という単語の基本形に変換します。

また、「あります」の「ある」のように、文書中に非常に多く登場する一方で、意味においての重要性は低い単語(ストップワード)も除外します。こうして残った全ての単語について、各文章内での出現回数をカウントし、数値ベクトルとして表現することで、BoWが作成されます。

作成:Intelligence In Society

BoW作成のステップ

BoWを作成するためのより具体的な手順は、以下の4つのステップから構成されます。

①データのクレンジング

BoW作成の最初のステップは、テキストデータに対してBoWの作成が可能な形に前処理を行うことです。通常、生のテキストデータには、空白、改行、感嘆符、各種の記号、マークアップなど、文章の意味においては重要ではないものが多く含まれています。

また、「株式会社」と「(株)」や、「トウキョウ」と「トーキョー」、半角「ABC」と全角「ABC」などのように、同じ意味を持つ単語が異なる文字列として表現される「表記ゆれ」が必ずと言ってよいほど存在します。

前処理の最初のステップとして、このような重要ではない要素の除去や、表記ゆれの統一などを行います。小文字「A」と大文字の「A」のような文字レベルでの表記ゆれの統一には、ユニコード正規化などが利用されます。

②文章の単語分割(形態素解析)

次に、クレンジング済みの文章を、形態素解析を用いて単語に分割します。英語のように各単語がスペースで区切られている言語と違い、単語の境界が明確ではない日本語においては、「形態素解析」を用いて文章を単語に分解する必要があります。

形態素解析とは、日本語などの言語で書かれた文章を単語に分割したり、単語の品詞やその基本形を取得する処理のことを指します。単語の分割においては、日本語の辞書データをもとにテキストの解析を行う「わかち書き」と呼ばれる手法が使われます。

形態素解析によって、上記の例のように文章が最小単位の単語に分割されるとともに、その品詞や基本形が取得されます。形態素解析には、GiNZAやJanomeなどの形態素解析の専用ライブラリが使用されることが一般的です。

③単語の抽出と除去

形態素解析によって取得された単語から、名詞・固有名詞や動詞、形容詞など文章の意味において重要である可能性の高い品詞を抽出するとともに、それ以外の品詞は除去します。

また、「する」「ある」といった動詞や、「こと」「とき」「ところ」といった名詞は、文書中に非常に多く登場する一方で、意味においての重要性は低い単語です。こういった単語は「ストップワード」と呼ばれますが、ストップワードについてもこの段階で除去し、分析の対象から外すことで、分析に不要なノイズが入り込むのを防ぎます。

④出現回数のカウント(ベクトル化)

全ての文章を対象に上記のステップを経て抽出された全ての単語を、「ボキャブラリ」として集めます。そして、ボキャブラリに対して出現した順やアルファベット順などで番号を付与することで、BoWの対象とする単語のリストが得られた状態となります。

最後に、個々の文章に対して、ボキャブラリ内の各単語が出現する回数をカウントします。各文章ごとに単語の出現回数をそのまま数値ベクトル化することで、機械学習などによる分析が可能な特徴ベクトルが各文章について得られます。

2単語以上のBoW

BoWによる表現は、そのシンプルさが大きな強みである一方、単語の順番を完全に無視することで、文章の内容を取り違えるリスクを抱えています。

例えば、「彼の成績は、落第どころかトップだった」「彼の成績は、トップどころか落第だった」という2つの文章をBoW表現した場合、どちらも「彼」「成績」「落第」「トップ」の4つのボキャブラリに「1」がカウントされた、全く同じ特徴ベクトルとなります。

このような場合、単一の単語ではなく、2つ以上の連続した単語をセットで考えることで、より文章の内容を正しく捉えることができるケースがあります。1つの単語のみを考えるBoWを「ユニグラム (unigram)」と呼ぶのに対して、2つの単語を考えるBoWは「バイグラム (bigram)」、3つの単語を考えるBoWは「トリグラム(trigram)」と呼ばれます。

先の文章をバイグラムで表現するとそれぞれ以下のようになり、これをもとに異なる特徴ベクトルを作成できることが分かります。

元の文章 バイグラムによる分割
彼の成績は、落第どころかトップだった 「彼 成績」「成績 落第」「落第 トップ」
彼の成績は、トップどころか落第だった 「彼 成績」「成績 トップ」「トップ 落第」

なお、多くのケースでバイグラムやトリグラムはユニグラムと合わせて使用されますが、考慮する単語数が増えるほど、特徴量の数が爆発的に増えるため、バイグラムやトリグラムの使用は必要最小限に抑えることが賢明です。

単語の重要度によるBoW(TF-IDF)

ここまで、文章中の単語の出現回数に基づくBoWを解説してきましたが、出現回数ではなく、「その単語がどの程度情報を持っていそうか」に基づいてBoWを作成する方法も広く用いられています。

TF-IDF」は文章に含まれる単語の重要度を数値化する指標で、特定の文章にだけ頻繁に現れる単語に大きな値を与える一方、多くの文章に現れる単語には小さな値を与えます。これは、特定の文章に頻出する一方、他の文章に現れない単語は、その文章の内容をよく示しているはず、という考えに基づいています。

TF (Term Frequency)」は、1つの文章中である単語が現れる割合、「IDF (Inverse Document Frequency)」は、ある単語が現れる文章が全文章中にどのくらいあるか(1 + log(総文章数/単語が現れた文章数))をそれぞれ表し、TF-IDFはこの2つの掛け算として算出されます。

冒頭に挙げた以下の3つの文章における、「首都」と「日本」の2つの単語の、最初の文章におけるTF-IDFは次のように算出できます。

  • 日本の首都は東京です
  • 東京は日本で最も大きな都市です
  • 日本には大きな都市も小さな都市もあります
単語 TF IDF TF-IDF
首都 1/3=0.33 1+log(3/1)=1.48 0.33*1.48=0.49
日本 1/3=0.33 1+log(3/3)=1.00 0.33*1.00=0.33

「首都」のTF-IDFが「日本」よりも高くなっており、最初の文章にしか現れない「首都」という単語が、この文章をより特徴付けるものとして高い重要度のスコアを与えられていることが分かります。

ここまで、機械学習などにおいて広く使用されるテキストデータ表現である「Bag of Wrods」について、その内容・目的や作成ステップ、TF-IDFを活用した表現方法を解説しました。

当記事に関連するトピックについての詳細は、以下のページをご覧ください。

また、機械学習に関する全ての記事は以下のページからご覧いただけます。

参考文献:
◦Foster Provost, Tom Fawcett (2014) 『戦略的データサイエンス入門―ビジネスに活かすコンセプトとテクニック』O’Reilly Japan
◦Andreas C. Muller、Sarah Guido (2017)『Pythonではじめる機械学習―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎』O’Reilly Japan
◦本橋智光・橋本秀太郎 (2024)『改定新版 前処理大全-SQL/Pandas/Polars実践テクニック-』技術評論社
◦scikit-learn “User Guide – 7.2. Feature extraction” https://scikit-learn.org/stable/modules/feature_extraction.html (2026年4月14日最終閲覧)

関連記事