形態素解析・Ngramとbag-of-words
引き続き、機械学習やその他色々について得た知識を
復習and記事作成の練習and個人の備忘録としてまとめていきますよん!
今回も前回と同様、自然言語処理の分野です!
タイトルの内容について、ざっくりといろいろ書いていきます!
⚠︎※※注意※※⚠︎
・出来るだけ専門知識のあまりない人に対して、分かりやすく書くことを目標にしています。
そのため、厳密に言うと間違っている部分があると思いますがご容赦ください。
・また、ネットで調べたレベルの知識がほとんどなので、
"厳密に言うと"レベルではなく間違っている箇所があるかもしれません。。
その場合は非常に申し訳ないです。指摘していただけると幸いです!
参考
自然言語処理の仕組みと手順
日本語形態素解析の裏側を覗く!MeCabはどのように形態素解析しているか
前回までの記事
・機械学習について
・教師あり学習 〜回帰〜
・教師あり学習 〜分類〜
・Random Forest
・階層型クラスタリング
・非階層型クラスタリング k-means
・主成分分析
・TF-IDF
形態素解析
日本語の文章と英語の文章では、決定的な違いが一つあります。
それは、「半角スペース(など)で区切られていないこと」です。
文章を分析する時に、文章の形のまま色々な処理を行うことは非常に難しいので、
適当な部分列に区切ってやる必要があります。
英語だと、半角スペースで区切ってしまえばそれでことは足りるのですが、日本語だとそうはいかないのでなんらかの手法を使って意味のある部分列に区切らなければなりません。
その手法として多く使われるのが、「形態素解析」と呼ばれる手法です。
形態素解析を使うと、文章を以下のように分けることができます。
「すもももももももものうち」
→すもも(名詞,一般)/も(助詞,係助詞)/もも(名詞,一般)/も(助詞,係助詞)/
もも(名詞,一般)/の(助詞,連体化)/うち(名詞,非自立)
このように文章を形態素単位に分割した上で、名詞のみを選択してみたり、出現回数をカウントしてみたり、その他色々な処理を行なって分析をします。
分割の方法として、Mecabという形態素解析のライブラリでは、単語に関する品詞など様々な情報の載っている辞書を参照することで、文字列の並びをパターン化し最適なルートを選択しているようです。
例えば「東京都」という単語を、
・東/京/都
・東/京都
・東京/都
のように、辞書に載っている単語で全ての組み合わせを検討し、コストが最小となる「東京/都」となるみたいです。
Ngram
Ngramも同じく、文章を分割するための手法ですが、形態素解析より至って単純です。
単語単位で区切った形態素解析とことなり、Ngramでは任意の連続したN文字単位で区切ります。
1文字で区切る"unigram"、2文字で区切る"bigram"、3文字で区切る"trigram"などが存在します。
例えば「たこ焼きが食べたい」という文章をunigram・bigram・trigramであらわすと、
unigram: た-こ-焼-き-が-食-べ-た-い
bigram: たこ-こ焼-焼き-きが-が食-食べ-べた-たい
trigram: たこ焼-こ焼き-焼きが-きが食-が食べ-食べた-べたい
となります。
形態素解析に比べて、辞書のアップデートが不要であったりするメリットがあったり、ノイズが多く含まれてしまうというデメリットがあったりします。
また、形態素解析と組み合わせて使うこともあります。
bag-of-words
文章は、どの単語がどこに出てくるか、そもそも文の構成はどうなっていたか、
など色々な要素で一つの文章として成り立っていますが、ひとまずそれらの構造は全て無視し、
「どの単語が含まれているか」のみに注目したのが、bag-of-wordsという考え方です。
そうして、出現したかどうかを0/1で表したり(One-Hot表現)や、
出現頻度としてベクトル化することで、機械学習などで分析することが可能になります。
まとめ
・日本語の文章は半角スペースで区切られていないため、分析前になんらかの分割処理が必要。
・"形態素解析"では、辞書を用いてコストが最小となるように文章を形態素に分割する。
・"Ngram"では、任意のN文字の連続として文章を分割する。
・"bag-of-words"では文章の構造は全て無視し、「どの単語が含まれているか」だけに注目する。
あとがき
形態素解析の例文として出てくる、今回も出てきた、「すもももももももものうち」。
初めて形態素解析してみた時本当にキッチリ分割してくれて、感動しました。笑
文章が文章として成り立っているものを分析するときは形態素解析で十分なのですが、
WEBサイトのテキストなど文章ではなくノイズの非常に多いものを分析するとき何かいい方法はないですかね。。
日々悩まされています。
ここまで読んでいただき、ありがとうございました!