タグ別アーカイブ: Python

ソードアート・オンラインをword2vecする

ソードアート・オンライン (Web版)をword2vecしてみました。これをmecabを用いて分かち書きします。分かち書きしたものをgensimに与えて、word2vecでモデルを作成してみました。

モデリングのコードは以下のとおりです。基本的にあんちべさんの『自然言語処理の最新手法”word2vec”で艦これ加賀さんから乳を引いてみる』と同じです。

import codecs
from gensim.models import word2vec
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
sentences = word2vec.Text8Corpus('SAO1.wakati')
model = word2vec.Word2Vec(sentences, size=200)

原作でキリトの対するヒースクリフについてアウトプットを見てみました。

ランク 類似度
1 自分 0.797701954842
2 茅場 0.772888898849
3 姿 0.766229510307
4 意思 0.732955038548
5 0.720785975456

茅場はヒースクリフの正体でありセットで出てくるので類似度が高いのは妥当です。自分は恐らく、1巻がキリト目線だからでしょう。キリトの前に立ちはだかるのがヒースクリフであり、キリト自身意識しているため高い類似度を示したものと思います。紅は恐らくヒースクリフがKoBの団長であるためでしょう。

この結果を見る限り、word2vecのアウトプットはかなり妥当性の高いものではないかと思います。

Azure Machine Learning #00

はじめに

Azure Machine LearningもGA (一般提供)を向かえ、注目を集めているようです。ここで、Azure Machine Learningとは何か、そして、どう使って行くかをまとめて行きたいと思います。Azure Machine Learningは洗練されたUIを持ち、ユーザインターフェイスとしてなら使用は容易です。しかし、機械学習の基本的なスキルなしに使うことは容易くはありません。この辺は機械学習の側面をかなり遮蔽しBAプラットフォームとしてレポーティングを含めまとめた、IBM Watson Analyticsとは根本的に異なるところです。

逆に言うと、IBM Watson Analyticsは機械学習の仕組みを遮蔽しているために、学習結果の理由を説明するのはかなり困難です。これは、同様に学習のアプローチを見せない、Google Predictive APIも同様です。その意味では説明可能であり、モデルの中身が見えるという面白い立ち位置にあります。これは、優劣というよりも考え方の違いかと思います。当たれば良い、そしてモデルの開発に時間をかけたくないというニーズもあれば、説明可能性が重要なこともあります。ただ、技術の使い分けを考えるときには重要なファクターです。

Azure Machine Learningとは

Azure Machine LearningはMicrosoft Azureの上に構築された機械学習のPaaSプラットフォームです。基本的にはアドホックに学習モデルを作成するためのML StudioとWeb APIとして学習や予測を動かすためのAPI群からなります。使用可能なモデルはMicrosoftが用意したプロプライエタリなモデルとR及びPythonが使用可能です。

ML Studioでのモデリングは有効グラフでビルディングブロックのデータフローを結線していく、SPSS Modelerや各種ETLツールで見かける形式を採用しています。この方式はデータフローが確認しやすくモデリングの仕組みを把握しやすい優れた方法です。PythonやRはビルディングブロックにスクリプトを記載する方法です。これは、R Analytics Flowと同様でスキルセットを活用しやすいと思います。

データは現時点においてはAzureのBLOB StorageもしくはSQL ServerのDBaaSであるSQL Databaseが利用できます。BLOB Storageにアウトプットすることで同じAzureのData Factoryをデータ加工プラットフォームとして活用できます。また、Machine LearningのアウトプットをBLOB Storageにして、ExcelやPower BIといったBIプラットフォームを活用し世間的な言い方ではBAプラットフォームの一部として活用できます。また、Web APIとして展開することで多くのツールからアクセス可能であると思います。

今回、GAを迎え、料金体系もプレビューのときとは一新しています。特徴は無料とStandardの2つに料金体系が分かれたことです。無料の側はWeb APIの利用に制限があり、また、モデリングの連続実行時間に時間制約があることデータサイズに上限があること、またSLAが保障されず、スケジューリングの優先順位が高くないこと、などの制約がありますがデータサイズは10GBとゆるく無料でもかなりのことができます。また、使用可能なモデルにも制約はありません。(2015/02/20 現在)

PythonでCAP曲線を描く

pyodbc, pandas, numpy, matplotlib を使ってCAP曲線を描いてみます。一般にCAP曲線はロジスティック回帰等で算出したスコアでデータを降順にソートし実際に真偽でイベントの発生を評価して書けますから以下のようになるかと思います。

import pandas
import pyodbc
import numpy
import pylab as pyl
from scipy import integrate

conn = pyodbc.connect('DSN=source')

dataSet = pandas.read_sql('SELECT * FROM TF_SCORES ORDER BY SCORE DESC',conn)

num_deads = numpy.sum(dataSet['IS_DEAD'])
num_count = len(dataSet)

rate_deads = float(num_defaults) / float(num_count)

ideal         = pandas.DataFrame({'x':[0,rate_defaults,1],'y':[0,1,1]})
x             = numpy.arange(num_count) / float(num_count - 1)
y             = numpy.cumsum(dataSet['IS_DEAD']) / float(num_deads)
sigma_ideal   = 1 * x[num_deads - 1 ] / 2 + (x[num_count - 1] - x[num_deads]) * 1
sigma_model   = integrate.simps(y,x)
sigma_random  = integrate.simps(x,x)

ar_value      = (sigma_model - sigma_random) / (sigma_ideal - sigma_random)
ar_label      = 'ar value = %s' % ar_value

pyl.hold(True)
pyl.plot(ideal['x'],ideal['y'])
pyl.plot(x,y)
pyl.plot(x,x)
pyl.legend(('Ideal','Model','Random'),'lower right')
pyl.suptitle('CAP curve')
pyl.xlabel('sample')
pyl.ylabel('death detection')
pyl.text(0.3, 0.5, ar_label)

pyl.show()