Microsoft Research@シアトルでのインターンから帰ってきました。コネ・社会経験ナシの情報系大学院生が、腕一本で「世界で一番アツい会社」に就職するまでの記録
28 11月
先日、国内雑誌に投稿していた(通算)4本目のジャーナルの採録が決まった。これで学位取得のための業績の要件を(十分すぎるほど)満たしていることになり、あとは博士論文を書いて公聴会を突破すれば学位が授与される。一時はどうなることかと思ったけど、ちゃんと3年で終わってよかった(MSRにインターンに行かなければ短縮修了できたかもしれない、と後から先生に言われた。長期インターンは、そこに確実に就職するのではない限り、修士1年もしくは博士2年までに行っておくことをお勧めします)。
博士論文のタイトルは”Modeling and Selection of Context for Better Synonym Acquisition”(類義語獲得の性能向上のための文脈のモデル化と選択)で、博士論文にしてはかなり具体的なタイトルなのだけど、やってきたことは「分布類似度」を軸にして、そのための共起のモデリング、文脈の選択・拡張、機械学習の応用、というトピックを扱っていて、読むと分布類似度に関するここ10年ぐらいの関連技術が分かるチュートリアル的内容にもなっている(と期待している)。
専攻内の下読み開始があと2週間ほどで始まるので、主査・副査の先生方に渡す仮綴じの論文をあと1週間で仕上げる必要がある。といっても、内容は(大きな声では言えないが)これまで発表した論文のつぎはぎなので、新しく手法を提案するということはない。というか、博士論文に書いてあることは、必ず外部の雑誌・学会等で採録された裏付けがないと書けないので、新しいことをしようにもできない。最近また色々と新しい手法を勉強したりで、本当は色々と補強したりやりたいことがあるのだけど。
そういえばACL-IJCNLP 2009のStudent Research WorkshopのCall For Papersがいつの間にか出てた。今年のACL 2008で1回発表しているのでもう投稿はできないけど、前の発表が好評だったのか知らないが、今回はプログラム委員をやらせてもらうことになった。要するに査読をするだけなんだけど、他はそうそうたる面々なので身の引き締まる思いである。前も書いたけど、発表に対して詳細にコメントをもらえるわ、交通費はほぼ全額出るわ(ただし小切手でw)、他の発表者たちと交流する機会はたくさんあるわで、非常に良いワークショップだったので、まだ学生のひとは特権を利用してどんどん発表してみると良いと思う。
3 11月
ついに出ましたね。最強のメモツールEvernoteのAPI。
けっこう前から2008年夏にAPIリリース予定という情報はあったのだけど、夏を過ぎてもなかなか出ないのでEvernoteはオーストラリアで開発されてるんじゃないかと悶々としながら待ってた甲斐があった。
Evernoteいいですよ
Evernoteがどんなメモツールかについては色々なところで語られているのでここでは割愛するけど、自分がここ半年間のうち試した色々なツールの中でも、自分の知的生産作業に対して最も大きなインパクトがあったツールの一つだと思う。MSRでインターンしてた頃から使ってたのだけど、使用感とか、同期の具合とか、インターフェースとかが的確にツボを突いているのでひどく気に入ってしまい、今では、論文管理、ブックマーク、Webクリッピング、ミーティングや講演・学会発表メモ、読書メモ、チェックリスト(レバレッジ本田直之さんの「習慣チェックリスト」に近い)、日記などを含めて全てまとめてEvernote上で管理するようになってしまった。”Remember everything”とはよく言ったものである。
そんな感じで調子こいてメモを作成しまくっていたので、今では1200件以上のメモが溜まってしまったわけで、これだけ情報がたまるとこのツールを自分でハックしたいと思うのが自然な流れだと思う。Evernoteに溜まってるメモ自体が自分の「知的生産ログ」みたいなものなので、自分の知ってる自然言語処理技術使っていろいろ遊んだらきっと楽しくさらに実用的に決まってる。例えばEvernoteではタグ付けてメモを管理できるが、メモの内容(や欲を言えばそのリンク先まで含めた内容)を基にして自動クラスタリングして可視化できたら便利に間違いない。曖昧+関連検索などを絡めてキーワード検索をもっと賢くしても良いと思う。今のWindowsクライアントに付いている検索ボックスは動作が怪しく、せめて日本語をちゃんと扱えるようにもしたい。などなど。
Evernoteには一応メモのエクスポートが付いてるが、内容ダンプみたいなものでXMLをせっせとパースしなければいけないし、これをハックするのは何かが違う気がする。そこでAPIを使ってスマートに直接サーバーのDBに問い合わせできれば嬉しい。
APIを使うまで
API情報はだいたいこのページにあるのでひとまず読んでみましょう。
Evernote API Overview | Evernote Corporation
http://evernote.com/about/developer/api/
API keyの発行は、よくAPIサービスにありがちなように、申請すると自動で発行してくれるようなものではなくて、フォームから直接サポートへ問い合わせる必要がある。どちらかというと、ユーザーに一般公開しているというよりは、サードパーティーにクライアント作成用のSDKを配布しているノリに近い。上のページのリンクをたどっていくとこのフォームにたどり着く。リンクミスではない。
ここに「すごく・・・API Key欲しいです・・・」の旨を書いて問い合わせ。1営業日ぐらいでメールで返事が来る。このあたりのプロセスは既に経験した方がいらっしゃるようだけど、どうやら簡単にはAPI Keyを発行してくれない様子。自分の場合、最終的には
- 名前
- 使用目的
- 組織名(ユーザーがアプリを認証するときに表示される)
- 必要なアクセス権限(書き込み/読み込み/両方)
を聞かれてそれに丁寧に答えたらそのさらに1営業日後ぐらいOKがもらえ、API-KeyとAPIを試せるSandboxのURLをメールで連絡してもえる。このあたりの情報は最初から問い合わせフォームに書いておけば一発で済むかもしれない。
APIからのアクセスはSandbox上で全て行い、そこで自作アプリを十分に試して、もうOKなら向こうに伝えれば本システムのほうでもAPI-Keyが使えるようにアクティベートしてもらえるとのこと。Sandboxのほうは 画像認識システムが別になっていて、本システムよりも遅いかもしれない、らしい。Sandbox上にWebからアクセスしてアカウントを登録すればAPIを使う準備はOK。今ではサーバーもちゃんと動いてるようだ。
APIを使ってみる
EvernoteのAPI は 「Thrift」 によるRPCで実装されてるらしい。Thriftはこれまで使ったことなかったけどこれは面白そうなフレームワークだ。Thrift自体についての解説はnaoyaさんのこのあたり↓が分かりやすくて(というか「分かった気になって」)良かった。Thrift使うのが初めての場合一度目を通しておくとよい。
Kansai.pm#10 での発表資料 (Thrift について)
http://d.hatena.ne.jp/naoya/20080810/1218372988
あとは、APIのメインページからAPIのドキュメント、ライブラリ、サンプルなどをダウンロードしてくればすぐに使える。自分が動かしたのはsample/rubyに入ってるサンプルで、ちょっと面倒な(といってもずいぶんとラップされて簡単になってる) Thrift の認証プロセスが既に書いてあって、そこからノートのタイトルと内容を入力させてサーバー上にノートを新規作成するサンプルが続く。サンプルは、変数名やそもそもメソッド名などがちゃんとしてるのでコメント無くても何やってるか完全に分かるし、ここからはThriftのRPCをRuby(もしくはその他の言語)にマップしてやれば簡単に問い合わせることができる。例えば、今現在のnotebookのメモのタイトルを列挙するコードをこんな感じに書いてみた。
filter = Evernote::EDAM::NoteStore::NoteFilter.new()
filter.order = Evernote::EDAM::Type::NoteSortOrder::UPDATED
filter.ascending = true
notes = noteStore.findNotes(authToken, filter, 0, 100)
notes.notes.each{|note|
puts note.title
}
APIのリファレンスはこちら。試す前にみたときに「これはどの言語のリファレンス?」とか思ったのだが、Thrift使うとインターフェースが統一されるからこういう風に言語非依存なドキュメントが半自動生成できるんだろう。こりゃ便利そうだ。
Evernote API: All Thrift declarations
http://www.evernote.com/about/developer/api/ref/
API使っていて詰まったらフォーラムをチェックするとよさげ。
ここで公開してるAPIは基本的にWindows/Mac OS/iPhone/etc. で動いてるEvernoteクライアントが裏で叩いてるのと同じもののようなので、やる気と根気さえあればこのクライアント達を超えるような使いやすいツールを作ることも可能。こうなるとEvernoteというのは単なるメモツールなんかじゃなくて、ちょっと賢いOCRエンジンの付随したオンライン・データベースなんじゃないかと思えてきて、実際そうなんだけど、Google Baseみたいに何ができるか分かんないような形で始めるよりも、身近なメモツールとして始めて実は何でも共有出来ますよというのは上手い攻め方かもと思った。
まだまだ日本語の情報が少ないけど、APIの登場できっとこれから伸びるツールだと思う。