1Click飲みRomoCartTempescope色色[:iroiro]Other Projects

2012年5月13日日曜日

第三回 クックパッド開発コンテスト投稿作品『俺新聞』 その2(開発編)

『俺新聞』 その1(アイディア出し編)の続き


さあ作ろう

どんなセンサを使うか?
今回は過去のデータがしっかり無いとアルゴリズムの開発のしようがないので、
(1) たまたま私がライフログ的に装着しているGPSロガーのデータ
(2) 2年ぐらい前からやってるtwitter
(3) 撮影した写真のログ
の3種類を想定する。
センサを限定すると自ずと、判別出来る一日の特徴は限られてくる:
・家→会社→遊びなどの大まかな遷移
・どこに行ったか(飲食店とかも分かるか?)
・・ぐらい?
今回は時間の制約上、twitterの文章解析してあーするとか、画像解析してどーするとかはやめておく。

で、いきなり、作る最終成果物のイメージ図を作ってみた(Pagesでお絵描き):
河本の呉旅行の日が新聞になったよ!
ポイントとしては:
・大まかにどこでなにしたかは正確
・どこでなにして何言ったか(大和ミュージアムを2時間見て「すげー」って言った)はGPSとtwitterから複合的に判断
・「はしゃぐ」とか「舌鼓を打つ」とかは適当でいい
・ちょっと早くホテルに帰った(9時)から疲れてるんじゃない?っていう洞察ぐらいは入れても楽しさの範疇。
・とにかく終始「お偉いさん」ぽさを出す。なんか小っ恥ずかしくて楽しい。

作らないと行けない部品は大きく分けて5つ:
(1) GPSデータから滞在を判別する方法
(2) 滞在を更に「家」「会社」「飲食店」などに大きく分ける方法
(3) 「特徴的な日」と「平凡な日」の分類(上記例は特徴的な日)
(4) それぞれの滞在の遷移や、twitter・撮影の有無などから文章をうまく構成
(5) アプリとして適当にまとめる(スマホでセンシングしてiPadで見るのとか素敵だよね。)

だんだん眠くなってきたのでかいつまみながら説明する。

(1) GPSデータから滞在判別
GPSデータを細かく見てみると、電波強度が悪いところで飛んだりはねたりしてた。
なので適当に移動平均とって平滑化して、
適当に時速4m以上で動いたところでズバズバ切って、それ以外を「静止」セグメントとして確保して、
隣り合った静止セグメント同士を、構成点の平均とか分散が適当に同じぐらいの時は結合して、
細かい静止セグメント(10分以下とか)は捨てる。
みたいな超適当な方法でもそれなりに見た目よくなった。
時間ないし、論文書く訳じゃないし、いいよね?
きっと調べたらちゃんとしたやり方があるんでしょう。
#実際にはこのへんのパラメータ調整が結構てまどった。

(2) 滞在を「家」「会社」「飲食店」などに判別
「家」「会社」→めんどいので、ユーザに家と会社の場所入力させて、それらに近い点は「家」「会社」に居る、と判定。
もっと時間あったら、滞在点をクラスタリングして時間帯の偏りみて自動識別とかするかも。
「飲食店」は、ググってたらぐるなび様の超素敵APIを発見したのでこれを使いました。
「家」「会社」に判別されていない静止セグメントを飲食店検索して、100m以内に見つかったら飲食店、無かったら「放浪」に判別。

(3) 「特徴的な日」「平凡な日」の判別
これもまた超無責任に、仕事に行った日は「平凡な日」、そうじゃない日は全部「特徴的な日」とする。
だって、そうじゃん。

(4) それぞれの滞在の遷移や、twitter・撮影の有無などから文章をうまく構成
ここはこだわればいくらでもこだわれるところ。
今回は「特徴的な日」と「平凡な日」それぞれで別に文章のテンプレを作って、
朝・昼・晩の滞在の有無やtwitter/画像の有無によって、文章内の変化形を色々定義した。
恥ずかしいので全部は見せないが、時間的制約のため、以下のような恐ろしいコーディングをするはめになった。
目を覆いたくなるようなコード。ジーザス。


(5) アプリとしてまとめる
ごめん、出来なかった。みなさんが美麗なウェブサービスを投稿していくなかで、多分唯一のコンソールプログラム・・・

出力例
プログラムの起動(あーそうさ、デスクトップアプリさ)
目を覆いたくなるようなUI
2012年2月3日、この日はちょっと早めに会社に行った日だ。
この日の出力:
お気づきだろうか?最初に作ったデザインとあまりに違うことに。
早く出社したことをちゃんと褒めてくれてるね。
早々と家帰ったのか、やっぱそう見られるのか。家でWiiやりたかっただけだなんだけどな。
でも更なる成長を予感させてるならいいか。

続いて2012年2月2日:
褒めるべきところが無くてもなんとか見つけてくれる
この日は10時に出社するという酷い日、さすがに新聞でも「ようやく現れた」とか書かれてしまっている。
でもなんとか褒めるところを探そうとしてくれたのだろう、出社したこと自体を喜んでくれている。
退社後吉祥寺にご飯食べにいったこともちゃんと認識してくれている。そして更なる成長を予感させているらしい。


最後に2011年9月19日:
旅行に行ったよ
この日は会社の同期に誘われてテニス合宿なるものに行ってきた。
ちゃんといつもと違うところに行ったことを認識して、ヘッドラインになっている。
いい写真も選んでくれた。

まとめ
・このシステムで一日の終わりが楽しくなるだろうか? →数日は、なる。きっと。
・飽きない? →すぐ飽きると思う。でも文章のパターンを増やしていけば、可能性は無限大。
むしろ、「センサがこういう特徴を示しているときにはこういうこと言う」みたいなルールを簡単に記述できるようにして、クラウドソーシングに任せたらいいんではないかと思う。
・他に時間の制約上やらなかったことは?
ー加速度情報: 本当は行動の中身まで踏み込みたかった
ーテンプレ増やす: 「特徴的な日」と「平凡な日」だけじゃないよね。
ー家、会社、その他自分が大事に思うところを自動認識
ーWebサービス化
ーtwitterの内容解析: 本当は宝の山
ー画像情報: 画像のキャプションとか本当はちゃんと付けたい。「微笑む河本氏と市長」
など。
・その他コメントなど:
ー今回作ったの結構面白いと思うので、UIの酷さによって選考してもらえなかったりしたらもったいない(と同時に、初っぱなから蹴られても仕方が無いとも思う)
ーなのでこういう時間制約のあるコンテストはアルゴリズム開発と見た目(ガワ)の開発のバランスが難しいなぁ。
ーデザインとWeb開発が得意な人とチーム組みたい。
ー久しぶりに徹夜した。意外と平気。
ー久しぶりにここまで長時間プログラミングした。楽しかった。

『俺新聞』使いたい、改造したい、など要望・意見ある方はお願いします。
ken 12/05/13 8:02(あと1時間で締め切り!)


第三回 クックパッド開発コンテスト投稿作品『俺新聞』 その1(アイディア出し編)

概要

毎年恒例のクックパッド24時間コンテスト、今年のお題は「一日の終わりを楽しくするもの」。
今回作った「俺新聞」開発の流れを(寝てない頭で思い出せる限り)記録します。
#多分寝たら忘れる・・・

本稿は「どうやって『俺新聞』に行き着いたか」のお話。
次稿(開発編)では「どうやって開発したか+結果表示」です。



どういう風に考えたか(超絶読飛ばしてもいい部分)
一日の終わりって何する時間だろう?考えつく限り挙げて分類してみた。
(1)「今日を振り返る時間」(反省したり、ニンマリしたり、それを人に伝えたり)
(2)「明日への準備をする時間」(服用意したり、明日のプレゼンの資料最終チェックしたり)
(3)「帳尻合わせ」(今日運動してないからせめて最後に腕立て伏せしよう・・・)
(4)「イベント(その他)」(「夜勤の人起こさなきゃ」「24時間コンテスト終わったよ寝よう!」とか)

このうち、(2)は「楽しくする」というより「不安の解消」の要素が大きいので却下。
(3)も、マイナスを0にしようと取り繕っていて楽しさは感じないので却下。
(1)をまじめに考えて、(4)は何か突発的に思いついたら程度にしよう、と決めました。なんとなく。

じゃあ従来の振り返りの手段ってなんだろう?
日記?
電話で人に伝える?
自分の日記(三日坊主だが)を書いた経験では、既に知ってることをつらつら書いているだけで、ログ以上の有用性や楽しさは感じなかった。
電話は、相手にうまく自分が思ってることを説明できて、自分が思っていなかった考え方を相手が提示してくれたら少し楽しい。
というわけで、従来の振り返りの手段ってのはあんまり楽しくない。

なんとなく、振り返りを楽しくするためには自分で振り返っていてはだめなのでは? と考えた。

じゃあ他者に自分の今日を振り返ってもらう手段って何があるだろう?
このへんで具体的な案に落とし込んだ:
(1) 他人日記
→Facebookとかでみんな日記を書けばいい。でも「自分に関する日記」じゃなくて、「他人に関することだけ」書く日記。「@hogehoge が今日打ち合わせでいいこと言ってたけど、あれは俺のパクり」とか。
そして各人は、自分について書かれた文がaggregateされた、「自分への意見」日記を毎晩見ることで、他人目線での今日を振り返る
メリットデメリット:
○ 人の目線は気になるので楽しいかも
    × 本当に思ったこと書いてくれるのか?
× 俺友達少ないから誰も書いてくんないぞ。
(2) センサ日記
→センサ情報(GPSとか加速度センサとか)を常時継続的に身につけていたら、真に「客観的な」日記が作れるんじゃない?(まあ、要は、ライフログだ)
○ 客観的は客観的
× でもライフログは色々仕事柄付けてるけど、本当に楽しいのか?ただのセンサ情報見せるだけじゃつまらんぞ。
× 24時間で作れるか!?

以上の2候補から、「友達が少ない」というのが決定打になり(2)に決めた。
作れる作れないは、作れる範囲でやりゃいい。
楽しくする方法は次に考える。

従来の(仕事柄やってるような)ライフログがピンと来ないのは、やはりCG(生成されたグラフィクス)だといまいち心に訴えかけてこないからだと考えた。
やはり文字にしないと伝わらない暖かみってもんが、何となくあるんじゃないかと。
そこですぐに思いつくのが日記文章の自動生成だが、せっかく客観データに基づいているのに「第一人称」の文章書いてたらもったいないんじゃないか。
じゃあ客観的に人の行動を説明して、かつ心に訴えかけてくる媒体ってなんだろう。
一つは小説。でも俺文才ないし、小説文章の自動化なんてできねーよ。
しかも小説は感情に関する記述が多すぎて、今回センシング出来そうな「固い行動」(歩いた、走った、車乗った)とは親和性が悪いのでは。
じゃあ新聞でよく見る、「○○首相 帰国」『○○首相は米主脳との会談を経て〜〜」みたいな文章なんかどうだろうか?
(1) そこそこ定型化されているので文才なくてもいい
(2) 感情が入ってない(入っちゃいけない)
(3) 的確に誰かの行動を言い表せる
(4) みんな読慣れてる
(5) 自分の生活が新聞調で記述されてたら、なんかセレブな気分になれるんじゃね!?
といういいこと尽くめな気がしてきたので、今回の開発項目を以下のように決定:
『俺新聞』
センサ情報(とりあえず、主にGPS)から対象者の24時間の行動を測定、その日の特徴的な何かを抽出し、新聞で要人の動向を説明する時の口調で出力する。
細かい仕様:
・説明の内容は「代表的」かつ「いい感じに手抜き」(情報量を削ぎ落す)
  →例えば「国分寺駅から121.3m北北西に移動したあと西北西に11.4m移動」ではなく、「auショップに行った」
・定量的な嘘は言わない、でも目的は「楽しく」させることなので、人のとりかたによってはあり得る嘘はつく。
  →右行ったのに左行ったというのはNG。でも「夕方にかけて笑顔が増え、」とかならいいんじゃない?
・「明らかに特徴的な日」と「平凡な日」は分けて考えた方がいい?
  →「旅行に行った」みたいな特徴的な日は放っておいても振り返りは楽しい。これは思い出しのサポートぐらいでいいんじゃん?
   「会社行って夕飯食って帰った」みたいな平凡な日こそ、本腰入れて楽しくする方法を考えるべき。

パチパチパチ(この時点で15:30ぐらい)