
Agora는 쇼핑 검색어와 Amazon의 검색 결과를 비교해 검색 계획과 상품 순위 모델을 매일 다시 학습하는 시스템을 만들었다. 다만 현재 학습은 실시간 강화학습이 아니라 기록된 데이터에 기반한 배치 학습이며, Amazon 결과를 정답으로 간주하지 않는다.
파람 자지(Param Jaggi)가 설명한 검색 과정은 네 단계다. 미세조정한 Qwen 2.5 모델이 검색어를 구조화하고, Typesense가 키워드·벡터 검색으로 후보 100개를 모은다. Qwen3-Reranker-4B 기반 교차 인코더가 후보를 다시 매긴 뒤, 데이터로 모델 출력을 검증하는 코드가 결과를 확인한다. 딥 리서치 모드만 예외로 Claude를 사용하며, 이 모드도 같은 후보 검색·순위 결정 과정을 거친다. 모델은 자체 인프라에서 Ollama로 제공한다.
검색 계획 모델은 키워드 검색용 resolvedQuery와 벡터 검색용 embeddingQuery를 따로 만든다. 예를 들어 보온 장갑을 찾을 때 키워드 검색에는 상품명에 등장할 법한 ‘heated gloves’를, 벡터 검색에는 ‘heated winter gloves battery powered’처럼 문맥을 더한 검색어를 쓸 수 있다. 검색 유형에 따라 키워드와 벡터 검색의 비중도 달라진다. 정확한 상품·호환성 검색은 키워드에, 선물·용도 검색은 의미 검색에 더 무게를 둔다.
Typesense는 10개 샤드에서 검색을 수행한다. 각 상품에는 이미지와 텍스트를 바탕으로 Qwen3-VL이 만든 256차원 임베딩이 있다. 각 샤드가 20개씩 반환한 결과를 합쳐 후보 100개를 만들며, 가격·카테고리·평점 같은 조건은 모델이 기억하도록 맡기지 않고 필터로 적용한다. 매장이나 브랜드를 지정하면 해당 카탈로그만 대상으로 추가 검색도 한다.
재순위 모델은 후보마다 0에서 1 사이의 관련도 점수를 매긴다. 0.4 미만인 상품은 제외한다. 매장이나 브랜드를 지정한 경우 해당 상품을 위로 올리되, 페이지의 최고 점수보다 0.15 이내로 낮은 점수를 받은 상품만 적용한다. 남은 후보가 세 개 미만이면 계획 모델이 탈락한 후보를 참고해 검색 계획을 다시 쓰고, 검색을 반복한다. 스테이징 환경에서는 검색에 약 150밀리초, 재순위 결정에 약 1.5초가 걸린다. 언어 모델 호출까지 포함하면 대화 한 번에 몇 초가 걸리며, 이 지연이 현재 설계의 주요 비용이라고 Jaggi는 설명한다.
모델이 만든 결과는 시스템이 보유한 데이터로 확인한다. 예를 들어 가격 필터는 검색어의 숫자, 저장된 예산, 또는 수정 중인 검색의 한도와 근거가 있을 때만 인정한다. 상품 유형으로 분류한 단어는 카탈로그에서 확인하며, 그 단어가 들어간 상품명 가운데 30% 이상에서 핵심 명사로 쓰여야 상품 유형으로 인정한다. 요청한 상품이 결과에 하나도 없으면 해당 상품을 직접 검색해 포함된 결과 페이지를 남긴다. 이런 검사는 사용자 보호뿐 아니라 모델이 자기 오류를 학습 기록에서 다시 배우는 일을 막기 위한 것이다.
매일 학습하는 방식과 한계
시스템은 검색어, 검색 계획, 후보 100개, 최종 순위 페이지를 기록한다. 같은 검색어를 Amazon에서도 실행해 상위 결과를 저장하고, 두 결과 집합의 상품이 같지 않더라도 비교할 수 있도록 Amazon 상품을 Agora 카탈로그와 같은 벡터 공간에 임베딩한다. 비교 신호에는 기준 결과의 상품 또는 유사 상품이 얼마나 포함됐는지, 벡터 공간에서 결과가 얼마나 가까운지, 상품명이 얼마나 겹치는지 등이 포함된다. 후보 풀과 최종 페이지에서 각각 신호를 계산해 어느 단계에서 문제가 생겼는지 살핀다.
후보 풀에는 좋은 상품이 있었지만 최종 페이지에 없으면 재순위 모델의 학습 문제로 본다. 후보 풀에 좋은 상품이 없지만 카탈로그에 비교 가능한 상품이 있다면 검색 계획 또는 검색 단계의 문제로 판단한다. 카탈로그에 비교 가능한 상품 자체가 없으면 더 많은 매장이 필요한 상황으로 분류한다.
Jaggi는 9월에 Amazon 결과가 더 나아 보였던 검색 65건을 골라 분석했다. 이 검색에서 Agora 후보 풀의 Amazon 결과와의 시각적 겹침은 평균 19.5%, 최종 페이지는 평균 6.2%였다. 65건 중 48건은 후보 풀이 최종 페이지보다 높은 점수를 받았다. 그는 이를 재순위 단계에서 후보를 잘못 고른 사례로 해석했다. 다만 이 검색 집합은 실패 사례를 기준으로 골랐으므로, 이 수치가 전체 검색의 평균 품질을 나타내지는 않는다고 밝혔다.
최근 24시간의 기록은 하루 한 번 새 검색 계획 모델과 재순위 모델을 학습하는 데 쓰인다. 다만 새 모델이 이전 기록에 없는 출력 항목을 잊을 수 있다. 예컨대 사용자의 상시 요구사항이나 ‘저것보다 싼 상품’ 같은 상대 가격 항목을 추가하면, 학습 데이터에도 해당 항목을 표시해야 한다. 이 작업은 진행 중이다. 새 모델을 실제 트래픽에 적용하기 전에 어떻게 평가하는지는 원문에서 구체적으로 설명하지 않았다.
Agora는 이 과정을 강화학습이라고 부르지만, 온라인 강화학습은 아니라고 설명한다. 모델은 대화 도중 갱신되지 않고, 더 나쁜 결과를 일부러 보여주며 탐색하지도 않는다. 갱신 방식은 기록된 데이터를 이용한 지도 미세조정과 선호도 학습에 가깝다. 더 정확한 표현으로는 약한 외부 보상 신호를 사용하는 배치형 오프폴리시 학습이라고 Jaggi는 설명한다. 기록에는 이전 모델이 선택한 결과만 남으므로 선택하지 않은 결과의 성과는 알 수 없고, 다른 마켓플레이스의 결과를 보상으로 삼으면 그곳과 비슷한 결과를 내는 데 그칠 수도 있다.
Amazon을 참고 자료로 삼는 이유
Agora는 Amazon을 정답이 아니라 참고 자료로 취급한다. Consumers’ Checkbook의 조사에서는 상품 검색 50건의 Amazon 결과 가운데 첫 25개 중 54%가 유료 노출이었다. Jaggi는 Amazon을 그대로 따라 하려는 것이 아니라고 밝혔다. 다만 Amazon에는 오랜 기간 쌓인 다양한 검색어와 쇼핑 행동의 결과가 있어 검색 의도를 이해하는 데 참고할 수 있다는 설명이다. 두 서비스의 카탈로그와 순위 기준이 다르므로, Amazon과 다르게 나온다는 사실만으로 오류라고 볼 수는 없다.
Agora는 장기적으로 다른 마켓플레이스의 결과보다 자사 쇼핑객의 행동에서 더 많은 신호를 얻으려 한다. 이용이 늘면 상품을 열어 보거나 비교하고, 구매하거나 반품하는 행동을 활용할 계획이다. 현재는 벤치마크 비교에 주로 의존하며, 실제 사용자 행동을 반영하는 신호는 앞으로의 목표다.
Jaggi는 매장이 늘면 검색 후보가 다양해지고, 검색이 늘면 실제 사용자가 입력한 검색어를 더 많이 학습하며, 쇼핑객이 늘면 외부 기준에 덜 의존하는 보상 신호를 얻을 수 있다고 설명한다. Agora는 순위 결정에 돈을 받지 않고 자체 상품도 판매하지 않는다고 밝히며, 보상 기준을 사용자가 알맞은 상품을 찾았는지에 둔다고 주장한다. 다만 이런 설계가 세계에서 가장 뛰어난 전자상거래 검색으로 이어질 것이라는 말은 목표이지, 이미 입증된 결과는 아니라고 덧붙였다. 학습 루프가 오류도 키울 수 있어 측정이 중요하다는 점도 인정했다.
아직 해결되지 않은 문제로는 사용자 행동 신호가 충분해지기 전까지 벤치마크를 넘기 어려운 점, 선택한 결과만 관찰해 생기는 편향, ‘Nike shoes’처럼 의도가 넓은 검색어의 해석, ‘결혼식 의상’처럼 여러 카테고리를 아우르는 요청, 대화당 몇 초가 걸리는 지연이 있다. 응답을 스트리밍하는 방안은 검토 중이며, 응답 형식은 이를 지원하도록 마련했다고 밝혔다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요