در ادامهی open-source شدن پروژههای xAI ایلان ماسک، الگوریتم خود توئیتر هم پابلیک شد. البته بهخصوص ranking algorithmش خیلی دیده شده و اینجا کوتاه دربارهش مینویسم.
ریپازیتوری رسمی xai-org/x-algorithm بخش اصلی کدی رو منتشر کرده که For You feed رو میسازه، candidateها رو میاره، فیلتر میکنه، score میده و بعد دوباره با visibility filtering چک میکنه. ولی README خود repo میگه چند چیز هنوز داخل repo نیست، مثلا promptهای Grox و بعضی ruleهای botmaker.
حالا مسیر بخش For You تقریبا این شکلیه:
🔻 اول query hydration انجام میشه، یعنی سیستم از viewer اطلاعات جمع میکنه: تعاملهای اخیر، لیست following، mute و block، muted keywords، پستهایی که قبلا دیده یا بهش serve شده، topicها و چند چیز دیگه.
🔺 بعد candidateها از چند منبع میان. سرویس Thunder پستهای recent از آدمهایی که دنبال میکنید رو میاره. مدلهای Phoenix و SimClusters هم برای out-of-network استفاده میشن، یعنی پستهایی از آدمهایی که دنبال نمیکنید. حالا تعداد هر کدوم از از نتایج این مدلها چندتاست؟ در کد فعلی `ThunderMaxResults = 1200`هست، ولی `PhoenixMaxResults = 1000`هست، و SimClusters هم منبع جداست.
🔹 بعد pre-filterها میان.
AgeFilter با MAX_POST_AGE = 48 * 60 * 60 پستهای قدیمیتر از ۴۸ ساعت رو حذف میکنه. تازگی پست خیلی تو feed مهمه، برا همین مثلا بعیده که تو feed خودتون پستهای قدیمیتر از ۲ روز اخیر ببینید.🔺 بعد هم مدل Phoenix برای هر candidate احتمال چند action رو پیشبینی میکنه: like، reply، repost، quote، share، share via DM، copy link، کلیک، dwell، follow author و سیگنالهای منفی مثل not interested، mute، block و report.
و خب این بخش رو خیلی دوست داشتم، در عکسهای پست هم میتونید وزنهای مربوط به هر کدوم ازین actionها رو ببینید.
اینجا
RankingScorer همه این probabilityها رو با وزنها قاطی میکنه. فرمول پایه اینهFinal Score = sum(weight_i * P(action_i))
عددهای جالب توجه این موارد هستن:
Like Weight = 0.5
Reply Weight = 5.0
Quote Weight = 5.0
Share Weight = 2.0
ShareViaDm Weight = 5.0
ShareViaCopyLink Weight = 20.0
FollowAuthor Weight = 4.0
از نظر وزن خام، reply ده برابر like حساب میشه، و copy link چهل برابر like. اما این مورد هم مهمه که این وزنها مستقیم روی احتمال action ضرب میشن. یعنی الگوریتم نمیگه هر بار کسی لینک رو کپی کرد دقیقا ۴۰ تا like گرفتید. میگه اگر مدل احتمال بده viewer این پست رو copy link میکنه، همون احتمال با وزن ۲۰ وارد score میشه.
سمت منفی ماجرا حتی تندتره:
NotInterested Weight = -43.2
BlockAuthor Weight = -31.2
MuteAuthor Weight = -58.8
Report Weight = -234.0
اگر فقط نسبت خام بگیریم، report نسبت به like حدود ۴۶۸ برابر وزن منفی داره. ولی باز هم نباید اینو خیلی عامیانه بخونیم. چون اینجا probability، normalization و offset score هم دخیلن. معنی فنیترش اینه که مدل وقتی احتمال report یا mute رو جدی ببینه، score میتونه خیلی سریع ضربه بخوره.
❤ جذابترین بخش برای من bidirectional follow boost بود. کد در
bidirectional_follow_hydrator.rs میبینه آیا من نویسنده پست رو follow دارم و آیا اون هم من رو follow داره یا نه. بعد ranking_scorer.rs فقط برای original postهایی که reply یا retweet نیستن، اگر mutual follow برقرار باشه، وزن reply رو boost میکنه.🔗 https://en.rattibha.com/thread/2087981370685735418
🔗 https://github.com/xai-org/x-algorithm
✈️ @Mirage_Notes


