レコメンドエンジン機能

レコメンドエンジン機能 #

この機能では、「この商品を購入した人は、この商品も購入しています」や「この記事にイイネしている人は、この記事にもイイネしています」などのアイテムベースのレコメンデーションを実現します。 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でソートされていません

サンプルコード #

以上のコマンドを実際に使ってみたJavaのサンプルコードはこちらです。

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