2017年12月18日月曜日

【Googleクラウド・機械学習編】CLOUD NATURAL LANGUAGE API その2

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

最近流行の機械学習について勉強中です。

前回に引き続き、「CLOUD NATURAL LANGUAGE API」の実行を目指していきます。

前回まで

前回までで、ひとまずAPIの有効化と共に課金許可まで行いました。

認証ID取得

API管選択画面から「管理」のボタンを押して認証情報の取得画面に進みます。




選択肢が出てきました。

  • APIキー
  • OAuthクライアントID
  • サービスアカウントキー

このうち、単純に実行したい場合に必要なのはAPIキーです。
それ以外のキーは未調査。

APIキーを選択します。


無事に生成されました。

ここで注意事項ですが、APIキーは他人に漏らしてはいけません。

APIキーで個人を識別する仕様ですので、APIキーが漏れることは、ログインID/パスワードやクレジットカード番号が漏れることと同レベルの危機です。

ちなみに今は私が自分で検証しているだけなので考慮不要ですが、もし業務で本格的に使う事になったらAPIキー秘匿の為の策も練る必要があります。

外部への流出対策は言うまでもありませんが、内部に対する秘匿も課題になるでしょう。

例えば、

  • ログにHTTPリクエストのクエリが表示されている。
  • クエリの中にはAPIキーも含まれている。
  • ログは内部の人間ならば誰でも見れる。

なんてコンボをやらかしたら、もう完全にダダ漏れですよね。
こういうのを一つ一つ見落とさないように防いでいくことはなかなか難しいと思います。

クラウドにはクラウドのリスクがありますので、その辺りも理解する必要があります。

ともかくこれで無事に取得出来ました。




ちなみに今、「取得したけど一覧に何も出ない」という挙動しました。
F5を押したら表示されましたが。

ちょっとGoogleさん、画面リフレッシュの実装漏れみたいなバグがありませんか、これ?

Googleって、些細なバグは後回しにするような所がありますからね。
ユーザーも些細な事は気にしないのがお付き合いするコツです。

実行

さて、これで実行に必要な素材は全部揃ったはずなのですが。
ここからが難関。

API仕様書を読み込んで行かなければなりません。


また、HTTPリクエストを作るプログラムも実装しなきゃいけないなど、大変な作業が待っています。
しかし、親切な事にGoogleには「APIエクスプローラ」という動作確認用の機能があります。



これを使ってちょっと動作確認をしてみましょう。

文章

テキトーに考えた私の自己紹介を送り込んでみます。

======================================
株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

仕事はシステムエンジニア。
特技は空手道初段です。

家族は妻が一名ほどいます。

好きなお酒はウイスキーです。

仲良くして下さい。
======================================

使用する機能

analyzeEntities。
エンティティ解析です。

エンティティとは、「特徴的な単語」と解釈すれば良いでしょう。

結果

以下のようなリクエストを送り込みます。
POST https://language.googleapis.com/v1/documents:analyzeEntities?key={YOUR_API_KEY}
 
{
 "document": {
  "content": "株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。\n\n仕事はシステムエンジニア。\n特技は空手道初段です。\n\n家族は妻が一名ほどいます。\n\n好きなお酒はウイスキーです。\n\n仲良くして下さい。",
  "type": "PLAIN_TEXT"
 },
 "encodingType": "NONE"
}
すると、こんな結果が戻ってきました。
200
 
- Show headers -
  
{
 "entities": [
  {
   "name": "株式会社ジェニシス 技術開発事業部",
   "type": "ORGANIZATION",
   "metadata": {
   },
   "salience": 0.22330247,
   "mentions": [
    {
     "text": {
      "content": "株式会社ジェニシス 技術開発事業部",
      "beginOffset": -1
     },
     "type": "PROPER"
    }
   ]
  },
  {
   "name": "遠藤 太志郎",
   "type": "PERSON",
   "metadata": {
   },
   "salience": 0.19125123,
   "mentions": [
    {
     "text": {
      "content": "遠藤 太志郎",
      "beginOffset": -1
     },
     "type": "PROPER"
    }
   ]
  },
  {
   "name": "Tacy",
   "type": "OTHER",
   "metadata": {
   },
   "salience": 0.19125123,
   "mentions": [
    {
     "text": {
      "content": "Tacy",
      "beginOffset": -1
     },
     "type": "PROPER"
    }
   ]
  },
  {
   "name": "仕事",
   "type": "OTHER",
   "metadata": {
   },
   "salience": 0.07422842,
   "mentions": [
    {
     "text": {
      "content": "仕事",
      "beginOffset": -1
     },
     "type": "COMMON"
    }
   ]
  },
  {
   "name": "システムエンジニア",
   "type": "OTHER",
   "metadata": {
   },
   "salience": 0.07422842,
   "mentions": [
    {
     "text": {
      "content": "システムエンジニア",
      "beginOffset": -1
     },
     "type": "COMMON"
    }
   ]
  },
  {
   "name": "特技",
   "type": "OTHER",
   "metadata": {
   },
   "salience": 0.05605998,
   "mentions": [
    {
     "text": {
      "content": "特技",
      "beginOffset": -1
     },
     "type": "COMMON"
    }
   ]
  },
  {
   "name": "空手道初段",
   "type": "OTHER",
   "metadata": {
   },
   "salience": 0.05605998,
   "mentions": [
    {
     "text": {
      "content": "空手道初段",
      "beginOffset": -1
     },
     "type": "COMMON"
    }
   ]
  },
  {
   "name": "酒",
   "type": "CONSUMER_GOOD",
   "metadata": {
   },
   "salience": 0.03795014,
   "mentions": [
    {
     "text": {
      "content": "酒",
      "beginOffset": -1
     },
     "type": "COMMON"
    }
   ]
  },
  {
   "name": "ウイスキー",
   "type": "OTHER",
   "metadata": {
   },
   "salience": 0.03795014,
   "mentions": [
    {
     "text": {
      "content": "ウイスキー",
      "beginOffset": -1
     },
     "type": "COMMON"
    }
   ]
  },
  {
   "name": "家族",
   "type": "PERSON",
   "metadata": {
   },
   "salience": 0.028858999,
   "mentions": [
    {
     "text": {
      "content": "家族",
      "beginOffset": -1
     },
     "type": "COMMON"
    }
   ]
  },
  {
   "name": "妻",
   "type": "PERSON",
   "metadata": {
   },
   "salience": 0.028858999,
   "mentions": [
    {
     "text": {
      "content": "妻",
      "beginOffset": -1
     },
     "type": "COMMON"
    }
   ]
  }
 ],
 "language": "ja"
}


考察

ほえ~。

「salience」とは突出率という意味で、この数字が高いほど特徴的で、
低いほどありふれた単語、という意味のようです。


  • 株式会社ジェニシス 技術開発事業部


これで一つの単語として認識されています。

TYPE:ORGANIZATION

しかし、「株式会社ジェニシス」が会社名で「技術開発事業部」が部署名であることまでの粒度には到っていません。

  • 遠藤 太志郎

私の名前も抽出出来ています。

TYPE:PERSON

ジェニシスの方は「TYPE:ORGANIZATION」で私の名前は「TYPE:PERSON」ですから、それが人間の名前なのか組織の名前なのかを識別出来るようです。

なるほどなるほど。
機能のイメージは沸いてきますね。
問題はこれをどう役立てるかということですが、試していくには元となるデータが沢山必要ですね。

同僚の日報とか解析してみると面白いかもしれません。

終わりに


引き続きCLOUD NATURAL LANGUAGE APIの検証を進めていこうと思います。

2017年12月11日月曜日

【Googleクラウド・機械学習編】CLOUD NATURAL LANGUAGE API その1

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

最近流行の機械学習について勉強中です。

今回からGoogleクラウドAPIを使い始めていきます。
最初は「CLOUD NATURAL LANGUAGE API」です。

始め方


何事も最初が一番難しい。
「CLOUD NATURAL LANGUAGE APIってどこにあるのよ?」でまず躓きます。

GoogleクラウドAPI全般に言えることですが、APIは管理コンソールの中にあります。

コンソールの中に「APIとサービス」という項目があります。
これを選択して下さい。


その中に「ライブラリ」があります。


ライブラリを選択すると、お待ちかねのライブラリページが表示されます。



沢山あります!!

このライブラリページはGoogleクラウドの全機能が集結しています。

「CLOUD NATURAL LANGUAGE API」に限らず、「GMail」とか、「Googleカレンダー」とか、果ては「Youtube」まで。

Webで実現出来る機能は全部この中に投入されており、この中からお好きなものを選んで使用して下さい、とそういう形態なわけですね。
そして機能毎に使用回数とか伝送データ量とかが計測されており、それに応じてお金を払うという従量課金制で進行しております。

では、目当ての「CLOUD NATURAL LANGUAGE API」を検索しましょう。



出てきましたね。
これを選択するお、「有効にする」のボタンがある画面が表示されます。


さっそく有効にして……。おっと。

課金しろ、と出てきてしまいました!!


課金体系


私は一年間の無料お試しクレジットを貰っているので、当面は課金はされないはず。


とは言え何かミスって爆死したら困るので先に予算体系も調べました。







要約すると、


  • 5,000件までは無料
  • それ以降、1,000件辺り1ドルが必要
  • 大量使用ユーザは1000件辺り0.25ドルまで値下げOK


とのことです。

この「件」というのは、HTTPリクエストの送信回数のことです。
またCLOUD NATURAL LANGUAGE APIは一回当たりの送信文字数が1,000文字毎にも一件という閾値となっています。

そして1ヶ月毎にクリアされていきます。

つまり、


  • 1,000文字のHTTPリクエストを1回送る。⇒1件
  • 1,000文字のHTTPリクエストを2回送る。⇒2件
  • 999文字のHTTPリクエストを1回送る。⇒1件
  • 1,001文字のHTTPリクエストを1回送る。⇒2件
  • 1,001文字のHTTPリクエストを2回送る。⇒4件


こういう計算です。

月々5,000件までは無料というのは、私がチョコチョコと検証している限りは無料と言ってしまっても良いでしょう。

このように、

  • 大規模ユーザにはそれなりのお金を払って貰う。
  • 小規模ユーザには、少々のお金を払って貰う。
  • 個人がちょっと見てるくらいは無料。

クラウド環境は小規模スタートしたい時に有利と言われますが、全くその通りです。

ちなみに夏目漱石の「こころ」は、大体23万文字です。
対して、5,000件× 1,000文字 = 500万ですから、月々文庫本20冊くらいのバイト数は負荷のうちに入らないと見なされるくらいの大量データ処理を想定していることが分かります。

ビッグデータ解析という側面も持ち合わせたサービスなのですね。

有効化


これで無事にAPIの有効化に成功しました。


ここから先は実際にHTTPリクエストを送り込むフェーズになります。

HTTPリクエスト送信時には、認証IDという送信者を一意に認識するキーをリクエスト中に埋め込む必要があります。
次回は認証ID取得から始まります。


続く


結構長い道のりです。
しかしGoogle系のAPIはみんな同じ要領なので、一度経験しておけば二回目以降はスピーディーに作業出来ると思います。

2017年12月4日月曜日

【Googleクラウド・機械学習編】機能のご紹介

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

最近流行の機械学習について勉強中です。

今までは「人工知能調査」と銘打って記事のタイトルとしていましたが、調査対象をGoogleクラウドの機械学習APIに絞り込んだことから、記事のタイトルも合わせて絞り込んだものにしてみました。

では、早速機械学習APIの中に入っていきましょう。

何が出来るのか?


ご存じ無い方だと、「機械学習のAPI? 何のこっちゃ?」という印象かと思います。
以下の例を見ればすぐイメージが沸くでしょう。

CLOUD NATURAL LANGUAGE API



「非構造化テキストから分析情報を得る」とのこと。
「非構造化テキスト」とは、例えばこのブログの記事のようなフリー文章のことです。

フリー文章をこのAPIに食わせると、「機械学習」「人工知能」みたいな要点となる単語をピックアップしてきたり、そこに含まれている感情をピックアップしてきたりするものです。

例えば自社サービスのユーザからアンケートを収拾してきて、それを食わせると、


  • 「高い」
  • 「障害」
  • 「対応」
  • 「値段」


みたいな、特徴的な単語が抽出されてきます。
加えて、「怒り:20%」「不満:30%」「良好:50%」みたいな感情も数値化されて出てきます。

こういう情報を見て、

「ああ、利用者はウチのサービスに対して値段の高さ、障害発生率、ヘルプデスクの対応、この辺りを気にしているんだなぁ。値下げは出来ないけど、障害発生率、ヘルプデスクは気になる。これは新機能の追加より、現在のサービスの安定性向上にリソースを割いた方が良いってことなのかなぁ」

という判断材料に使えるわけですね。

このAPIは「ユーザからの声を数値化するサービス」と言えるでしょう。
上手く使えば経営者の目がキラキラするかもしれません。

補足ですが、「ビッグデータ解析と似たようなもんだな」という印象を抱く方もいると思います。
私は「似たような物ではなく、同じ物だ」と解釈しています。

機械学習とビッグデータ解析は技術領域が被っていますので、両者の境界線は曖昧です。

CLOUD SPEECH API




音声をテキスト変換するAPIです。日本語にも対応していることを確認済み。

最近のスマホは「近所の居酒屋まで道案内してや」と話し掛けるだけでGoogleマップが起動したりしますが、恐らくはこの技術を使っているものと推測されます。

私は業務系エンジニアであるため、このAPIの使い道は真っ先に以下を思いつきました。

  • 議事録のテキスト化

会議の内容を手持ちのスマホで録音して、戻ってからAPIに食わせてテキスト化出来るんじゃないか!?

これは期待大です。

CLOUD TRANSLATION API


言わずと知れたGoogle伝統の翻訳APIです。

最高に素晴らしい機能ではありますが、公式のGoogle翻訳以上のものを自分で作るのは難しいんじゃないかな?

自分のアプリの中にGoogle翻訳を組み込みたいようなケースがあれば、活躍するのかもしれません。

CLOUD VISION API



画像を解析するAPIです。
画像から様々な情報を抽出します。


  • ラベル検出
  • 不適切なコンテンツの検出
  • ロゴ検出
  • ランドマーク検出
  • 光学式文字認識(OCR)
  • 顔検出
  • 画像属性


「光学式文字認識(OCR)」とは、画像の中に書かれた文字をテキスト抽出することです。
名刺画像を食わせれば名前を抽出出来る、とかそういう機能ですね。

それ以外は何のこっちゃ???

これ、使ってみれば感覚が分かります。
以下、私の写真を食わせてみました。



JOY:■■■■■

とか出ていますね。

「これ、お前が遊びに出かけた時の写真だろ!!」と、断定してきているわけですね。
服装のポップな感じから見極めていると思われます。

人間の思考回路と同じ。
実に人工知能らしい機能じゃありませんか。


その他の機能


上記を見ると、「ああ、あのサービスのあの機能はコレだったんだ」と思う方も多いと思います。
何か、どこかで見たことがあるような機能です。

あの機能を自分で作るとなると途方も無い労力です。
しかしWebAPIを使えば簡単に実現出来ます。

それが機械学習APIなわけですね。

最後に、私が気になるAPIをご紹介。

CLOUD JOBS API






限定公開アルファ版。

「求職者がもっと簡単に職を探せるようにするという幅広い取り組みの一環」

とのことです。

要するに、「求職者のスキル」と「企業の求めている人材像」を分析してマッチングする機能ということでしょう。
リクルートとかが関心を寄せそうな話です。

これを弊社ジェニシスに置き換えた場合、弊社では「マッチング営業」という業務が存在します。
SEを派遣する時の仲介となる業務です。

この業務は「行う仕事と、派遣された人材のスキルが合わない」というスキルミスマッチが大問題に発展します。
もちろん、念入りに面談して技術力も見極めればそんなことは起きるはずは無いのですが、「忙しくて面談の時間が30分しか取れない」とか「技術力を見極める力量のある人が忙しいので動員出来ない」とか、大人の事情で万全な体制が取れないケースがあります。

しかし、機械学習を活用してSEの職務経歴書を読み込ませて判断材料にすることが出来れば、問題点のいくらかは補強されるんじゃないかと思います。

こんな風に「もしかしたらこんなことが出来るんじゃないかな?」と期待が膨らんでいく辺りが、機械学習の楽しいところですね。

終わりに


次回からは上記のAPIを実際に使っていきたいと思います。

2017年11月27日月曜日

【人工知能調査】機械学習のWebAPI

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

最近流行の機械学習について勉強中です。

前回の調査で、自分で機械学習アプリを作ってみたい場合はGoogleの機械学習ライブラリ「TensorFlow(テンソルフロー)」がオススメとなりました。




しかしながら、やっぱり結構難しいんですよね。。。
勉強期間を置かなければ厳しいです。

しかし、そこは天下のGoogle。そんな初心者でも機械学習が使えるようにWebAPIを用意してくれています。

ここから先は機械学習WebAPIについて調査してきます。

Google Cloud Platform


Googleが提供するWebAPI、それは「Google Cloud Platform」の中にあります。
通常、「Googleクラウド」。




AmazonのAWS、MicrosoftのAzureと並ぶクラウド三巨頭の一角です。

メニューの内容をいくつか見ていきましょう。


クラウド コンピューティング サービス


「Googleクラウド」という言葉は、暗黙的にこのクラウドコンピューティングサービスのイメージで使われている事が多いです。
アプリを載せるサーバをクラウド環境で提供するという、クラウド界の一般モデルですね。

以前、私はこの中の「GoogleAppEngine」を調査しました。
驚異的な速さと安さ、処理パワーを誇る一方、制約がキツい
通常の業務システムではこんなの使えませんが、特定局面ではブッチギリの最強を誇る。
キレ味の鋭いデンジャラスなサービスです。
当時の時期はこちらをご確認下さい。


ストレージとデータサービス、その他


Googleクラウド上で展開しているデータベースです。
普通のOracleとかMySQLとかと違い、クラウド上で効率的に処理をするためにチューニングが施されたDBが展開しています。

が、上記のサイトのデザインを見るとクラウドコンピューティングサービスは別の項目として置かれていますから、違うサービスであるかのように見えます。
課金体系も別れているので確かに違うサービスと言えばそうですが……。

私は「クラウドコンピューティングサービスの一部」としか思っていません。
だって、「言語は動かせるけどDBはありません」って、それじゃシステムが成り立たないじゃないですか。
この「クラウドDB」とは、要するに「GoogleAppEngineの接続先のDB」なんですよ。

DBだけ独立して使うものじゃない。

他の項目である「ネットワーキング」「ビッグデータ」「管理ツール」も同じ。
全部揃って「Googleクラウド」です。

  • Googleクラウドのうち、サーバ部分の詳細はコンピューティングを参照。
  • Googleクラウドのうち、DB部分はストレージの項目を参照。
  • Googleクラウドのうち、ネットワーク部分はネットワークの項目。
  • Googleクラウドでも、特にビッグデータ処理用の機能はビッグデータの項目を参照。
  • GoogleクラウドのAdminコンソールは管理ツール参照。


と、みんな繋がっているものです。

つまり、

  • 一つのサービスを実現する為に必要な技術領域毎にメニューを分けている。
  • 全部組み合わせて最終的に一つのWebサービスが出来上がる。


と考えるのが分かり易いです。

課金体系もサーバ処理、DB処理、ネットワークで個別に別れています。

  • 重い処理があるサービスはコンピュータ代が高くなる。
  • アクセスが殺到するサービスはネットワークが高くなる。
  • 月々の維持費は全部の合計。


こういう課金体系です。
こうして見ると「クラウドクラウドって言うけど、普通のサーバと似たようなもんじゃないか」というのは、その通りです。

クラウドはクラウドという新しい技術ではなく、昔ながらの技術の延長線上にある、ちょっと便利なテクニックのようなものなのです。

機械学習


さて、そんなGoogleクラウドの中にねじ込まれている項目があります。
以前は無かったのにいつのまにか増えました。


これが目当ての機械学習です。

例えば、Google検索でテキストボックスに文字を少し入力すると、その先が予測されて表示されるという機能は、この機械学習の機能を使った結果のはず。

我々が普段使っている機能の裏側がここに眠っているのでしょう。

終わりに


次回からは、この機械学習について、調査と検証に着手していきたいと思います。

2017年11月20日月曜日

【人工知能調査】機械学習を始めてみよう

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

最近流行の機械学習について勉強中です。

これまでの調査で「機械学習とはどういうものか?」というものを触り程度には理解出来たと思います。
しかし、「じゃあ早速業務で使いたいんだけど♪」となると、まだまだハードルが高そうです。

ここからは具体的にどう実現していけば良いか、について模索していきたいと思います。

二大プラン


機械学習は、元を辿るともの凄く高度な技術領域で、特別な研究者でなければ手も足も出ないようなものです。

しかしながら、最近機械学習がブームになっているのは、そういった偉大なる先人達が一般エンジニアでも使えるようにお膳立てを整えてくれたおかげで、以前よりもずっと身近なものになってきているからです。

機械学習を導入する手段としては、私は以下の2つに絞り込みたいと思います。

  • ライブラリ導入 
  • WebAPI 

まずはライブラリから調べてみます。

機械学習ライブラリ


機械学習を実現するライブラリを導入して実現するプランです。
「ライブラリ」とは、その名のとおり、普通にソースの集合体です。
オープンソースとして公開されているので誰でも取得可能。

自分でプロジェクトを作成し、公式サイトからダウンロードしたパッケージにパスを通し、起動。
後は自分で実装していく中でライブラリのメソッドを呼んだりするわけです。

つまり、普通のプラグラミングです。

昔ながらのイメージだと、こういうのは世界有数の先端企業の天才プログラマーが本人以外誰にも分からないような異次元開発を行っているような気がしますが、
実際はネットに転がっていて誰でも活用OKという状況です。

時代の潮流ですね。

注目のライブラリ:TensorFlow


では、世の中にはどのようなライブラリがあるか?

「機械学習 ライブラリ」で検索すると、結構沢山出てきます。
機械学習のライブラリは既に世界に溢れています。
とっくに群雄割拠の時代に突入していると言ってしまって良いでしょう。

その中で私がイチオシするのは、GoogleのTensorFlow(テンソルフロー)です。


機械学習のライブラリ開発は、古くは(と言うほど昔ではありませんが)「カルフォルニア大学バークレー校」「FaceBook」などが活躍してきました。

一方、技術領域の最高峰と目されていたGoogleはソースのオープン化を行っておらず、内部プロジェクトとして秘密裏に進行していました。
「Googleは一体どんなことをやっているんだろう???」とみんなが思っていた2015年、満を持して世界に公開された待望のライブラリ、それがこのTensorFlowです。

最大の特徴は、Googleが実際にこのライブラリを自社で使っているという「実績」でしょう。

Googleの迷惑メールフィルタリングとか、画像検索とか、表示される広告の選抜とか、Googleが実現している機能はこのライブラリを使っているわけです。

  • 現在、Googleがこういう機能を実現している。 
  • これを応用して、自分達の業務に活用したい。 

こういう発想で物事を考えていくことが出来るわけですね。

2017年の現時点において機械学習を始めたい人は、このTensorFlowを勉強するのが最善の道だと思います。

言語はPython


TensorFlowの言語はC言語、C++にも対応していますが、主力はPythonです。

Pythonは日本ではまだまだ普及しているとは言い難いですが、欧米ではかなり採用比率が高く、特に機械学習業界では「言語=Python」と言ってしまって良いくらい支配的な地位を占めています。

今一番ホットな言語だと思います。

機械学習界でPythonが人気を集めるのには理由がありますが、私は特に以下の点が重要だと思います。

インタプリタ言語である


インタプリタ言語とは、書いたソースを逐次解釈して実行するタイプの言語のことで、例えばPerl、Ruby、PHPがそれに該当します。

C言語みたいにコンパイルを経由しないので高い生産性を持つと評価されます。

ココ、「コンパイルせずに即実行」という特性がポイントです。

私のような業務系SEの場合、開発風景は基本的に「基本設計⇒詳細設計⇒実装」と進行します。
キチッと設計してから実装するので、実装は理論上は一撃必殺です。(実際はバグで手戻りしますが)
一撃必殺だからコンパイルも一回で終わりです。

対して、機械学習は「あーでもない」「こーでもない」と試行錯誤しながら開発が進行します。
試行錯誤の度に毎回コンパイルなんてやってられないのです。
だからインタプリタ言語が重宝されるわけです。

この発想は他の開発における言語選びでも一つの基準となりますね。

  • 詳細設計までビシッと書いて一発で実装を完了出来るなら、コンパイル言語 
  • 実装しながら考えるようなやり方なら、インタプリタ言語 

大規模ビジネスシステム開発のウォーターフォールモデルではJava等のコンパイル言語の採用が多く、
スパイラルモデルやアジャイル開発ではインタプリタ言語採用が多いのも、この辺りが背景にあるわけです。

人工知能業界は後者なのです。

速い


Pythonのもう一つの特徴。
それはインタプリタ言語にしては速いということです。

一般的にコンパイル言語の方が速く、インタプリタ言語の方が遅いです。
Pythonの場合も、流石にC言語よりは遅いのですが、インタプリタ言語の中では速い方だと言われています。
自分でベンチマークしたわけではありませんが、ザックリと

  • C言語:最速
  • Python:C言語の5~7倍の処理時間が必要 
  • Ruby:Pythonの 5~7倍の処理時間が必要

これくらいの違いが出ると思って良さそうです。
(C言語の速さはぶっちぎり)

なお、言語の処理速度とは難しいもので、処理内容によっても得意不得意があります。
例えば、「文字列の処理ならこっちの言語の方が速いが、計算処理ならそっちの言語の方が速い」なんてこともあるので、一口に速い遅いとは言えないのですが……。

ともかくPythonは大抵の場合は速いと言われており、特に機械学習がよく使う計算などの機能については定評があります。

普通に開発していると「言語なんてどれ使っても大して変わらんだろ」というのが正直なところですが、突き詰めていくと違いがあるんですね。

そんなこんなで、機械学習を習得する道筋は以下です。

  • Pythonを覚える。
  • TensorFlowを導入する。
  • そこからは普通に実装。

普通に開発です。
それなりに難しさはあるものの、手も足も出ないような特殊領域の世界ではありません。

続く


しかしながら、私はPythonが使えず、現在勉強中の段階です。

行く行くはTensorFlowを採用した自主開発が出来るようになりたいですが、まだ時間が必要です。
しかし、世の中には「HTTPリクエストを送るだけで結果を貰える」という機械学習のWebAPIサービスも普及しています。

取り急ぎ機能を使いたい人はWebAPIを利用することもオススメです。

Pythonの勉強は並行で進行しつつ、次回は機械学習WebAPIについて調査していきたいと思います。

2017年11月13日月曜日

【人工知能調査】機械学習とそうでないもの

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

前回にて、「人工知能とはつまるところ何か?」ということについて考察しました。
改めて纏めますと、私の考える人工知能とは以下です。

  • 人工知能とは、人間がロジックとして明示化出来ないマッチング条件を、機械に代行して作成して貰う為のツールである。

例えば、「犬と猫ってどう判別するの?」と写真を見せられた時、人間だったら、まあ大体分かりますよね。
顔つきとか、丸っこさとか……。

でもそれを「定義しろ」って言われても良く分からないし、ましてや「if文で書けるようにロジックとして定義しろ」なんて言われても無理無理。
こういう人間が感覚でやっていることは自分でも良く分からんのです。

こういう時に人工知能の出番というわけですね。

機械学習


さて、人間はどうやって「犬」と「猫」を見分けているのでしょう?
それはズバリ、経験です。

過去に犬と猫を何匹も見ているから、「犬っぽい顔をしているもの」「猫っぽい顔をしているもの」を見分けることが出来るわけです。

人工知能も同じ。

「コレは犬」「コレは猫」と決めて画像を大量投入すると、人工知能が経験を蓄積して「犬っぽいものは犬」「猫っぽいものは猫」というマッチングを行うようになるわけです。

この経験蓄積を「機械学習」「ディープラーニング」と言います。

「機械学習」と「ディープラーニング」の違いの定義は、ちょっと難しいです。

  • 機械学習を発展させたものがディープラーニング
  • 機械学習よりもオートマティックが進んだものがディープラーニング

という印象を受ける文献が多いですが、「ディープラーニングは機械学習の一部」と考えておくと良さそうです。
この連載では広義な「機械学習」で用語として統一させて頂きたいと思います。

機械学習の使いどころ


私の狙いとしては、「機械学習を業務やビジネスで生かすことが出来ないかな?」という所にあります。
そこで、もう少し「こういう時は機械学習の出番」「こういうのは機械学習不要」という判別について理解を深めていきたいと思います。

機械学習なもの:迷惑メールフィルタリング


人工知能への着目が世間に溢れてきたのは、将棋でAIがプロ棋士に勝ち始めた頃くらいではないでしょうか?
しかし実際のところ、私たちの身の回りにはもっとずっと前から機械学習の成果がありました。

例として、迷惑メールフィルタリングを挙げてみます。

迷惑メールフィルタリングの筆頭格は、やはりGMailでしょう。

そのメールが迷惑メールかどうかは、人間なら目視で判断出来ます。
大体、以下のような特徴があるイメージですね。

  • 内容が18禁である。
  • 金儲けの話が入っている。
  • 得体の知れないサイトへ誘導されている。

大体こういうイメージですが、特に「これ!!」って断定する条件は無いですよね。
こういう時こそ、機械学習の出番です。

昔は上司のメールが迷惑メールフィルタリング行きってことが頻発していましたが、最近は昔よりもそういうケースが減ってきたように思います。

長年の蓄積により、GMailの迷惑メールフィルタリングがどんどん成長しているのですね。
成長こそが機械学習の特徴です。

機械学習ではないもの:ウイルスメールフィルタリング


同じメールフィルタリングでも「ウイルスメールフィルタリング」は機械学習ではありません。

私はウイルスバスターを使っていますが、あれはトレンドマイクロ社員が「パターン定義ファイル」というものを毎日ガリガリ作っているんです。

「ウイルスと判定するための条件」がキチッと決まっています。
こういうものは機械学習ではありません。

  • 迷惑メールフィルタリングは、機械学習の成果である。
  • ウイルスメールフィルタリングは、機械学習ではない。

同じメールフィルタリングでも裏側の機能は別物です。
両者を「似たようなもの」と考えてしまう人がいるとしたら、言語道断です。


このように、


  • 人工知能と機械学習を投入するべきところ
  • 昔ながらの人間による定義で処理するべきところ


これらの違いが分からなければダメということですね。

「これからは人工知能の時代だ」という話は良く聞きますが、世の中の全てが人工知能に置き換え可能なわけではありません。
「どの辺りが人工知能の使い所なのか?」ということを理解した上で検討していきたいものです。

終わりに


こういう記事を書いていると、「そう言えば、アレって機械学習使えないのかな?」とか思う時があります。

例えばですね、最近「メルカリ」というフリマアプリが人気ですよね。
あれは不正出品が多発して治安が問題になっているとニュースになっています。

メルカリ社員が24時間体制で不正出品を監視しているそうですが、「機械学習で不正出品の自動検知したり出来ないのかな?」と思うところです。
迷惑メールフィルタリングが出来るのだから、不正出品フィルタリングも出来ると思うのです。

実際に機能を実現するとなったら大変でしょうし、もしかしたら既にメルカリ内部では動き出しているのかもしれません。

でも、こう考えるだけでも、色々と可能性がありそうな技術ですよね。

さて、機械学習についてイメージが沸いてきたところで、そろそろ「具体的にどう実現したら良いの?」という所に迫っていきたいと思います。

2017年11月4日土曜日

【人工知能調査】始めに

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

業務多忙によりしばらく連載を停止していましたが、そろそろ復活していきたいと思います。
時間も経ってしまっているので、新しいテーマで仕切り直しです。

テーマは人工知能(AI)


最近、人工知能がブームでよく話題を耳にしますよね。
人工知能という概念自体は私が生まれる前からありました。
それが最近ブームになりつつあるのは、もちろん鉄腕アトムのレベルには達しないものの、ある程度の成果、使い道が生じる程度にまで実現性が生まれてきたからでしょう。

その為か、私は人工知能という言葉はバズワード化してきていると思っています。

人工知能とそうでないもの


そもそも「人工知能」という言葉自体、特に明確な線引きがあるわけでは無いのでバズワード化するのも無理は無いと思いますが、
それでも世の中の人は「人工知能」と「そうでないもの」を分けて表現していると思います。

だって、
  • 人が近付くと自動ドアが開く。⇒人工知能ではない。
  • 写真に写っている人の顔を自動認証する。⇒人工知能だ!!
みたいな感覚、あると思います。
どっちも自動認証していることには変わらんと思うのですが、不思議ですよね。

他には、
  • 格闘ゲームでコンピュータが対戦相手を務める。⇒人工知能ではない。
  • コンピュータがプロ棋士に将棋で勝った!!⇒人工知能の時代だ!!
とか。

恐らく「何か知らんが凄いもの」と「そうでないもの」くらいの感覚かと……。

しかし、私はこの「何か知らんが」の部分に鍵があると思います。

人工知能とは


昔を思い出すと、私が最初に「人工知能って凄い!!」と思ったのは子供の頃、ドラゴンクエスト4でした。
ドラクエは3以前はプレイヤーがコマンド入力で戦っていましたが、4以降はコンピュータが自動戦闘してくれるのです。
しかもドラクエ4の場合、戦闘を重ねる毎に学習して頭が良くなっていくという機能まで付いていました。
これを「人工知能」と称して大々的に宣伝を打っていました。

後に知ったのですが、ドラクエ4のアレは、実は人工知能でも何でも無いんですよ。

「戦闘するとランダムでフラグが解禁される。だから何度も戦っているとフラグが全て解禁されて頭が良くなったように見える」

これだけ。単なるフラグ処理です。
ファミコンなんだからその程度が関の山なのは当然ですが、当時子供だった私は本気で人工知能と信じ込んでいました。

しかし、ここに一つの真理があります。

  • 中身がどうだろうと、人工知能っぽい挙動であれば、人はそれを人工知能と思う。

それが人工知能かどうかなんて、外から見ても分かりゃしない。

その人がそう思うかどうかの世界です。

では、何をもって人はそれを「人工知能っぽい」と思うか?
私の考えはコレです。

  • 学習機能を有している。

これが核心だと思います。

自動学習機能


この視点で冒頭に戻ってみましょう。

自動ドア、格闘ゲーム
これらは人が近付くと自動でドアが開いたり、パンチを打つと防御してきたりするわけですが、それは事前に開発者がプログラミングしたものです。
なので、能力はずっと固定。自動で能力が上がったりすることはありません。
「この自動ドア、昔は開かなかったけど、最近調子良くなったね」なんてことは起きません。

 ⇒人工知能ではない。

顔自動認証、将棋
将棋の方が分かり易いと思いますが、これらはサンプルとなる膨大な過去データを内部に持っていて、その膨大な過去データをサーチして経験則的に挙動を決めてきます。
だから内部データが増えるほど頭が良くなるという学習機能を有している、と言えます。

 ⇒人工知能である。


そうして学習機能して得た成果は「マッチング条件」の精度に反映されてきます。

  • 開発者が自分でマッチング条件をプログラミングしているものは、人工知能ではない。
  • 機械がマッチング条件を自動生成しているものは、人工知能である。

こう定義すると、人工知能というあやふやな言葉も、ビジネスの世界で要望されているものの本質に近付いてくるのではないでしょうか?

終わりに


そう考えると、人工知能の意義というものが見えてきましたね。
人工知能とは、結局はツールの一種、手段の一種でしか無くて、
開発者が人工知能に望んでいるのは、要するにこういうこと。


人間が自力でプログラミングし切れないマッチング条件を、コンピュータが代行して自動生成して欲しい!!


人工知能が「何か知らんが凄いもの」と見える理由はココ、人間でもよく分からんロジックを委託しているからなんですね。

そして、最終目的である「自動生成」に到達する為の過程として存在するものが「学習機能」なわけです。

となると、

どうやってコンピュータに学習機能を持たせるか?

ということが重要になってきます。
そういった時に登場するのが、こちらも最近話題の「機械学習(machine learning)」です。

「人工知能」と「機械学習」の関連性が見えてきたところで、次回に続きます。