プログラミング方法論第13回
DESCRIPTION
SFC プログラミング方法論第13回 2013年7月8日の講義資料TRANSCRIPT
プログラミング方法論第13回
人力プログラミング
橋本 翔(教育実習)
橋本翔(28)
• 教育実習生
• SFC博士課程 (増井研究室)
• 実世界インタフェース
• 分散並列/Webプログラミング
• 趣味:プログラミング、料理
@shokai
教育実習• 博士号を取るのに必要
• 何言ってるかわからない時は止めてください
• チャットを使おうと思う
• http://chat.shokai.org/
人力プログラミング
• 人間をプログラムに組み込む
• 人間を関数のように扱う
• ソフトウェアが苦手な事は人間が分担する
人間の方が得意な事• パターン認識、間違い探し
• 個人の趣味趣向の判定
• インターネットにない情報
• 実世界情報、おいしい店、綺麗な景色
• 使いにくいシステムや、人に頼んだほうが速い仕事
• 親に頼まれてビデオ録画の設定をする
CAPTCHA
reCAPTCHA
• OCRの補正に流用
インターネットパトロール
エンゲルバートのデモ
• マウスとウィンドウシステムの発明デモ
• 中に人が10人以上入っていたとのこと
重要な物を判定
• Googleはよくクリックされるページが上に行く
• みんなが良いと言ったページは面白い?
• よく開くファイルは重要なファイル?
• みんなが持っているファイルは重要?
StumbleUpon
• ページに対して「良い」「悪い」を入力するブラウザ拡張を導入
• ある程度学習すると、面白いページばかり表示させられる
last.fm
• 音楽を聞くだけで趣味が解析される
• スキップボタンで学習するらしい
集合知
• collective intelligence
• wikipediaなど
人力検索
どう書く?org
• http://ja.doukaku.org
• お題を色々なプログラム言語で解く
• 各言語で同じ問題を解くアルゴリズムが集まる
• コードを書く→他の言語への翻訳・・もやろうとしていたようだ
Amazon Mechanical turk
• 仕事依頼のクラウドサービス
• どの写真が一番写りが良いか?など
CrowdForge• 文章をAmazon
Mechanical Turkで添削
• 適切な部分で分割し、結合までやってくれる
• map/reduce
昔デンマークで見たゲーム
• 観客をカメラで画像認識してpongを操作する
• と、みせかけて途中から逆にpongで観客が操作される
人間をアルゴリズムの一部に取り入れる
• 機械学習のフィードバック
• 使ってもらうのに工夫が必要
• 楽しく使ってもらう
• あるいは何もしていないのに使えている状態にする
Tumblr dashboard
• 人間をフィルタにして多段連結
顔認識• 顔認識は学習が面倒
• データが少ないと間違う
Facebookの顔認識
• 顔を学習させる
• 相手に通知される
• つらくない学習
レシピサイト
• レシピを共有
• レビュー、作ったよレポート等で洗練されていく
• 遺伝的プログラミングに似ている
lang-8• 外国語を勉強したい人同士が日記などを添削しあうサイト
• 人間は、間違っていると直したくなるもの
• 添削ランキングがすぐに反映されるようにしたら添削率が上がった
• http://blog.livedoor.jp/sasata299/archives/51898602.html
• フィードバック速度重要
写真の位置登録• ズレているとつい直したくなる
Gunosy
• 普通にTwitter
やFacebookを使っているだけで学習してくれる
アルゴリズムと組み合わせる• レコメンド
• クラスタリング
• 決定木
• SVM
• ニューラルネット
• ベイズ
エンドユーザープログラミング
• ユーザーにプログラムさせた方が良い場合がある
• 目覚まし
• ビデオデッキ
• UserScript
• UserStyleSheet
Userscriptやブラウザ拡張
• ユーザーがWebページを制御
• UIを変えたり
• 無限スクロール
• 他のページの情報を読み込んだり
• SBMの評判を表示
シリアスゲーム・ゲーミフィケーション
• ゲームでゲーム外の問題を解決
タンパク質構造解析ゲーム
• foldit
遺伝子構造解析ゲーム
• Phylo
人間と機械に互換性があるシステム
• プログラムにも人間にも読めるフォーマットで出力する
RSS/Atom
• 専用アプリで読む
• Webサービス間のインフラになっている
Twitter bot
Twitter bot (JSON出力)
「ホワイトハウスで爆発」偽ツイートで株価急落
• 人間に得意なこと=最新のニュース情報など
• をプログラムに取り入れた結果の事故
人間のbotが混ざっても良い
• botを書きやすくするツールがある
• “Tw”など
Amazonマーケットプレイス
• 買う側はamazon.co.jpから買える
• 中古の物だけ中古業者にメールが飛ぶ
• 中古業者とAmazon倉庫が互換性を持つようにwrapされている
SFでよくある
• ゲームをしていたと思ったら、宇宙人と戦争していた
BabaScript
コンピュータが得意な事はコンピュータが、人間が得意な事は馬場くん がやってくれる言語
@takumibaba
% baba -e 'アイス買ってきて("#{rand 5}本")'
baba -e ’コード’
もしくはbaba ファイル名
結果
res = かず助に行きたい人の出欠取ってくださいloop do num = res.to_i # 整数に変換 if num > 0 puts では予約してください("#{num}人") exit else res = 残念・・その次の週はどうですか? puts res endend
出欠確認.bb
% baba 出欠確認.bb
実行
ただのRuby…ではなく日本語で書いた部分を馬場君が実行してくれる
class Foo def initialize @name = "bar" endend
foo = Foo.newfoo.instance_eval do puts @name # => "bar"end
instance_eval
babaコマンドの中身 = instance_evalFile.open(fname) do |f| BabaScript::Baba.instance_eval f.readend
コードやブロックをそのインスタンスのコンテキストで実行する
fooのコンテキストで実行されるのでアクセサが無いプロパティ@nameも読める
module BabaScript class Baba
def self.method_missing(name, *args) ## (略) Androidにnameとargsを送信する end
endend
Rubyの関数名には日本語が使える→ method_missingで全部取れる
File.open(fname) do |f| BabaScript::Baba.instance_eval f.readend
人間に命令を送る構文を追加したプログラム言語
+人間を関数のように扱えるようになるスマホアプリ
→ 人間とプログラム言語の新しい関係
人力プログラミングの工夫
• 人間とプログラムの接続方式
• UIとデータフォーマットに工夫が必要
• 楽しませる、熱中させる
• 競争させる、自慢、達成感
• 正しいアルゴリズム
新しいWebサービス• 人間は部品になりたいのではないか?
• 大抵のWebサービスは「ある目的を達成するために人間を部品に取り込んだプログラム」である、とも言える
• 既存のプログラミングモデルの一部分を人間に置き換えるとWebサービスになる
• 目的達成の役割を自分が担うとうれしい
• アルゴリズムが正しければ動くのでは?
実習JavaScriptとRubyによるWeb版Linda入門(3)
http://shokai.org/blog/archives/7847