↑動画はロゴをクリック
自分で作る 自分のための 英語学習アプリ
普段自分が話す表現を、ただ英語で話したいだけ
- 咄嗟に英語が出てこない
- 日常会話さえできればいいと思っている
- 故に,猛勉強する気は無い
- 英会話例文集とかを見ても使わなさそうな場面の英会話が多すぎて、実際の会話で役立てる場面がごくわずかである
- 勉強する労力に対して実際に英会話の場面で使える数が見合っていない
- もっと他に覚えるべき文章があるはず
ユーザの発言をアプリで録音・言語化し、自分専用の学習データ を作る。 自分がよく使っている文章順で その文と英訳を表示し英会話の勉強に役立てるアプリ
- アプリを起動して録音を開始
- 発言を録音する(バックグラウンド動作可)
- 認識結果から英文と和文のペアを確認、クイズ形式の練習も可能
- 左スワイプで集音開始
- アプリを閉じていても、バックグラウンドで集音
- 認識精度の悪いセンテンスは、端末側で送らないようにする機能
- 文章をサーバーに送信
- 自然言語処理や翻訳機能を利用
- 翻訳結果のスコアを doc2vec などで計算し格納(閾値以下のスコアを持つ例文は棄却する)
- 発言頻度の高い文章順で表示
- 明らかに翻訳がおかしいとされるものは非表示に
- ユーザーが自分で削除も可能
- 文章をタップすることで、音声読み上げが可能
- 英語を隠して表示
- 「表示」することで答えの英語を表示し,タップで発音を確認
- スワイプで次の問題へ
このアプリを使うことで, 「普段自分が話す表現を,ただ英語で話したいだけ」のユーザが,「必要最低限の学習で,自分だけの表現を英語にすること」 ために取り組むことができるようになります.
- 話者分離を用いて、自分の声だけを登録するように
- 「音声認識 -> 文章分離 -> 翻訳」のそれぞれの精度の向上
- 例えば、日本語を綺麗な日本語に変換してから、翻訳をかけるなど
- edge to edge をちゃんと実装する(android)
- score での文章の表示非表示の閾値をユーザーがイケてるUIから設定できるように
- Google Croud Natural Language API
- Google Croud Translation API
- バックエンド
- インフラ: nginx, uwsgi, sakura vps
- サーバーサイド: python, django
- データベース: mysql, redis
- ジョブキュー: celery
- アプリケーション
- android: kotlin, kotlin coroutine, dagger, mvvm, android speech recognizer
- デザイン
- adobe illustrator, adobe photoshop, adobe XD, adobe affter effects
- android 端末
- e.g. pixel 3a, pixel 4
なし
すべて二日間で開発
- アーキテクチャ
- MVVM + Repositoryパターン + DI(dagger)
- 選定理由 今回はAndroidエンジニアが3人と多めであり,同時開発においてブランチ同士が容易にコンフリクトすることが考えられた.故に,疎結合な設計が求められる. 当初はCleanArchitectureを導入することを考えたが,2日間という限られた時間内で開発するスピード感も求められるため,Domain層を排除した2-layerd-architectureを選定した.一方でDpendencyInjectionを活用することで,疎結合を保っている.
- バックグランドでアプリが起動していて,音声認識して文字起こしする技術
- 独自のスライドアニメーション
- MainFragment.kt の46〜54行目
- DictFragment とRecordingFragmentのstartTagAnimation()関数
- サーバに送る文字列が日本語として正常になるように精度の悪いセンテンスは送らないようにする機能
- SpeechRecognizeService.kt の215行目
- ジョブキューフレームワークを用いて、Google Croud などでの演算は非同期で
- Google Croud Natural Language API で分けきれない酷い日本語文章を、ヒューリスティックな手法で分解
- Google Croud Translation API と Wikipedia のデータで学習した doc2vec を用い、翻訳結果をスコアリング