PinnerFormer: Sequence Modeling for User Representation at Pinterest (2022)
Design Choices
- Single ๐ Multi Embedding
- Multi Embedding
- ์ด์ ์ PinnerSage์์ ํ๋ ๋ฐฉ์. ์ ์ ์ ํ ๋ณด๋๋ฅผ ํด๋ฌ์คํฐ๋ง ํ ํด๋ฌ์คํฐ๋ง๋ค ์๋ฒ ๋ฉ ํ์ต, ์ ์ ๋ณ๋ก ์ฌ๋ฌ ๊ฐ์ ๊ฐ๋ณ์ ์ธ ์์ ์๋ฒ ๋ฉ์ด ํ ๋น๋จ e.g. ์๋ฆฌ ์๋ฒ ๋ฉ, ์ฌํ ์๋ฒ ๋ฉ, ๊ฐ๋๋ ์๋ฒ ๋ฉ
- ๐ : ๋ค์ํ ๋ช ์์ ๊ด์ฌ์ฌ๋ฅผ ํ์ตํ ์ ์๊ณ retrieval์ ์ ์๋ํจ, ๋ค์ํ๊ณ ํญ๋์ ์ถ์ฒ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ ์ ์์
- ๐ : downstream model ์ฌ์ฉ์ ๋ณต์ก์ฑ (์ ์ฅ/์ ๋ฌ ์ overhead, latency ๋ฌธ์ ), ๋จ์ผ ํํ์ ๋ถ์ฌ(homefeed ranking์์๋ ์ฌ์ฉ์๋ฅผ ํตํฉ์ ์ผ๋ก ๋ํ๋ด๋ ํผ์ณ๊ฐ ํ์ํจ)
- Single Embedding
- Pinnerformer๋ก ๋ฌ์ฑํ๊ณ ์ ํ๋ ๋ชฉํ: ๋จ์ผํ ๊ณ ํ์ง ์ ์ ์๋ฒ ๋ฉ์ ์ป์ด์ ์ฌ๋ฌ generalํ downstream task์์ ์ฌ์ฉํ๊ณ ์ ํจ
- Multi Embedding
- Real-time ๐ Offline inference
- sequntialํ ์ ์ ๋ชจ๋ธ๋ง์ ๋ณดํต ์ค์๊ฐ/์ค์ค์๊ฐ์ผ๋ก ์๋ํ๋ ๊ฒ์ ์ค์ ์ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ ์ด ๊ฒฝ์ฐ ๊ณ์ฐ๋น์ฉ์ด ํฌ๊ณ ๋์ ์์ค์ ์ธํ๋ผ ๋ณต์ก๋๊ฐ ์๊ตฌ๋จ
- ํํฐ๋ ์คํธ์ ๊ฒฝ์ฐ ์ ์ ๋ค์ด ํ๋ฃจ์๋ ์์ญ~์๋ฐฑ๊ฐ์ ํ๋์ ํ๊ธฐ ๋๋ฌธ์ real-time ์ ๋ฐ์ดํธ๋ณด๋ค๋ ํ๋ฃจ์ ํ๋ฒ๋ง ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์์ ํํจ
- ์๋ฒ ๋ฉ์ freshness๊ฐ ๋จ์ด์ง์๋ก(real-time ๋๋น offline ๋ฐฉ์์ผ์๋ก = staleness) ์ฑ๋ฅ์ด ๋จ์ด์ง์ง๋ง ์ดํ์์ ์ ์ํ Pinnerformer๋ dense all-action loss๋ผ๋ ์๋ก์ด ๋ฐฉ์์ ํตํด ์ด ์ฑ๋ฅ ๊ฐญ์ ํฌ๊ฒ ์ค์์
Pinnerformer
Overview
![[pinnerformer-architecture.png|550]]
- User Sequence
- ํ์ต ๋ฐ์ดํฐ ์ํ์ค
- ๊ณผ๊ฑฐ 1๋
๋์์ ์ฌ์ฉ์์ ํ๋ ์ํ์ค (๋จ, ํจ์จ์ฑ์ ์ํด ์ต๊ทผ ๊ฐ์ ํ๋๋ง ์ฌ์ฉ). ๊ฐ ํ๋์ ๋ค์ ์์๋ค๋ก ๊ตฌ์ฑ๋จ
- Pin(item) ์๋ฒ ๋ฉ <- PinSage
- Action : ์ ์ฅ(Repin), ํด๋ฆญ, ์ด๋ฏธ์ง ํ๋ ๋ฑ (๋ถ์ ์ ์ธ ํ๋๋ ํฌํจ๋จ ๐ด - ์งง์ ํด๋ฆญ, ํ ์จ๊ธฐ๊ธฐ ๋ฑ)
- Timestamp
- Duration : ํ๋์ ์ง์์๊ฐ
- ๊ทธ๋ฆผ ์ Extract & Project๋ ์ด ์ํ์ค๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ฐ ํผ์ณ ์ ํ์ ๋ง๊ฒ ๋ฒกํฐ๋ณํ/๋ก๊ทธ๋ณํ/ํ์์คํฌํ์ ์ฃผ๊ธฐ๋ณํ ๋ฑ์ ์งํํ ๊ฒ์ ์๋ฏธํจ
- ๊ณผ๊ฑฐ 1๋
๋์์ ์ฌ์ฉ์์ ํ๋ ์ํ์ค (๋จ, ํจ์จ์ฑ์ ์ํด ์ต๊ทผ ๊ฐ์ ํ๋๋ง ์ฌ์ฉ). ๊ฐ ํ๋์ ๋ค์ ์์๋ค๋ก ๊ตฌ์ฑ๋จ
- Transformer
- ํ๋ ์ํ์ค๋ฅผ ๋ฐ์ ์์ฐจ์ ์ธ ํจํด์ ํ์ต
- Causal Masking : ๊ฐ ์์ ์์ ํ์ฌ ์ด์ ์์ ๋ง ์ฐธ๊ณ ! (๋ฏธ๋ ๋ฐ์ดํฐ leak ๋ฐฉ์ง)
- User MLP
- Transformer์ ์ถ๋ ฅ(hidden state)์ด MLP๋ฅผ ํต๊ณผ ํ L2 normalization
- ์ถ๊ฐ ๋น์ ํ ๋ณํ์ผ๋ก ํํ๋ ฅ์ ๋์ด๊ณ ์ฐจ์์ ๋ง์ถ๊ณ ์ ๊ทํํ๋ ์ญํ
- Transformer์ ์ถ๋ ฅ(hidden state)์ด MLP๋ฅผ ํต๊ณผ ํ L2 normalization
- ํ์ต ๋ฐ์ดํฐ ์ํ์ค
- Metric Learning
- Future Window Data (Positive Examples)
- ๋ฐ๋ก ๋ค์ ํ๋๋ง ์์ธกํ๋ ๊ฒ์ด ์๋ ์๋ฒ ๋ฉ ์์ฑ ์์ ์ดํ ๐ ๋ฏธ๋์ 28์ผ ๋์์ ๊ธ์ ์ ์ธ ์ํธ์์ฉ์ ์์ธกํ๋๋ก ํ์ตํ๋ ๊ฒ์ด Pinnerformer์ ํต์ฌ์ ์ธ ํน์ง
- Negative Sampling
- [[In-batch Negative Sampling]] ๊ณผ ์ ์ฒด corpus์์์ ๋จ์ Random negative sampling ๋ฅผ ์์ด์ ์
- ์ ์๋ ์ธ๊ธฐ ์์ดํ ์ด ํ๋ํฐ๋ฐ๊ธฐ ์ฝ๊ณ ํ์๋ ๋๋ฌด ์ฌ์ด negative
- [[In-batch Negative Sampling]] ๊ณผ ์ ์ฒด corpus์์์ ๋จ์ Random negative sampling ๋ฅผ ์์ด์ ์
- Pin MLP
- ๊ธ์ /๋ถ์ ์ํ ๋ชจ๋ PinSage ์๋ฒ ๋ฉ์ ๊ธฐ๋ฐ์ผ๋ก MLP๋ฅผ ํต๊ณผํ์ฌ ์ ์ ์๋ฒ ๋ฉ๊ณผ ๊ฐ์ ๊ณต๊ฐ์ผ๋ก align๋จ
- ๐ Dense All Action Loss
- ์ค๊ฐ ์ฌ์ฉ์ ์๋ฒ ๋ฉ ์ค ๋ฌด์์๋ก ์ฌ๋ฌ ๊ฐ๋ฅผ ์ ํ + ๊ธ์ ์ํ ์ค ํ๋ ๋ฌด์์๋ก ์ ํ -> ์์ธกํ๋๋ก ํ์ต
- ์๋ ์ํ์ ์ถ์ฒ์ ํ ๋ ๋ณดํต ๊ฐ์ฅ ์ต๊ทผ ์์ ์ ์๋ฒ ๋ฉ์ผ๋ก ๋ค์ ํ๋ 1๊ฐ๋ฅผ ์์ธกํ๋ ๊ฒ๊ณผ ๋ค๋ฅธ ๊ตฌ์กฐ
- ํ๋์ ํน์ ๋ค์ ํ๋์ ๊ณผ์ ํฉ๋์ง ์๊ณ , ์ฌ์ฉ์์ ์ํ์ค ๋ด ๋ค์ํ ์์ ์ ์ํ๋ฅผ ํตํด ๋ ๋์ ์๊ฐ ๋ฒ์์ ์ฅ๊ธฐ์ ๊ณ ์์ ์ ์ธ ๊ด์ฌ์ฌ๋ฅผ ํฌ์ฐฉํ๋๋ก ์ ๋
- ๋ณดํต ์ด๋ฐ sequential ์ถ์ฒ์ real-time์ด ์๋ ๋ฐฐ์น ์ถ๋ก ํ๊ฒฝ์ ํ ๊ฒฝ์ฐ ์ ์๋ํ์ง ์๋๋ฐ, PinnerFormer๋ ์ด๋ฐ ์ฅ๊ธฐ ๊ด์ฌ์ฌ ๋ฐ์ ๋๋ฌธ์ ํ๋ฃจ์ ํ๋ฒ๋ง ์ ๋ฐ์ดํธํ๋ ๋ฐฐ์น์ถ๋ก ์ ํด๋ ์ฑ๋ฅ ํ๋ฝ์ด ๋ํจ
- Loss: sampled softmax + logQ Correction
- ๋ชจ๋ ์์ดํ ์ด ์๋ ๊ธ์ ์ํ 1๊ฐ์ ๋ถ์ ์ํ K๊ฐ๋ง ๊ฐ์ง๊ณ softmax ๊ทผ์ฌ์น๋ฅผ ๊ณ์ฐ
- ์ด๋ ๋ถ์ ์ํ์ ์ธ๊ธฐ๋ ํธํฅ์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ์ ์ฌ๋ ์ ์์ ํด๋น ์์ดํ ์ด ํฌํจ๋ ํ๋ฅ (~์ธ๊ธฐ๋ , )์ ๋นผ์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋ณด์ ํจ
- ์ค๊ฐ ์ฌ์ฉ์ ์๋ฒ ๋ฉ ์ค ๋ฌด์์๋ก ์ฌ๋ฌ ๊ฐ๋ฅผ ์ ํ + ๊ธ์ ์ํ ์ค ํ๋ ๋ฌด์์๋ก ์ ํ -> ์์ธกํ๋๋ก ํ์ต
- Future Window Data (Positive Examples)
Training objective
![[pinnerformer-training-objective.png|450]]
Dense All Action Loss์ด ๋๋ฌด ์ค์ํ ์์ด๋์ด์ฌ์ ๊ทธ๋ฐ์ง ํ๋ฒ ๋ ์ง๊ณ ๋์ด๊ฐ..
- NextAction
- ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ํ์ค ๋ชจ๋ธ๋ง ๋ฐฉ์์ผ๋ก, ์ ๋ ฅ ์ํ์ค์ ๊ฐ์ฅ ๋ง์ง๋ง ํ๋ ๊ธฐ์ค์ผ๋ก ๋ฐ๋ก ๋ค์ (๊ธ์ ) ํ๋์ ์์ธก
- ๋จ๊ธฐ์ ํจํด์ ์ง์ค, ์๋น์์๋ ์ค์ค์๊ฐ ์ด์์ ๊ตฌ์กฐ๊ฐ ์๋๋ฉด ์๋ฒ ๋ฉ์ด ์์ ๋ด์ฉ์ด๋ผ๋ ๋ฌธ์
- SASRec
- ์ํ์ค ๋ด์ ๋ชจ๋ ์์ ์์ ํด๋น ์์ ์ ๋ฐ๋ก ๋ค์ (๊ธ์ ) ํ๋์ ์์ธก
- All Action
- ์ ๋ ฅ ์ํ์ค์ ๊ฐ์ฅ ๋ง์ง๋ง ํ๋์ผ๋ก k day window๋ด ๋ชจ๋ (๊ธ์ ) ํ๋์ ์์ธก
- ๋ง์ง๋ง ์ํ์ค ์๋ฒ ๋ฉ์ ๋๋ฌด ๋ง์ ์ ๋ณด๋ฅผ ์์ถํ๊ฒ ๋ง๋ค์ด ํน์ ์ ๋ณด๋ฅผ ํ๋ฆฌ๊ฒ ๋ง๋ค๊ฑฐ๋ ํ์ต์ ๋นํจ์จ์ ์ผ๋ก ๋ง๋ค ์ ์์ (larger averaging effect๋ก ์ธํด dense all action๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ก๋ค๊ณ ํจ)
- Dense All Action
- ์๋ต
Serving
![[pinnerformer-serving.png|525]]
- ์ง๋ ํ๋ฃจ๋์ ์๋ก ์ํธ์์ฉ์ด ์ถ๊ฐ๋ ์ ์ ๋ค์ ๋ํด์๋ง ์๋ก์ด ์๋ฒ ๋ฉ์ ๋ง๋ค๊ณ ์ ์ฒด ์๋ฒ ๋ฉ์ด๋ ํฉ์ณ์ key-value online feature store์ ์
๋ฐ์ดํธ
- ์ด๋ฐ ๋ฐฉ์ ๋๋ฌธ์ ์ ์ฝ์ด ๋ํ๊ฒ ๋ ํฐ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์์ด์ ๋ ๊ณ ํ์ง์ ์๋ฒ ๋ฉ์ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ์ธ๊ธํ๊ณ ์์
- ํ ์๋ฒ ๋ฉ๋ Pinsage Embedding์ Pin MLPํตํด ๋ณํ์ํค๋๋ฐ, ๊ณ์ฐ๋น์ฉ์ด ๋ฎ์ผ๋ฏ๋ก ๋งค์ผ ์ ์ฒด Pin์ from scratch ์์ฑ -> ANNํ ์ ์๊ฒ HNSW Index๋ก
- ํํผ๋ ๋ญํน/retrieval, ๊ฒ์ ๋ญํน ๋ฑ์ ๋ค์ํ๊ฒ ์ฌ์ฉ
Experiment and Results
Offline Evaluation
- metrics
- recall@10
- interest entropy@50: ์ถ์ฒ๋ ํ๋ค์ ๊ด์ฌ์ฌ(interest)์ ๋ค์์ฑ
- p90 coverage@10: ์ ์ฒด ์ถ์ฒ๋ ํ๋ค์ 90%(๋ ธ์ถ๋ ๊ธฐ์ค์ผ๋ก)๋ฅผ ์ค๋ช ํ ์ ์๋ ํ๋ค์ด ์ ์ฒด ํ ์ธ๋ฑ์ค์์ ์ผ๋ง๋ ๋ง์ ๋น์ค์ ์ฐจ์งํ๋์ง (๋์์๋ก ๋ ๋์ ๋ฒ์์ ํ์ ์ถ์ฒํจ)
Results
- single vs multi embedding
- baseline์ด์๋ multi embedding PinnerSage ๋๋น (0.026, 0.046) ์๋์ ์ธ recall@10 (0.229) ํ์ธ
- ๋ค๋ง ๋ค์์ฑ์งํ๋ PinnerSage๊ฐ ๋์๋๋ฐ, ๋ค์ค ์๋ฒ ๋ฉ ๋ฐฉ์์ด ์ฌ์ฉ์์ ๋ค์ํ ๊ด์ฌ์ฌ๋ฅผ ๋ช ์์ ์ผ๋ก ํํํ์ฌ ๋ ๋์ ๋ฒ์์ ํ์ ์ถ์ฒํ๋ ๋ฐ ์ ๋ฆฌํจ์ ์์ฌ
- real-time v.s. offline batch inference
- ๋น์ฐํ ์๋ฒ ๋ฉ ์ถ๋ก ๋น๋๊ฐ ๋์์๋ก(Realtime > Daily > Once) Recall@10 ์ฑ๋ฅ์ด ๋์์ง๋ ๊ฒฝํฅ
- Realtime์์ Daily ์ถ๋ก ์ผ๋ก ์ ํํ ๋ SASRec์ Recall@10์ด 13.9% ํ๋ฝ(-0.035) ํ๋ ๋ฐ๋ฉด, PinnerFormer๋ 8.3% ํ๋ฝ(-0.021) ํ์ฌ ์ฑ๋ฅ ํ๋ฝ ํญ์ด ํจ์ฌ ์์ (์ฆ PinnerFormer๊ฐ ์ผ๊ฐ ๋ฐฐ์น ์ถ๋ก ๋ฐฉ์์ staleness๋ฌธ์ ๋ฅผ ์ํํ๋ค๋ ๊ฒ์ ์ ์ ์์)
- ์ ๋ฐ์ ์ผ๋ก๋ ๋ชจ๋ ๋น๋์์ SASrec๋ณด๋ค ๋์ Recall
- training objectives
- Dense All Action์ด ๋ค๋ฅธ ๋ฐฉ์๋ค(Next Action, SASRec, All Action)๋ณด๋ค ๋์
- 14์ผ๋ณด๋ค 28์ผ ๋ฏธ๋ ๋ฐ์ดํฐ๋ก ํ๋ จํ ๋ Recall@10์ด ๋ ๋์
- Next Action ๋ฐ SASRec์ด P90 Coverage@10๊ฐ ์๋์ ์ผ๋ก ๋์ = ํน์ ์ฌ์ฉ์ ๊ด์ฌ์ฌ๋ณด๋ค๋ ๋ ์ผ๋ฐ์ ์ด๊ฑฐ๋ ์ธ๊ธฐ ์๋ ์ฝํ ์ธ ๋ฅผ ์์ธกํ๋ ๊ฒฝํฅ์ด ์์
![[negative-sampling-and-spc.png|325]]
-
negative sampling ๋ฐฉ์, SPC (sample probability correction)
- random ๋ค๊ฑฐํฐ๋ธ๋ง ์ฌ์ฉํ ๊ฒฝ์ฐ P90 Coverage@10์ด ๋งค์ฐ ๋ฎ์ ๋ชจ๋ธ์ด ๋งค์ฐ ์ ์ฌํ(์ธ๊ธฐ ์๋) ๊ฒฐ๊ณผ๋ง ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์ถ์ฒํ๋ collapse ํ์ + ๋ฎ์ recall
- in-batch ๋ ๋ค์์ฑ์ด ์ฌ๋ผ๊ฐ์ง๋ง recall์ด ๋ฎ์
- in-batch ๋๋ mixed ๋ค๊ฑฐํฐ๋ธ์ ํจ๊ป SPC๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ Recall@10์ด ์ ์๋ฏธํ๊ฒ ์์นํ๊ณ , random์์๋ ์๋ฏธ๊ฐ ์์
- ๊ฒฐ๋ก : mixed + SPC๊ฐ best๋ค (๋์ recall, ์ค๊ฐ ์์ค์ ๋ค์์ฑ)
-
single task v.s. multi-task learning
- ํด๋ก์ฆ์ ๋ง ํ์ตํ๋ฉด ๋น์ฐํ ํด๋ก์ฆ์ ํ์คํฌ ํ๊ฐ์์ ์ ์ผ ์ํจ
- ํ์ง๋ง multi-task๋ก ํ์ตํด์ผ ์ ์ฒด ๊ธ์ ์ ํ๋์ ๊ฐ์ฅ ์ ์์ธกํ๊ณ ๊ฐ๋ณ ํ์คํฌ์์๋ ๋๋ฒ์งธ๋ก ๋์ ์ฑ๋ฅ
![[assets/user sequence modeling @pinterest/ablation.png|400]]
- Ablation
- PinSage ํผ์ฒ๋ฅผ ์ ๊ฑฐํ์ ๋ Recall@10(0.142 vs 0.229)์ด ๊ฐ์ฅ ํฌ๊ฒ ํ๋ฝํ๊ณ P90 Coverage@10๋ ๊ฑฐ์ 0์ ๊ฐ๊น์์ง - ๋ชจ๋ธ์ด ํ์ ์ฝํ ์ธ ๋ฅผ ์ดํดํ๋ ๋ฐ PinSage ์๋ฒ ๋ฉ์ด ํ์์ ์
- Timestamp ํผ์ฒ๋ฅผ ์ ๊ฑฐํ์ ๋๋ Recall@10(0.210)์ด ๋์ ๋๊ฒ ํ๋ฝ -> ์ฌ์ฉ์์ ํ๋์ด ๋ฐ์ํ ์๊ฐ ์ ๋ณด(์ ๋ ์๊ฐ, ์๋ ์๊ฐ, ๊ฐ๊ฒฉ ๋ฑ)๊ฐ ์ํ์ค ๋ชจ๋ธ๋ง์์ ๋งค์ฐ ์ค์ํ ์ญํ ์ ํจ
- ์
๋ ฅ ์ํ์ค ๊ธธ์ด
- ์ฆ๊ฐํ ์๋ก recall๊ณผ p90 coverage ๋ชจ๋ ์์นํ์ง๋ง diminishing returns (์ฑ๋ฅ ํฅ์ ์๋๊ฐ ์ ์ฐจ ๋ํ๋จ)
- 256 ์ดํ์๋ ๊ฑฐ์ ์ํ์ ๊ฐ๊น์์ง ๊ฒ์ผ๋ก ์์
- ์ฑ๋ฅ vs. ๋น์ฉ ํธ๋ ์ด๋์คํ๋ฅผ ๊ณ ๋ คํ์ฌ(์ํ์ค ๊ธธ์ด๊ฐ ๊ธธ์ด์ง์๋ก ํธ๋์คํฌ๋จธ ๋น์ฉ์ด ํฌ๊ฒ ์ฆ๊ฐํ๋ฏ๋ก) 256๋ก ๊ฒฐ์ ํ์
Online Ranking A/B Test
![[online-ab-test.png|425]]
- Homefeed ranking ๋ชจ๋ธ ํผ์ณ๋ก ์ฌ์ฉํ์ ๋
- ๊ฐ์ข ์ง๋ฉด์์ ๊ด๊ณ ranking ๋ชจ๋ธ ํผ์ณ๋ก ์ฌ์ฉํ์ ๋