まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

2015/08

「人工知能が進化したら、人間の仕事がなくなる!?」とか「人工知能が人間の仕事を奪う!?」とか言われているのをたまに目にします:
http://nikkan-spa.jp/907607 

個人的意見ですが、遅かれ早かれ&多かれ少なかれ、そういうことは出てくるんだろうなあ、、と思ってます。「絵画や小説など、芸術性/創造性の高い分野ではまだまだ」とも言われてますし、自分もその通りだとも思いますが、「まだまだ」ということは「いずれ・・・」という可能性を秘めているわけでもあります。

その一方で「人工知能が踏み込むことのできない分野もある」と思っています。人工知能がどれだけ発達しても、人間に追いつかないであろう分野があるとしたら、それは何だろう??と・・・


自分なりの答を1つ出すとしたら、それは「本能」だと思ってます。ニューラルネットワークやディープラーニングは「学習」させることで知能を得ます。この精度が高ければ高いほど、人間の脳に近づき、場合によっては人間を超えてしまうこともあると思っています。ただ、裏を返すとこの「学習」が人工知能の精度を高めているわけなので、何も学習させる前の人工知能はただの箱というか、「入力しても反応しないソフトウェア」でしかありません。

一方で人間には、何も教えていないのに既に体が知識を持っていたりします。特に生死に関わるようなもので、意志を伝えるために声や音を出すとか、身の危険を感じた時に自然に防御するとか、暑い時に汗をかいて体を冷やすとか、目の前にものが現れた時に(目を守ろうとして)目をつぶるとか、水中で呼吸を確保するために手足をバタバタさせるとか、、、DNA のレベルで学習済みというのか、動物や赤ちゃんが取る行動が近いといえるかもしれません。

もちろんこのような本能に近い行動をするようにコンピュータに学習させることはできると思いますが、「人はこれらのことを学習していなくてもわかっている、本能的に行動できる」という点が大きな違い、という意味です。


その意味で「人工知能が進化しても、自分の仕事を失わないようにするには?」を考えると、「仕事に本能に近い要素を取り入れること」と「自分の本能を磨き続ける」ことだと思ってます。例えば自分の場合であれば、お客様やイベントで製品の説明をする際に「どういう紹介の仕方をすれば驚いてくれるだろうか? 何を見せれば感動するだろうか?」といった、相手の本能を揺さぶるような観点を取り入れることを心がける、とか、頭や体を動かし続けて、自分の本能がサビつかないようにするとか、かなあ。



IBM Bluemix 上で .Net アプリが動くようになりました:
2015082001


Bluemix にそこそこ詳しい方だと「Bluemix は Ubuntu ベースのはずなのに、何で Windows の .Net が動くの?」と疑問に感じるかもしれません。その鍵は Mono です:
http://www.mono-project.com/docs/web/aspnet/

ASP.NET はマイクロソフトが Windows 向けに開発・提供している Web アプリケーションのフレームワークです。これを Linux や Mac OS X 上でも動くようオープンソースで開発を進めているのが Mono プロジェクトです。その Mono が搭載されたビルドパックを使っているのが Bluemix の ASP.NET ランタイムです。Mono はGNOME プロジェクトを創設した Miguel さんが開発し、現在は Xamarin 社がオープンソース製品として開発/販売/サポートをしています。ゲーム開発フレームワークで有名な Unity も Mono エンジンをベースにしています。

.Net Framework との 100% 互換があるわけではないのですが、その互換性の中で開発されていれば Visual Studio でビルドして Mono 上で動かす、といったことも可能です。


Bluemix 上で ASP.NET ランタイムを起動すると、この Mono が搭載されたビルドバックからインスタンスが生成されて実行されます。アプリケーションのカスタマイズを行う場合は、(IBM DevOps サービスを使ってもいいのですが、Visual Studio を使いたい人が多いと思うので)メニューの「コーディングの開始」から「スターターコードのダウンロード」を実行して、スターターコードと呼ばれるアーカイブファイルをダウンロードします:
2015082003


ダウンロードしたスターターコードの zip アーカイブを展開すると、Visual Studio 2015 で編集可能な .Net アプリケーションのソースコード一式が出てきます(実質的なソースコードは src フォルダ内にあります)。このソースコードを Visual Studio 2015 で開いて直接編集します:
2015082002


編集やカスタマイズが完了したら、他のランタイム同様に cf コマンドでプッシュしてデプロイ、で動く、と思います。

「思います」と書いたのは自分で試したわけではないからです。人バシラー絶賛募集中です。


CentOS に GUI インターフェースの BitTorrent クライアントアプリ(Deluge)をインストールしてみます:
Deluge


CentOS なので、yum でサクっ、、、といきたいのところですが、まずはリポジトリを登録する必要があります。root 権限で /etc/yum.repos.d/linuxtech.repo を以下の内容で新規作成します:
# vi /etc/yum.repos.d/linuxtech.repo

[linuxtech]
name=LinuxTECH
baseurl=http://pkgrepo.linuxtech.net/el6/release/
enabled=1
gpgcheck=1
gpgkey=http://pkgrepo.linuxtech.net/el6/release/RPM-GPG-KEY-LinuxTECH.NET

で、yum で install します:
# yum install deluge

これで CentOS 内の Gnome メニューの「インターネット」カテゴリ内に Deluge が入っているはずです:
2015082002


起動したら普通に使えます。やっぱ GUI 使えると便利ね:
2015082004


個人では、ヤフーデベロッパー API を活用しています。個人での話です、あくまで(苦笑):

http://developer.yahoo.co.jp/


自分が個人運用しているサービスの中では、例えば「ねっぴ」では Yahoo! ショッピングの商品情報(価格など)を取得するためにショッピング Web API を使わせていただいています:
http://developer.yahoo.co.jp/webapi/shopping/

また「ツイートマッパー」では、隠しページではありますが、マップの API として Google MAP ではなく、YOLP(Yahoo! Open Local Platform) を使ったバージョンがあったりします。こちらは気象情報 API で天気図レイヤを重ね、天気図と一緒にツイートマッパーを表示することもできます。ゲリラ豪雨の情報が天気図でもツイートでもわかる、といった感じで使えます:
http://tweetsmapper.juge.me/yolp_index.jsp

2015081801


・・と、個人デベロッパーとしては実は色々な所でヤフーデベロッパーから提供されている API を使っているのですが、最近になって、「テキスト解析」という気になる API を見つけました:
http://developer.yahoo.co.jp/webapi/jlp/

日本語の「係り受け解析」「ルビ(よみがな)振り」なども面白そうですが、特に気になったのは「日本語形態素解析」 API です:
http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html


この API はインプットデータとして
 「ここのラーメンは絶品で美味しい」
のような日本語テキストを与えて実行すると、その実行結果アウトプットに、以下の様な単語単位に区切ったデータを返してくれる、というものです(実際には表ではなく XML 形式で返されます):
単語読み品詞
ここここ名詞
副詞
ラーメンらーめん名詞
副詞
絶品ぜっぴん名詞
副詞
美味しいおいしい形容詞

形態素解析 API の具体的な使い方はこんな感じです。まずヤフーデベロッパー API を使う上で必要になる「アプリケーションID」を登録します(実際にはこの手順でアプリケーションIDとアプリケーションシークレットを取得しますが、日本語形態素解析APIでは後者は使わないようです)。詳しくはこちら:
http://www.yahoo-help.jp/app/answers/detail/p/537/a_id/43397

アプリケーション ID が取得できたら、その文字列を使って以下の様なクエリーを発行します:
http://jlp.yahooapis.jp/MAService/V1/parse?appid=(アプリケーションID)&sentence=(解析したい文章をUTF-8エンコードしたもの)

ウェブブラウザで実行すると日本語のエンコードは自動で行ってくれるのでそのまま指定できます。例えばウェブブラウザのアドレス欄に以下の文字列を指定して実行してみます:
http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html?appid=(アプリケーションID)&sentence=ここのラーメンは絶品で美味しい

実行結果はこのような感じになるはずです。与えた「ここのラーメンは絶品で美味しい」というテキストを形態素解析した結果が XML フォーマットで取得できています:
2015081901


この XML を詳しくみるとこんな内容になっています。なんとなく上記の表に対応した結果になっていることがわかります:

<ResultSet xsi:schemaLocation="urn:yahoo:jp:jlp http://jlp.yahooapis.jp/MAService/V1/parseResponse.xsd">
 <ma_result>
  <total_count>7</total_count>
  <filtered_count>7</filtered_count>
  <word_list>
   <word>
    <surface>ここ</surface>
    <reading>ここ</reading>
    <pos>名詞</pos>
   </word>
   <word>
    <surface>の</surface>
    <reading>の</reading>
    <pos>助詞</pos>
   </word>
   <word>
    <surface>ラーメン</surface>
    <reading>らーめん</reading>
    <pos>名詞</pos>
   </word>
   <word>
      :
   </word>
  </word_list>
 </ma_result>
</ResultSet>


この API に、例えばこちらで提供されているような「単語感情極性対応表」のデータを合わせて使うことを考えてみます:
http://www.lr.pi.titech.ac.jp/~takamura/pndic_ja.html 

つまり単語ごとに「ポジティブ度合い」や「ネガティブ度合い」がデータとして与えられることになります。上記の形態素解析でテキストを単語ごとに分解して、分解した単語ごとにポジティブ/ネガティブ度合いを調べて加算すれば、テキスト全体のポジティブ/ネガティブ度合いが計算できるのではないか? という仮説を思いつきました。つまりこんな感じ:
単語読み品詞ポジ/ネガ
ここここ名詞-0.629
副詞 
ラーメンらーめん名詞 
副詞 
絶品ぜっぴん名詞+0.980
副詞 
美味しいおいしい形容詞+0.991
合計+1.342

これで、元の文章「ここのラーメンは絶品で美味しい」という文章は、単語のポジ/ネガのプラスマイナスの結果が +1.342 なので、文章全体としてもポジティブになるのではないか? という仮説です(まあ、現実はこんなに単純ではないとわかった上での仮説ですが・・・)


とまあ、こんなサービスの基本となる形態素分析が無料の API で提供されているわけです。これは便利!使わにゃ損だ!!

実際にこのサービスを作ったら、公開するつもりです。


 

IBM Bluemix のサービスの1つに "Streaming Analytics" という、耳慣れないサービスが追加されました:


実はこれ、"IBM InfoSphere Streams" と呼ばれているソフトウェア製品の SaaS 版です。
http://www-03.ibm.com/software/products/ja/infosphere-streams


IBM InfoSphere Streams は非常に多くのデータソースからの情報を取り込みつつ、ディスクを使わずにデータを処理して、次のプロセスへつなげる、という『ストリーミング処理』を実現するソリューションです。ディスクへの書き込みを行わずに処理することで、リアルタイム分析を支援するためのソリューションを実現しています。

その InfoSphere Streams が Bluemix のサービスの1つとして気軽に使えるようになっているのでした(自分にはまだ VM 起動の権限がない、らしい↓):
2015072701


ウェブのコンソール画面はこんな感じ。
2015072702


自分の権限で使えるようになるのが楽しみです。


このページのトップヘ