Nextremer Guerrilla Lab 2017 に参加しました!

Nextremer Guerrilla Lab 2017 に参加しました!

インターン生の前田です。この度、高知AIラボで約1ヶ月の間インターンに参加させて頂いたのでそのレポートを書きたいと思います。

参加したきっかけ

僕は現在大学4年生で、この夏休みはインターンもやりたいし、自分の研究も進めたいという気持ちがあり、そのような条件にあった機械学習系のインターンを探していました。

募集要項を読みつつ、なかなか条件に合うものが見つからず悩んでいた折に、Nextremerのインターン募集を見つけました。

このインターンで僕がありがたいと思ったのは、インターン期間を柔軟に設定できること、募集締め切りが遅めに設定されていることでした。

また、東京オフィス高知オフィス(高知AIラボ)の2つの勤務地を選べるのが最大の特徴です。

東京はわかりますが、最新の機械学習なのに高知?と最初は疑問に思いました。

しかし、東京に行く機会と高知に行く機会を考えると、高知に行く方が圧倒的に貴重な経験になるなと考え、高知を勤務地に選びました。

また東京オフィスのインターンが完全に自由にテーマ設定をする形式で合ったのに対し、高知はメンターの方と相談しながらテーマを決めるという形式だったので、まだまだスキル的に未熟だけど成長したい!と考えていた僕にとっては高知インターンのほうが合ってそうというのも理由の一つです。

インターンことはじめ

大阪から飛行機で1時間弱もかからずに到着、案外早かったです。

社員の方に車で案内していただき、オフィスに到着しました。

とても綺麗なオフィスで、ドリンク設備などもあり、すごくいい環境です!

はじめはメンターの方々と他のインターン生との顔合わせ・テーマ決めがありました。

インターン生で集合写真も撮ってもらいました。左から、小松くん、野田くん、僕です。メンバー全員今日からのインターンで、高知オフィスのAIチームの中に加わっての参加となります。

甲冑のサムライがかっこいいですね。

高知でのインターン生活、スタートです!

高知での生活について

ここで、インターン中の高知オフィス及び高知での生活を簡単にまとめたいと思います。今後、インターンに来ようと思う方々の参考になれば幸いです。

一日の平均的なスケジュールは以下のような感じです。インターン生によって出勤の時間もまばらなので、あくまで参考ということでお願いします。

  • 8:30 バスに乗って出勤し、slackのタイムシートを打つ。
  • 8:30-9:00 その日の目標を決めてslackのチャンネルにメモする
  • 9:00-12:00 論文を読んだり、文献を調べたり集中力を要するタスクをする。
  • 12:00-13:00 昼休憩 (休憩は自由に1時間分取ることができます)
  • 13:00-18:00 コーディング(金曜日はメンターの方々に混じってミーティングに参加します)
  • 18:00-18:10 その日取り組んだ内容をslackに記録してから退勤
デスク周りの写真。観葉植物が集中力を高めてくれます。

毎週金曜日のミーティングではチーム内で進んでいる仕事の内容の情報共有が行われます。会社がどのような仕事に取り組んでいるのか、幅広く聞くことができてとてもおもしろかったです。

コーディングなどの作業は基本は自力で進めていきますが、詰まってしまったときにslackのチャンネルで疑問を投げるとメンターの方々が丁寧にアドバイスを下さいました。slackで質問するという形式は気軽に尋ねやすく、ありがたいシステムでした。

slackのチャンネルに疑問を投げると東京のインターン生の方が返信をくださる場面などもあり、非常に助かりました。高知のインターン生同士でもテーマが近いということもあり、お互い助け合ったりすることが多かったです。個別のテーマではありましたが、チームの一員として動いているという認識を強く持ちました。

またインターン生同士でslackのチャンネルを見ることができたので、取り組んでいるテーマや進捗状況などが伝わってきて自分の作業にもすごく刺激になりました。

作業で目が疲れてしまったときは、休憩がてら外を散歩したりしていました。周りが自然に囲まれてるというのは高知オフィスの一押しポイントだと思います。

オフィスから少し歩いたところの風景。心が癒やされます。

土日は完全にオフ日です。せっかくの機会なので、観光に行ったりもしました。

高知城です。城内が当時のままの形で保存されていて、素晴らしかったです。

インターンで取り組んだ内容

今回のインターンで僕が取り組みたいと思っていたテーマのキーワードとしては

  • 自然言語処理
  • 深層学習

の2つがありましたが、これでは幅広すぎて非常に漠然としていたので、メンターの方と相談して以下のように決まりました。

  • seq2seqモデルを利用した対話生成モデルにおけるdrop outの有効性の検証
  • 転移学習を利用したキャラクター風の対話モデルの作成

深層学習に興味は持ってて言葉だけ聞いたことはあるけど、全然詳しくは知らないというテーマだったので興味津々です!

対話生成とは

対話生成とは何らかの発話に対して応答を生成するというタスクです。今回は発話に対して適切な(文法的な誤りがなく発話に即した内容の)応答を返すということが目標となります。

seq2seqモデル

seq2seqモデルというのはRNN(リカレントニューラルネットワーク)の一種で機械翻訳や対話生成に利用されています。今回はTwitterのコーパスを利用して学習する実装済みのベースモデルを基盤にして、以下の2種類のdrop outの有効性を確かめるというテーマでした。

  • Feed forward dropout (RNN層の出力部分にdrop outをかける)
  • Variational drop out [1]

drop outというのはニューラルネットの重みの一部をゼロにしてしまう操作です。重みに対応するユニットを無視することに相当するので、一度の学習における学習の程度が下がる代わりに、正則化の効果があり過学習を防ぐことができます。

drop out率を少しづつ変更し、効果のある学習結果を探します。

drop outを適用した途中の学習結果です。drop out率0.3が無いのは途中で計算が落ちてしまったためです。グラフを見ると、drop out率0.2のモデルがベースモデルよりもロスが下がりました。drop outをかけたモデルについてはやはり学習に大幅な時間がかかっていました。

drop outの有効性についての結果をまとめます。

  • Feed forward dropoutは効果がみられた。
  • Variational dropoutのはあまり効果がないようだった。
  • dropout率が大きくなると、過度に正則化がかかって学習が進まない。

転移学習時はこちらのdropout率0.2のモデルを利用することに決めました。

転移学習

転移学習というのは、簡単にいうとある領域での学習結果を別の領域での学習に利用するという手法です。

例えば、大量のデータで学習させた結果を、少ないデータしかないところに転用して精度をあげたりすることができます。

今回は転移学習を利用してあるキャラクター風の文章を生成するモデルの作成に取り組みました。
先のseq2seqモデルをTwitterのコーパスで事前学習したモデルを利用して、用意した対象キャラクターの対話コーパスで学習するという流れです。

転移学習を利用したキャラ風の対話実現の先行研究としては [2],[3] があります。

中間発表

インターン生同士の情報共有ということでインターン期間の途中に、中間発表が開かれました。中間発表では東京のインターン生との顔合わせ、お互いの取り組んでるテーマの共有、進捗の報告等をします。東京オフィスとテレビ電話を繋いで行います。

インターン生同士で発表内容に対して、活発な質疑が飛び交い充実した時間になりました。

僕の発表に対してもいくつか質問やアドバイスをいただけて、大変励みになりました。

中間発表で得た改善点やアイデアなども盛り込みつつ残りの期間までテーマを進めていきます!

最終発表

いよいよ最終発表です。1ヶ月の間に取り組んできた成果を高知オフィス・東京オフィス社員の方々全員に向けて発表します。

僕の場合は前半のdrop outの検証については結果を報告するという形式だったので流れが固まっていたのですが、後半の転移学習については生成された発話に対する応答の評価が必要で、どのような評価形式が適当かが考えどころでした。

文献[3]の評価方法などを参考にし、主観評価によるアンケート調査を行うことにしました。

アンケートでは以下の2つの観点から4段階で評価をしてもらうことにしました。

  • 応答として適切か
  • 対象のキャラクターらしいか

また4段階の評価基準は以下のとおりです。

  • 適切な応答か
    1.非文(文として成立していない)である
    2.正文(文として成立している)であるが、発話の内容と全く関連が無い。
    3.正文であり、発話の内容と多少は関連がある。
    4.正文であり、発話の内容と大いに関連がある。
  • 対象のキャラクターらしいか
    1.キャラの特徴がまったく現れていない。
    2.キャラの特徴が少し現れている。
    3.キャラの特徴が現れている。
    4.キャラの特徴が強く現れている。

結果についての詳細はここでは公開できませんが、応答の適切さと対象のキャラクターらしさについて一定の評価が得られたようです。

発表後、質疑応答の時間に東京オフィスの社員の方からアンケートを5段階方式にして中間の評価を作るべきことやアンケートの人数をもっと増やすべきなどの意見をいただきました。アンケート内容や、時間の制限上アンケート人数を確保できなかったことなど改善点に気づき、参考になりました。

インターン打ち上げ

最終発表のあとは打ち上げを開いて頂きました。海鮮BBQや鰹のたたきが本当に美味しかったです!メンター以外のエンジニアの方々やdataremerの方々とも話をすることができて貴重な機会でした。

打ち上げ会場はとても綺麗でした!

インターン全体の感想

今回のインターンシップではある程度テーマが与えられる形式だったので、メンターの方々にサポートをもらいつつ取り組んでいくことができました。自分の技術的な未熟さから基礎的なことで躓くことも多く、もっと勉強しなければと感じることが多かったです。深層学習を始め機械学習についてはまだまだ勉強中なので、自分でモデルを組めるとこまで成長したいです。

また今回のテーマは機械学習モデルの検証が目的だったので、どこまで進めればゴールというようなことは決まっておらず、そこは成果発表の際の考えどころでした。

1ヶ月という期間は長いと思っていましたが、できることを進めていく中であっという間に過ぎていきました。1ヶ月一緒に過ごしたインターン同期ともそれぞれのテーマは異なりつつも、ときには協力し合うことも多かったです。お互い刺激しあえるチームパートナーがいたことは非常にありがたかったです。

また技術的な面での成長としては、深層学習による自然言語処理が実務でどのように役立てられようとしているのか、最前線の技術はなにかというようなことが一部ではありますがつかめて良かったです。IT系のインターンに参加したのは初めてのことだったので、様々な刺激を受けて実りの多いインターンとなりました。

高知でのインターンすることについて、最初は不安もありましたが今は選んで正解だったと思っています。自然に囲まれつつ高知の風土を感じながらの最新の機械学習のインターンという体験ができるのはNextremerだけではないでしょうか。他ではできない貴重な経験になりました!

最後に、宿泊先の手配を始めインターン環境を整えていただいた社員の方、技術面でサポートしていただいたメンターの方々には感謝してもしきれません。1ヶ月という短い期間ではありましたが、本当にお世話になりました!

参考文献

  1. A Theoretically Grounded Application of Dropout in Recurrent Neural Networks [arXiv:1512.05287]
  2. 転移学習を用いた対話応答のスタイル制御,言語処理学会 第 23 回年次大会 発表論文集,pp. 338–341
  3. 対話返答生成における個性の追加反映, 研究報告自然言語処理(NL)2017-NL-232巻, pp1-7

Written by atsuto maeda