Azure Machine Learning には、Text Analytics の機能があります。英語の文章は使えるのですが、日本語データの動作はどうなのでしょうか?
今回は、日本語でbag-of-wordsやN-Gramシーケンス的な動きを利用するために、Azure Machine Learningが持つFeature Hashing の動作を確認してみます。
サンプルデータ
サンプルデータを用意しました。英語文章と動作を比較したほうがわかりやすいと考え、英語文章と日本語文章をそれぞれ用意しています。日本語文章に関しては、あらかじめ単語をスペース区切りにしたデータを用意しました。英語文章はスペースで区切られているため、そのままFeature Hashingできますが、日本語文章はスペース区切りではないため、事前にスペース区切りにしています。日本語文章のText Analysisを行う際はmecabなどで形態素解析したほうが良いでしょう
Feature Hashing の設定
Feature Hashingは、文章の中でどの単語が多く使われているかカウントすることにより、文章の特徴を数値データ化する機能です。今回はハッシュ具合(ちゃんとばらけるか)と、正しく単語をカウントできるか確認したいので、わかりやすく小さい数値データとして作成してみます。Feature Hashingの設定は、ビットサイズを5(32に分ける)に設定、N-gramシーケンスの設定はハッシュ具合をみるためにunigram(n = 1)として単語間のつながりは無視します。
UTF-8 文字列そのまま Feature Hashing してみる
サンプルデータは、UTF-8で保存されたcsvです。そのcsvをFeature Hashingに入れてみたのが下記の結果です(画像サイズの関係で一部です)。日本語文章はすべて異なる単語で構成されていますが、同じ単語として3つカウントされています。UTF-8だと期待通りにハッシュ化されにくいようです。
URLエンコードしてから Feature Hashing してみる
それでは、UTF-8をURLエンコードしてASCII文字列にしてみます。下記は、Rを使ったURLエンコードで生成しています。同じ文章でも今度は期待通りにハッシュ化されているようです。
URLエンコードへの文字列変換は下記のような感じです。
下記はRのソースコード
さいごに
Azure Machine LearningでText AnalysisのFeature Hashingをする場合は、日本語をASCII文字列にエンコードして利用したほうがよさそうですね。
文字列操作のためにも.NETを使えるようにしてほしい。。。