LoginSignup
1

More than 1 year has passed since last update.

HottyDB(検索エンジン+レコメンド+RDBMS)のレコメンド機能の使い方

Posted at

この記事の概要

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メソッドの出力は_similarityでソートされていません

以上のように、RECOMMENDメソッドは通常のテーブルのようにSELECT文で扱えるため、他テーブルとJOINすることなども可能となります。

サンプルコード

以上のコマンドを実際に使ってみたJavaのサンプルコードはこちらです。
こちらも是非参考にしてみてください。

>>レコメンドエンジン機能のサンプルコード

フィードバックをお待ちいています!

HottyDBはまだ生まれたばかりのソフトウェアです。

使い方に関すること、分かりづらい点、バグ報告や改善提案、機能の要望など、なんでもOKなので下記のいずれかの方法でフィードバックをいただけると助かります。

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
1