シンプルだけど奥が深い、単語で表す文章の特徴

はじめに

本記事では、文書に出現する単語を用いて、その特徴を表現する方法について解説しようと思います。その題材として、映画のレビューについて肯定的か、否定的かを分類するタスクを取り上げます(極性判定と呼ばれるタスクです)。この実験を通じ、シンプルだけれども奥が深い、単語による文章表現について感じていただければと思います。

機械学習を行う場合、特徴は数値で表す必要があります。自然言語を扱う場合であっても当然、文章を何らかの方法で数値化しなければいけません。そのための代表的な手法の一つが、今回紹介するBag of Wordsになります。

Bag of Words

Bag of Wordsとは文書中に出現する単語を数え、その数を特徴とする手法です。文書における出現順序は考慮しないシンプルな表現です。

単語の扱い方

Bag of Wordsでは単語の定義、数え上げる単語の単位、数え上げの単位についてバリエーションがあります。Bag of Wordsが変わればその後の学習や予測の結果が変わってきます。

単語の定義
特徴の対象とみなす単語について決める必要があります。単語の区切り方を規定する「トークンパターン」を定める必要があります。また、助詞や前置詞は単語として扱わない方法もあります。

単語のまとまり
単純に一単語(unigram)を一まとまりとして扱う場合もありますが、二単語(bigram)以上を繋げて一まとまりとして見なす場合があります。(二単語の場合はBag of Bigramsと呼ばれます)

数え上げの表現
単語について、単純に数を数える方法(N回出現)と、出現有無(0もしくは1のbinary)で表す方法があります。

実験

Bag of Wordsにおける単語の扱い方よって正解率に差が出ることを実験で確認します。課題としてはMovie Review Dataにおけるデータが肯定的なレビューであるか、否定的なレビューであるかの判別を行いました。実装はscikit-learnを用いており、githubにて公開しています

データの準備

分析対象とするデータは公開されているデータセットであるMovie Review Dataを利用しました。前回の記事で紹介しているデータセットダウンロードツール「chazutsu」を使用して簡単に用意ができます。是非利用してみて下さい。

Bag of Wordsのモデル

今回は以下表の通り4つのモデルを用意しました。便宜的にモデルには名前をつけています。

仮説

今回の判別で最も正解率がよくなる単語の数え上げ方は、単語まとまりの単位は「2単語」、数え上げの表現は「出現有無」ではないかと考えます。

単語まとまりの単位が「2単語」と推測する理由として、2語で肯定的・否定的が表現されるケースを考慮しています。文書中に「not good」と記載されていた場合、「not」が否定「good」が肯定と捉えられ肯定的とも否定的とも上手く表現されません。そこで「not good」とまとめると否定的という風に解釈できるようになると考えます。

数え上げの表現について「出現有無」を選択した理由は、レビューデータでは肯定的・否定的表現が出現するか否か(どれだけの回数出現したかではなく)で判断して良いと思いました。

確認・考察

10分割交差検証で確認したところ上記の通り、「2単語・出現有無モデル」が最も良い正解率を示しました。仮説通りになっていることが確認できました(なお、性能の比較に際しては単純な出現回数でなくTF/IDFのスコアを特徴として用いています)。

また、Movie Review Dataにおいて「1単語・出現有無モデル」より「2単語・出現有無モデル」のほうが正解率がよくなることは、こちらの論文で示される結果と一致しています。

終わりに

文書の特徴を表す手法としてBag of Wordsを紹介しました。また、極性判定において単語の数え上げ方を工夫することにより正解率が向上することが確認できました。

参考

Baselines and Bigrams: Simple, Good Sentiment and Topic Classification
scikit-leran:The Bag of Words representation
Movie Review Data
scikit-learnを用いた実装