ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2023 트위터 X의 추천시스템 (Twitter's Recommendation Algorithm)
    Recommendation System 2023. 10. 24. 10:00

     

     

    목차

       

      2023년 3월, 트위터의 추천시스템이 코드와 함께 공개되었다. 

      코드 : https://github.com/twitter/the-algorithm-ml

      본문 : https://blog.twitter.com/engineering/en_us/topics/open-source/2023/twitter-recommendation-algorithm

      코드는 scala, Thrift로 작성되어 있다. 아무래도 대용량의 데이터를 실시간으로 돌려야 하니까 빠른 언어를 사용한 것 같다.

      물론 소스코드를 100% 공개한건 아닐거라서 직접 돌려보거나 할 경우 에러가 날 확률이 높다. 그래서 그냥 참고용으로만 보면 좋을 듯하다.

       

      아래는 코드의 주요한 component를 도식화 시킨 사진이다. 간략하게 설명하자면,

      • DATA : 트위터에서 일어나는 유저의 행동 log를 수집, 정제, 저장
      • FEATURE : 정제된 데이터를 활용해 그래프를 생성하거나, 클러스터링을 통한 군집 발견 등의 과정을 통해 새로운 feature 발굴
        • SimClusters : follower/followee 의 관계를 그래프로 표현 -> 유사도를 구하여 community 발견
        • TwHIN (Twitter Heterogeneous Information Network) : 여러 종류의 interaction을 그래프로 만들어 노드의 특성을 임베딩
        • Trust and Safety : 어뷰징, 욕설 등을 탐지하는 모델
      • HOME MIXER : 오늘 다룰 내용, 앞서 정제 및 가공한 데이터로 트윗을 어떻게 추천할 것인가 ?
        • candidate source : 여러 종류의 데이터/모델로 트윗을 랭킹하여 이를 합친 것이 후보군이 됨
        • heuristics&filtering : 특정 기준을 갖고 후보군들을 필터링하는 작업

       

       

      1. 트위터 추천시스템의 전체적인 순서

      candidate : 여러 종류의 데이터/모델로 후보군 생성 -> ranking : 후보군들 사이에서 순위 생성 -> heuristics and filters : 특정 기준(차단한 사용자, 선정적 콘텐츠 등)으로 필터링

       

      2. Candidate Source

      최종 후보군은 Top 1500개. In Network 50%, Out Network 50% 비율로 가져옴

      2-1. In Network

      팔로우 하는 사람들의 트윗. In-Network에서 각장 중요한 랭킹모델은 Real Graph라고 함.

      RealGrpah : 두 사용자 간의 참여율을 그래프 기반으로 나타내어 예측하는 모델. a와 b의 score가 높을수록, 둘의 트윗을 더 많이 포함

      2-2. Out Network

      팔로우 하지 않는 사람들의 트윗. 

      a. Embedding Space

      content similarity에 대한 general한 군집화이다. 내 관심사와 비슷한 트윗/유저 발견하기!

      핵심은 특정 user를 follow하지 않아도 해당 user의 item을 좋아한다고 예측할 수 있다는 것

      user의 interest와 item의 representation을 embedding하여, 두 노드 사이의 유사도를 계산.

      유용하게 사용하는 것은 SimClusters. 사용자의 클러스터(커뮤니티)를 나누는데, 트위터는 현재 145k개의 커뮤니티가 있으며, 3주마다 업데이트 됨. 사용자와 트윗은 여러 커뮤니티에 속할 수 있음. 

      커뮤니티에 트윗을 포함 시키는 방법은, 커뮤니티 사용자들이 트윗을 좋아할수록, 그 트윗은 커뮤니티와 관련이 더 많은 것으로 학습됨

       

      b. Social Grpah

      - 내가 팔로우한 user들은 최근 어떤 item(트윗)에 참여했는가?

      - 나랑 비슷한 item을 좋아하는 user는 누구이며, 그들이 최근에 좋아한 다른 item은 무엇인가? 

      GraphJet(real-time item recommendation library)를 사용함. / 논문, 코드 / 근데 코드가 java라서 ㅎㅎ.. 나는 못볼듯

      실시간으로 추천해줌. 타임라인의 약 15%가 여기서 나옴.

       

      3. Ranking

      candidate 결과물로 약 1500개 정도의 후보가 생성되면, 이후 4800만개의 신경망을 통해 학습됨. positive engagement(좋아요, 리트윗, 답글)을 위해 최적화 시킨다. 수천개의 feature를 사용하며, 10개의 label을 산출한다. (어떤 label인지 모르겠음)

      score를 기준으로 ranking

       

      4. Heuristics & Filters

      이후 필터링 되는 것은

      - Visibility: 차단한 사용자의 트윗은 보지 않게 하는 

      - Author Diversity : 같은 사람이 쓴 연속적인 트윗은 피하도록

      - Content balance : In-Network와 Out-Network를 균형있게

      - Feedback-based Fatigue : 사용자가 특정 item(트윗)과 관련된것에 부정적 피드백을 주면, 해당 item의 score 하향조정

      - Social proof : Out-Network의 트윗이 depth가 2번 이상 들어가면 제거하기. 확실히 나와 관련있는 user/item임을 위해

      - Conversations : 원본 트윗과 함께 Reply context를 더 많이 제공

      - Edited Tweets : 트윗이 device에서 stable하고, 최근 수정되었다면 제공하기

       

      5. Mixing and Serving

      마지막으로 non-Tweet (광고 같은 것)을 섞어서 서빙한다.

      이 파이프라인은 하루 약 50억번 실행. 평균 1.5초 이하로 완료.

      단일 파이프라인 실행은 CPU 기준 220초 걸림

       

       

       

       

       

       

       

       

       

       

       

       

       

       

      Ref.

      https://sooeun67.github.io/data%20science/twitter-opensourced/

       

      댓글

    Designed by Tistory.