2021年8月にLINE技術職インターンシップ(ハッカソンコース)を開催しましたので、その様子をご紹介します。
昨年に続き新型コロナウィルス感染拡大防止の観点からオンラインでの開催となりましたが、参加人数は大きく増えて19名の学生に参加いただきました。今回のインターンシップでは「既存のメッセンジャーアプリにAI技術を活用した新しいプロダクト開発に挑戦し、チーム開発を通じて、今後に繋がる学びを得ていただく」を目的としたハッカソン形式で実施しました。
オリエンテーション
今年も全国から参加いただき、学年、専攻など様々なバックグラウンドを持つ学生に参加いただきました。初日から二日目にかけてはオリエンテーションを実施し、期間中に利用する技術、AI(音声認識技術)についてLINE KYOTOに所属するエンジニアから説明しました。終始オンラインでの作業となる中、少しでもLINE社員である実感を持っていただこうと、LINEのデザイナーが参加者専用のZoom背景やウェルカムグッズなどを用意しました。
参考:【前編】LINEインターンのウェルカムグッズができるまで / 【後編】LINEインターンのウェルカムグッズができるまで
課題説明
今回のハッカソンのテーマは、「AI技術を活用した新しいメッセンジャーアプリを開発しよう」というLINEらしいテーマでした。
それぞれの経験や希望から4チームに分かれて開発に臨み、最低限の機能要件が定められている以外は技術選定からアーキテクチャ、目玉となる機能の企画についてもチームの判断に委ねられます。今年からの新しい要素であるAI(音声認識技術)については既存のAPIなどを使わず、昨年Facebook AI Researchより発表されたばかりの技術(wav2vec2.0)をベースに学生自身で音声認識モデルのモデリングに挑戦いただきました。
ハッカソン期間でモデリングを試行錯誤できるように英語音声(LibriSpeech Corpus)のみで事前学習されたwav2vec2.0のモデルを日本語音声でファインチューニングしてもらいましたが、少量(数時間)の日本語でファインチューニングしている例は少なく、わずか2週間で実用レベルのモデルを作成してもらえるように課題設計することは我々にとっても非常にチャレンジングでした。なお今年は競争要素も加わり、最優秀のチームには褒賞を授与することになりました。
開発
2日目午後からいよいよ本格的な開発がスタートします。
プライベートクラウドの「Verda」や各種オープンソースソフトウェア、GitHub EnterpriseなどLINE内で実際に利用しているものを中心にどの技術を選定するか、というところからチーム内で決定していきます。全てオンラインという制約がある中で、SlackやZoom、Confluenceなどをフル活用し、メンターに相談を重ねて、開発を進めていきます。
エンジニアとの交流
去年リクエストの多かった他チームとの交流について、今年はシャッフルランチの形式で2回行いました。
また、オフラインにおいても気軽にふらっと質問できる「オフィスアワー」というものを実施しました。ハッカソンのメンターのエンジニアが指定の時間内Zoomに待機していて、入退室や質問がいつでもできる取り組みです。オフィスアワーでヒントを得て、技術的課題が一気に解決したシーンが度々あり、想像以上に効果があったと思います。
成果発表会
最終日には、各技術領域のエンジニアリングマネージャーやテックリードを集めて成果発表会を開催しました。チームごとにデモを見せながら技術についての説明を行い、最後に苦労した点やこだわった点、学んだ点について発表しました。
「AI技術を活用した新しいメッセンジャーアプリを開発しよう」というシンプルなテーマながら、各チーム課題の設定や技術的なこだわりに大きな違いが見られ、審査員をつとめたエンジニアも最後まで最優秀賞を決めかねていました。
ここから、具体的なシステム構成や機能をチームごとに紹介します。
チームBrown
チームBrownは「チャット風ミーティングアプリ」の開発に挑戦しました。
4チームの中で唯一の4人チーム(他は5人チーム)となり時間の制約が多く、LINE SDK for iOS Swiftを用いた実装や学習のデータ量の追加、Redisを用いたDBの設計などに苦戦しつつも、WebRTCを用いてローカル環境でのP2Pに挑戦したり、スペック調整をしながら高難易度な開発に挑戦していました。音声技術においてはバージョンごとに、明確な客観評価を行い、改善を繰り返すプロセスがとても良かったです。
主な機能一覧
- 1on1チャット
- グループチャット(WebRTCを用いたローカル環境でのP2P利用)
- 既読表示
- ログイン機能
- 友だち機能(追加・削除) & 友だち検索
- ルーム名検索による参加
Brownの成果物の概要図や技術について
チームCony
チームConyはターゲットを明確にした「エンジニアが使いそうな単語は絶対に音声入力できるチャットアプリ」の開発を行いました。
担当領域間の連携や、DBやAPI設計の仕様変更への対応、ローカルでの永続化ができないなど壁に当たりつつも、歴代のインターン参加チームの中で初めて負荷試験まで実施したり、音声認識モデルに関しては、GitHub, READMEなどのエンジニア用語を一旦カタカナに変換してTTS(テキスト音声合成)による訓練データのData Augmentationを行い、認識後に英語に変換するなどエンジニア用語の認識に強くするための工夫も光っていました。
主な機能一覧
- 音声入力機能(キーボード入力も可)
- 1on1チャット, グループチャット(作成は未実装)
- (簡易的な)ログイン機能
- 友だち機能(追加・削除) & 友だち検索
- 既読・未読表示機能
Conyの成果物の概要図や技術について
チームJessica
チームJessicaはテキストコミュニケーションにおける感情のやりとりに注目し、「感情まで伝えられるメッセージアプリ」を開発しました。
チーム内でのタスク分担やプロジェクト進行に苦戦しつつも、サーバーサイドでのClean Architectureの導入、ドキュメント整備など実務意識を高く持ち、またアプリUIについてもこだわりが強く、ユーザー体験を良くしたいという気概を感じられました。
主な機能一覧
- 1on1チャット
- グループチャット
- 感情分析を踏まえてフォントと文字サイズを変更
- 通知
- LINEアカウントでログイン
- LINEアカウントとアイコン画像が同期
- 独自IDによる友だち検索
- 友だちの追加
- 友だちリストの表示
- 友だちのブロック/ブロック解除
Jessicaの成果物の概要図や利用した技術
チームLeonard
チームLeonardは何と一切の操作を手で行わず「すべて音声だけで操作できるチャットアプリ」の開発に挑戦しました。
テストの実装、自動デプロイ、音声入力のレイテンシの調整などいくつかの課題を残しつつも、オフィスアワーを多いに活用し、非常に完成度の高いアプリを開発してくれました。全体の完成度に加え、AppleWatch対応を実装してLINEエンジニアを湧せてくれたり、プレゼンテーションで笑いを誘ったりといった加点要素もあり、今年の最優秀チームはLeonardとなりました。チームの皆さんにはデザイナーチームが監修してくれたオリジナルトロフィーが送られました。
主な機能一覧
※すべての操作を音声入力で対応
- 画像・動画の送受信
- 既読
- ログイン
- 音声認識によるテキスト送信
- 通知機能
- グループチャット・1:1チャット
- 友だちリストの表示
- 音声でのコマンド操作
- Slackのように入力中のユーザーが分かる機能
- Apple Watch対応
- 未読数とどこから未読かの表示
- 絵文字の変換・選択機能
Leonardの成果物の概要図や利用した技術
最優秀チームへの贈呈されたトロフィー
まとめ
2週間と決して長くない限られた開発期間でしたが、各チームがそれぞれしっかり話し合って、進め方や機能実装、デザインなどを工夫し、チームごとに特色が生まれていました。
また、アプリをまず動く状態にしてから徐々に細かい機能を追加していくという進め方をとっているチームもあり、これはLINEの実際の開発現場でもよく用いられている開発手法です。
インターン中に使用された技術の一覧
Server-side | 言語 | Python, Go, JavaScript |
ライブラリ | Flask, Socket.io, Gin, gorm, Tornado, TorMySQL, Sequelize | |
技術 | gRPC, WebRTC, WebSocket | |
Client | 言語 | TypeScript, Swift, |
ライブラリ | uni-app, LINE SDK for iOS Swift, MessageKit | |
技術 | gRPC, Socket.io | |
AI | 言語 | Python |
フレームワーク | fairseq, Triton Inference Server | |
技術 | Speech recognition, Speech synthesis (for data augmentation), wav2vec2.0 | |
API | - | LINE Login, Empath |
Database | - | MySQL, Redis |
Infrastructure | - | Verda(Private Cloud), Docker, Jenkins |
インターン生が触れた技術や実際に開発したプロダクト、メンターの所感、インターン生それぞれの感想を見るかぎり「既存のメッセンジャーアプリにAI技術を活用した新しいプロダクト開発に挑戦し、チーム開発を通じて、今後に繋がる学びを得ていただく」という本インターンの目的に沿ったインターンを実施することができたと思います。ご参加いただいた皆様ありがとうございました!
11月にはLINEが主催する技術カンファレンス、「LINE DEVELOPER DAY 2021」が開催されます。詳細は公式Twitterにてアナウンスしますので、ご興味のある方はぜひフォローしてください。