2016年6月17日金曜日

Diverse技術研究所の上席研究員に着任しました。出会いの科学、Dating Scienceの研究に取り組みます。

このたび、Diverse技術研究所の上席研究員に着任しました。出会いの科学、Dating Scienceの研究に取り組みます。
Dating Scienceは実はいま最も注目している領域の一つです。これにはいくつかの観点があります。

まず、壮大なところから。よく、ほかの科学分野と比較して、情報科学はどう人類に貢献するのかと議論される事があります。
私が思うに、人類の出生率に影響を与えるという意味で、情報科学の一分野であるDating Scienceは飛び抜けて人類に貢献します。それも存亡に関わるレベルで。

次に、近年の潮流です。ビッグデータを統計分析し、必要なら機械学習する。それにもとづいて対象にふさわしい、よりよいアーキテクチャを設計する。便利なインタラクティブシステムを作る。これらは現在様々な領域で進んでいるプロセスです。しかし出会いに関しては、データは商業サービスを通じて豊富に集積されているのに、その後のこういった活動が手付かずの状態です。これはある意味驚きです。やるべきなのはまさに今です。

次に、理系女子大教員としての打算です。なんだかんだ言っても、色恋沙汰というのは女子大生の大きな関心事であることは否定できません。女性の視点で出会いを考えるというのは、実はDating Science領域でもホットな最先端領域だそうですから、女子大の特殊性を活かし、一つの名物研究領域とできるよう、学生とともに精進していきたいと思っています。

そして最後に、(これが一番大切ですが、)私自身は恋愛に奥手で若いころは失敗の連続でした。その頃の経験がSpeechJammerや消極性研究会の活動をはじめとする私の研究活動に色濃い影響を与えて今の私がいます。出会いというとチャラい第一印象がありますが、聞けば出会いビジネスもどうやって消極的な人の気持ちに寄り添うかが重要な課題だというではありませんか。これを研究し、消極的な人を含むより多くの人達により多くの幸せを提供できるなら、この上ない喜びです。

Dating Scienceとはいうものの、どうテクノロジーを活用して人々のコミュニケーションを円滑にするかが根底にあることは自明ですから、私の専門性を活かし、この分野に微力ながら貢献できればと思います。今後ともどうぞよろしくお願いします。



Diverse技術研究所:
メンバー:

2016年6月8日水曜日

フィッツの法則の実験・検証をするWebアプリ

(昨年facebookでポストしたものですが、記録のためこちらにも残します)

今年もHCIの講義でフィッツの法則を教える季節になりました。


T = a + b log2(1+D/W)

私は毎年、Processingで作ったWebアプリを使って実験し、Excelで検証する課題を出しています。所要時間はおよそ30〜40分です。

以下が学生に与える課題説明です:

以下のリンクから、実験用のプログラムを実行できます。

https://dl.dropboxusercontent.com/u/7988399/FittsLawTest/index.html

(ちなみにこれはprocessingというJavaに似た言語で書きました。とても簡単に作れます。)

このプログラムを実行すると、白い円が表示されます。これをデスクトップ上のアイコンのようなものだと思って、なるべく早くそれをクリックしてください。クリックすると白い円が別の位置に表示されます。

またその円をなるべく早くクリックします。これを何度も繰り返します。

最低50回は繰り返してください。適当なところでやめます。すると画面下に以下のようなデータがたまっていると思います。

#distance,diameter,time_sec
450.70834,71,1.026
308.1769,99,1.065
391.21478,37,1.000
324.87076,71,0.965
301.42496,88,0.932
(以下略)

先ほど何度も行った円のクリック課題の結果が1行ずつデータになっています。

①課題開始時のマウスカーソル位置から円の中心までの距離(ピクセル単位),②円の直径(ピクセル単位), ③クリックにかかった時間(秒単位)

というデータの集まりです。

フィッツの法則の式で、Tが③, Dが①, Wが②です。

このデータをすべてコピーして、テキストエディタに貼り付けて、fitts.csvという名前で保存し、これをExcelで開きます。

(注意!:コピーしたデータを直接Excelに貼り付けてはダメです!カンマ区切りのデータが、ひとつひとつセルに入らなくなります。)

ちゃんとデータが3列目まで入っていることを確認したら、得られたデータをもとにExcelをつかってフィッツの法則の式の定数aとbを求め、どのくらい法則通りになったかを議論します。

 以下の手順で進めます。

D列目の1行目に log(D/W+1)と書いて、D列の2行目以降にそれぞれの行で 2を底とした log(D/W+1)を計算した値を計算させてください。

(念の為:Excelで対数をつかうやり方は以下を見て学んでください http://excel.onushi.com/function/log.htm )

フィッツの法則の式でlog(D/W+1)=Xとおくと、 T = bX + a という一次方程式になります。つまりフィッツの法則は、TとXが直線関係にあることを示しているのです。

ここで、TとXの実際のデータが大量に与えられた状態でaとbを決定する分析方法を回帰分析と言います。

Excelで回帰分析を用いて、定数aとbの値を求めなさい。また、回帰分析の当てはまりの良さを表す「決定係数 R^2  (←Rの2乗)」を求めなさい。

回帰分析: http://ja.wikipedia.org/wiki/%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90

決定係数: http://ja.wikipedia.org/wiki/%E6%B1%BA%E5%AE%9A%E4%BF%82%E6%95%B0

回答の形式:

a = xxxx

b = xxxx

R^2 = xxxx

ヒント:これには2通りのやり方があります。

(1)TとXの散布図を書いて、「線形近似曲線」を追加する

http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/office2007/excel15.html

http://office.microsoft.com/ja-jp/excel-help/HA102809798.aspx

(2)「データ分析」の「回帰分析」を用いる

http://keijisaito.info/econ/jp/excel_ols/tool.htm


WindowsでもMacでもできるのは、(1)のやり方です。(2)はWindowsではできることを確認しましたが、少なくとも大学のMacではできませんでした。

2016年6月1日水曜日

ドラえもんの魔境探しとディープラーニング

ゴールデンウィークに子どもと「ドラえもん のび太の大魔境」を見ました。(amazon prime videoです。)リメイク版でしたが、基本的なシナリオは旧版と同じ。子供の頃何度も見た作品です。でもこまかいストーリーはすっかり忘れていました。

驚いたのは、のび太とドラえもんが未発見の秘境を探す手段が、
「自家用人工衛星でアフリカ大陸の膨大な衛星写真を撮影し、プリントアウトして目視で発見する」
というものであったこと!(1枚の写真あたり3km^2の分解能で、9,300,000枚程度)

結局のび太もドラえもんも膨大な目視に疲れてしまい、犬のペコが根性で遺跡を見つけることになります。

普段「SFを追いかけているようではだめだ」と標榜している私ですが、「膨大な衛星写真から顔認識技術で人面岩を探す」プロジェクトを着想した時の私の脳の片隅に、このアニメの記憶があったかもしれないことは否定できません・・
大変な衝撃を受けました。

ドラえもん、君の処理系にはディープニューラルネットワークに基づくパターン認識機能は実装されているのかい?それとももっとすごい技術なのかい?
どちらにせよ、印刷して目視しなくてもいい仕組みがあったんじゃないかな。





MESHのOnly-onceタグ

MESH SDKの練習として「一度だけ入力を通すフィルタ」を作りました。リセットもできます。以下がコードです。

{"formatVersion":"1.0","tagData":{"name":"Only-once","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABECAYAAAA4E5OyAAAFgUlEQVR4Xu1cayikXxh/xv1WlrWktGu1u4XSlthy+UB2c/til92P+LT5IAm7cgmblWso5ZLCV0Jhl7WiZGldSuQW5VoStWjFuv77nXrf/9zYmYntnZnzfBlmzjtznt88z/Oe85zfb2RXV1dXxE1EQMYBUYwGjQFZWVmh0dFR+vnzJ62trdHv379JqsElk8nIzs6O3N3d6cWLFxQQEEBPnjzRKA/+CsjMzAxVVlZST08P7e3tafSmUhvk5ORE0dHRlJqaSj4+PjdO71pAzs/Pqbq6mgoLC2l/f19qPuo0n3v37lFOTg6lpKSQmZmZ2vdQC8ifP38YmrW1tTp9sNQvSkpKYlFvaWmpMlUVQFAXPnz4QOXl5SqDkYuRkZHk6+tLDg4Okvb7169fNDk5SV+/fqWxsTGVuaanp1NpaSmh3sibCiAdHR309u1buri4EMc9fPiQiouL6fXr12pRlTIyiHb4lJmZSRsbG+JUTU1NqbW1lfl0LSCoFUFBQTQ3NyeO8fLyora2NsKjPtv8/DzFxcURHgXz9vamkZERQm0RTCFCWlpaKCEhQXzR3t6e+vv7yd/fX5+xEOc+Pj5Or169ooODA/G55uZmio+PVwUEtQP1oa+vT3wRtaSkpMQgwBCc+PjxI6sdgoWHh7M6I9QSMUK2t7dZJGxtbbGxtra2bBGGsDIkQznAYu3o6Ii55ebmRogcV1dX9r8IyMTEBKsfp6en7AXcSZBfVlZWhoQHnZycMD+npqaYXxYWFsxPPz8/RUCGhoYoNDRUIZR6e3sNCgzBmYiICIXSMDg4SCEhIYqADAwM0MuXL0UAoqKi2HLdEA3L+C9fvoiuff/+ncLCwjggAiIcEB4hiokv+ZQ5Pj7+f2Ekk935nU2ygKyvr1N2djb9+PFDbDZh3/Tt2zeytra+s3ouOUCwKGpqaqKioiLCglDe0OXC4snGxsawAbm8vKSdnR22UWxoaFDYQMp77uHhQbOzs4YPSGNjI2VlZdHu7u6N37zRAFJTU0PJyckqYJiYmBCiRzCjAQRdKyyP0bCBoeOGrtXm5ibV1dUZHyBo6T179ox13N69e0foa+JoID8/nwoKCowPEHTxh4eH2TEAjgUEy83NZZ19o0uZ6yopB0QJGQ4IB+TmBSePEB4hPEK02pTxlOEpw1OGp4xWCPCU4SmjVcDwuwxPGZ4yWqXMp0+fKC8vT7wGTaOlpSVCa/GuTBLHEIeHh4QDdfRPBXIKnAaDp6urS/TdxcWFqqqqyNzcnD0HIg/+BrFFHWtQF9AkAQgYgeBlCD1VbRxxdHSkxcVFevDggTaXXTtWEoCAoBIcHEzyx5aaenf//n1aWFgwLEBAWwKVSRcDiwnHns7OzrpcrnKNJCIEPPnu7m4F/qum3gGQ2NjYWzsElwQgmjr/L8ZxQJRQ5oBwQG5OPB4hukQI56kq8VTBZA4MDKSzszOGp7EwmbEtAKVLhcnMue5KXHd1aggoByAcMiSDkEhe4XGtGgJOY+eZmJgo+g9hDfQyQjjpOzAoC9DLyIsqQf6T1wgpCIhAasGOVFl1BKKcp6enXuOBzSEUVcpqMSgh5PWDKpq79vZ2prmT5309evSIhVlMTAyTU+iTQe7S2dlJSH9sEAVDLwaauzdv3ii4o1aVmZGRQRUVFSp+4y4kr8pUVjRKBSjUQ0Q7Wg5QS+EuomxpaWlUVlb2d1UmLkQTB2Lf+vp6qfh4q/N4//49E2lrpNsVPhmcMIh9P3/+rCDau9WZ/eM3g6gSVHKItLVSdsvPc3p6mgGD0NNn7T9SHUA8f/78xq/hrz+GIFy9vLzMchGdr9XVVSbik/KvQ0BE+fjxYyasRO17+vSpRvGoMSAavZsBDOKAKH2JHBAlQP4D0SRWgFbRylEAAAAASUVORK5CYII=","description":"Pass through the input trigger only once until it gets reset.\n一度だけinputを通します。resetに入力があると、初期化されます。","functions":[{"id":"function_0","name":"only once","connector":{"inputs":[{"label":"input"},{"label":"reset"}],"outputs":[{"label":""}]},"properties":[],"extension":{"initialize":"return {\n    runtimeValues : { count : 0 }   \n}","receive":"if ( index == 0 ) {\n\treturn {\n    \tresultType : \"continue\"\n\t}\n} else{\n\truntimeValues.count = -1\n\t return {\n        resultType : \"continue\", \n        runtimeValues : runtimeValues\n    }\n\n}","execute":"return {\n    resultType : \"continue\"\n}","result":"runtimeValues.count++;\nif ( runtimeValues.count == 1) {\n    return {\n        resultType : \"continue\", \n        runtimeValues : runtimeValues\n    };\n} else {\n    return {\n        resultType : \"stop\", \n        runtimeValues : runtimeValues\n    }\n}"}}]}}

意外と使う機会があるのですが、既存の部品でできるのかな?みんなどうやってるんだろう?