2010-06-17 1 views
2

나는 영화 추천 엔진에서 일하고 있는데 나는 DB 디자인 문제에 직면 해있다. 내 실제 데이터베이스는 다음과 같습니다영화 추천 엔진 개념 데이터베이스 디자인

MOVIES [ID,TITLE] 
KEYWORDS_TABLE [ID,KEY_ID] 
  • , ID가 MOVIES.id에 대한 외부 키이고 KEY_ID 텍스트 키워드 테이블이 전체 DB하지

의 핵심입니다 만 나는 내 문제에있어 중요한 것을 여기서 보여 주었다. 나는 약 50,000 개의 영화와 약 1,300 만 개의 키워드 상관 관계가 있으며, 기본적으로 내 알고리즘은 주어진 영화에서 동일한 키워드를 가진 모든 사람을 추출한 다음 키워드 상관 관계의 수로 순서를 매기는 것으로 구성됩니다.

예를 들어 내가 '버리다'와 비슷한 영화보고하고 가장 키워드 상관 관계 (4 개 키워드)했기 때문에 그것은 '엿새 동안 여섯 박 반환 알고리즘의 기반이

Island 
Airplane crash 
Stranded 
Pilot 

을 더 많은 요소들에 관해서는이 방법이 가장 중요하고 접근하기가 어렵습니다.

기본적으로 현재 내가하는 일은 주어진 영화와 유사한 키워드를 적어도 하나 이상 가지고있는 영화를 모두 얻는 것이고, 잠시 동안 중요하지 않은 다른 요소로 영화를 주문하는 것입니다.

너무 많은 레코드가 없으면 쿼리는 대부분 최대 10-20 초 동안 지속되고 그 중 일부는 5000 개 이상의 영화를 반환합니다. 누군가가 이미 쿼리를 최적화 여기 (감사 마크 바이어스)에 나에게 도움이되지만 너무 이상

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 

그래서 내가 영화의 권고와 함께 그 목록을 만든 경우에는 사전 좋을 것이라고 생각합니다 때문이 충분하지 않습니다 각 영화,하지만 어떻게 테이블을 디자인 할 수 있는지 잘 모르겠다. 무엇이 좋은 생각인지 또는 어떻게이 접근 방식을 취할 것인가?

답변

1

@Supyxy 영화 추천을위한 더 나은 접근 방법은 영화 데이터베이스를 분석 한 후에 생성 된 추상 피쳐를 기반으로 한 신경망 접근법을 사용하는 것입니다 (이러한 피쳐를 생성하는 요인은 키워드 | 사람의 평가 | 감독의 이름 | 배우 등) . 샘플 오픈 소스 영화 추천 엔진은 Filmaster 프로젝트에서 제공됩니다. 위키에서 읽을 수있는 내용은 다음과 같습니다. http://filmaster.org/display/DEV/New+recommendation+engine bitbucket 리포지토리에서 코드를 가져옵니다.

현재 솔루션에있는 문제에 대한 대답으로 추가 쿼리 최적화가 실패하면 데이터에 더 많은 중복성을 추가 할 것입니다. 각 영화에 대한 유사한 영화에 대한 참조를 저장합니다 (컴퓨팅이 느리게 수행되거나 cron 작업에서 매일 값을 변경하지 않아야 함).

+0

신경망이 반드시 좋은 것은 아닙니다. 신경망은 불투명합니다. 따라서 모델이 성공적이라면 그 이유를 알 수 없으며, 성공하지 못하면 개선 할 수 없습니다. – isomorphismes