Source
TransAct: Transformer-based Realtime User Action Model for Recommendation at Pinterest (2023)
Pinnability, Transact
-
Homefeed Ranking Model = Pinnability
- ν πμ λν μ¬μ©μ π’μ λ€μν νλ(ν΄λ¦, 리ν, μ¨κΈ°κΈ° λ± κΈμ μ λ° λΆμ μ νλ λͺ¨λ ν¬ν¨) νλ₯ μ μμΈ‘νλ multi-task
- κΈ°λ³Έμ μΌλ‘ wide & deep ꡬ쑰
- νΉμ§ μνΈμμ©μ λͺ μμ μΌλ‘ λͺ¨λΈλ§νκΈ° μν full-rank DCNv2 β Deep & Cross Network
- λ§μ§λ§μΌλ‘ output νλ ν€λλ‘ μ°κ²°λλ fully connected layer
- κ° ν€λκ° νλμ νλμ λ§΅νλ¨
-
lossμ κ²½μ° weighted cross-entropy loss
-
- λ ν€λ μ μΆλ ₯ νλ₯ , κ°μ€μΉλ ground truth μ label weight matrixλ₯Ό μ¬μ©νμ¬ κ³μ°
- λΉμ¦λμ€ μꡬμ¬νμ λ°λΌ μ μ λ 벨μ κ°μ€μΉλ λ£μ
-
-
μλμ κ°μ κ΅¬μ‘°λ‘ μ₯κΈ°μ μΈ κ΄μ¬μ¬μ μ€μκ°μ λ¨κΈ°μ μΈ κ΄μ¬μ¬λ₯Ό λ λ€ λ°μν μ μμ (real-time & batch hybrid model)
-
PinnerFormer
- μΌλ¨μ λ°°μΉλ‘ νμ΅λλ μ¬μ©μ μλ² λ© (μ₯κΈ°μ μΈ κ΄μ¬μ¬ λ°μ)
- μμΈλ΄μ©: User Sequence Modeling @Pinterest
-
TransAct
- μ€μκ° μ¬μ©μ νλ μνμ€λ₯Ό μ²λ¦¬νλ μλΈλͺ¨λ (μ΄λ―λ‘ μ¬μ€ μμ PinnabilityμΈμλ λ€λ₯Έ κ³³μλ μΈ μ μμ)
- κ° νλμλ νμμ€ν¬ν, νλ μ ν, 32μ°¨μ PinSage μλ² λ©μ΄ ν¬ν¨, μ΅κ·Ό 100κ°μ νλμΌλ‘ μνμ€λ₯Ό μμ±(μλ μ μ λ ν¨λ©)
- Feature Encoding: νλ μ νμ νμ΅ κ°λ₯ν μλ² λ© ν
μ΄λΈμ ν΅ν΄ μ μ°¨μ 벑ν°λ‘ ν¬μλμ΄ μ¬μ©μ νλ μλ² λ© νλ ¬ μ νμ±
- ν λ΄μ©μ PinSage μλ² λ© νλ ¬ λ‘ νν
- μ΅μ’ μΈμ½λ©λ μνμ€ νΉμ±μ
- Early fusion: ν보 νκ³Ό μ¬μ©μκ° μ΄μ μ μνΈμμ©ν νλ€ κ°μ μνΈμμ©μ ν©μ³μ λͺ¨λΈμ λ£μ΄μ€
- concat λ°©μμ΄ append λ°©μλ³΄λ€ μ°μνμ
- appendλ ν보 νμ μνμ€μ λ§μ§λ§μ λ§λΆμ΄λ κ²
- concatμ μνμ€μ λͺ¨λ νλμ ν보 νμ 볡μ¬ν΄μ λΆμ΄λ κ²
- concat λ°©μμ΄ append λ°©μλ³΄λ€ μ°μνμ
- Sequence Aggregation Model: μ€λΉλ λ₯Ό μ
λ ₯μΌλ‘ λ°μ μ¬μ©μμ λ¨κΈ° μ νΈλλ₯Ό ν¨μ¨μ μΌλ‘ μ§κ³
- νμ€ Transformer μΈμ½λ (2κ°μ μΈμ½λ λ μ΄μ΄, 1κ°μ ν€λ)κ° μ¬μ©
- μ€νλΌμΈ μ€ν κ²°κ³Ό positional encodingμ ν¨κ³Όμ μ΄μ§ μμ μ μΈ
- Random Time Window Mask
- λͺ¨λΈμ΄ μ¬μ©μμ μ΅κ·Ό μνΈμμ©κ³Ό μ μ¬ν μ½ν μΈ λ§μ μΆμ²νλ rabbit hole ν¨κ³Όλ₯Ό λ°©μ§νκ³ λ€μμ±μ ν₯μμν€κΈ° μν΄ λμ
- νμ΅ μ€μλ§ μ μ©λλ©°, 0μμ 24μκ° μ¬μ΄μ λλ€ time window κ° μνλ§λμ΄ μμ² νμμ€ν¬ν λ₯Ό κΈ°μ€μΌλ‘ λ΄μμ λ°μν λͺ¨λ νλμ λ§μ€νΉν¨
- Transformer Output Compression: κ³Όλν μκ° λ³΅μ‘λλ₯Ό νΌνκΈ° μν¨
- νλ 100κ° -> transformer μΈμ½λ -> 100κ°μ λ²‘ν° = λ무 λ§μ(λ€μ λ¨κ³μΈ DCN v2μ κ·Έλλ‘ λ£κΈ°μ)
- Transformer μΈμ½λ μΆλ ₯ μμ 첫 λ²μ§Έ κ° μ΄ μ μ 체 μνμ€μ λν λ§₯μ€ νλ§ λ²‘ν° μ concatν λ€μ λ²‘ν° λ‘ flatten
- κ°λ μ¬μ©μμ κ°μ₯ μ΅κ·Ό κ΄μ¬μ¬λ₯Ό ν¬μ°©νκ³ λ§₯μ€ νλ§ λ²‘ν°λ μ 체 μνμ€μ μ λ°μ μΈ μ νΈλλ₯Ό ν¬μ°©νμ¬ μ±λ₯κ³Ό μ§μ° μκ° μ¬μ΄μ κ· νμ λ§μΆ μ μμ
Productionize
- retraining
- μ€μκ° νΉμ±μ μ¬μ©νλ λͺ¨λΈμ μ¬μ©μ νλ λ³νμ λ―Όκ°νλ―λ‘ stalenessλ°©μ§νκΈ° μν΄ μ£Ό 2ν μ 체 μ¬νλ ¨μ μν
- GPU μλΉ
- TransActλ₯Ό λμ
νλ©΄μ κ³μ° 볡μ‘λκ° 65λ°° μ¦κ°νμΌλ λ€μ μ΅μ νλ₯Ό ν΅ν΄ latencyμ costλ₯Ό neutralνκ² μ μ§
- nvFuser λ° cuCollections(ID-> embedding lookupμ ν¨μ¨μ μΌλ‘ ν μ μκ² ν΄μ£Όλ NVIDIA library) νμ©, λ§μΆ€ν μλ² λ© ν μ΄λΈ μ‘°ν λͺ¨λ ꡬνμΌλ‘ μλ°± κ°μ κ°λ³ μ°μ°μ νλλ‘ ν΅ν©νμ¬ μ€λ²ν€λ μ΅μν
- CPUμμ GPUλ‘μ μλ°± κ°μ κ°λ³ ν μ λ³΅μ¬ μ€λ²ν€λλ₯Ό μ€μ΄κΈ° μν΄ μ¬λ¬ ν μλ₯Ό νλμ μ°μμ μΈ λ²νΌλ‘ κ²°ν©νμ¬ μ μ‘
- λ ν° λ°°μΉλ₯Ό μμ±(ν¨μ¨μ μΆλ‘ ), μΊμ μ©λ μμ€μ 보μνκΈ° μν΄ DRAMκ³Ό SSDλ₯Ό κ²°ν©ν νμ΄λΈλ¦¬λ μΊμλ₯Ό ꡬν
- μμ£Ό μ¬μ©λλ λ°μ΄ν°(Hot Data)λ λΉ λ₯Έ DRAMμ μ μ₯νκ³ , λ μμ£Ό μ¬μ©λμ§λ§ μ¬μ ν νμν λ°μ΄ν°(Warm Data)λ λ ν¬κ³ μ λ ΄ν SSDμ μ μ₯
- λλ¨Έμ§ μμ μ°μ° μ€λ²ν€λλ₯Ό μμ ν μ κ±°νκΈ° μν΄ λͺ¨λΈ μΆλ‘ νλ‘μΈμ€λ₯Ό λ¨μΌ λ¨μλ‘ μ€ννλ μ μ κ·Έλνλ‘ μΊ‘μ²νλ CUDA Graphs μ¬μ©
- TransActλ₯Ό λμ
νλ©΄μ κ³μ° 볡μ‘λκ° 65λ°° μ¦κ°νμΌλ λ€μ μ΅μ νλ₯Ό ν΅ν΄ latencyμ costλ₯Ό neutralνκ² μ μ§
- μ€μκ° feature μ²λ¦¬
- Flink κΈ°λ°μ μ ν리μΌμ΄μ μ΄ νλ‘ νΈμλ μ΄λ²€νΈμμ μμ±λ Kafka μ€νΈλ¦Όμ μλΉνμ¬ μ¬μ©μ νλ κΈ°λ‘μ Rockstore(Pinterestμμ μ¬μ©νλ key-value store)μ μ μ₯
- μλΉ μμλ μνμ€ νΉμ±μ λͺ¨λΈμμ νμ© κ°λ₯ν νμμΌλ‘ λ³ν
Experiment
offline
- setting
- Pinterest Homefeed View Log(FVL)μ 3μ£ΌμΉ λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ 2μ£ΌμΉ λ°μ΄ν°λ‘ λͺ¨λΈμ νλ ¨νκ³ 3μ£ΌμΉ λ°μ΄ν°λ‘ νκ°
- νμ΅ λ°μ΄ν°λ μ¬μ©μ μν λ° λ μ΄λΈμ λ°λΌ μνλ§λμμΌλ©°, λΆκ· νν λ°μ΄ν°μ μ 보μνκΈ° μν΄ μμ± μνμ λ€μ΄μνλ§ν¨
- νκ°λ HIT@3 μ§νλ₯Ό μ¬μ©
- νκ° λ°μ΄ν°μ μμλ μμΉ νΈν₯μ μ κ±°νκΈ° μν΄ ν μμλ₯Ό 무μμν
- results
- TransActλ κΈ°μ‘΄μ μμ°¨ μΆμ² λ°©μ(WDL + μνμ€, BST)μ ν¬κ² λ₯κ°ν¨
- νΉν μ¨κΈ°κΈ° μμΈ‘μμ TransActμ μ±λ₯μ΄ μλμ μΌλ‘ μ°μνμΌλ©°, μ΄λ νλ μ ν μΈμ½λ© λ₯λ ₯ λλΆ
- νΉν λΉν΅μ¬ μ¬μ©μ(non-core user)μ κ²½μ° μ€μκ° μ¬μ©μ νλ νΉμ±μ΄ μ νλ κ³Όκ±° μνΈμμ© μ 보λ₯Ό 보μν΄μ£Όλ―λ‘ λͺ¨λ μ¬μ©μ κ·Έλ£Ήλ³΄λ€ λ λμ μ±λ₯ ν₯μμ 보μ
- Ablation Study
- νμ΄λΈλ¦¬λ λνΉ λͺ¨λΈ: TransAct(μ€μκ°)μ PinnerFormer(λ°°μΉ) μ€ TransActκ° λ μ€μν μμμμ§λ§, PinnerFormer μμ μ₯κΈ°μ μΈ μ¬μ©μ μ νΈλλ₯Ό ν¬μ°©νμ¬ λͺ¨λΈ μ±λ₯μ κΈ°μ¬ν¨. λ μμλ₯Ό λͺ¨λ μ¬μ©νλ νμ΄λΈλ¦¬λ λͺ¨λΈμ΄ μ΅μμ μ±λ₯
- κΈ°λ³Έ μνμ€ μΈμ½λ μν€ν μ²: Transformerκ° νκ· νλ§, CNN, RNN, LSTMλ³΄λ€ μ°μν μ±λ₯μ 보μ
- early fusion : concat λ°©μμ΄ append λ°©μλ³΄λ€ μ°μν¨
- μνμ€ κΈΈμ΄κ° κΈΈμ΄μ§μλ‘ μ±λ₯μ΄ ν₯μλμ§λ§ μ¦κ°μ¨μ sub-linearνλ―λ‘ 100 μ λλ‘
online
- TransActκ° λμ
λ Pinnability λͺ¨λΈκ³Ό μ€μκ° μ¬μ©μ μνμ€ νΉμ±μ΄ μλ Pinnability λͺ¨λΈμ λμμΌλ‘ 1.5%μ μ¬μ©μ νΈλν½μ λν΄ A/B ν
μ€νΈλ₯Ό μν
- re-pin 11.0% μ¦κ°, μ¨κΈ°κΈ° 10.0% κ°μ, μ λ°μ μΈ Pinterest 체λ₯ μκ°μ΄ 2.0% μ¦κ°
- μ΄ κ²½μ°μλ λΉν΅μ¬ μ¬μ©μμ μ°Έμ¬λ ν₯μμ΄ λ μ»Έμ
- re-pin 11.0% μ¦κ°, μ¨κΈ°κΈ° 10.0% κ°μ, μ λ°μ μΈ Pinterest 체λ₯ μκ°μ΄ 2.0% μ¦κ°
- λͺ¨λΈμ μ¬νλ ¨νμ§ μμ κ²½μ° μ°Έμ¬λ μ§νκ° μκ°μ΄ μ§λ¨μ λ°λΌ κ°μνλ νμμ΄ κ΄μ°°
- μ£Ό 2νμ κ°μ λΉλ²ν μ¬νλ ¨μ΄ μ°Έμ¬μ¨μ μμ μ μΌλ‘ μ μ§νλ λ° νμμ μ΄μμ
- TransAct λμ μΌλ‘ μΈν΄ μΆμ² λ€μμ±μ΄ 2~3% κ°μνλ λ¬Έμ κ° λ°μνμΌλ Random Time Window μ ν΅ν΄ λ€μμ± κ°μλ₯Ό 1%λ‘ μννλ©΄μλ relevance μ§νλ₯Ό λ¨μ΄λ¨λ¦¬μ§ μκ³ μ μ§ν¨