-
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/
'Recommendation System' 카테고리의 다른 글
추천시스템 평가지표 | Offline Metric with Code (2) 2023.11.08 [NAVER DEVIEW 2021] Look-alike Modeling and Serving : 비슷한 사람 찾기 추천시스템 (1) 2023.10.31 [NAVER DEVIEW 2023] 장소 기반 추천시스템, HyperLocal | 상황에 맞는 취향 장소 발견하기 (0) 2023.10.18 ChatGPT를 이용해서 추천시스템 만들기 (1) 2023.10.04 현업에서는 추천시스템 후처리(서빙전 필터링)를 어떻게 할까? (feat. 요기요, Spotify, LINER) (0) 2023.09.27