- 사용자가 읽은 책을 입력하면 추천 모델이 다음에 읽을 책을 제안하는 시스템
- 검색 결과와 추천에는 인기 임계치 이상의 도서만 포함
- 인기도가 낮은 책은 사이트의 다른 섹션(intersect) 에서 활용 가능
- 3권 이상의 책을 입력할 때 가장 정확한 추천 결과 제공
- 대규모 리뷰 데이터를 활용한 개인화 독서 추천 기술의 실험적 구현
도서 추천 기능
- 사용자가 이미 읽은 책을 입력하면 모델 기반 추천 결과를 제공
- 입력된 책 목록을 바탕으로 다음에 읽을 만한 책을 제시
- 추천 및 검색 결과에는 일정 수준 이상의 인기 도서만 포함
- 인기도 기준 이하의 책은 추천 결과에서 제외됨
입력 및 검색 방식
- 검색창에 두 글자 이상 입력 시 결과 표시
- 사용자가 선택한 책은 ‘Selected Books’ 영역에 표시되며,
아직 선택하지 않은 경우 “No books selected yet” 문구가 나타남
추가 기능
- 인기도가 낮은 책은 /intersect 페이지에서 별도로 활용 가능
- 3권 이상의 책을 입력하면 추천 정확도가 향상됨
서비스 개요
- 사이트는 대규모 Goodreads 리뷰 데이터(30억 건) 를 기반으로 한 추천 모델을 사용
- 목표는 사용자의 독서 이력에 따라 개인화된 도서 추천 경험을 제공하는 것
- 원문에 추가적인 기술 세부사항이나 알고리듬 설명은 없음
Hacker News 의견
- Goodreads의 이용약관 4항을 위반하는 것 아닌지 궁금함
“서비스 내 콘텐츠를 수정, 복제, 배포, 파생작품 제작 등으로 활용하지 말라”고 되어 있는데, 리뷰어들의 콘텐츠를 LLM 학습에 사용하려면 명시적 허락이 필요한 것 같음- 요즘 시대엔 이런 조항이 큰 의미가 없다고 생각함
스크래핑의 합법성은 관할 지역에 따라 다름. 미국에서는 HiQ Labs v. LinkedIn 판례 덕분에 공개된 웹페이지를 긁는 행위가 CFAA 위반이 아님이 인정되었음. 그래서 공개 데이터 스크래핑 스타트업이 많이 생긴 것임 - 기술적으로 Goodreads의 저작물 자체를 공개적으로 사용하는 건 아님
사이트에 표시되는 정보는 제목과 저자뿐이고, 이는 Goodreads의 소유가 아님.
“파생작품 제작” 조항에 걸릴 수도 있겠지만, 리뷰 기반으로 책을 추천하는 게 침해라고 보긴 어려움.
유튜버가 “리뷰 50개 읽고 추천하는 책” 영상을 만드는 것과 비슷한 수준임 - 요즘은 전체 책을 LLM에 학습시키는 것도 공정 이용(fair use) 으로 간주되므로, 리뷰 역시 허락이 필요 없을 가능성이 높음. 그래도 법률 전문가의 의견을 들어보고 싶음
- 왜 이미 답을 알고 있는 질문을 하는지 모르겠음
- 요즘 시대엔 이런 조항이 큰 의미가 없다고 생각함
- 책을 계속 추가하다가 “너무 많다”는 메시지를 받았음. 정말 재미있는 아이디어임
다만 몇 가지 제안이 있음- UI: “Add”를 누른 책은 추천 목록에서 사라지게 해야 함. 그대로 남아 있으면 헷갈림
- 추천 다양성: 시스템이 내가 이미 읽은 책을 너무 잘 맞히긴 했지만, 새로운 발견은 적었음.
내가 읽은 책 목록이 충분히 많다면, 나와 비슷한 독자(‘eigenfriends’)를 찾아서 그들이 읽은 논쟁적이거나 소수 취향의 책을 추천해주면 좋겠음
다음엔 VLM을 연결해 책장 사진으로 입력할 수 있게 하면 재미있을 듯함
- 사이트의 “intersect” 페이지에서는 여러 책을 입력해 공통 독자 집합을 찾을 수 있음.
예를 들어 “Lenin’s Tomb”와 “Secondhand Time”을 넣으면, 두 책을 모두 읽은 사람들이 읽은 다른 책을 볼 수 있음.
이는 Filmaffinity의 방식과 유사함. 그들은 ‘soulmates’라 불리는 유사 취향 유저 그룹을 기반으로 추천을 제공함
개인적으로는 논쟁적인 책보다 다른 취향의 친구 필터링을 통해 더 신선한 추천을 얻는 게 낫다고 생각함
- 사이트 속도도 빠르고 정말 멋짐
하지만 시리즈 중 한 권(예: Discworld #33)을 넣으면 그 시리즈가 추천을 지배함. 이미 읽고 있는 시리즈는 제외하고 싶음
또 Goodreads에 있는 책 몇 권이 검색되지 않았음. 데이터셋에 빠진 듯함
“Similar” 버튼을 눌렀을 때는 형식적으로 비슷하지만 맥락은 다른 책이 나왔음.
그래도 일반적인 책에서는 내 위시리스트와 잘 맞았음- 시리즈 처리 방식이 가장 큰 문제라고 생각함
테스트 지표와 품질 점검이 만족스러워서 릴리스했지만, 해결책은 transformer 모델로 후보 100~200개 생성 후 reranker 적용일 것 같음
- 시리즈 처리 방식이 가장 큰 문제라고 생각함
- 추천 시스템을 만들어본 입장에서, 이제부터가 진짜 어려운 부분임
지금은 콘텐츠 기반 추천에 가깝지만, 앞으로는 우연성(serendipity) , 새로움(novelty) 같은 지표도 고려해야 함
실제 서비스에서는 목적별로 다른 추천기를 두고, 결과를 가중 통합하는 게 효과적이었음
예를 들어 콘텐츠 기반, 그래프 기반, 특정 목적에 맞춘 모델, 심지어 TF‑IDF/BM25/Splade 기반까지 섞는 식임
사람마다 추천받고 싶은 방식이 다르기 때문에, 사용자별 가중 조정이 핵심임 - 입력한 책의 저자는 출력에서 제외해야 함
이미 그 작가를 좋아한다면 다른 작품도 알아서 찾아볼 테니, 같은 저자의 책을 추천하는 건 의미가 없음
진짜 흥미로운 추천은 (1) 내가 좋아하고 (2) 예상치 못한 책임
너무 비슷한 추천은 에코 챔버를 만들 위험이 있음- 시리즈는 제외에 동의하지만, 저자까지는 옵션으로 두는 게 좋겠음
한 번 읽은 작가의 다른 작품이 있는지 모르는 경우도 많음 - 이미 읽은 책이 계속 추천되는 건 별로임
- 시리즈는 제외에 동의하지만, 저자까지는 옵션으로 두는 게 좋겠음
- 다양한 책을 입력했는데, 내가 이미 읽고 좋아한 책들을 잘 맞춰줌
다만 싫어하는 책 신호(negative signal) 도 추가할 수 있으면 좋겠음
전반적으로 꽤 인상적인 결과였음 -
robots.txt에 명시적으로 스크래핑 금지(disallow) 라고 되어 있음
법적 문제를 떠나 윤리적으로 부적절하다고 느낌- Goodreads에서 자주 리뷰를 쓰는 입장으로서, 이런 사용은 불쾌하게 느껴짐
- 마지막에 추가한 책이 추천 결과에 과도한 영향을 주는 것 같음
- 이는 positional embedding의 특성 때문임
마지막 항목이 다음 상호작용 예측에 가장 관련성이 높게 반영되기 때문임
더 많은 책을 추가하면 이 효과가 완화됨
- 이는 positional embedding의 특성 때문임
- 우리는 2016년부터 이 데이터셋을 구축해왔고, 이미 커버되어 있음
현재 TestFlight 비공개 베타 중이며 곧 공개 예정임 - 5년 전쯤 “좋은 갱스터 영화 추천해줘”라고 말하면 새로운 영화를 찾아주는 엔진을 상상했음
그땐 대부분이 불가능하다고 했지만, 이제는 가능해진 듯함
다만 이렇게 큰 데이터셋이 있다면 꼭 AI가 필요한지 의문임
SASRec/RAG 같은 모델 대신, 예전 last.fm처럼 단순한 랭킹과 교집합 계산으로도 비슷한 결과를 낼 수 있지 않을까 생각함
예전에 추천용 ‘뇌’ 그래프 구조를 구상했는데, 아이템 간 연결을 따라 점수를 퍼뜨리는 방식임.
실제로 Amazon 같은 곳에서도 이런 변형이 쓰이고 있을 것 같음- “좋은 갱스터 영화 추천해줘”라는 요청만으로는 불가능함
사용자가 본 영화나 취향 정보를 모르면, “아직 안 본데 좋아할 영화”를 정확히 추천할 수 없음
결국 정보 제약을 완화하면 가능한 일반 추천 시스템이 됨 - 참고로 last.fm도 단순 랭킹이 아니라 기본적인 머신러닝 알고리즘을 사용했음
- “좋은 갱스터 영화 추천해줘”라는 요청만으로는 불가능함