2

私は映画の推奨エンジンで働いており、DB 設計の問題に直面しています。私の実際のデータベースは次のようになります。

MOVIES [ID,TITLE] 
KEYWORDS_TABLE [ID,KEY_ID] 
  • ここで、ID は MOVIES.id の外部キー、KEY_ID はテキスト キーワード テーブルのキーです。

これはDB全体ではありませんが、私の問題にとって何が重要かをここに示しました. 私は約 50,000 本の映画と約 130 万のキーワード相関を持っています。基本的に私のアルゴリズムは、特定の映画と同じキーワードを持つすべての人を抽出し、キーワード相関の数で並べ替えることで構成されています。

たとえば、「Cast away」に似た映画を探したところ、キーワードの相関関係が最も多かった (4 つのキーワード) ため、「Six days and six nights」が返されました。

Island
Airplane crash
Stranded
Pilot

アルゴリズムはさらに多くの要因に基づいていますが、これはアプローチにとって最も重要であり、最も難しいものです。

基本的に私が今やっていることは、与えられた映画に似たキーワードを少なくとも 1 つ持つすべての映画を取得し、しばらくの間重要ではない他の要因によってそれらを並べ替えることです。

それほど多くのレコードがなくても問題はありません。多くの場合、クエリは最大 10 ~ 20 秒続き、そのうちのいくつかは 5000 以上のムービーを返します。ここで誰かがクエリの最適化を手伝ってくれましたが(Mark Byersに感謝)、時間がかかりすぎるため、それだけでは十分ではありません

SELECT DISTINCT M.title
FROM keywords_table K1
JOIN keywords_table K2
ON K2.key_id = K1.key_id
JOIN movies M
ON K2.id = M.id
WHERE K1.id = 4

だから、各映画の映画の推奨事項を含むリストを事前に作成した方がよいと思いましたが、テーブルをどのように設計すればよいかわかりません..それは良い考えですか、それともどのようにこのアプローチを取りますか?

4

1 に答える 1

1

@Supyxy 映画のレコメンデーションのより良いアプローチは、映画データベースの分析後に生成された抽象的な特徴に基づくニューラル ネットワーク アプローチを使用することです (これらの特徴を生成する要因は、キーワード | 人々の評価 | 監督の名前 | 俳優などです)。サンプルのオープン ソース映画レコメンデーション エンジンは、Filmasterプロジェクトによって提供されています。これについては wiki で読むことができます: http://filmmaster.org/display/DEV/New+recommendation+engineおよび bitbucket リポジトリからコードを取得します: http://bitbucket.org/filmaster/filmmaster-test/src /tip/count_recommendations.cpp

しかし、現在のソリューションで抱えている問題に答えると、さらにクエリの最適化が失敗した場合は、データに冗長性を追加して、各映画の同様の映画への参照を保存します (コンピューティングは、これらの値が必要なため、遅延または cron ジョブで毎日実行できます)頻繁に変更しないでください)。

于 2010-06-17T13:50:48.930 に答える