出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/08/28 06:27 UTC 版)
Bag-of-wordsモデル(略称:BoW)とは、テキストを単語の多重集合(順序を持たない集合)として表現する自然言語処理や情報検索におけるモデルである。
Bag-of-wordsの名称は、バッグに単語を詰め込んだように語順(および文法や構文)を無視するモデルであることに由来する。
BoWモデルは文書分類において広く用いられており、各単語の出現頻度を特徴量として用いて統計的分類器を学習させる[1]。また、コンピュータビジョンにおけるBag-of-wordsモデルとして視覚的情報の解析にも応用されている[2]。
言語学における「Bag-of-words」という表現は、ゼリグ・ハリスが1954年に発表した『Distributional Structure』において言及されている[3]。
以下にBoWを用いて2つのテキスト文書をモデル化する簡単な例を示す。
(1) 太郎は映画を見ることが好きだ。花子も映画が好きだ。
(2) 花子はサッカーの試合を見ることも好きだ。
これらから、各文書に含まれる単語のリストを作成する。日本語のように文中で単語が分割されていない言語においては、形態素解析を用いて文中の単語を分割する必要がある。各文書を形態素解析で単語に分割した結果は以下のようになる。
「太郎」「は」「映画」「を」「見る」「こと」「が」「好き」「だ」「花子」「も」「映画」「が」「好き」「だ」
「花子」「は」「サッカー」「の」「試合」「を」「見る」「こと」「も」「好き」「だ」
この単語集合をJSON形式で表現すると以下のようになる。
BoW1 = {"太郎":1,"は":1,"映画":2,"を":1,"見る":1,"こと":1,"が":2,"好き":2,"だ":2,"花子":1,"も":1};
BoW2 = {"花子":1,"は":1,"サッカー":1,"の":1,"試合":1,"を":1,"見る":1,"こと":1,"も":1,"好き":1,"だ":1};
各キーが単語を表し、値はその単語の出現回数である。
順序は無視されるため、たとえば {"太郎":1,"花子":1,"映画":2,"見る":1,"好き":2,"こと":1,"は":1,"を":1,"が":1,"だ":2,"も":1}もBoW1と等価である。
3番目の文書がBoW1とBoW2を合わせた内容である場合:
(3) 太郎は映画を見ることが好きだ。花子も映画が好きだ。花子はサッカーの試合を見ることも好きだ。
そのBoW表現は以下の通りである。
BoW3 = {"太郎":1,"は":2,"映画":2,"を":2,"見る":2,"こと":2,"が":2,"好き":3,"だ":3,"花子":2,"も":2,"サッカー":1,"の":1,"試合":1};
つまり、BoWの表現では、多重集合における「和集合」は、出現回数を合計する非交和集合となる。
BoW表現では語順が完全に取り除かれる。たとえば、「太郎は花子が好きだ」と「花子は太郎が好きだ」はBoWでは同じ表現となり、アルゴリズムはこれらを区別できない。このため、BoWは構文や意味の細かい違いを識別できないが、処理が高速であり、語順を必要としない単純な分類タスクなどには有用である。
BoWモデルの実装では、文書内の各単語の出現頻度を使用して内容を表現する。これを文書頻度の逆数やTf-idfで正規化することもある。分類目的の場合、文書のクラスラベルを考慮した教師あり学習に基づく重み付け方式も存在する[4]。また、BoWではWekaのように出現の有無(1/0)のバイナリ表現が使われることもある。
辞書を使わずにBoWを実現する方法として、Feature Hashingがある。これは単語をハッシュ関数によって直接インデックスにマッピングする方法である[5]。この方法では語彙辞書を保持する必要がない。ハッシュ衝突が起こる可能性があるが、バケット数を増やすなどの方法で対応する。BoWの大規模実装において、ハッシュトリックは有効な手法である。