0x00

리서치 / 일일 리포트

  • 읽은 자료 1건
  • 정본 반영 0개 파일
  • 레이더 1건
한 줄 요약Pinterest가 유저의 장기 목표(journey)를 키워드 클러스터링 대신 Qwen3-4B 한 번의 생성으로 추론하고, 그 이름을 알림 retrieval 질의로 쓰는 구조를 배포했다.

1LLM이 활동 로그에서 유저의 장기 목표를 이름으로 만들어 알림 질의로 쓴다 — Pinterest (레이더)

자료 From Activity to Intent: Generating User Journeys with LLMs — Pinterest Engineering Blog, 2026-10-09, 블로그. 저자는 9인이고, 마지막 저자 Sudarshan Lamkhede의 직책은 "Director, Machine Learning Engineering"이다. Medium 웹 페이지가 403을 돌려줘서, 같은 글의 전문이 들어 있는 Pinterest Engineering RSS로 읽었다.

배경 대부분의 추천 시스템은 "다음에 누를 아이템"을 예측한다. 하지만 부엌 리모델링이나 결혼식 준비처럼 몇 주에서 몇 달에 걸친 목표는 다음 클릭 하나로도, "Home Decor" 같은 오래가는 관심사 라벨로도 잘 표현되지 않는다. Pinterest는 이런 목표를 journey(관심사·의도·맥락이 한 시점에 겹친 것이자 세션을 넘어 이어지는 상호작용의 묶음)라고 부르고, 유저마다 진행 중인 journey 목록을 만들어 알림에 쓴다. 이번 글은 그 목록을 만드는 방식을 다단계 ML 파이프라인에서 LLM 한 번의 생성으로 바꾼 과정을 다룬다.

새로 알게 된 것A. 이전 시스템은 5단계 클러스터링 파이프라인이었고, 단계마다 오류가 쌓였다

  • 이전 시스템은 5단계 클러스터링 파이프라인이었다 확인.
    • 검색어와 저장한 Pin의 주석에서 키워드를 뽑았다.
    • 키워드를 임베딩해 계층적으로 클러스터링했다.
    • 클러스터의 최상위 키워드를 이름으로 삼았다.
    • pointwise 모델(후보마다 따로 점수를 매기는 모델)과 유사도 페널티로 순위를 매겼다.
    • 마지막으로 휴리스틱을 써서 evergreen/situational을 구분했다.
  • 이 파이프라인이 만든 journey 알림은 관심사 기반 알림보다 email 클릭률 +88%, push open +32%, 긍정 설문 +23%를 냈다 확인.
  • 문제는 단계마다 오류가 쌓인다는 점이었다 확인. 저자들은 세 가지를 꼽는다.
    • fragmentation: 하나의 부엌 프로젝트가 cabinets·countertops·backsplash 세 journey로 쪼개진다.
    • generic bucket: 클러스터가 지저분하면 "Art"·"Shopping" 같은 일반 이름으로 떨어진다.
    • incidental noise: 밈이나 연예인 클릭 몇 번이 상위를 차지한다.

새로 알게 된 것B. 새 시스템은 생성 한 번으로 journey 이름 목록을 받고, 프롬프트가 기존 랭킹·필터 모듈을 대신한다

  • 새 시스템은 프로필과 시간순 활동 로그를 넣고, journey 이름 목록을 JSON으로 받는 단일 생성이다 확인. 키워드 추출, 임베딩, 클러스터, 이름 모델이 모두 사라졌다.

  • 입력에는 360일 lookback 안에서 최대 150개 이벤트를 넣는다 확인.

    • 행동은 search·save·like·click·comment·dislike 여섯 가지로 줄였다.
    • 프롬프트에 search/save > comment > like > click > dislike 순서를 명시한다.
    • dislike를 일부러 넣어서, 지지 근거가 주로 dislike인 journey는 억제하게 한다.
  • 디코딩은 temperature를 0, 출력을 최대 300 token으로 두고, reasoning token을 끈다 확인. 같은 로그에 같은 답을 재현하기 위해서다.

  • 출력은 1~5단어짜리 이름 최대 약 12개이고, 유저의 언어로 쓴다 확인.

    • 순위 기준은 engagement 강도, 반복 근거, 최신성, 일관성, 구체성이다.
    • 근거가 없으면 빈 목록을 허용한다. 근거 없는 journey를 지어내는 것은 허용하지 않는다.
  • 프롬프트가 기존 랭킹·필터 모듈을 대체했다 확인.

    • 프롬프트의 다양성 지시가 유사도 페널티 기반 diversifier를 대신한다.
    • dislike 규칙이 수작업 negative-signal 필터를 대신한다.
    • 저자들은 그래서 프롬프트 변경을 "launch"로 취급한다고 쓴다.

    "once you collapse the pipeline, the prompt becomes the ranking policy and the safety policy. Everything the staged system encoded in model weights and thresholds now has to be clearly stated." — From Activity to Intent (블로그), 2026-10-09

  • 클러스터링 시스템은 지우지 않고 fallback으로 남겼다 확인.

새로 알게 된 것C. frontier 모델을 teacher로 삼아 distillation했고, Qwen3 4B가 프로덕션 student가 됐다

  • frontier 모델을 teacher로 써서 Qwen3 student로 distillation했다 확인.
    • teacher가 활동 이력마다 목표 journey를 만들어 합성 학습 데이터를 만들었다.
    • 이 데이터로 Qwen3 0.6B·1.7B·4B·8B를 SFT와 LoRA(전체 파라미터 대신 작은 adapter만 갱신하는 미세조정)로 학습했다.
    • teacher 모델의 이름은 밝히지 않았다.
  • 품질은 처음 수천 예제에서 빠르게 오르고, 그 뒤로는 거의 오르지 않았다 확인. 같은 종류의 예제를 더 넣기보다 어려운 통합 사례와 다국어 사례를 골라 넣는 편이 효과가 컸다.
  • 품질과 처리량의 균형에서 4B가 프로덕션 student가 됐다 확인.

새로 알게 된 것D. 배치 작업을 온라인 추론 스택으로 돌리고, 최근에 추론한 유저는 건너뛴다

  • 서빙은 배치이지만 온라인 추론 스택을 쓴다 확인. NVIDIA Dynamo 뒤에 L40S GPU의 vLLM decode worker를 두고, prefix caching과 chunked prefill을 켠다.

  • 저자들은 모든 요청이 길고 고정된 system prompt를 공유하므로 KV cache를 고려한 라우팅이 중요하다고 쓴다 확인.

  • 프로덕션에서는 GPU 100개 수준의 클러스터가 end-to-end로 초당 약 775건을 처리한다 확인. 지연은 중앙값 약 1.2초, p95 약 3.0초다.

    "In production, a cluster on the order of 100 GPUs sustains about 775 requests per second end-to-end, with a median around 1.2 seconds and p95 around 3.0 seconds." — From Activity to Intent (블로그), 2026-10-09

  • 알고리즘이 바뀌면 전체를 다시 돌리고, 평소에는 최근 활동한 유저만 매일 증분으로 돌린다 확인.

  • 처리량에 가장 효과가 컸던 조치는 GPU 증설이 아니라 최근 며칠 안에 추론한 유저를 건너뛰는 것이었다 확인.

새로 알게 된 것E. journey 이름으로 Pin을 찾아오고, 기존 Pin ranking 모델이 순위를 매긴다

  • journey 이름은 알림 파이프라인에서 retrieval 질의가 된다 확인. 추론 결과는 저장소에 기록되고, 알림 서빙이 발송 시점에 읽는다.

  • 각 journey 이름이 embedding-based retrieval(질의와 가까운 아이템을 벡터 공간에서 찾는 방식)의 질의가 되어 Pin을 가져온다 확인. 가져온 Pin은 기존 Pin ranking 모델이 순위를 매긴다.

    "each journey name then becomes a retrieval query. We built embedding-based retrieval models to pull Pins for each user journey which are further ranked by our Pin ranking models." — From Activity to Intent (블로그), 2026-10-09

  • 최근에 알림을 보낸 journey는 fatigue를 반영해 낮추고, 명시적으로 거부한 journey는 아예 억제한다 확인. 그 뒤 알림 프레임워크가 보낼지 말지와 채널을 정한다.

새로 알게 된 것F. 민감 주제는 필터와 프롬프트 지시로 막고, 일부 지역의 미성년자는 대상에서 뺐다

  • 민감 속성 추론을 여러 겹으로 막는다 확인.
    • 입력 키워드와 출력 이름 모두 알림 콘텐츠 필터를 통과해야 한다. 출력은 생성형 콘텐츠 안전 필터도 거친다.
    • 프롬프트는 건강·정치·종교·성적 지향·성별 정체성·인종 관련 주제를 추론하지 말라고 지시한다.
    • EEA·스위스·영국의 18세 미만은 현지 법 때문에 대상에서 뺐다.

새로 알게 된 것G. 클러스터링 시스템을 대조군으로 한 A/B에서 email 클릭률이 1.1%, push open이 1.3% 올랐다

  • 온라인 A/B의 대조군은 클러스터링 시스템이다 확인.

    • 첫 실험은 미국·캐나다 유저를 대상으로 했고, email 클릭률이 1.1%, push open이 1.3% 올랐다.
    • 사이트 전체의 engagement·retention 지표 여러 개에서도 통계적으로 유의한 개선이 나왔다.
    • 이어진 다국어 해외 출시도 같은 방향이었고, 두 실험을 출시하자 플랫폼의 DAU·WAU·MAU가 늘었다.

    "Initial experiment ramped to the US and Canada users, with the clustering production system as control, showed lifts of 1.1% on email click-through and 1.3% on push opens, plus multiple statistically significant sitewide engagement and retention gains. A subsequent multilingual international rollout replicated the direction, and shipping both experiments increased the daily, weekly, and monthly active users on the platform." — From Activity to Intent (블로그), 2026-10-09

  • sitewide 지표와 DAU/WAU/MAU 증가 폭은 수치로 공개하지 않았다 확인.

  • 정답 라벨이 없는 과제라서, 오프라인 평가는 두 방식으로 했다 확인.

    • 같은 유저에 대한 두 시스템의 출력을 정성적으로 비교했다.
    • 별도 언어 모델이 관련성·근거·다양성·세분도를 채점했다.

새로 알게 된 것H. Semantic ID 입력과 피드백 기반 최적화 등 네 가지 확장을 실험하고 있다

  • 아래 네 가지는 실험 중인 확장이고, 프로덕션 기본값이 아니다 확인. 저자들은 이 절이 "trained or rolling out, not what every user gets today"라고 명시한다.
    • Semantic ID(SID, 아이템을 계층 코드로 표현한 토큰 열): Pin을 RQ-VAE로 5단계 × 11비트로 압축해 64비트 정수 하나에 담고, 프롬프트를 만들 때 특수 토큰으로 푼다. tokenizer를 SID 어휘로 확장한 뒤 continued pre-training을 하고, 그 위에 SFT를 한다. SID가 붙은 이벤트가 10개 미만이면 프롬프트 전체를 태그로 되돌리고, 검색어는 항상 원문을 유지한다.
    • Offsite 전환(페이지 방문, 장바구니, 가입, 결제)을 활동이 적은 유저에 한해 보조 신호로 넣는다.
    • 한 번의 호출로 journey와 그 하위·인접 주제, 알림 제목 문구까지 함께 생성한다.
    • 사용자 피드백으로 preference optimization을 한다. 온라인 A/B가 진행 중이다.
      • 신호는 journey 이메일의 "Are you interested in <journey>?" Yes/No 응답과, 알림 세션 안의 저장·클릭·숨김이다.
      • chosen과 rejected는 "feedback-as-edit" 방식으로 만든다. Yes는 남기고 No는 지운 목록이 chosen이고, 반대 편집이 rejected다.

정본 반영 없다. Pinterest는 추적 서비스가 아니므로 radar.md에 반영했다. "이번 달 신규"에 Pinterest User Journeys 항목을 추가했고, "LLM-native 랭킹의 확산" 스레드에 근거 한 줄을 추가했다.

의미 Pinterest journey에서 LLM이 들어간 자리는 배치로 유저의 의도를 자연어 이름으로 쓰고, 그 이름이 기존 retrieval·ranking 스택의 질의가 되는 자리다 추정. 동기 서빙 경로 밖에 있다는 점에서는 레이더의 MetaStrategy와 같은 쪽이다 추정. 근거는 두 글 모두 LLM 출력이 nearline·batch로 저장된 뒤 결정론적 하위 스택이 읽는다고 적었다는 점이다. 다만 MetaStrategy의 출력은 전략 설정이고, Pinterest의 출력은 유저 단위 질의라는 점이 다르다.

이 글은 "LLM이 추천 파이프라인의 어느 자리에 들어가는가"라는 레이더 스레드에 새 사례를 더한다. 그 스레드에서 지금까지 LLM이 들어간 자리는 다음과 같았다.

  • 채점 함수: Netflix GenRec
  • 생성 retrieval: Yandex, Spotify GLIDE
  • 오프라인 정책 컴파일러: Alibaba MetaStrategy
  • 그래프 경로 추론기: Meta ConnectionMind
  • 입력 토큰화: Meta AMBER
  • 임베딩 인코더: LinkedIn Follows

유저 프로필을 LLM 텍스트로 만드는 흐름에는 이미 Comcast와 KuaFu가 있었다. Comcast는 오프라인 비교만 했고, KuaFu는 압축 표현 방식이다. Pinterest는 이 가운데 자연어 출력을 그대로 질의로 쓰고 온라인 A/B까지 공개한 첫 사례다 추정(레이더 코퍼스 안에서의 비교이며 업계 전체를 조사한 것은 아니다). 클러스터링 대비 lift가 1% 수준인 반면 관심사 기반 대비 클러스터링의 lift는 88%였으므로, 큰 이득은 "journey라는 단위를 도입한 것"에서 나왔고 LLM 전환은 그 위의 품질 개선으로 읽힌다 추정.

추적 서비스와의 연결은 아직 없다. Meta·X·Netflix가 알림 지면에서 LLM으로 유저 의도를 생성한다는 1차 진술은 이 저장소에 없다 추정(진술이 없다는 뜻이며, 운영하지 않는다는 근거는 아니다).

레이더

  • Pinterest User Journeys, 2026-10-09: 활동 로그를 넣으면 Qwen3-4B가 journey 이름을 생성하고, 그 이름이 알림 retrieval 질의가 된다. 클러스터링 대비 email CTR +1.1%, push open +1.3%를 냈다.

다음에 볼 것

소스 점검 메모

X, Meta, Netflix, arXiv에서는 통과한 새 자료가 없었고, 월요일 산업 블로그에서 Pinterest 글 1건이 통과했다.

  • X: xai-org/x-algorithm의 최신 커밋은 여전히 cb45b55(2026-10-09)이고, 그 뒤 커밋은 없다. 릴리스도 없다.
  • Meta: engineering.fb.com의 최신 글은 2026-10-06 "NTS: Authenticated Time at Meta"이고, 피드와 무관하다. ai.meta.com/blog의 최신 글은 2026-07이다. WebSearch 교차 확인에서 나온 Threads Dear Algo·Your Algo는 이미 services/threads.md에 있다.
  • Netflix: netflixtechblog.com RSS의 최신 글은 2026-09-25로, 신규가 없다.
  • arXiv cs.IR: 30건을 파싱했고 통과는 0건이다. 근접 탈락은 두 건이다.
    • 2610.10483은 two-level softmax 샘플링의 클러스터 크기·분산 편향을 보정한다. 저자가 음악 스트리밍 연구 라인이고, 배포 주장이 없다.
    • 2610.10124는 생성형 추천에서 retrieval이 놓친 타깃을 reranker 학습에 넣는 손실 분해다. 학술 연구다.
  • 월요일 산업 블로그: Pinterest는 위 1건이 통과했고, 10-06 "Metrics Board"는 지표 인프라라 건너뛰었다. 탈락한 곳은 Google Research, Spotify, LinkedIn이다.
    • Google Research: 10-02~10-07 글은 추천과 무관하다.
    • Spotify: 10-08 글은 제품 발표다.
    • LinkedIn: 10-09 글은 데이터 컨텍스트 레이어다.