EiongakuGrader概要
英音楽アプリの発話採点を行うServerless Functionで、以下の要求に沿ったシステムです。
AWS Lambdaでの動作を想定しています。
できる
•
1 ~ 100の間の整数スコアリングを行う
•
スコアと人間の感覚のある程度の共有性がある
•
単語ごと、ないし文章ごとで採点が行える
•
イントネーションを考慮できるか
できない
•
リズム・流暢さを別軸測る
•
リエゾンの考慮
•
何をどうすべきかアドバイスする
システム構成
システム動作フロー
1. (Client) テスト中に録音した音声をS3にアップロード
一旦はこのフォーマット
* チャンネル数: 2 => 1
* サンプリングレート: 44100Hz
* ビット深度: 16bit(コーデックはLINEAR16)
Plain Text
ファイルはWAV形式で保存される必要がある
musical-english-audio-data-[環境] <= バケット名
├── master <= 正解データのためのフォルダ
│ └── [question_id]
│ ├── info.json <= 正解のwordないしsentence
│ └── us_male_1.wav
└── submissions <= ユーザーから提出された発話音声データ
└── [question_id]
└── [user_id]
├── 1572247278747.wav <= ミリ秒のUnixタイムスタンプ(提出時刻)
└── 1572247281743.wav
Markdown
•
[環境] => prd / stg
•
[question_id] => Int型のID
•
[user_id] => Int型のID
IDの型は今回の再開発プロジェクトで変わると言うことでしたらそれはそれでオッケーです。
2. (Lambda) S3からイベントを受け取って音声を採点してAPIに結果を送付
Lambda --> APIのリクエストの仕様
認証
AWS KMS等で永久トークンを管理し、Lambda側からリクエストを送る際にAuthorizationヘッダーにtokenを入れて飛ばし、API側で、Authorizationヘッダーをチェックする。
ただ、正直よくない設計な気がしています。
リクエスト
POST {{HOST_URL}}/api/v1/users/:id/scoring_results
payload: 採点成功時
{
"scoring_result": {
"question_id": 123,
"score": 100,
"type": "word",
"word": "テスト",
"sentence": null
}
}
payload: 採点失敗時
{
"scoring_result": {
"error": "エラーメッセージ"
}
}
Markdown
•
question_id: (required)Int型、questionのプライマリーID
•
score: (required)Int型, 0 ~ 100の点数
•
type: (required)単語か文か
•
word: typeがwordの時はrequired、認識した文字列
•
sentence: typeがsentenceの時はrequired、認識した文字列
レスポンス
{
"status": 201,
"message": "作成が成功しました。"
}
Markdown
3. (API) 結果を受け取ってハンドリング
Client側では、音声を投げてからバッチポーリングで点数を取得しようとするので、採点エラーは採点エラーで、そのように保存しておかないと、
採点が終わった上でエラーだったのか、まだ採点中なのかが判別できないので、なにかエラーだったかどうかのフラグをスキーマに入れて、
Lambdaからエラー登録のリクエストを受け付けた時にもInsertを行う
4. (Client)結果が帰ってくるまで点数をfetchし続ける
正直個人的にはWebSocketでやればいいと感じていますが、Clientは数秒おきにquestion_idを指定して自分のその問題の点数を取得する。と言うような話になっていたかと思います。
本件の開発プロジェクトにおいてPMにやっていただきたいこと
•
各種アカウントの整備(AWSに入れるようにしていただいたりなど)
•
https://www.notion.so/simuland/EiongakuGrader-d26bf928b6d84e93aebebdd2491807bc#6c31d5b594504fa69c1524277e24711b
にあるようなディレクトリ構成で、正解音源などをS3上に整備していっていただく
•
パブリックな英単語発音記号DBで紹介できない単語の発音記号の整備 ⇒ ここら辺はほぼ想定されていないので例外発生については都度ご相談になるかと思います。