読解力と語彙力を同時に向上できる英単語学習LINEbotを作ってみた【CODEMGYM AI Labインターン】

学生時代に誰しもが通った道である英単語の暗記。今回は、そんな英単語学習をサポートしてくれるLINEbot「AI英単語アシスタント」を紹介します！自分が学びたい単語を例文を通して、使い方と一緒に理解したいという学生、学びなおし社会人の皆さんには是非おすすめしたいサービスです！

# 目次
* 開発のきっかけ
* LINEbotの概要
* 苦労した点
* 使用した技術
* 最後に

# 開発のきっかけ
私がこのLINEbotを開発したきっかけは、現在市販されている英単語帳やテキストを、より日常的に楽しく使ってもらえるようなサービスを作りたいと考えたからです。特に、普段使っている英単語帳が英単語⇔日本語訳のリスト形式で書かれているだけで、覚えにくいと感じている人もいるのではないでしょうか？例文となる英語長文を読みながらストーリーと一緒に英単語を記憶する効率性を知ってもらいたいと思い、このサービスを開発しました。学生時代にZ会の「速読英単語」や旺文社の「英検 文単」等のシリーズで勉強が捗った経験のある方にもピッタリかと思います！

# LINEbotの概要
私が開発した「AI英単語アシスタント」は、ユーザーが入力した複数の英単語に対して、それらを用いた英語長文のストーリーと、その和訳文を生成するサービスです。英語長文の内容は様々で、入力された単語に応じて日常的なものから神話系、科学技術系など、幅広いストーリーを楽しむことが出来ます。また、英語長文の難易度は入力された英単語の難易度に応じて生成されるので、自然とユーザー自身の勉強になる難易度の英語長文を読むことが出来ます。入力された英単語とその日本語訳は長文中で用いられると、*マークで強調されるので、覚えたい単語が文中でどのような用法で使われているのかも簡単に確認することが出来ます。

さらに、このサービスでは復習クイズ機能で勉強することもできます。復習クイズ機能では、英語長文生成機能で過去に学習した英単語の日本語訳クイズに挑戦することができます。この機能は、ユーザーが英語長文生成機能で累計10単語以上を学習すると利用可能になります。ユーザーが過去に学習した英単語のデータは、後述するDynamoDBで保存しています。

最後に、英単語学習を継続するためのモチベーションを維持するための機能として、称号機能を実装しています。この機能はポイントカードのランクアップ制度のような感じで、累計学習英単語総数に応じた称号を得られる機能です。実際の称号を確認してみたい方は是非友達追加してお試しください！

* 実際の使用感

・英語長文生成の例1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438688/234ae4e5-a3ea-f798-820c-479c86c7b00e.png)
冒険ストーリーが生成されました！楽しげですね。

・英語長文生成の例2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438688/9c0dad12-c160-9a7a-fdbb-03ef70f6594d.png)
今度は旅行記が生成されました！こんな旅をしてみたいものですね。

・復習クイズの例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438688/ea3b486f-b44c-c4cd-464c-608cb85313f2.png)
問題は3題出題されます。誤答の選択肢も、品詞や意味が似たような紛らわしいものが自動的に生成されます。嫌らしいですね。
ユーザーは選択肢を羅列して回答するだけで構いません。回答例が表示されていますが、例に従わなくても正確に答え合わせをしてくれます。例えば、漢数字でカンマも付けずに「三二三」のように回答しても構いません。

・復習クイズの答え合わせ例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438688/c551ff27-fa60-d10f-7bbe-73ad25c27e33.png)
答え合わせをしてみました。全問正解！

・称号の例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438688/7397daa7-da6c-0a16-57bd-34a87fccd918.png)
開発者である私の現在の称号は、「英単語ガチ勢」です！
あと少しで次の称号が解放されるようです...

# 苦労した点
* 復習クイズの実装
このLINEbotの機能の1つである復習機能を実装するためには、プロンプト文やデータ処理に苦労する点が多かったです。ユーザーから入力されるのは英単語だけな一方で、復習クイズでは出力しないといけない情報が沢山あります。「学習済み単語リストからランダムに取り出した英単語」、「その英単語の日本語訳」、「クイズとして適切な難易度をキープするための紛らわしい誤答」を出力に加える必要があります。これらを一気にChatGPTに行わせることは不可能だったので、「学習済み英単語のデータベースからランダムに3個を取り出す」→「それら英単語の和訳として相応しい正答・誤答を生成する」→「正答と誤答をランダムに並べ替える」→「得られた結果と定型文を組み合わせて問題文を作成する」→「問題文を出力」→「回答に応じた答え合わせ結果を出力」といった感じで、多段階に分解して処理を行うことで実装に成功しました。特に、正答・誤答を生成してランダムに並べ替えるためにはChatGPTに決まったデータ型を返してもらう必要があり、その点に苦労しました。「了解しました。」や「以下が、出力結果となります。」のような文章を確実に含ませないためのプロンプト文作成は大きな課題点でした。

# 使用した技術
* AWS
このLINEbotはAWSのLambda上で作った関数をLINEアカウントと連携させ、ユーザーから送信されたメッセージに対して実行されるようにしたものです。チャット履歴やユーザー情報、学習した英単語、出題したクイズ履歴はAWSのDynamoDBに記録しています。
* ChatGPT API
このアカウントが生成する英語長文は、ユーザーの入力した英単語をChatGPTに送信して出力されたものです。OpenAIのアカウントからAPIキーを取得し、Lambda上で環境変数として連携させることで、ChatGPTからの出力を返信として。また、予めシステムプロンプトとして指令を与えておくことで、LINEbotに合わせた性質にChatGPTを変えることが出来ます。

# 最後に
このLINEbotアカウントは、私がインターン生をしているCODEMGYMでの業務の一環として開発したものです。AWSやLINEbotについては何も知らない状況から3週間ほどで学び、1つ目のプロダクトとして開発した「深掘り質問予想LINEbot」に引き続き、2つ目のプロダクトとして開発しました。2つ目ということもあり初回よりもスムーズに開発を進めることが出来ましたが、より複雑な処理を行わせるためのプロンプトメッセージの検討や、データベース処理が難しかったです。
これからもインターンを通して開発したプロダクトを紹介していく予定なので、是非フォロー・いいねをお願いします！

今回紹介したLINEbotの友達追加はこちらから！
https://line.me/R/ti/p/@388hflvf?from=page&accountId=388hflvf