私は次の設定をしています:
ブールデータ: (userid, itemid)
次の引数を持つ Hadoop ベースの mahout itemSimilarityJob: --similarityClassname Similarity_Loglikelihood --maxSimilaritiesPerItem 50 & その他 (入力、出力..)
アイテムベースのブール推奨: -model MySqlBooleanPrefJDBCDataModel -similarity MySQLJDBCInMemoryItemSimilarity -candidatestrategy AllSimilarItemsCandidateItemsStrategy -mostSimilarItemsCandidateStrategy AllSimilarItemsCandidateItemsStrategy
セットアップで類似性共起を使用して最終的な推奨事項を取得する方法はありますか? ジョブに SIMILARITY_COOCCURENCE をプラグインすると、MySqlJDBCInMemorySimilarity 前提条件チェックが失敗します。これは、カウントが 1 より大きくなるためです。事前計算された類似性に対して推奨ジョブを実行することで、最終的な推奨を取得できることがわかっています。MysqlInMemorySimilarity を使用して、類似度対数尤度 (および -1 と 1 の間の類似度値を持つ他の類似度メトリック) の場合のように、API を使用してこれをリアルタイムで行う方法はありますか?
どうすれば最大数を制限できますか。アイテム類似性ジョブのアイテムごとの類似アイテムの数。ここで言いたいのは、 allsimilaritemscandidatestrategy は .allsimilaritems(item) を呼び出して、すべての可能な候補を取得するということです。API を使用して上位 10/20/50 の類似アイテムを取得する方法はありますか。--maxSimilaritiesPerItem をアイテムの類似度ジョブに渡すことができることは知っていますが、それが何を表し、どのように機能するかについては完全にはわかりません。これを 10/20/50 に設定すると、上記のことを達成できますか。また、APIを介してこれを達成する方法はありますか?
最終的な推奨事項をフィルタリングして再スコアリングするために、レスコーラーを使用しています。rescorer を使用すると、/recommend/userid?howMany=10&rescore={..} および /similar/itemid?howMany=10&rescore{..} への呼び出しが、(30-70ms) に比べて (300ms-400ms) 長くなります。スコアラーなしで。rescore データを取得するためのメモリ内ストアとして redis を使用しています。上記のように、rescorer は実行時データも受け取ります。rescorer で行われるチェックはほんのわずかです。問題は、いいえとしてそれです。特定のユーザーのアイテム嗜好の増加 (> 100)、いいえ。isFiltered() と rescore() の呼び出しが大幅に増加します。これは主に、すべてのユーザー設定について、candidateStrategy.getCandidatItems(item) への呼び出しが、それぞれについて約 (100 以上) の類似アイテムを返し、これらのアイテムごとに rescorer が呼び出されるという事実によるものです。したがって、ジョブ内のアイテムごとの類似アイテムの最大数を制限する必要があります。これは正しいですか、それともここで何か不足していますか? この場合、レスコーラーを最適化する最良の方法は何ですか?
MysqlJdbcInMemorySimilarity は、GenericItemSimilarity を使用してアイテムの類似性をメモリにロードし、その .allsimilaritems(item) は、mysql で事前に計算されたアイテムの類似性から、特定のアイテムのすべての可能な類似アイテムを返します。上位 10/20/50 の類似アイテムを返すために、独自のアイテム類似性クラスを実装する必要がありますか? ユーザーの場合はどうなりますか。の好みは増え続けていますか?
誰かが上記を達成する方法を教えてくれたら本当に素晴らしいでしょうか? ありがとうございます!