LoginSignup
6
4

More than 1 year has passed since last update.

二択を繰り返すことで新しい本と出逢えるwebアプリを作った

Posted at

作ったwebアプリについて

左右に表れる2つの本から1つを選ぶことを繰り返すことで, 新しい本に出逢えるwebアプリを作りました.
宣伝です.

↑web版

↑androidアプリ版

概要

本を買う際に, amazonなどのECサイトで買うことも多いですが, ときどき本屋にも行きたくなります.
......と言うのは, ECサイトの本と触れる箇所は, 検索(ほしい本)・レコメンド(類似本)・ランキング(人気本)がほとんどで, 本屋で得られる「本棚を眺め, なんとなく出逢った本を手に取る」という出逢いの経験が得らないからです.
なので, web上で類似本でも人気本でもない新しい本と出逢えるwebアプリを作りました.

2つの本の中から「どちらが手に取りたいか」を何回か選ぶことで, ユーザーの趣味嗜好を深掘りし, オススメの本をピックアップするサービスです.
名前の由来は「深掘り」+「akinatorっぽい」ということでhorinatorにしました(知人につけてもらった).

アルゴリズムについて

このwebアプリは

  • 本を二択から選択
  • オススメの本紹介

の2ステップで構成されてます.
それぞれについて説明していきます.

本を二択から選択 - 階層クラスタリング

まずはじめに, 本の利用傾向の近さから埋め込み表現を作ります.
(ここのところは, すでに色々と解説があると思うので省略します)

image.png

次に, 各書籍間で階層クラスタリングを行います.
ユーザーの二択は, 階層クラスタリングでできた木構造の, 片側を選ぶか, もう片側を選ぶかで表現されます.
そして選択が終わると, 木構造の深さを一つ進めることで, ユーザーの興味を深掘りしていきます.

一般的な階層クラスタリング手法は, クラスタリングをボトムアップで行います.
しかし今回の場合では

  • 全部を完全にクラスタリングするには計算量が多すぎること
  • 木構造の深い階層の情報は不要なこと

から階層クラスタリングをトップダウンで行いました.
手法は, クラスタ数2のK-meansを繰り返し行うことで実装しました.
(「統計的学習の基礎」いわくそれがよく使われる手法のようです)

オススメの本紹介 - spectral relaxation

「オススメの本紹介」では選択された本のクラスターを一覧表示させています.
ここで大事になってくるのが, 「本の並び方をどうするか」という問題です.

「本の人気順でソートする」というのも一つの手だとは思いますが, 「人気本でもない新しい本と出逢う」というコンセプトに反します.
なので今回は本のバリエーションが極力豊かになるようにソートしました.

ただ, これを愚直に計算するとなると, かなりの計算量が必要になるため, spectral relaxationを用いることで近似解を計算しました.
具体的な手法に関してはかなり込み入った話になるので「Novelty and Diversity in Top-N Recommendation -- Analysis and Evaluation」を読んでいただければ幸いです.
(いつか別途解説の記事を書くかも)

実装について

実装は, Fletというpython×flutterなライブラリで実装しました.
pythonに慣れているかたなら, 簡単にそれなりの見栄えのものができるのでオススメです.
筆者はpythonぐらいしかできる言語がないのでこれを選択.
結果としてまあよかったかなと思っています.
webアプリ以外にもマルチプラットフォームでつくれるので, ちょっとしたツールならば, これで作るのが良さそうです.

今後改良したいこと

  • 事前に「小説」「新書・実用書」「マンガ」などのジャンルフィルターを設けたい
  • マンガやライトノベルは冊数が多いため, 一つにまとめて学習したい
    • ただ, 結構表記揺れがあるのでどうしようか......
  • 今は, 「本を二択から選択」段階と「オススメの本紹介」段階の切り替えを冊数で行っているが, これをよりラインナップに即した形で決定したい
    • X-meansを応用すればいけるかも
6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4