戻る

コース推薦システム

2023年3月17日
Next.jsDjangoDocker
コース推薦システム

私は、大学の卒業研究として、ユーザの入力内容をもとに関連する講座を推薦するフルスタックな Web アプリケーションを提案しました。フルスタックの Web アプリケーションは、Next.js と Django アプリで構成されています。また、Django Rest Framework を使って、Django アプリが JSON レスポンスを送受信できるようにし、Next.js アプリがサーバと容易に通信できるようにしました。データベースには、Amazon の RDS を使うのにあまりコストをかけたくなかったのと、無料で使えるということで Supabase を使いました。

Next.js アプリは、ユーザがシステムと対話し、Django アプリからの JSON データを可視化する役割を果たします。一方、Django アプリは、データベースの読み込みや修正、コース推薦の生成など、利用可能なすべてのロジックを処理します。

Django アプリの中で、私は 2 種類のレコメンダーシステムを提案しました。1 つは CBF(Content-Based Filtering)レコメンダーシステムで、もう 1 つは CF(Collaborative Filtering)レコメンダーシステムです。この記事を書いている時点で、両方のレコメンダーシステムを完成させました。

CBF レコメンダーシステムでは、まず、大学の授業データを収集する必要がありました。まず、簡単なウェブスクレイパーを作成し、大学のウェブサイトにあるコースのリストを取得し、各コースの PDF ファイルをダウンロードしました。そして、PyPDF2 を使って pdf のテキストを抽出し、データベースに格納しました。次に、NumPy と scikit-learn を使って、自然言語処理の手法である TF-IDF (Term Frequency - Inverse Document Frequency) を実装し、コサイン類似度を使って各コースの説明をベクトル化し、Django アプリから JSON 応答として送られるコース推薦文を生成するために互いに比較しました。

また、Web サーバーには、Nginx の代替となる Caddy を使用しました。これらの選択は、パフォーマンスを維持しながらコストを削減するために行いました。

このプロジェクトでは、今まで古い Redux しか使ったことがなかったので新しい Redux Toolkit を学んだり、Django の開発ではいくつかの便利な機能が組み込まれているので新しいことを学んだり、最後に Web サーバを docker 化してデプロイすることで DevOps を実践したりと、多くのことを学ぶことができました。

最後に、これを全部読んでくれたあなたに、ウェブサイトのリンクを紹介します。