# Goodreads 리뷰 30억 건을 활용한 추천 모델 기반 도서 추천 서비스

> Clean Markdown view of GeekNews topic #24206. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=24206](https://news.hada.io/topic?id=24206)
- GeekNews Markdown: [https://news.hada.io/topic/24206.md](https://news.hada.io/topic/24206.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-11-07T19:32:58+09:00
- Updated: 2025-11-07T19:32:58+09:00
- Original source: [book.sv](https://book.sv)
- Points: 1
- Comments: 1

## Topic Body

- 사용자가 읽은 책을 입력하면 **추천 모델**이 다음에 읽을 책을 제안하는 시스템  
- 검색 결과와 추천에는 **인기 임계치 이상**의 도서만 포함  
- 인기도가 낮은 책은 사이트의 **다른 섹션(intersect)** 에서 활용 가능  
- **3권 이상**의 책을 입력할 때 가장 정확한 추천 결과 제공  
- 대규모 리뷰 데이터를 활용한 **개인화 독서 추천 기술**의 실험적 구현  

---
### 도서 추천 기능
- 사용자가 이미 읽은 책을 입력하면 **모델 기반 추천 결과**를 제공  
  - 입력된 책 목록을 바탕으로 다음에 읽을 만한 책을 제시  
- 추천 및 검색 결과에는 **일정 수준 이상의 인기 도서**만 포함  
  - 인기도 기준 이하의 책은 추천 결과에서 제외됨  

### 입력 및 검색 방식
- 검색창에 **두 글자 이상** 입력 시 결과 표시  
- 사용자가 선택한 책은 **‘Selected Books’** 영역에 표시되며,  
  아직 선택하지 않은 경우 “No books selected yet” 문구가 나타남  

### 추가 기능
- 인기도가 낮은 책은 **/intersect 페이지**에서 별도로 활용 가능  
- **3권 이상**의 책을 입력하면 추천 정확도가 향상됨  

### 서비스 개요
- 사이트는 **대규모 Goodreads 리뷰 데이터(30억 건)** 를 기반으로 한 추천 모델을 사용  
- 목표는 사용자의 독서 이력에 따라 **개인화된 도서 추천 경험**을 제공하는 것  
- 원문에 추가적인 기술 세부사항이나 알고리듬 설명은 없음

## Comments



### Comment 46043

- Author: neo
- Created: 2025-11-07T19:32:59+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=45825733) 
- Goodreads의 **이용약관 4항**을 위반하는 것 아닌지 궁금함  
  “서비스 내 콘텐츠를 수정, 복제, 배포, 파생작품 제작 등으로 활용하지 말라”고 되어 있는데, 리뷰어들의 콘텐츠를 LLM 학습에 사용하려면 **명시적 허락**이 필요한 것 같음
  - 요즘 시대엔 이런 조항이 큰 의미가 없다고 생각함  
    스크래핑의 합법성은 **관할 지역**에 따라 다름. 미국에서는 [HiQ Labs v. LinkedIn](https://en.wikipedia.org/wiki/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](https://www.goodreads.com/robots.txt)에 명시적으로 **스크래핑 금지(disallow)** 라고 되어 있음  
  법적 문제를 떠나 **윤리적으로 부적절**하다고 느낌
  - Goodreads에서 자주 리뷰를 쓰는 입장으로서, 이런 사용은 **불쾌하게 느껴짐**
- 마지막에 추가한 책이 추천 결과에 **과도한 영향**을 주는 것 같음
  - 이는 **positional embedding**의 특성 때문임  
    마지막 항목이 다음 상호작용 예측에 가장 관련성이 높게 반영되기 때문임  
    더 많은 책을 추가하면 이 효과가 완화됨
- 우리는 2016년부터 이 **데이터셋을 구축**해왔고, 이미 커버되어 있음  
  현재 **TestFlight 비공개 베타** 중이며 곧 공개 예정임
- 5년 전쯤 “**좋은 갱스터 영화 추천해줘**”라고 말하면 새로운 영화를 찾아주는 엔진을 상상했음  
  그땐 대부분이 불가능하다고 했지만, 이제는 가능해진 듯함  
  다만 이렇게 큰 데이터셋이 있다면 꼭 AI가 필요한지 의문임  
  **SASRec/RAG** 같은 모델 대신, 예전 **last.fm**처럼 단순한 랭킹과 교집합 계산으로도 비슷한 결과를 낼 수 있지 않을까 생각함  
  예전에 추천용 **‘뇌’ 그래프 구조**를 구상했는데, 아이템 간 연결을 따라 점수를 퍼뜨리는 방식임.  
  실제로 **Amazon** 같은 곳에서도 이런 변형이 쓰이고 있을 것 같음
  - “좋은 갱스터 영화 추천해줘”라는 요청만으로는 불가능함  
    사용자가 본 영화나 취향 정보를 모르면, “아직 안 본데 좋아할 영화”를 정확히 추천할 수 없음  
    결국 **정보 제약을 완화하면 가능한 일반 추천 시스템**이 됨
  - 참고로 **last.fm도 단순 랭킹이 아니라 기본적인 머신러닝 알고리즘**을 사용했음
