내용 정리 및 사진 정리가 아직 안됨
11:50 ~ 12:30
실시간 유저 행동 로그를 활용한 추천 검색어 모델 개발 과정을 소개합니다. 퀵커머스에서 추천 검색어가 필요한 이유와 추천 검색어 서빙 아키텍처를 설명합니다.
예정
/
B Mart 내에 추천 시나리오.
상품 추천을 넘어 다양한 문제를 데이터로 풀고 싶었다.
UX 최적화 과제
동일한 지면에서 노출 순서를 개인화 하는 시나리오의 예시
Quick Commerce
소개
장보기 쇼핑에는 다양한 상품과 업체들이 입점되어 있다. B마트 뿐만 아니라 다양하다.
특징
탐색을 하는 소비자의 관심사가 변한다. 소비자는 타이핑을 하여 검색을 하게 된다. 길이가 긴 단어들은 타이핑하다 실수를 할 수 있다.
한 화면에 키워들이 섞여 있다.
신규 개편을 통해 도입. 지면을 분리 시킴.
2 types of models
오랜 기간 동안 어떤 상품에 관심이 있었는지를 찾아봄(배치)
실시간 클릭을 했을 때에 대한 데이터에 집중
해당 데이터를 통해서 실시간 추론 또는 배치추론을 하게 됨.
- 배치 모델
- 실시간 모델
과거 히스토리가 있겠지만, 어제까지의 데이터 보다는 현재 데이터에 대한 영향을 더 많이 받는다.
서로 다른 필요에 의해서 두 가지 모델 모두 만들게 됨.
배치모델
4가지 스텝으로 나누어짐
과거 상품에 대한 카테고리 정보가 필요.
덴스 메트릭스를 만들게 되면 메모리가 넘치고, 커널이 중단되면 야근을 해야겠죠. 대부분이 0인 데이터로 차지하게 내버려둘수 없다. 서비스에 나갈때는 배제가 필요함.
효율적으로 관리하기 위해서 Sparse Matrix로 활용, 이는 추론에도 활용됨. 유저가 어떤 사품에 관심을 가졌는지를 저장하는 값이다.
적절한 차원 축소가 필요
-> 64차원으로 변환이 된다.
분류기를 학습한다. MLP를 사용했다. 유저의 쇼핑 초기단계에는 키워드에 집중한다. 유저가 처음 들어와서 클릭했던 키워드들을 타겟 키워드로 사용. 불필요한 키워드 제거하기위해 인기 500개만 사용.
추론 시점
메모리 효율이 이미 많이 개선된 상황. 수많은 유저를 10만명으로 나눠서 청크 스파스로 나눈 다음 추론을 반복하는 방법으로 진행. 중간에 메모리가 터지는 문제 해결
배치 처리 모델에서 후처리
우유, 계란 이런 인기 키워들이 주로 추천되는데 보정 작업이 필요함. 인기도 관련 보정 작업이 들어감.하이퍼파리미터 M,L,알팔로 조정함.
리얼타임 (실시간 모델)
상황
배치 추천 검색어가 이미 노출된 상태다. (파스타 -> 새우 마늘 같은게 나옴, 24시간 동안 동일한 추천이 들어감, 셔플링을 해줄 수도 있지만, 유저가 실시간으로 피드백 데이터를 남기지만 업데이트는 안됨)
유저가 검색 지면에 다시 진입할 경우 새로운 추천을 해야한다. 유저가 어떤 상품을 어떻게 클릭했는지, ID와 키워드는 무엇인지 추출해야한다. 상품의 ID정보와 텍스트 정보를 받아서 임베딩을 함.
상품은 고유한 ID와 dㅣㅁ베딩 값으로 ID 정보와 텍스트 정보를 임베딩 정보로 치환해야한다. 사전에 학습한 인코더를 활용하여 치환함.
인코더에 대한 소개.
1. 그래프 인코더에 대한 소개.
상품과 키워드 카테고리 3가지로 그래프로 표현 가능.
검색어와 상품이 연결됨. N = M 매핑
상품과 카테고리의 연결
분포 정보를 만들어서 Random walk를 만듬.
현재 노드에는 current -> 다음에 대한 Next와 이전 노드에 대한 Prev 노드가 있다.
2가지 변수를 고려할 수 있다.
1. Weight가 된다. 그래프를 그리면서 엣지에 대한 것을 수치로 나타냄
2. 알파 변수 BFS, DFS 방식이 있다. -> 랜덤 워크 진행하는 방법
Q가 1보다 작은 값이라면 Next1을 선택할 확률이 2보다 커지게 된다.
Q가 1보다 큰 값이라면 Next 2 노드로 갈 수 있다.
P 값을 1보다 작다면, 예전 노드로 돌아갈 확률이 작아짐
랜덤워크로 생성된 시퀀스를 통해 노트2벡터로 활용-> word2vec 이랑 비슷하다. (상품과 키워드 간의 관계)
2타워 model이 그래프 모델을 대체하고 있다.
네트워크 측면에서 보면, 임베딩을 생성하는 반면에, 투타워는 전체적인 네트워크 구조를 잘 반영하지 못하기도 한다.
그래프 인코더 덕분에 백테 표현이 가능하짐.
텍스트 인코더를 사용.
Positive에 가깝고 Negative에 멀리 되도록 학습을 진행한다.
ID와 Text에 대한 정보를 임베딩으로 표현이 가능해 졌다.
처음은 배치 모델에 대하여 이야기 하고 NMF + MLP로 후처리를 통해서 추천 제공.
실시간에 대하여 이야기함. 상품과 키워드를 인코더로 인코딩을 했다.
시퀀스 모델을 모델을 만들었다. 연속해서 중복이 나타날때, 1개로 치환함.
시퀀스를 이루는 토큰의 벡터로 표현할 수 있다. 토큰 임베딩으로변환
마지막으로 LSTM이나 이런거 안쓰고, Dense를 쓴 이유?
실시간 추론을 위해서 성능을 위해 간단하게 접근하기 위해 접근. 시퀀스 내에서 최근에 클릭한 토큰일 수록 다음에 예측하는게 높다라고 판단.
ROI를 고려해서 만들었고 개선의 여지가 있다.
시퀀스 임베딩과 타겟 키워드 임베딩을 계산해서 로스를 계산하여 Triplet Loss를 계산했다.
실제 서비스 적용 결과. 9월말 앱 업데이트 이후.
유저가 검색 지면에 처음 진입했을때 추천하는 검색 결과.
좌측은 배치 추천이고, 우측은 실시간 추천으로 바뀌게 됨.
추천 모델의 결과를 CTR과 함께 비교했을 때 배치는 64% 효과, 실시간은 2.34배.
마지막으로 개선해야할 과제.
추천 키워드는 인기 키워드로 할 확률이 높지만, 이제 다양성을 통해 고도화를 시도할 예정임.
4시에 승호님이 음식 추천에서 발표할 예정임.