私とNLPとChainer

この記事はねおりんアドベントカレンダーの20日目のポエムです。
昨日はるーしっど∞さんの【cluster】クラスターアーカイブを同時視聴してみた話でした。
私はVRとかに詳しくないのですが、clusterのアーカイブ機能は周りの人たちが面白い試みと話題にしていたのは覚えてます。
終わるという話も聞いて、実際に利用していたユーザーの話が流れてくるのはいい話って気持ちです。
終わるといえば、今日の話も終わる話です。

ざっくりいうと、研究で愛用していたツールの開発が止まった話です。

私について

はじめまして、明太子熊(@mentaiko_guma)です。
ねおりんさんとは、高校時代の友人経由でつながって以来、年に数回お会いする関係です。
その高校時代の友人であるざわは、明日のアドベントカレンダーの担当になっています。何か作るんだと思います。
このアドベントカレンダーには毎年参加しているのですが、今年は若干毛色が異なっていて面白く読んでいます。

私は東京なんとか大学で自然言語処理をしてる博士課程学生です。
暇なときに音楽を作ったり言語学に関する動画を作ったりしてました。
最近ショックだったことは留学生に趣味を尋ねられて即答できなかったことです。
よろしくお願いします。

NLPについて

私は自然言語処理(Natural Language Processing: NLP)という分野で研究をしています。
今日の話には直接関係ないのですが、知らない方が多いと思うので少しだけご紹介します。

NLPはその名の通り、自然言語を計算機でなんか処理するという分野です。
分かりやすい例だと、siriやりんなのようなチャットボットの裏側にはNLPの技術が使われています。
他にも、マシュマロのような質問サービスで不快な投稿を自動検出したり、日本語の入力に欠かせないかな漢字変換を最適化したりと、地味ながら重要な技術を支えている研究分野です。

Chainerについて

ディープラーニングという言葉をご存じでしょうか。
あるいはニューラルネットワークという言葉でも構いません。
もちろん知ってる必要はなくて、ただ、それらがイマドキのNLP(私の研究)をやるにあたって欠かせない技術であることを10分ほど頭に引っ掛けておいてください。

世の中に存在するあらゆる技術は、ゼロから作ると大変な時間を要するため、ある程度ツール化されています。
例えばゲーム制作などであればUnity、3Dモデリングであればblender、音楽制作であればcubaseなどはイメージしやすいツールだと思います。
Chainerはディープラーニングという技術を用いて研究や開発をするために作られた日本製のツールです。
ライブラリやソフトウェア、フレームワークなどというのが正しいと思いますが、今回はツールと呼ぶことにします。

ディープラーニングのためのツールは、ほかにもTensorFlowやPyTorchなどがあり、それぞれがユーザーを取り合っている群雄割拠な状態です。
ChainerはPFNという会社がリリースしており、規模として決して大きくはないながらも、その使いやすさが評判で多くの研究者に愛されてきました。

私も修士でNLPの研究に踏み入れて以来、さまざまな研究をChainerの助けを借りて進めてきたのですが、

まあ、要は開発が止まったわけです。

これについて、多くの知り合いたちは「ついに…」と反応していて、まあ何となくみんな予感してたけど、改めて宣言されると衝撃があるなというところです。
ちなみにこれはちょうど二週間くらい前の話で、まだ自分の中での衝撃が収まりきっていないので、こうしてポエムをしたためるに至ったわけです。

私とNLPとChainer

私はだいたい三年前、修士課程に入学してからNLPに本格的に取り組み始めました。
イマドキの研究に取り組むにあたって、Chainer、Torch、PyTorch、TensorFlow、Theano、Dynet、Kerasなどのツールのうち、どれか一つを選んで勉強する必要がありました。
ちなみに、これらは全部Chainerと同じ、ディープラーニングを使うためのツールです。
当時の研究室では決まってこれを使う、という流れはできておらず、各々好きなツールを使っていた気がします。
ある人に聞けばTheanoを推されたり、またある人に聞けばDynetはいいぞと言われたり。

2017年当時はよくわかっていなかったので今でも認識が間違ってるかもしれませんが、当時は書きやすさでいえばChainer、計算速度を取るならTensorFlow、楽をしたいならKerasというイメージがあって、PyTorchは中途半端というイメージでした。
そんな中で、国産ツールで使い方も直感的だったという理由でChainerを選び、勉強することにしました。
Chainerによる実践深層学習という本が日本語で出ていたのも大きな決め手だったと思います。
javaを描いていたころにDeepLearning4jという死ぬほど使いづらいツールを一瞬触って挫折したこともあり、Chainerの使いやすさには感心した記憶があります。
その後、インターンなどでChainerとゆかりのある人々とも知り合いになり、Chainer愛を深めていくことになります。

私自身は全く詳しい部類には入りませんが、先輩やインターン先の人たちにはChainerの中身をしっかり知ってる人が多かったので、そうした人たちに気軽に相談できたのもChainerを使い続けた理由です。
インターンのつながりで、Chainerユーザーの集まりであるミートアップに参加させてもらったり、シールをもらってぺたぺた張ったりしてたのもいい思い出です。

2018年になると、だいぶChainerを使った研究にも慣れて、様々なモデルを作って動かすようになりました。
所属していた研究室内でもChainerを使っている人が半分くらいになっていて、局所的に盛り上がってる雰囲気を醸していました。
同時に、時代はTensorFlowか…?という流れも感じるようになってきます。
書きづらさが短所だったTensorFlowに、楽に書けるKerasが本格的に組み込まれるという話を聞いて、書きやすさだけで選んでいたChainerを使うメリットがだんだんと薄れていくのを感じました。
速くて書きやすいなら、TensorFlowを使った方が長期的に見ていいのではないか、という判断です。
実際にTensorFlowと比べてChainerで書いたモデルが二度見するくらい遅いということも経験を通して痛感し、乗り換えを考え始めました。

同時に、PyTorchもバージョン0.4でかなりTensor周りが書きやすくなって、バージョン1.0に向けてユーザー数も加速しているように感じました。
PyTorchも計算速度が速くなっていた記憶があって、書きやすくて速いツールへと進化していくなあと眺めていました。

Chainerはとても書きやすいツールです。
一方で実行速度の遅さや世界的な目で見た時のユーザー数の少なさには、どこか取り残されているような感覚を持っていました。
研究会などで外国人と話してるとき、Chainerを使っているというと「ああ、日本人しか使って無いやつね」という反応をされることも少なくなかったです。

組織として研究できている世界的大企業がChainerの味方に付かなかったことにも、寂しさを感じました。
TensorFlowはGoogle、PyTorchはFacebookのリサーチチームが主として使っていて、研究結果をこのツールを使って実装して公開していました。
体力のある研究グループによって発表された影響力の大きい研究内容のプログラムは、実際にTensorFlowやPyTorchで実装されて誰でも動かせるように公開されています。
こうした研究成果を動かすために使われているツールというのは、やはり世界的に見ても影響力を持つことになります。
しかし、Chainerで実装されたこうした研究は多くはありませんでした。

乗り換えについてはいろいろ悩んだのですが、結局、修士論文を書き終わるまでChainerを使い続けることになりました。
もちろんChainerが好きだからずっと使ってたのですが、研究が忙しくなると新しいツールに移動するための勉強時間が惜しく感じてしまい、なかなか乗り換えられなかったというのも理由のひとつです。
後悔はしていませんが、完全に取り残されたなという自覚はありました。
なんとなく終わりの匂いを感じながらも、今年、博士課程に進学してからもChainerを使い続けていました。

私は博士課程で研究室を移動しているのですが、新しい環境ではChainerを使ってる人間が自分一人しかいなくて、ほかは全員PyTorchを使っているという状態でした。
PyTorchは本当に勢いがすごくて、今やChainerと同じくらい書きやすいうえに結構速いと思っていて、みんなPyTorchに流れるのもわかるなあという気持ちでいっぱいです。

博士課程に入ってからChainerを使って取り組んでいた一つ目の研究が終わるころ、改めて「あれ、Chainer使ってる人自分しかいないな?」と寂しい気持ちになりました。
その気持ちをTwitterに載せたところ、同じような気持ちになっていそうな人にシェアされていたので、みんなPyTorchやTensofFlowの勢いの凄まじさを感じているんだなと思いました。

私はChainerの内部事情については全く知らないのですが、偶然にもこのツイートの四日後に最初に紹介したChainer開発終了のお知らせがリリースされました。
正しくはメンテナンスフェーズに移行するとのことで、向こう一年くらいはまともに使えるようにメンテナンスされるのではないかと思います。

Chainer好きだし、メンテナンスされ続けるなら使い続けよう、というわけにはいきません。
この期間は別ツールへの移行期間なので、私も何か別のツールに移動しなければならないのです。

結局、Chainerを手掛けていた会社、PFNの流れに沿ってPyTorchに移動しようと思います。
PyTorchはもともとChainerがベースになってることもあり、非常になじみのある文法で書くことができます。
丁度自分の研究もいい区切りなので、次からはPyTorchでゴリゴリ書いていきます。

まさにこの記事を書いている今日、次の研究に使う一つ目のプログラムをPyTorchで作り終えたのですが、書きやすかったです。

Chainerに花束を

結果としてChainerは過去のものへと移り行く存在になってしまいましたが、私がニューラルネットワークを用いたNLPを学び、研究する上で欠かせない存在でした。
実際にChainerを使って研究していた内容は、大きな国際学会に採択され、今年の夏に発表することもできました。

Chainerそのものに対してコミットできたことは何もないので偉そうなことは言えませんが、Chainerユーザーの一人であってよかったと思っています。
ChainerはPyTorchに合流することになると思うので、今後は感謝の意を込めてPyTorchを推していこうと思います。

P.S. please if you get a chance put some flowers on Chainers grave in your memory.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です