사용자가 자동완성 결과를 클릭하여 선택하면(전체 완성) 이걸 로그로 기록할 예정임
이유는 부분 텍스트보다 전체 완성이 사용자의 관심을 더 보이는거니
ML 데이터 파이프라인을
클릭 로그 수집 -> 데이터 클리닝 워커 -> 모델 훈련 워커 -> 모델 오브젝트 스토어 로 구축 할 것 같고
로지스틱 회귀로 입력은 후보 검색 결과의 피처 + 사용자 프로필 피처를 사용할거임
피처 스토어로는 아이템(검색 결과) 피처 스토어, 사용자 피처 스토어(사용자ID) 로 쓸거고
OLTP 캐시 버전 (서빙용,빠른조회) , OLAP 버전 (훈련용,대량 배치 읽기)로 분리할 예정
후보수는 20~30개로 할거고 랭킹으로 상위 10개를 필터링 할 것 같고
Redis로 더 적은 키에 더 긴 결과 리스트를 저장할 것 같음
그럼 여기서 모델 배포 방법이 3가지 정도가 생기는데
서비스 내 배포, 별도 랭킹 서비스 , SageMaker(Ato ML) 이 있음
서비스 내 배포로 한다면 -> 배포 시 모델도 함께 Pull 하고 머신에 직접 호스팅 할 것 같음. 모델을 역직렬화해서 RAM에 올릴 것
(장점은 추가 네트워크 홉이 없고 단점은 Go나 C++ 환경에서 pickle 호스팅이 어려울 수 있음)
별도 랭킹 서비스 -> Python Flask 등 별도 서비스에 모델 호스팅 상위 결과를 전달하면 10번의 모델 호출 수행 후 랭킹 반환
(장점은 코드 분리가 깔끔하고 단점은 추가 네트워크 홉이 발생함)
SagaMaker -> 훈련 데이터를 SageMaker에 제공 -> 자체적으로 모델 생성`호스팅 하는 것
(장점은 자체 데이터 인력 불필요하고 PoC에 유용함. 단점은 10개의 별도 API 호출 필요할 수 있고 고성능용은 아님)
일단 서비스 내 배포로 빠르게 검증하고 복잡도가 올라가면 별도의 랭킹 서비스로 분리하는게 맞는건가?
현업에서는 보통 어떻게 하는지 궁금함
2 - dc App
근데 솔직히 글을 읽고선 ml로 뭘 하려는건지 이해못했어 - dc App
보통 자동완성은 모든 사용자에게 똑같은 인기순 결과를 보여주는데 예를들면 javaisland나 java coffee java programming 순서로 나온다고 할때 개발자한테는 java programming이 1순위고 여행계획 만드는 사람은 자바섬이 1순위여야 하잖아 그냥 이걸 해결하는 거긴함 근데 ml 안해도 되는거긴 한데 저번에 삼성 면접갔을때 ml에 대해 물어본 경험이 있어가지고 이번기회에 만들까 생각해본 거였어
@학벌안좋은취준생 음... 그러면 면접관들에게서 이런 챌린지들이 있을 수 있을거야. 1. 개인화 ml을 할 만큼 개인별 검색 데이터가 충분할까? 2. ml의 추론자체에 latency가 사용자 경험에 안 좋은 영향을 주지 않을까? 3. 내 최근 검색어를 캐싱하거나 사용자가 속한 그룹별 인기 검색어 가중치 룰 정도로 충분하지 않을까? 등 - dc App
@sloth000(219.250) 오해할까봐 쓰면은 당연히 말리려는건 아니고 저런 예상 질문에 대비하면좋겠다 그런거야. cold start 문제나 무거운 레이어가 들아갔을 때 사용성이나 roi를 고민해봤나라는 그런 질문같은거 - dc App
@sloth000(219.250) 오키 그러면 언제 ML이 필요하고 언제 불필요한지 판단 가능한걸 보여줘야겠네 ROI 관점에서 트래픽 O 이상 사용자 O명 이상일 때 룰 기반 ML의 개선폭이 의미 있어진다 이런 느낌으로