6/02/2015

Azure Machine Leaning の Feature Hashing で日本語を試してみる

 

Azure Machine Learning には、Text Analytics の機能があります。英語の文章は使えるのですが、日本語データの動作はどうなのでしょうか?

今回は、日本語でbag-of-wordsやN-Gramシーケンス的な動きを利用するために、Azure Machine Learningが持つFeature Hashing の動作を確認してみます。

 

サンプルデータ

 サンプルデータを用意しました。英語文章と動作を比較したほうがわかりやすいと考え、英語文章と日本語文章をそれぞれ用意しています。日本語文章に関しては、あらかじめ単語をスペース区切りにしたデータを用意しました。英語文章はスペースで区切られているため、そのままFeature Hashingできますが、日本語文章はスペース区切りではないため、事前にスペース区切りにしています。日本語文章のText Analysisを行う際はmecabなどで形態素解析したほうが良いでしょう

ml01

 

Feature Hashing の設定

 Feature Hashingは、文章の中でどの単語が多く使われているかカウントすることにより、文章の特徴を数値データ化する機能です。今回はハッシュ具合(ちゃんとばらけるか)と、正しく単語をカウントできるか確認したいので、わかりやすく小さい数値データとして作成してみます。Feature Hashingの設定は、ビットサイズを5(32に分ける)に設定、N-gramシーケンスの設定はハッシュ具合をみるためにunigram(n = 1)として単語間のつながりは無視します。

ml03

 

UTF-8 文字列そのまま Feature Hashing してみる

 サンプルデータは、UTF-8で保存されたcsvです。そのcsvをFeature Hashingに入れてみたのが下記の結果です(画像サイズの関係で一部です)。日本語文章はすべて異なる単語で構成されていますが、同じ単語として3つカウントされています。UTF-8だと期待通りにハッシュ化されにくいようです。

ml02

URLエンコードしてから Feature Hashing してみる

 それでは、UTF-8をURLエンコードしてASCII文字列にしてみます。下記は、Rを使ったURLエンコードで生成しています。同じ文章でも今度は期待通りにハッシュ化されているようです。

ml05

URLエンコードへの文字列変換は下記のような感じです。

ml04

下記はRのソースコード

さいごに

 Azure Machine LearningでText AnalysisのFeature Hashingをする場合は、日本語をASCII文字列にエンコードして利用したほうがよさそうですね。

文字列操作のためにも.NETを使えるようにしてほしい。。。