🕌
日本語テキストをCountVectorizerで扱うための最短ルート
日本語の文章を機械学習で扱う際、最初の壁になるのが「単語に分割されない」という点です。英語は空白があるため、CountVectorizerがそのまま単語を拾います。しかし日本語には空白がないため、文全体を1語と判断してしまい、語彙に文章そのものが並ぶという問題が起きます。
そこで必要になるのが形態素解析です。MeCabは文章を単語に切り分け、さらに品詞などの情報も付与する解析器(Tagger)です。MeCabのクラス名がTaggerなのは、単語へタグ付け(tagging)を行う仕組みだからです。
Tagger.parseToNode(text)を実行すると、文章は「ノード」という単語単位のかたまりに分解されます。node.surfaceには文章に現れた表層形が入り、node.nextで次の単語へ進みます。文頭や文末にはBOS/EOSと呼ばれる特別ノードがあり、surfaceが空のため除外し、単語を収集します。
例えば「配送が早くて助かった」は「配送」「が」「早くて」「助かっ」「た」と分解されます。こうして単語リストを作るtokenize関数を用意し、それをCountVectorizer(tokenizer=tokenize)に渡すと、文ごとに単語を抽出し、その出現回数を行列として表現できます。
これによって文章は「文×単語」の数値行列に変換され、機械学習モデルが扱える形になります。日本語テキスト解析の基礎として必ず押さえておくべき流れです。
Discussion