読者です 読者をやめる 読者になる 読者になる

それが僕には面白そうだったから──中谷秀洋

サイボウズのエンジニアを紹介するインタビューシリーズの第三回。今回は知る人ぞ知る、中谷秀洋。大学院まで進んで数学を修めたものの研究者になるでもなく、気がついたらサイボウズ・ラボに腰を落ち着けることに。ただ一貫してるのは「面白そう」。

ホワイトボードを使って議論する、サイボウズ・ラボの中谷秀洋
中谷秀洋(Shuyo Nakatani)
2007年、サイボウズ・ラボ株式会社に入社。 小学校5年生のときに懸賞で当選し「TRS-80」を入手して以来、ゲームを動機にプログラミングにのめり込む。40代を迎えた今もゲーム好きは相変わらずで、家族からは「ゲームは1日30分」と言われているとか。gihyo.jpにて「機械学習 はじめよう」を連載中。

Apache Foundationからリリースされている全文検索システム「Solr」には、言語判定ライブラリとして「Cybozu language-detection library」が含まれている。これを開発したのが、サイボウズ・ラボに所属する中谷だ。

あるとき中谷は、山本泰宇(※1)から次のような相談を持ちかけられた。「ガルーンの全文検索で言語を選べるようにしたい。とりあえず10言語をサポートする。ついては、言語を判定するライブラリを探してくれないか。もし良いのがなければ作ってほしい。ただし、作るときはオープンソースでよろしく」。

さっそく調べてみたところ、ガルーンの用途に合ったものが見つからず、中谷は自ら作ることを決断する。

とりあえず最初のプロトタイプは、Rubyで一週間ぐらいで作りました。これでも90パーセント以上の精度は出たので、あ、これはイケる、と。もし作るならJavaでという指定だったので、そこでJavaに切り替えて本格的に作り始めました。メインのプログラム自体はたいして大きくないので、2、3週間ぐらいでできてしまいました。でも、そこからデータを集めるのに2、3カ月はかかりましたね。

Cybozu language-detection libraryでは、機械学習(※2)という手法を用いている。

機械学習では、モデルをどうやって作るかが重要です。モデルのところに、自分の知識とか前提とか、欲しい答えとか、全部そういうものが反映されてしまうからです。モデルをどう設計するかというところで、データや対象ドメインに対する知識がものすごく要求されることになります。これがないと、どんなに最新の複雑な手法を知っていても、まったくいい結果が出ないことになります。

そのため、この開発プロジェクトでもっとも苦労したのは「自分が対象言語を理解すること」だったと中谷は言う。アラビア語を扱うのに、自分自身がアラビア語についてまったく知らないわけにはいかないからだ。

モデルに「食べさせる」トレーニングデータには、Wikipediaを利用しています。Wikipedia自体は約280言語あるので、口だけなら「280言語対応」とか、言おうと思えば言えるんです。でも、モデルの動作を検証するためのテストデータを用意するのが難しい。テストデータは、ニュースサイトからRSSで取得しているのですが、たとえばウルドゥー語のニュースサイトとか、探すだけで大変で……。「これはニュースサイトかな?」「RSSはどこにあるんだろう?」みたいな感じで。僕の知らない言語に関しては、そもそもニュースサイトを探すということができない。結局、テストデータが集められたのが、当初が49で、その後に4つ増えて53。ということで、現在のCybozu language-detection-libraryでは、53言語サポートということになっています。

勉強会で考える中谷
考えるポーズにも、どこか「先生」の雰囲気がただようのは、塾講師の経験があるからなのか、はたまた生来のものなのか。

中谷がサイボウズ・ラボに応募したきっかけは、やりたいことをやりたかったから。

大学院卒業後に塾講師として就職したところで、ひょんなことから社内システムの構築を任され、やがて本格的にやるらならと、大手メーカーからスピンアウトしたベンチャー企業でCMSの開発に携わることになった。

CMSを作っていると、カスタマイズして欲しいという話に必ずなるんですね。CMSはデータを集めるところなので、どうしたって、そのデータの入り口と出口でいろんなものがほしくなる。で、いかに基本機能を損なわずに、かつ応用性の高いカスタマイズを、しかも、できるだけソースコードを一本化して行うかが重要になります。そこに知恵を使うというのは、それはそれで楽しかったのですが、やはりそれはあまり正解じゃないだろう、と。カスタマイズするにしても、中で作り込むのではなく、できるだけ疎結合でやるべきで、そういうものをURIを媒介にして作れるんじゃないか、というアイデアを持っていました。

本業をやりながらだとそのアイデアを実現する時間がなかなか取れない……そんなジレンマに悩んでいたとき、偶然、サイボウズ・ラボの募集広告を目にすることになる。

数学科を選んだのも、大学院へ進んだのも、就職先に地元の塾を選んだのも、どれも「何となく」だったという彼が、初めて自分の意志でそうしたいと思って起こした行動を、どこかで神様は見ていたのかもしれない。本人曰く「運良く」サイボウズ・ラボに入社することになり、アイデアを実現することができた。それが、「外付けWebフレームワーク『flowr』」である。

これは、アイデアがメインで、実際に作るとこんな感じですよ、という実装の一例ですね。ただ社内では、サイボウズOfficeのタイムカードという機能にワークフローを付けるという形で、つい先日まで実際に使われていました。サイボウズOfficeのほうには、ブログパーツのようなJavaScriptを1つ設置するだけで、外部的にワークフローの機能を実現できるというものです。こういうのは、一部ではウケたんですけど、一部にしかウケなかった……。残念ながら(笑)。

社内の機械学習勉強会の様子
毎週水曜日に行われている社内の機械学習勉強会は、中谷の発案で始まった。

別にコンピュータに限らず、他の人がやっていて面白そうなものは自分もやりたくなるんです。編み物をやっているのを見れば、「あ、面白そう」と思って編み物をやってみたくなりますし。だから、編み物も一応できますけど。高校のときは文芸部にいたのですが、それも本とか読んでたら面白そうだから自分でも書いてみたい、と。で、小説とか漫画とか書いてみたり。twitterのアイコンも、僕が自分で描いた漫画のキャラクターです。コンピュータも、そういうことのひとつですね。その考え方自体が特別っていうか、普通じゃないと言われればそうかもしれませんが、僕の中ではコンピュータが特別というわけではないんですよ。機械学習もそう。何でもやってみたがる人です。

ちなみに、同じくサイボウズ・ラボに所属する光成滋生(※3)は、同じ大学の同じ研究室の出身である。中谷の方が少し先輩にあたるが、机を並べていた時期がある。

同じ研究室で、時期的にもかぶっていたのですが、実は、サイボウズ・ラボで顔を合わせるまでお互いがお互いを知らなかったんです(笑)。

いろんなことに興味をいだく一方、それ以外のことはあまり目に入らないということか。そんな二人が揃ってサイボウズ・ラボに所属することになろうとは何たる偶然。毎週水曜日のお昼に、機械学習勉強会で楽しそうに議論する二人の姿を見るにつけ、人生における進路選択の妙を思わずにはいられない。(編集部)


※1:サイボウズ株式会社のリードプログラマ兼アーキテクト。「『文芸』プログラマ──山本泰宇」を参照。
※2:「風が吹けばジュンク堂で『機械学習の学習』」を参照。
※3:「暗号の世界最速実装を目指す ── 光成滋生」を参照。