レコメンドエンジン機能 #
この機能では、「この商品を購入した人は、この商品も購入しています」や「この記事にイイネしている人は、この記事にもイイネしています」などのアイテムベースのレコメンデーションを実現します。 SQL LIKEなコマンドで、これらを自動的に計算する使い方を紹介します。
前提 #
説明のため、「この記事にいいねしている人は、この記事にもいいねしています」というアイテムベースのレコメンデーションを実現するための例を紹介したいと思います。
事前に、下記のような「いいね管理テーブル(likes
)」という「どのユーザーがどの記事にいいねしたか?」を管理するテーブルが作成されている前提で進めます。
CREATE TABLE likes (uid INT, aid INT)
uid
: ユーザーIDaid
: 記事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
でソートされていません
サンプルコード #
以上のコマンドを実際に使ってみたJavaのサンプルコードはこちらです。