6/04/2015

Azure Machine Learning の Execution Python Script モジュール向けコードのデバッグについて

 Azure Machine Learningには、Pythonスクリプトを実行することができるモジュールが存在しますが、Pythonスクリプトに慣れていない人にとっては苦痛です。しかも、Azure Machine Learningの実行時には、DataFrameのデータを操作しないといけないのです。今回はローカルのWindows PCでExecution Python Scriptのコードを書くために便利な方法を紹介します。

Pythonのインストール

 ローカルのWindows PCにPythonをインストールします。ローカルのWindows PCにPythonが入っていれば、コードのデバックもできて便利です。Azure Machine Learningで使用可能なPythonのモジュールを個別にインストールするのは大変ですので、下記のAnaconda Pythonディストリビューションを利用します。このAnaconda Pythonディストリビューションは、Azure Machine Learningで使われています。

https://store.continuum.io/cshop/anaconda/

Python Tools for Visual Studio のインストール

 Visual Studioを使っている方は、Python Tools for Visual Studioをインストールしてみてください。ブレイクポイントを使用したデバックも可能になります。

https://pytools.codeplex.com/

Execution Python Scriptのコードを書いてみる

 それでは、Execution Python Script のコードを書くために、Visual Studio から新規の Python Application のプロジェクトを作成します。作成したらPythonスクリプトを下記のコードに置き換えてください。このコードを使って、Execution Python Script の Pythonスクリプトを書いていきます。

 

 azureml_main に入力される Dataframe は、コードの下部にある csvファイルから読み込みます。csvファイルはラベル付のデータになります。書き終えたらブレイクポイントを設定したり、ステップ実行したり、変数を確認することができるので、デバックが楽しくなります。

ml07

 動作を確認したPythonスクリプトを作成したら、Azure Machine Learning の Execution Python Script にazureml_main のコードをコピーして完成です。

さいごに

 もっと良い方法があるかもしれませんが、この方法を使うと慣れないPythonスクリプトも簡単に書くことができます。

やっぱり、C#のほうが日本語を扱いやすいので、C#を使いたい。

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を使えるようにしてほしい。。。