MSRAの思い出

Microsoft Research Internship アルムナイ Advent Calendar 2020 9日目の記事です。僕は2016年夏、京都大学の修士課程2回生のときに北京のマイクロソフトリサーチ (MSRA) でインターンをしました。

以前マイクロソフトのブログに寄稿した短めの文章はこちら: MSR Intern Beijing(経験者)のご紹介(第57回)

自己紹介

大谷直樹と言います。Carnegie Mellon University, Language Technologies Instituteの博士課程に在学中で、自然言語処理が専門です。自然言語処理はコンピュータを使って人間の言葉 (=自然言語) を処理する技術の総称で、代表的な応用にGoogle翻訳のような機械翻訳やAlexaのような対話システムがあります。僕は人間が言葉を理解するために用いる暗黙的な知識に興味を持って研究しています。留学生活についてはお世話になっている船井情報科学振興財団の報告書に書いています。よかったらどうぞ。

昔から中華料理が好きで、次に中国語の音楽にハマり、中国語がちょっと話せます。妻は中国人です。

MSRAとは

Microsoft Research Asia (MSRA) は中国北京にある研究所で、MSのアジアでの最大の研究所です。市内の北西、中关村というIT企業が密集している地区にあって、近くには名門大学が多く集まっています。社屋は十数階建てのビル2つで、そのうち片方の数フロアが研究所に当てられています。

学生のインターンはたぶん100人以上いたと思います。ほとんどが大陸・香港・台湾の大学から来ていました。研究所フロアは研究員よりも圧倒的に学生のほうが多いので、大学のような雰囲気になっていました。

MSRAのNatural Language Computing (NLC) グループは自然言語処理の分野で世界をリードしています。特に強いのは質問応答、対話 (特に雑談系)、機械翻訳で、チャットボット「りんな」のベースである「小冰 (XiaoIce)」周辺の研究開発を行っていることで有名です。当時NLCグループには研究員が10人いて、それぞれが1~3人のインターンの面倒を見ている大規模なチームでした。

MSRAに行くまで

僕の当時のスペック (アプリケーション前/インターン前)

  • 国際会議 (査読あり): ショートペーパー1本 (ICDM 2015) / +ロングペーパー1本 (EMNLP 2016)
  • 国内会議 (査読なし): 1本 (人工知能学会全国大会 2015) / +1本 (言語処理学会年次大会 2016)
  • 英語: (TOEFL iBT) 88 / 98 [R:L:S:W=29:24:24:21] (この一年半前に受けたTOEICは910点だった気がする)
  • 中国語: HSK6級 – 学習歴5年くらい。旅行は問題なく、ちょっと日常会話できるレベル。

修士に入る頃から (大して英語が好きでもないのに) 漠然とアメリカへの博士留学に興味を持っていて、海外で研究活動をしてみたいと思っていました。特によく論文で目にするMSRAでのインターンに惹かれ、それを恥ずかしげもなく周りに漏らしていたところ、僕の卒論と初めての英語論文を助けてくださった馬場先生 (現在筑波大学) に2015年12月に開かれたMSRのAlumniイベントに招待していただき、そこでお話した阪大の荒瀬先生と当時MSRAアウトリーチ公野さんに背中を押していただく格好でCVと2段落程度のカバーレターを2015年1月末に送りました。資料は指導教員の黒橋先生とMSRAインターン経験者で現在富士通の森田さんにチェックしてもらいました。※僕は修士学生かつ1月末のアプライでしたが、数年前から通年の募集ではなくなり、基本的に博士課程の学生のみが対象になったそうです。

その後すぐにMSRAの研究者から連絡が届き、次の週にSkypeでインタビューをしてもらいました。インタビュー中ではこれまで行った研究を紹介したのに加えて、簡単な研究課題の解き方を口頭で答えたりもしました。(XXというリソースを使って、YYという処理をして、ZZというアルゴリズムを使うみたいな感じ。) 2週間後くらいにMSRAの人事からメールが届き、2016年夏にインターンを行うことが決まりました。

その後は自分のメインの研究プロジェクトの片手間にビザの申請や研究トピックの文献調査などをして過ごしました。5月にTOEFLの試験を受けて自分の英語力の低さに気づき、慌ててDMM英会話でオンラインレッスンを受けはじめました。出発前日までの2か月くらい、毎日30分。多少は口が鍛えられてよかったと思います。

MSRAでの研究

インターン中の仕事は結局論文や特許として世に出ることがなかったので詳しく話せませんが、ざっくり言うとりんなの発言をより人間っぽくする技術の改善に取り組みました。非日本語環境で研究するという当初の目的は痛いほど果たせました。が、実力不足だった感は否めません。もう一度行きたい…。

メンターはWei Wu (現在、美团に所属) という人で、若くて面倒見がいいお兄さんという感じでした。今でも旧正月のときとかにメールしています。グループのリーダーのMing Zhou (通称周老师) には滞在中にもいろいろ声をかけてもらって、インターン終了間際には忙しいスケジュールの合間を縫ってWeiと (+石渡くん+彼のメンター) と一緒に送別会をしてくれました。

Weiとは数日に一回対面でディスカッションをしたり、「3時のおやつタイム」 (リフレッシュメントコーナーに果物が出される) に会ったときに進捗を相談したりしました。Weiは当時品川オフィスと協力してりんなの研究開発も行っていたので、彼のチームの中国人学生に日本語の処理方法を教えたりもしました。

冒頭のアウトリーチブログのほうには書きませんでしたが、MSRAのインターン生は何だか全体的にギラギラしていて、競争するように研究していました。グループミーティングでも個々の言語現象よりはベンチマークでの精度がどうだとかいうディスカッションのほうが多かったです (スライドも表が多め)。近くの席のインターン生が割とキツめにメンターのフィードバックを受けていたのを覚えています。こういう成果主義な姿勢もMSRAをトップ研究機関に押し上げる要因の一つなんですかね。

中国人インターンとは昼・晩ごはんをよく一緒に食べました。あまりに他愛のない話をしすぎて何を話していたかまったく思い出せません。僕が今の奥さんの実家に遊びに行く前に、なぜか手土産としてもらったUFOキャッチャー産のテディベアはまだ家に置いてあります。

MSRAのインターンは海外志向の人が多く、僕と同じメンターについていた学生の一人いまカナダにいるみたいです。アメリカでもMSRAインターン出身の学生と出会うことが多くあり、Alumniネットワークの広さに驚かされます。

インターン同期で、昨日のAdvent Calendarの記事を書いた石渡くんとは日本の学会で出会って以来の知り合いで、同じNLCグループに所属していたこともあって滞在中は色々とお世話になりました。ホテルの管理人のおじさん (通称老板) がうっかり僕の部屋を用意し忘れたので最初の3日くらいは石渡くんと一つのベッドで寝ました。これは自己紹介時の鉄板ネタとして使えたので大変便利でした。

日本人インターンは7人くらい来ていました。 (僕が行ってすぐに帰国された人もいたのでちょっと記憶が曖昧。) なぜかみんな東京の人でした。特に石渡くん、日並さん、吉橋さん、平木さんとは一番インターン期間の被りが長かったのでご飯を一緒に食べたり部屋飲みをしたりして仲良くしていただきました (その後石渡氏・日並氏とはピッツバーグで再会)。平木さんがいい感じに紹介しているのでここでは割愛。ちなみに平木さんに関して言うと、リーダーシップがあって頼りがいのあるパイセンでした。東大のCS界隈で流行ってる言葉遣いなどを教えてもらいました。

僕がMSRAで得た収穫は次の4つにまとまると思います: (1) グループでスピーディーに研究を進めるための知見、 (2) 非母国語環境で何とかする根性、(3) ネットワーク、そして (4) 北京で過ごす最高の夏。間違いなく今の環境でも活きています。なんかよくある感じの結論になってしまった。

インターネットの遅さに定評がある某ホテル。何もしなくても勝手に部屋が埋まる物件を手にした老板は、一日中ずっと入り口近くのテーブルに陣取って動画を見ていた。
滞在先の近くにある食堂で、ただのうまいワンタンスープが高速で出てくる。滅茶苦茶お世話になりました。
ホテルから最寄りのバス停・地下鉄駅に向かう道。突き当りを曲がると到着。地下鉄はホームへの道のりが意味がわからない程長いので、よく使っていたのはバス。
バスを降りてから真っ直ぐ行くとオフィスに着く。広場的なところを通るのだけど、夜は木の枝が絶妙な感じで光を遮り段差をわかりにくくするので躓きやすい。同期の某氏はここで脚を血まみれにした。
研究所フロアから見たもう一つの社屋。渡り廊下を行ったところに食堂があって、そこでは給料から天引きされる形で支払いができる。2階にあるインドカレー屋と中華料理屋にはたぶん百万回くらい行った。

インターン希望の方にアドバイス

…を書きかけたのですが、今回のアドベントカレンダーがきっかけで、平木さんが書いていたアドバイス集を見つけました。研究力、コネ、目的意識、英語スキルが大事というのは僕も同意見です。ぜひ読んでみてください。以下補足。

  • コネ: 学会などで人に話しかけるのも大事ですが、常日頃から自分がやりたいと思っていることを周囲に漏らしておくといいと思います。いい出会いやチャンスが転がってきたりします。
  • コミュニケーション (日本語・英語): (1) とりあえず何かしゃべる、(2) それをクリアに伝える、という2ステップあります。まずは日本語で、ミスを恐れず何かいう気持ちを鍛えましょう (グループミーティングで発言するとか)。次に英語です。大きい声で正しいアクセントで話すクセとか、聞き取れなかったり単語を忘れたりしても何とかするワザを身につけると英語のコミュニケーションはだいぶ楽になります。僕はオンライン英会話で練習しましたが結構よかったです。言語交換サイトで無料で練習できるパートナーを探すという手もあります (でも相手の人が蒸発しがち)。
  • 中国語: 僕はあまり試したことがないんですけど、北京では英語はあまり通じないみたいです。中国語はいろんな場所で使えるので便利です。身につけるためには、やっぱり実際に使って練習することが必要です。僕は音読を繰り返した結果、四声がある程度無意識に使い分けられるようになりました。あとは京都大学で中国語話者の友達がいっぱいできたのもよかったですね。

気軽に質問してください

MSRAのことでも、留学のことでも、何か聞きたいことがあればできる限りで回答するので気軽にメールください。メールアドレスは僕のページ (http://naoki.ninja/) にあります。

最後に僕が最近ハマってる中国語の曲のリンク貼っときます。中国、失恋とか後悔とかネガティブな内容の曲が多いところが個人的に気に入ってます。

昨日石渡くんが紹介していた映画「アメリカン・ドリーム・イン・チャイナ」(中国合伙人) 僕もめっちゃ好きです。罗大佑という神が作った曲『光阴的故事』のカバーが主題歌なんですが、これが結構良いのでぜひ聴いてください。チャイニーズポップス、いい曲いっぱいあるので語りたい。誰か~。

過ぎてみれば早いもので、もう来週からLTIのオリエンテーション (+adviser決め) が始まる。

先週はICC (international C?? center) が提供するLanguage Bootcampに参加した。13人全員がアジア人で、しかも9人が日本人という、ある意味わかりやすい構成だったが、皆とても意欲にあふれていて良かった。今回のBootcampはICCが一年通して提供しているコースを一週間に凝縮したもので、話す・書く技能だけではなく (主にメンタルに関して) 健康的な生活を送るためのTipsを学ぶことができた。一番役に立ったのはメールの書き方講座で、一番目からウロコだったのは留学生は発音よりも早く話し過ぎたり、間を置かないせいで聞き取ってもらえない事が多い、ということだった。

前期が終わったところでラップトップのハードディスクが死んだ。その前後で自転車を盗られる、USBを失くす、SDカードを (物理的に) 壊す、など散々な目にあった。卒論が国際会議に通った喜びでなんとか平静を保っている。

修士課程に入学した。いきなり体調を崩して1つも講義に出なかったのが第一週のハイライト。

最近論文を書いたので、学んだことをまとめておく:

  • 比較手法の実験は早い段階から行っておく
  • 何が効いたのか、何が効かなかったのかを説明する
  • こういう敵がいました、みんな苦しめられています、そこで私たちはこういう武器でこのように戦います、エイッ(簡単そうに倒す)というのが1つのわかりやすい流れ
  • スペルチェックする
  • レビューを受けて再提出する前に、訂正した箇所は何度も見直すこと
  • 英語ではtextbfではなくtextitを使う
  • 表のキャプションやカラム名は見落としがち

卒論の執筆と提出が終わった。

  • 研究はソフトウェア開発ではない
    • ソフトウェア開発気味なところも分野によってはあるのかもしれないが
    • 「学び」が無くてはいけない
    • 研究の貢献が言えないといけない
  • うまくいかないのが基本
    • 何にでも適用できるスーパーな手法はたぶんできない
    • どういう前提条件があるときにうまくいくか、がわかれば上出来

午前中、CourseraのMining of Massive Datasetsを進める。

  • 一回一回のボリュームが多すぎてついていけない…。
  • 今回は輪読で扱ったFinding Similar Itemsだったが、逆に聞き流してしまってあまり勉強にならない。Quizは簡単に感じた。
  • Finding Frequent Items?のあたりは昨年度の講義で勉強したところだったが、A-Prioriアルゴリズムで必要なメモリ量の計算方法がわからず、Quiz解けず。

午後はWebクローラ。

  • IPアドレスResolverのUnitTestが動くようにした。
  • 設定管理モジュールもなんとかしたいが、複雑に絡み合っていて解きほぐせない。他人が書いたコードは一度読んでも時間を空ければすぐに忘れてしまう。
  • DNS Lookupのモジュールは結局adnsで行くべきか、dnspythonで行くべきかわからない。前はdnspythonのほうが早い感じだったが、GNU adnsの力を借りたほうが早いのが自然な気がする。わからん。