やぐブロ

yag + programming + hateblo

"The Social Network"の脚本を読む (3)

前回まで:


映像と翻訳(字幕)はソーシャル・ネットワーク 【デラックス・コレクターズ・エディション】(2枚組) [DVD]を,元となる脚本は以下のpdfを使用している.

http://flash.sonypictures.com/video/movies/thesocialnetwork/awards/thesocialnetwork_screenplay.pdf
なお,この文章中で引用される文章はすべてthesocialnetwork_screenplay.pdfに依拠している.

pp.46-62

GAGE (V.O.)
Mr. Zuckerberg registered the domain name theFacebook via network solutions.
(p.48)

これは字幕にもあったが,マークがドメインをネットワーク・ソリューションズで購入している.ネットワーク・ソリューションズは実在するドメイン登録業者.


EDUARDO “Jabberwock12.listserv@Harvard E-D-U.”
(p.54)

フェニックスのメーリングリストのアドレス.マークが皮肉を言っているのはJabberwockのことで,ルイス・キャロルの「鏡の国のアリス」に出てくる詩のことのようだ.
また,listservはメーリングリストソフトウェアのことだろう.

ちなみに,日本語字幕では「ジャバウォック12@harvard.edu」となっており,listservが抜け落ちている.



We find a table in the back where DIVYA is sitting with his girlfriend and some of their friends who are having a nice time. Divya’s girlfriend, K.C., has her laptop open.
(p.55)

アカペラの場面でディヴャの隣に座っていたのは彼のガールフレンド.この後のラップトップをしまうようにディヴャが忠告するセリフで"Honey"と言っていることからも推測できるが,日本語の字幕では「おい」と訳されているため二人の関係が明確にされない.


They’re focused and charging away in perfect sync when the door at the end of the century-old boathouse opens and DIVYA charges in from the cold with his laptop and a copy of the Crimson in his hands.
(p.57)

脚本ではディヴャはラップトップとクリムゾン紙のコピー(恐らく次の場面で読んでいるthefacebookの記事)を持っていることになっているが,映画では何も持っていない.これは特典映像でデヴィッド・フィンチャー自身が何も持つなと指導している場面がある.
よくよく考えてみると,ディヴャがウィンクルボス兄弟のところに報告しに行ったのはthefacebookが立ち上がってから約36時間後のことのようなので,その時点でクリムゾン紙の記事を持っているのは確かはおかしい.


DIVYA
No, I wanna hire the Sopranos to beat the shit out of him with a hammer.
(p.60)

字幕では「いや マフィアを雇い傷めつける」と訳されている.Sopranosはソプラノのことだが,ここで言うSopranosとはアメリカで放送されていたマフィアのドラマのことのようだ.

Clojureでナイーブベイズ分類器(多変数ベルヌーイモデル)

Clojureの練習としてナイーブベイズ分類器を実装してみることに.
まずは,言語処理のための機械学習入門 (自然言語処理シリーズ)のP.105の例題4.1を解いてみました.

参考にしたサイト

非常に参考になりました.というか殆ど写しました.ありがとうございます.

実装

(def text_classified_p '(["good" "bad" "good" "good"]
                            ["exciting" "exciting"]
                            ["good" "good" "exciting" "boring"]))
(def text_classified_n '(["bad" "boring" "boring" "boring"]
                           ["bad" "good" "bad"]
                           ["bad" "bad" "boring" "exciting"]))


(defn train [features]
  (reduce (fn [model f] (assoc model f (get model f 1))) {} features))

(defn count-wordset [training-data]
  (apply merge-with + (map train training-data)))

(defn mBm-MLestimate [documents datasets]
  (* (/ (count datasets) (count (concat text_classified_p text_classified_n)))
     (apply * (map #(/ % (count datasets))
                   (vals (select-keys (count-wordset datasets) documents))))
     (apply * (map #(- 1 (/ % (count datasets)) )
                   (vals (apply dissoc (count-wordset datasets) documents))))))


(defn classify [d]
  (sorted-map
   :positive (mBm-MLestimate d text_classified_p)
   :negative (mBm-MLestimate d text_classified_n)))

結果

実際にclassifyを実行してみると

> (classify ["good" "good" "bad" "boring"])
{:negative 2/27, :positive 1/81}

このように確率の高い順に結果が出力されるので「"good" "good" "bad" "boring"」と発言したのはn氏,という感じで分類できます.


注意

この実装では例題4.2が解けません!!!今度直します...

言語処理のための機械学習入門 (自然言語処理シリーズ)

言語処理のための機械学習入門 (自然言語処理シリーズ)


(追記:2012/01/26)
例題4.2に対応できるようにアドホックに改良.あと,classifyでソート出来ていなかったので,その部分も少し変更.

(defn mBm-MLestimate [documents datasets]
  (* (/ (count datasets) (count (concat text_classified_p text_classified_n)))
     (apply * (map #(/ % (count datasets))
                   (vals (select-keys (count-wordset datasets) documents))))
     (apply * (map #(- 1 (/ % (count datasets)) )
                   (vals (apply dissoc (count-wordset datasets) documents))))
     (if (some nil? (map #(find (count-wordset datasets) % ) documents )) 0 1 )))

(defn classify [d]
  (sorted-map-by >
                 (mBm-MLestimate d text_classified_p) :positive
                 (mBm-MLestimate d text_classified_n) :negative))

"The Social Network"の脚本を読む (2)

前回:"The Social Network"の脚本を読む (1) - やぐブロ


映像と翻訳(字幕)はソーシャル・ネットワーク 【デラックス・コレクターズ・エディション】(2枚組) [DVD]を,元となる脚本は以下のpdfを使用している.

http://flash.sonypictures.com/video/movies/thesocialnetwork/awards/thesocialnetwork_screenplay.pdf
なお,この文章中で引用される文章はすべてthesocialnetwork_screenplay.pdfに依拠している.

pp.22-46

The room is glass on two sides and through the windows we can see the behemoths of Silicon Valley--Oracle, SunMicrosystems, Google, etc.
(P.22)

弁護士を交えたエドゥアルドとの話し合いの部屋の詳細.本編中では特に会議室の詳細や立地などに触れられていないが,ガラス張りの現代的な雰囲気や,ウィンクルボス兄弟との話し合いの部屋との対比を考えると,自ずと西海岸なんだろうと大まかな判断は付けられる.さすがに窓の外にシリコンバレーの会社の建物が見えているなんてことは推測できないが....
あと,特典映像の「製作の舞台裏」で セットの裏側が映されてたと思うが,確か窓の外の背景は横長の一枚絵(写真)だったような気がする.


MARK is in his Operating Systems class. This is considered the hardest class at Harvard and MARK is one of the 50 students with their laptops open as the professor takes them through an impossibly difficult lesson.
(p.29)

マークが出席していたOSクラスの授業.さすがに授業の内容までは分からない....


CAMERON comes back in with a sandwich wrapped in cellophane. MARK opens it on his lap and eats it uncomfortably.
(p.33)

脚本にはサンドイッチを食べたと書いてるが,実際の映像では貰ったサンドイッチをポケットにしまおうとしている.これも特典映像かオーディオコメンタリーでデヴィッド・フィンチャー自身が面白いから後者を採用したと言っていた気がする.


(remembering what Erica said)
Wow. You’d do that for me?
(p.34)

HarvardConnectionを手伝うのはお前のためでもあるとディヴャに言われて,マークがイラっとしている場面.見返してみると,確かにエリカの言葉を真似したような雰囲気が出ている.


The whiteboard is filled with diagrams now--login page, profile page, create account...We move over to see MARK at his computer. He opens the Emacs program and then Firefox, hits a few keys and the diagram on the whiteboard comes to life on his computer as we
(p.44)

前回はMozillaだったブラウザが,Firefoxに変わっている.
気になって少し調べてみたが,どうやらFirefox1.0は2004年末にリリースされており,ブラウザの呼び名がPhoenixからFireBirdそしてFirefoxへと変わったのが0.8くらいのようだ.映画の中でマークが表面上HarvardConnectionに参加していたのは2003年末から2004年初めにかけてなので,実際にはFirefoxが出たか出なかったくらいのタイミングだと思われる.

フォクすけかわいい.


MARK
I need a dedicated Linux box running Apache with a mySQL backend. It’s gonna cost a little more money.
(p.46)

字幕には「Apacheが走る」とだけ書いてあったが,Apacheに加えてMySQLが動くサーバが必要だったようだ.

"The Social Network"の脚本を読む (1)

プログラミングとは直接は関係ない話.現在「ソーシャル・ネットワーク」(原題:"The Social Network")の脚本を読んでいるので,映画を観るだけでは分からない点などを適当にメモしつつ書いていこうと思う.

映像と翻訳(字幕)はソーシャル・ネットワーク 【デラックス・コレクターズ・エディション】(2枚組) [DVD]を,元となる脚本は以下のpdfを使用している.

なお,この文章中で引用される文章はすべてthesocialnetwork_screenplay.pdfに依拠している.

pp. 1-22

MARK
I can row crew or invent a 25 dollar PC.
(P.2)

字幕ではPCの方にしか触れていないが,実際はここでマークがボート部の話を切り出している.その後の会話でエリカが「ボート部はステキ」などといきなりボート部について語っているが,実際にはマークの会話を受けてのことだった.


ERICA
The door guy, his name is Bobby. I did
not slept with the door guy, the door guy is a friend of mine. He’s a perfectly good class of people and what part of Long Island are you from--Wimbledon?
(P.7)

ドアマンの扱いにエリカが切れてマークの階級について触れるシーン.Long Islandはニューヨークの一部になっている島で,上流階級が多いからここで持ちだしたんだろう.Wimbledonも同様の使い方をしているようだ.


MARK’s fingers dance easily on the keyboard--like a Juilliard pianist warming up. The website he’s just called up gets loaded onto the screen.
Zuckonit.com
(P.9)

マークのblogのアドレス(名前)はZuckonit.comだったようだ.現在アクセスしようとすると,誰か別人のtwitterアカウントにリダイレクトされる.


MARK (V.O.) (CONT’D)
Billy Olson’s sitting here and had the
idea of putting some of these next to pictures of farm animals and have people vote on who’s hotter.
(P.11)

映画の中では,当初のfarm animalsのアイデアはビリー・オルソンのものだったようだ.その後マークがfarm animalsと比べるのではなく女学生同士を比べようと述べている.
しかし,この脚本の元になったfacebookや,facebook創立の話を書いたフェイスブック 若き天才の野望 (5億人をつなぐソーシャルネットワークはこう生まれた)を当たってみると,マークがfarm animalsを考えてビリーが女学生同士を比べるほうが面白いとコメントしたと書かれている.恐らく,映画ではマークが作ったということを強調したかったのだろう.


MARK (V.O.)
First up is Kirkland. They keep
everything open and allow indexes in their Apache configuration, so a little WGET magic is all that’s necessary to download the entire Kirkland facebook. Kids’ stuff.
(P.12)

wgetで顔写真をダウンロードしている.(画面にはwget -Aと表示されているので,この映画が日本で公開されて初期の頃に,一部界隈でこの映画のことを「劇場版wget -A」と呼ぶことがあった)


MARK (V.O.)
Next is Elliot. They’re also open but
with no indexes on Apache. I can run an empty search and it returns all of the images in the database in a single page. Then I can save the page and Mozilla will save all the images for me. Excellent. Moving right along.
(P.13)

ブラウザはMozilla


MARK (V.O.) (CONT’D) --definitely necessary to break out the
emacs and modify that perl script with--
(P.14)

エディタはEmacs,言語はPerl


MARK
No, I need the algorithm you use to rank
chess players.
(P.15)

facemashのアルゴリズムの元ネタは,チェスプレイヤーのランキングに用いられていたものだったようだ.


参考

映画「The Social Network」の脚本をNLTKで解析して遊んでみた - ぬいぐるみライフ(仮)


facebook

facebook


フェイスブック 若き天才の野望 (5億人をつなぐソーシャルネットワークはこう生まれた)

フェイスブック 若き天才の野望 (5億人をつなぐソーシャルネットワークはこう生まれた)

4clojureでClojureの勉強をする

4Clojureは,出題される問題を実際にコードを書いて解きながらClojureを勉強出来るサイト.競技プログラミングなどのCode Golfどう書く?.orgに近い感じのClojure版だ.
下のような感じでコードを書いて実行すると裏でテストが動いて,正解かどうか判定してくれる.
f:id:yag_ays:20120119002347p:image:w400
f:id:yag_ays:20120119002355p:image:w400
あと,他の人の書いたコードを読んだりコードをgithubで公開出来たりと,最近流行りのゲーミフィケーションっぽい感じで結構楽しい.

やり方

基本的にRegistrationして解いていくだけ.問題を解けば他人の解答例を見ることが出来るようになるのだが,表示される解答例は自分がフォローしているユーザのものだけになっている.そのため,あらかじめ他のユーザをフォローしておく必要がある. 取り敢えずは4clojure contributorの人を適当にフォローしておけばいいと思うが,中には凝った(変な)回答をしている人もいるので,いろんな種類の解答を確認ためにも複数人登録しておいたほうがいいと思う.

Elementaryを解いた

ということで,取り敢えずElementaryをひと通りやってみた.正直なところ初心者にとってはこれだけでもだいぶ大変だったのだが,基本的な関数の使い方やforのリスト内包,loopとrecurのテンプレっぽい問題も出てきてかなり頭が整理されたと思う.
User: yag_ays
f:id:yag_ays:20120119002407p:plain

ParEditのリファレンスまとめ&paredit-forwardのキーバンドの変更

Clojureの環境は前回整えたので(Clojure + Emacs環境のセッティング(MacOSX Lion 10.7) - やぐブロ),実際にClojureのチュートリアルや「プログラミングClojure」を参考に,Clojureのコードを書いて勉強している.言語自体の独特のカッコの多さや階層構造のせいでコードが上手く書くことが出来ないのは慣れの問題で,初心者がEmacsキーバインドを覚えるが如く体に染み込ませる他無いのだが,ParEditの独特な挙動で思い通りに書けなかったりするのは若干良くない気がする.ということで,取り敢えずClojureの勉強をしつつ,平行してParEditにも慣れていくことに.

参考

なお,emacs上でParEditのコマンドを確認するには,M-x describe-bindingsしてpareditのキーバインドを探せば良い.

キーバインディングの変更

あと,S式の単位で移動するparedit-forward(もしくはforward-sexp)がC-M-fに割り当てられており押しにくい感じだったので,バインディングを変更した.

(add-hook 'clojure-mode-hook
                '(lambda ()
                   (define-key clojure-mode-map
                      (kbd "C-i") 'paredit-forward)))

みたいな感じで書いて,C-iでforwardだけは出来るようにした.S式の単位で移動するコマンドは他にもbackwardであったりマークして移動したりという便利な機能があるのだが,取り敢えずはforwardさえ簡単に出来るようにしておけばなんとかなるかな.

(追記:やはりC-iはインデントの整形に取っておいたほうが良さそう)