패스트캠퍼스 환급챌린지 39일차 : 30개 프로젝트로 끝내는 추천시스템 구현 초격차 패키지 강의 후기
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
공부 시작
강의 종료
강의장
학습 인증샷
학습후기
TensorFlow Recommenders란
구글에서 만든 추천 시스템 전용 라이브러리.
TensorFlow 기반이고, 이름은 TensorFlow Recommenders, 줄여서 TFRS라고 부른다.
추천 모델을 직접 짜면 귀찮은 부분이 많은데,
이걸 일관된 구조로 쉽게 만들고 실험하게 도와주는 프레임워크라고 보면 됨.
모델 구조, 학습, 평가, 서빙까지 한 번에 구성할 수 있도록 설계돼 있음.
왜 이런 라이브러리가 필요한가?
추천 시스템은 입력이 유저와 아이템 두 개로 구성되는 경우가 많고
딥러닝으로 하려면 embedding 처리도 많고 loss도 일반 분류랑 다르게 구성해야 됨.
또한 전체 아이템 중에서 일부만 골라야 하기 때문에 속도, 메모리 이슈도 존재함.
이걸 TensorFlow Core로 직접 구성하면 귀찮고 버그도 많이 남.
TFRS는 그런 부분을 미리 추상화해서 제공해주는 셈.
기본 구조 (Query Tower, Candidate Tower)
TFRS 구조는 기본적으로 Two-Tower 구조 기반.
Query Tower는 유저 쪽 벡터 만들고
Candidate Tower는 아이템 벡터 만든다.
각각 따로 embedding한 다음
dot product나 cosine similarity 등으로 유사도 계산해서 추천 점수 구함.
보통은 Retrieval Loss 사용.
유저에게 긍정적으로 반응한 아이템(positive)과
부정 샘플(negative) 여러 개로 학습 구성함.
Task와 Loss 구성
TFRS에서는 학습 목적을 RetrievalTask, RankingTask 등으로 지정할 수 있음.
loss와 metric을 따로 정의할 필요 없이 Task 클래스에 묶어서 구성 가능.
이 구조 덕분에 코드가 복잡해지지 않고, 멀티태스크도 쉽게 구성 가능.
예를 들어 유저가 클릭한 확률 예측과, 좋아요 누를 확률을 동시에 예측하는 모델도 작성 가능.
좋은 점
Keras 기반이라 코드 읽기 쉽고 템플릿화 가능함.
데이터에서 vocab 만들고 embedding layer 붙이는 과정까지 거의 다 제공.
ANN 기반 추천 결과 뽑기도 가능해서
실제 추천 결과를 빠르게 뽑고 테스트해볼 수 있음.
call 함수 하나로 전체 구조 묶을 수 있어서
retrieval + ranking 통합한 구조도 직관적으로 설계 가능.
실습할 때 느낀 편리함
MovieLens 데이터 같은 공개 데이터로 실험하기 너무 좋음.
embedding 구조, 학습 루프, 평가 지표까지 다 구조화돼 있어서
그냥 유저 ID랑 아이템 ID만 있으면 추천 실험 바로 시작 가능.
개인적인 느낌으로는 구조를 고민하는 데 쓰는 시간을
실험 반복에 쓸 수 있게 해준다는 점이 가장 큰 장점.
주의할 점
아이템 수가 많아지면 embedding 테이블 사이즈가 커져서
메모리 문제 생길 수 있음.
그래서 실무에서는 ANN 서치랑 결합하거나
서빙 단계에서 최적화 따로 해줘야 함.
TensorFlow 버전에 따라 의존성 문제 생기기도 함.
tensorflow-recommenders 설치할 땐 버전 확인 필요.
느낀 점
지금까지 추천 시스템 코드 짤 때
embedding 따로 만들고 loss 따로 계산하고 평가 지표도 직접 짜고
이런 게 꽤 귀찮았는데
TFRS는 그런 걸 통으로 구조화해서
'추천 시스템 만들기'라는 맥락 안에서 실험할 수 있도록 도와주는 느낌.
특히 학습된 유저 벡터와 전체 아이템 벡터로
Top-K 추천을 빠르게 추론할 수 있는 부분이 되게 유용했음.
추천 시스템 배우는 입장에서
기본 구조 이해하고 실험하는 데에는 TFRS가 딱 맞는 도구.
Two-Tower 구조에 익숙해지고,
retrieval vs ranking의 차이도 코드로 실습하면서 익힐 수 있음.
실무에 쓰기 전 연습용, 논문 실험 재현용,
또는 경량 추천 시스템 프로토타입 만들 때 써먹기 좋은 도구라고 생각함.