나는 Java와 Neo4j로 간단한 소셜 네트워크를 개발 중이다.Neo4j와의 관계
사용자는 이미 수행 한 작업을 제출하고 태그로 태그를 지정할 수 있습니다. 또한 사용자는 관심 분야 (태그도 있음)를 추가 할 수 있습니다. 시스템은 아직 사용자가 수행하지 않은 것을 사용자에게 권장해야합니다. 사용자간에 유사도가 계산되는 협업 필터링에 대한 기사를 읽었습니다. 유사한 사용자가 발견 된 후에도 사용자가 수행했지만 로그인 한 사용자가 아직 수행하지 않은 작업 중 일부는 권장 사항과 완벽하게 일치합니다. 여기
는 데이터 모델 :(me)-[:HAS_DONE]->(thing)-[:IS_TAGGED_WITH]->(tag)<-[:IS_TAGGED_WITH]-(theirThing)<-[:HAS_DONE]-(people)
(me)-[:HAS_DONE]->(thing)-[:IS_TAGGED_WITH]->(tag)<-[:IS_INTERESTED_IN]-(people)
(me)-[:IS_INTERESTED_IN]->(tag)<-[:IS_TAGGED_WITH]-(theirThing)<-[:HAS_DONE]-(people)
(me)-[:IS_INTERESTED_IN]->(tag)<-[:IS_INTERESTED_IN]-(people)
Collaborative filtering usually deals with some ratings.
태그의 경우를 들어, 다음과 같은 표기법을 만들 수 있습니다 :
U={u_1, u_2,..., u_n} - users
I={i_1, i_2,..., i_m} - interests
T={t_1, t_2,..., t_k} - things
UIsim을 (u_i, u_j) - 유사성을 2 명의 사용자의 이익을 공통 관심 수를 한 사용자가 추가 한 최대 관심사 수로 나눈 값입니다.
UTsim (u_i, u_j) - 두 명의 사용자의 유사점. 사물에 대한 공통 태그 수를 한 명의 사용자가 추가 한 최대 태그 수로 나눈 값입니다.
두 사용자 간의 최종 유사도는 w1 * UIsim (u_i, u_j) + w2 * UTsim (u_i, u_j)입니다. 여기서 w1 + w2 = 1입니다.
이 공식을 Cypher로 구현할 수 있습니까? 내 말은 max
함수가 있습니까? 그리고 UNION
은 네 가지 경우를 그룹화하는 데 적절합니까?