次世代型RDBMS「HottyDB」でレコメンドシステムを実装する
この記事の概要
HottyDB(検索エンジンとレコメンドエンジンを搭載したRDBMS)という、筆者が個人開発したソフトウェアのレコメンド機能について紹介したいと思います。
前回の記事でHottyDBの検索エンジン機能について解説しているので、そちらも是非参照してみてください!
レコメンド機能
レコメンド機能では、「この商品を購入した人は、この商品も購入しています」や「この記事にイイネしている人は、この記事にもイイネしています」などのアイテムベースのレコメンデーションを実現します。 SQL LIKEなコマンドで、これらを自動的に計算する使い方を紹介します。
前提
本記事では、「この記事にいいねしている人は、この記事にもいいねしています」というレコメンデーションを実現するための例を紹介したいと思います。
事前に、下記のような「いいね管理テーブル(likes
)」という「どのユーザーがどの記事にいいねしたか?」を管理するテーブルが作成されている前提で進めます。
CREATE TABLE likes (uid INT, aid INT)
-
uid
: ユーザーID -
aid
: 記事ID
レコメンドインデックスの作成
アイテムレコメンデーションを実現するために、HottyDBではまずレコメンドインデックスを作成する必要があります。
レコメンドインデックスの作成コマンドは下記の通りです。
CREATE RECOMMEND INDEXの構文
CREATE RECOMMEND INDEX `インデックス名`
ON `テーブル名`
(`ユーザーIDのフィールド名`, `アイテムIDのフィールド名`)
CREATE RECOMMEND INDEXの例文
前提
で作成したlikes
テーブルにレコメンドインデックスを作成する場合、下記のようになります。
CREATE RECOMMEND INDEX r1 on likes (uid, aid)
つまり、レコメンドインデックスの作成は、レコメンデーションの元となるデータテーブルの、どのフィールドがユーザーIDでどのフィールドがアイテムIDかをHottyDBに教えてあげることを指します。
これにより、HottyDBは「このアイテムを選択したユーザーは、このアイテムも選択しています」というレコメンデーションの関係性を学習することができます。
通常のINSERT
レコメンドインデックスを作成した時点では、まだレコメンデーションの関係性は学習されません。
レコメンドインデックスを作成したあとに発生したlikes
テーブルへのINSERT
処理で逐次レコメンデーションが更新されていきます。
レコメンデーションの推論
学習されたレコメンドインデックスから、レコメンデーションを取得しSELECT文で利用する方法を解説します。
RECOMMENDメソッドの構文
SELECT
_item_id,
_similarity
FROM RECOMMEND(`インデックス名`, `シードアイテムID`)
-
_item_id
: レコメンドアイテムのID -
_similarity
: シードアイテムとレコメンドアイテムの関連度 -
インデックス名
: 作成したレコメンドインデックスの名前 -
シードアイテムID
: レコメンド元となるアイテムID
RECOMMENDメソッドの例文
記事ID=5
にいいねした人がいいねしている記事IDを関連度順で出力する場合
SELECT
_item_id,
_similarity
FROM RECOMMEND(r1, 5)
ORDER BY _similarity DESC
以上のように、RECOMMENDメソッドは通常のテーブルのようにSELECT文で扱えるため、他テーブルとJOINすることなども可能となります。
サンプルコード
以上のコマンドを実際に使ってみたJavaのサンプルコードはこちらです。
こちらも是非参考にしてみてください。
導入事例
最後にこのHottyDBのレコメンド機能を使った導入事例を紹介して、この記事は終わりにしようと思います。
HottyTech検索
HottyTech検索とは?
「HottyTech検索」は、Tech記事の検索とレコメンデーションのサービスです。
Tech記事のキーワード検索、関連記事レコメンデーションなどの機能をHottyDBにより実現しています。
Tech記事といっても現状はQiitaのAPIで取得できた記事に限られますが、その記事の中から興味のある記事を検索することができるサービスです。
主な機能
「HottyTech検索」の主な機能は次の4つです。
- キーワード検索機能(全文検索+機械学習ランキング=AI検索)
- 関連記事レコメンデーション機能(協調フィルタリング)
- 関連記事レコメンデーション機能(類似記事検索)
- 「あなたにおすすめの記事」機能
「関連記事レコメンデーション機能(協調フィルタリング)」の機能を使うと、今回紹介したレコメンドの機能を体感することができます。
HottyTech検索の記事詳細ページに行くと、「関連記事」として表示されていると思います。
フィードバックをお待ちいています!
HottyDBはまだ生まれたばかりのソフトウェアです。
使い方に関すること、分かりづらい点、バグ報告や改善提案、機能の要望など、なんでもOKなので下記のいずれかの方法でフィードバックをいただけると助かります。
- このQiitaのコメント欄
- お問い合わせフォーム
Discussion