Goals and the constraint
- Language first. Someone who keeps engaging with Hindi posts should see Hindi first, without losing the English and Bangla posts of their friends.
- Topics from posts, not from a list we wrote. A tree such as sports, football, Brazil, the men's team, Neymar, grown from what people actually post. People pick the top levels; deeper levels stay hidden, are learned from behaviour and can be edited.
- Interested and Not interested on every post, and a topic picker after sign-up.
- Exploration on purpose. Posts from neighbouring and distant topics, in amounts taken from published studies rather than guessed.
- Every costly part behind a switch, with its resource cost written next to it, so the operator decides what the server can afford.
The evidence behind the defaults
| Decision | What the evidence says | References | Strength |
|---|---|---|---|
| Keep at least three of every five discovery items relevant | In a user study, people tolerated a moderate share of exploratory items; satisfaction fell once exploration dominated the list. | R1; context R3, R10, R11 | Moderate (one conference user study) |
| Adjacent topics take about a quarter of discovery | Diversifying along a topic taxonomy improved perceived list quality at moderate levels, even though accuracy metrics dropped. | R2; context R9, R12 | Low to moderate (2005, book lists) |
| Far topics take a small share | Production exploration systems on a large video platform; short-term A/B metrics understate what exploration is worth later. | R3, R4; context R5, R14 | Moderate (production, but video rather than social) |
| Uncertainty-guided exploration for new people | Contextual bandits adapt quickly where data is scarce; elicitation studies cover what to ask before any history exists. | R5, R53, R55; context R54 | Moderate |
| Sliding-window diversity re-rank | Maximal marginal relevance trades relevance against similarity; a sliding window was deployed on a long social feed. | R6, R8; context R9, R12 | Moderate |
| Specialists and generalists get different mixes | Listening diversity on a music service was linked to retention (observational). | R7 | Low to moderate |
| Not interested is a training label | Adding negative feedback to the training objective made recommendations respond to it measurably. | R27 | Moderate |
| Explicit negatives are strong but decay; skips are weaker | Skips work as passive negatives; audits measured how far platform buttons remove a topic; Meta documents a temporary, similarity-based effect. | R28, R29; documentation R30 | Moderate; R30 is not peer reviewed |
| Language is a soft prior, not a filter | Bilingual users switch language with what they express; access language is one personalisation factor among several; author history helps identification. | R35, R36, R38 | Moderate |
| Language identification is imperfect on short text | Short, romanised and code-mixed posts are harder; token-level models exist, one reporting about 92% word-level accuracy for romanised Bengali-English on its own test data. | R37, R39, R40, R41, R42 | Moderate; no Bangla or Hindi short-post benchmark found |
| A linear text classifier instead of a transformer | Linear models are often on par with deep classifiers on topic tasks while being orders of magnitude faster; quantisation shrinks them by about two orders of magnitude in memory. | R43, R44; context R45, R50 | Strong for topic tasks |
| Stabilise tags first; curate the top two levels | Tag distributions settle as more people tag; automatic hierarchy induction from co-occurrence or tags is possible but places parents imperfectly. | R47, R48, R49 | Moderate |
| Decaying interests that propagate to parents | Preferences drift over time; microblog interest profiles use temporal and hierarchical representations. | R51, R52 | Moderate |
| Explanations | Many people did not know their feed was curated and changed how they used it once they saw it. | R31, R33, R34 | Moderate |
| A small non-personalised holdout | Long-running randomised control groups and randomised feed interventions are how ranking effects have been measured. | R16, R17, R26 | Strong method precedent |
Language as a soft prior
post.lang as one base language code (en, bn, hi, ur and so on), or as mixed or und. There is one value per language across scripts: Bangla in Bengali letters and Bangla typed in Latin letters (Banglish) are both bn, and Hindi and Hinglish are both hi. Any language can be the answer: a base code is ISO 639-1 where one exists, else ISO 639-3, checked and named through the runtime's ICU data rather than a hand-written list. The languages that need extra help are a data file, not code, so adding one means adding one entry with its scripts, a few marker words and, where people type it in Latin letters, a small word list. The detector in feedLanguage.ts is pure, deterministic and cheap.- Strip what carries no language: hashtags, URLs, mentions and link targets, then split the text into runs of one Unicode script.
- Route each run by script. A script used by exactly one supported language decides for free: Bengali letters give Bangla, Tamil letters give Tamil, Hangul gives Korean.
- A script shared by several languages goes to a small voter of native function words and marker letters. Devanagari separates Hindi, Marathi and Nepali; Arabic script separates Urdu, Arabic and Persian; Cyrillic separates Russian and Ukrainian; Han letters next to kana mean Japanese. With no evidence the author’s language history decides, and failing that the first candidate in the registry.
- A Latin run goes to a data-driven romanised voter. Each language that people commonly type in Latin letters has a lexicon of frequent words, with spelling variants folded together, and weak character n-grams are used only for words not in any lexicon. English is the default competitor. If the evidence is too thin and the author has no history, the post is und. A Latin run inside a post that also has another script borrows that script’s language as a prior.
- Combine the runs. Runs that resolve to the same language add up, so Bangla letters plus Banglish are simply Bangla. The shares follow the matrix-language idea from code-switching research: the grammar of the sentence comes from one language, so native-script words and English grammar words (articles, pronouns, prepositions, auxiliaries) count fully, while English content words dropped into a sentence and unknown Latin words such as names and brands count for much less. The top language wins unless a second one holds a real share while the top stays below a dominance share, in which case the post is mixed.
user_language, one row per base language. Values written before the change, such as a counter for Banglish, are folded into the base language when read. The rank factor grows with the share that the post's language holds in those counters:The square root lifts small shares quickly, so a second language a person reads now and then is not buried. The floor is above zero: a language is demoted, never removed. A Banglish post and a Bengali-script post earn the same credit from the same reader.
mixed or und, or a reader with no history, gets exactly 1. That neutral default matters more than the formula: misreading a Banglish post can only shift its score a little, and it can never hide a friend's post because of the language it was written in.A topic tree derived from posts
topic table with a parent, a depth, an English and a Bangla label, and a status: auto, curated or hidden. A nightly job builds the automatic part from 90 days of hashtag statistics. The maths lives in feedTopicTree.ts and is pure, so the same input always gives the same tree, ties included.One path through the topic tree
- Sportslevel 1sibling: Technologyw·d^4
- Footballlevel 2sibling: Cricketw·d^3
- Brazillevel 3sibling: Argentinaw·d^2
- Brazil Men's Teamlevel 4w·d
- Neymarlevel 5w
Resolves from: #Neymar · নেইমার · नेमार · neymar jr
Parents by subsumption
Conditional-probability subsumption over co-occurrence counts. Tags are placed largest first, so a parent always exists before its child and no cycle can form.
Three gates before a tag becomes a node
- Size. A minimum number of posts and of distinct authors.
- Stability. The tag's distribution over the tags it appears with must change little from one month to the next, measured as a smoothed KL divergence . A fad that spikes for a week and vanishes does not get a node.
- Crowd agreement. A spam score mixes author concentration (one account posting most of the tag), disagreement on co-tags and burstiness.
Why an admin curates the top two levels
Aliases across scripts
topic_alias pointing at the same node, so #Neymar, নেইমার and नेमार land in one place. Hashtags are normalised before lookup (#Real_Madrid, #real-madrid and #RealMadrid meet), and Bangla and Devanagari letters keep their vowel signs.Tagging a post at save
post.topic_ids (an integer array with a GIN index):- Hashtags, through the alias map.
- The text, against an in-memory Aho-Corasick automaton of every label and alias. A Latin alias must sit on word boundaries ("messi" never matches inside "messing"); a Bangla or Devanagari alias needs a boundary only at its start, because case endings attach to the end of the word.
- The optional classifier, only above its confidence threshold.
- The optional embedding tier, only in background runs, never on the request path.
- The container (a Page’s category, a group’s topics), then the author’s most used topic.
Hidden levels and the interest model
An engagement of size a on a node adds a to it and a·d^k to the ancestor k levels up, with a discount d below one.
user_interest and user_language in PostgreSQL are the persisted copy, written in batches every 60 seconds from a dirty set. A missing hash is rebuilt from PostgreSQL. Two changes by the same person at the same moment may lose one of them; these are approximate signals and we chose not to pay for locking.Ranking and mixing
Topic match by shared prefix
A post inside one of the viewer's nodes matches fully; one that only shares the root matches partly. With no topic data the factor is exactly 1.
Language, topic match and two negative penalties. With every topic switch off, S' is S.
export function topicMultiplier(c: RankInput, t: TopicRankSignals): number {
let m = 1
if (t.langWeights) m *= langFactor((c.lang ?? null) as FeedLang | null, t.langWeights, t.config)
if (t.topics) {
const path = t.topics.path(c)
m *= topicFactor(topicMatch(path, t.topics.nodes), t.config)
m *= 1 - negativePenalty(path, t.topics.negative, t.now, t.topics.skip, t.config)
m *= 1 - negativePenalty([c.author], t.topics.negativeAuthors, t.now, undefined, t.config)
}
return Number.isFinite(m) && m > 0 ? m : 0
}The discovery container and its split
Where exploration may sit on a page
The fifteen discovery slots, in order
Ringed: the first two discovery slots, which exploration never takes. 5 of 15 explore, and no run of five holds more than two of them, so at least three of every five stay relevant.
The whole ranked list
Three quarters of the list stays with the network. Exploration is 5 of 60 slots, spread through the page and placed lower rather than at the top.
Walking up when a topic runs out
Sliding-window diversity
Similarity is the shared-prefix ratio of two topic paths, so a post from the same narrow topic as one just shown pays the most. The author rules of the first guide still apply on top.
Thompson sampling for adjacent and far topics
feed:ts:<user>. One draw per node, the largest wins, an engagement counts as a success and a skip as a failure:A node with little data has a wide distribution and gets tried; one that keeps failing narrows towards zero and stops being picked.
Cold start
Feedback as a training label
POST /v1/post/:id/feedback). The viewer must be able to see the post, otherwise the answer is 404. The tap is one post_feedback row written at once, and undo deletes it.- Not interested hides the post through the existing hide path, and writes a negative weight on the post's deepest topic, a spread share of it on related topics, and a negative weight on the author. It is a label of its own, not one more feature mixed into the score.
- Interested is a strong engagement along the post's topic path and language.
- Skips are posts served in the last 48 hours and not engaged with, read from the existing seen set. They need no new client event and count far less than a tap.
Decayed Not interested weights n and skip weights s on a post's path (or on its author). Negatives decay more slowly than interests, skips much faster; the cap keeps a penalty from erasing a post entirely.
Explanations
feed_why, next to the old free-text feed_reason, which stays as it was. The reason is decided from the candidate branch and the topic match, and the copy is data:| Reason | What the person reads |
|---|---|
| friends | Your friend posted this. |
| following | You follow the person or Page who posted this. |
| interest | You are interested in {topic}. |
| adjacent | It is related to {topic}, which you are interested in. |
| explore | Something new, outside your usual topics. |
| language | It is popular in {topic}, a language you read. |
| trending | It is popular on Ulkaa right now. |
| group | It was posted in a group you are in. |
| workspace | It was posted in your workspace. |
An audit holdout
Costs and the switch model
account.ulkaa.com/admin/flag, and every flag carries a resource note that the admin page shows under its description and again in the confirm dialog. Dependencies are applied in code: everything needs the base ranking switch, exploration and the classifier need topics, and the semantic tier needs the classifier. A flag that cannot be read counts as off.Nine switches, nine written costs
- Explain
feed.explainno extra resourceStructured reasons and "why am I seeing this"
Estimate: none. Needs feed.ranking.
- Holdout
feed.holdoutno extra resourceA small audit group on the old ranking
Estimate: none; lowers personalisation for the holdout_pct share of users. Needs feed.ranking.
- Diversity
feed.diversityRSliding-window re-rank on topic distance
Estimate: O(400x8) per request, under 1 ms. Needs feed.ranking.
- Language
feed.languageSMLanguage tag at save, reading-language affinity
Estimate: microseconds per post, about 100 B per user in Redis, no worker. Needs feed.ranking.
- Feedback
feed.feedbackMPInterested and Not interested, negative weights
Estimate: 1 Redis write per tap; 60 s PostgreSQL batch. Needs feed.ranking.
- Explore
feed.exploreRMAdjacent and far slots, Thompson sampling
Estimate: 3 to 6 extra pipelined Redis commands per feed request. Needs feed.ranking + feed.topic.
- Topic
feed.topicSMPWTopic tree, tagging, picker, interest-weighted candidates
Estimate: under 1 ms per post; nightly build 5 to 60 s on 1 vCPU; Redis about 20 to 40 MB of topic sets plus about 1 KB per active user; GIN index about 1 to 2% of the post table. Needs feed.ranking.
- Classifier
feed.topic_modelWNightly classifier for untagged posts
Estimate: nightly 10 to 120 s of CPU, under 5 MB of RAM. Needs feed.ranking + feed.topic.
- Semantic
feed.semanticWXEmbedding sidecar for posts no cheaper tier could tag
Estimate: 400 to 700 MB more RAM and 1 vCPU during batches; unbenchmarked. Needs feed.ranking + feed.topic_model.
- Failure means the old feed. Every read in the topic layer degrades to "no topic data", and the multipliers are exactly 1 without data, so a Redis outage or a missing tree ranks like the first guide's feed.
- Numbers are settings. The mix percentages, window size, tree thresholds, node cap and half-lives are integer platform settings read once per process and cached for 30 seconds.
- Heavy work stays off the request path. The tree build, the retag walk, classifier training and embedding calls run on the worker. The embedding tier lives in a separate compose profile behind a small HTTP contract, and an unset address makes every call return nothing at once.
How this compares with large platforms
| X | YouTube | TikTok | Ulkaa | |||||
|---|---|---|---|---|---|---|---|---|
| How interests are modelled | Models predict how relevant and valuable each post is to you [META-FB] | Predicts what you are likely to engage with; Explore retrieves from accounts and media like those you engaged with [META-IG, META-EXP] | Community embeddings (SimClusters), graph embeddings (TwHIN) and a neural ranker [X-ALGO] | Deep candidate-generation and ranking networks; signals include viewing, likes, dislikes and surveys [YT-2016, YT-HOW] | Votes, time in communities, subscriptions and interests picked at sign-up feed recommendations [REDDIT-REC] | User interactions plus video information such as captions, sounds and hashtags; onboarding categories seed the feed [TT-FYP] | Graph convolutional embeddings (PinSage) and a sequence model of recent actions (PinnerFormer) [PIN-SAGE, PIN-FORMER] | Decayed weights on nodes of a topic tree derived from posts, plus reading-language weights |
| Explicit negative feedback | Not interested temporarily lowers a post and posts like it; hiding a post [META-FB] | Not interested demotes similar content in Feed and filters it in Explore [META-IG, META-EXP] | Negative feedback and reports carry negative weights in the published ranking configuration [X-ML] | Not interested, Don’t recommend channel and dislike; feedback can be deleted later [YT-HELP] | A “show fewer posts like this” button stops that community and lowers similar ones [REDDIT-REC] | Not interested; hide a creator or a sound [TT-FYP] | See fewer like this on a Pin; hiding a Pin lets you give a reason [PIN-HIDE, PIN-NEWS] | Not interested is a training label: a decaying negative on the topic, its neighbours and the author, plus a hide; undo reverses it |
| Language handling | Not publicly documented | Not publicly documented | Not publicly documented | Not publicly documented | Not publicly documented | Language preference is a signal, weighted below active signals [TT-FYP] | Not publicly documented | One language per base code, tagged at save across scripts (romanised text counts as its language); a bounded rank factor, never a filter |
| Exploration and diversity | Aims for a balanced mix of content types [META-FB] | Not publicly documented | Not publicly documented | Not publicly documented | Sorts content before finalising the feed so many similar posts do not appear in a row [REDDIT-REC] | Avoids two videos in a row from the same creator or sound; mixes in diverse videos on purpose [TT-FYP] | Not publicly documented | A fixed slot template, Thompson sampling for adjacent and far topics, sliding-window MMR |
| Explanation to users | "Why am I seeing this post?" explains how past interactions shape ranking [META-WHY] | Explore documents its retrieval and ranking stages and the signals behind each prediction [META-EXP] | Not publicly documented | Not publicly documented | Recommended posts show a reason, such as being popular now or similar to past interactions [REDDIT-REC] | “Why this video” lists reasons: your interactions, followed accounts, recent and popular content in your region [TT-WHY] | The Pin menu shows why a Pin appeared [PIN-HIDE, PIN-NEWS] | A structured reason on each post, with the topic or language named |
| User-editable interests | Favorites and Snooze prioritise or pause chosen people, Pages and groups [META-FB] | A list of content you marked interested or not; Explore content types can be tuned [META-IG, META-EXP] | Not publicly documented | Watch and search history can be paused, edited or deleted [YT-HOW] | Recommendations from communities you do not subscribe to can be turned off [REDDIT-REC] | Pick categories at sign-up; refresh resets For You as for a new user; keyword filters [TT-FYP, TT-REFRESH] | A tuner switches boards, topics, followed accounts and history on or off; activity-based picks can be disabled [PIN-NEWS, PIN-TUNE] | The whole topic path, hidden levels included, editable; reset and export |
| Auditability and holdout | A reverse-chronological Following tab [META-FB] | The Following feed can be shown latest first [META-IG] | Ranking code published under AGPL-3.0 [X-ALGO] | Turning watch history off limits what shapes Home [YT-HELP] | Not publicly documented | Invited experts can review source code at its Transparency Center [TT-FYP] | Not publicly documented | A hashed audit group on the old ranking, with per-arm counters on the admin page |
| Published evidence | System card [META-FB] | System cards [META-IG, META-EXP] | Open-source repositories [X-ALGO, X-ML] | Research paper [YT-2016] | Help-centre article [REDDIT-REC] | Newsroom explainers [TT-FYP, TT-WHY, TT-REFRESH] | Research papers [PIN-SAGE, PIN-FORMER, PIN-REP] | This guide, its references and a seeded offline evaluator |
Sources
- META-FB: Meta Transparency Center: Facebook Feed
- META-IG: Meta Transparency Center: Instagram Feed Recommendations
- META-EXP: Meta Transparency Center: Instagram Explore
- META-WHY: Meta: Why Am I Seeing This? (2019)
- X-ALGO: X: the-algorithm repository (README)
- X-ML: X: the-algorithm-ml, home ranking (README)
- YT-2016: Covington et al., Deep Neural Networks for YouTube Recommendations (RecSys 2016)
- YT-HOW: How YouTube Works: Recommendations
- YT-HELP: YouTube Help: manage your recommendations
- TT-FYP: TikTok Newsroom: How TikTok recommends videos #ForYou
- REDDIT-REC: Reddit Help: Reddit’s Approach to Content Recommendations
- TT-REFRESH: TikTok Newsroom: Introducing a way to refresh your For You feed
- TT-WHY: TikTok Newsroom: Learn why a video is recommended for you
- PIN-TUNE: Pinterest Help: Tune your home feed
- PIN-HIDE: Pinterest Help: See more or fewer recommended Pins
- PIN-NEWS: Pinterest Newsroom: New ways to control the ideas you see in your home feed
- PIN-REP: Pinterest authors, Representation Online Matters: Practical End-to-End Diversification in Search and Recommender Systems
- PIN-SAGE: Ying et al., Graph Convolutional Neural Networks for Web-Scale Recommender Systems (PinSage)
- PIN-FORMER: Pancha et al., PinnerFormer: Sequence Modeling for User Representation at Pinterest
Offline evaluation
- The exact, adjacent and far shares stay within tolerance of the settings.
- The language-match rate on pages, judged by base language, and a cross-script check: a reader whose history comes only from Bengali-script posts must give Banglish posts full language credit, and the same for Hindi and Hinglish.
- At least three of every five discovery items are relevant.
- A narrow topic that runs out fills by walking up the tree.
- After Not interested, the share of that topic and author drops, then recovers slowly.
- Hidden-level learning promotes a child once the evidence supports it.
- The holdout arm equals the old ranking.
- No row reaches a page without passing decide.
- Latency per feed page.
Limits and open questions
- No Bangla or Hindi short-text benchmark. Every Bangla and Hindi source we found is about language identification or general text classification. Topic accuracy on short posts has to be measured on our own data.
- Language ID on romanised text is imperfect. Romanised Bangla, Hindi and Urdu share words with each other and with English. Treating a language and its romanised form as one unit removes the cost of confusing those two, but not the confusion between different languages. That is why the result is a bounded prior with neutral defaults, never a filter. The general detectors add their own limits: short Latin posts get no detector answer at all, and languages close to a bigger neighbour (Bulgarian next to Russian, Malay next to Indonesian) are weaker than the large languages.
- The tree depends on hashtag culture. Communities that rarely tag get thinner trees. Label matching, container and author fallbacks and admin curation narrow the gap; they do not close it.
- Deep nodes stay sparse. Walk-up fill keeps pages full, but a five-level interest often behaves like a three-level one for months.
- Evidence from other services may not transfer. Most exploration findings come from video and music. Our own holdout is how we find out whether they hold for a friend-based feed.
- Resource notes are estimates. They come from reasoning about each tier and are replaced by measurements from the capacity tool; the semantic tier is the least certain of them.
References
- R10. Kotkov, D., Wang, S., & Veijalainen, J. (2016). A survey of serendipity in recommender systems. Knowledge-Based Systems, 111. [journal; Q1 (Artificial Intelligence, 2022 data; SCImago snapshot 2024-04-11)] https://doi.org/10.1016/j.knosys.2016.08.014
- R11. Kaminskas, M., & Bridge, D. (2016). Diversity, serendipity, novelty, and coverage: A survey and empirical analysis of beyond-accuracy objectives in recommender systems. ACM Transactions on Interactive Intelligent Systems, 7(1). [journal; Q2 (Artificial Intelligence and HCI, 2023 data; SCImago snapshot 2024-05-11)] https://doi.org/10.1145/2926720
- R12. Kunaver, M., & Požrl, T. (2017). Diversity in recommender systems: A survey. Knowledge-Based Systems, 123. [journal; Q1 (Artificial Intelligence, 2022 data; SCImago snapshot 2024-04-11)] https://doi.org/10.1016/j.knosys.2017.02.009
- R14. Klimashevskaia, A., Jannach, D., Elahi, M., & Trattner, C. (2024). A survey on popularity bias in recommender systems. User Modeling and User-Adapted Interaction, 34. [journal; Q1 (Computer Science Applications; Q2 in HCI, 2023 data; SCImago snapshot 2024-10-09)] https://doi.org/10.1007/s11257-024-09406-0
- R16. Huszár, F., Ktena, S. I., O'Brien, C., Belli, L., Schlaikjer, A., & Hardt, M. (2022). Algorithmic amplification of politics on Twitter. Proceedings of the National Academy of Sciences, 119(1). [journal; Q1 (Multidisciplinary, 2022 data; SCImago snapshot 2023-11-17)] https://doi.org/10.1073/pnas.2025334119
- R17. Guess, A. M., Malhotra, N., Pan, J., Barberá, P., ... Tucker, J. A. (2023). How do social media feed algorithms affect attitudes and behavior in an election campaign? Science, 381. [journal; Q1 (Multidisciplinary, 2021 data; SCImago snapshot 2022-12-16)] https://doi.org/10.1126/science.abp9364
- R26. Kohavi, R., Longbotham, R., Sommerfield, D., & Henne, R. M. (2009). Controlled experiments on the web: Survey and practical guide. Data Mining and Knowledge Discovery, 18. [journal; Q1 (Information Systems, 2023 data; SCImago snapshot 2024-08-12)] https://doi.org/10.1007/s10618-008-0114-1
- R33. Nunes, I., & Jannach, D. (2017). A systematic review and taxonomy of explanations in decision support and recommender systems. User Modeling and User-Adapted Interaction, 27. [journal; Q1 (Computer Science Applications; Q2 in HCI, 2023 data; SCImago snapshot 2024-10-09)] https://doi.org/10.1007/s11257-017-9195-0
- R34. Zhang, Y., & Chen, X. (2020). Explainable recommendation: A survey and new perspectives. Foundations and Trends in Information Retrieval, 14. [journal; Q1 (Information Systems, 2023 data; SCImago snapshot 2024-04-16)] https://doi.org/10.1561/1500000066
- R38. Carter, S., Weerkamp, W., & Tsagkias, M. (2013). Microblog language identification: Overcoming the limitations of short, unedited and idiomatic text. Language Resources and Evaluation, 47. [journal; Q1 (Linguistics and Language, 2023 data; SCImago snapshot 2024-04-13)] https://doi.org/10.1007/s10579-012-9195-y
- R39. Jauhiainen, T., Lui, M., Zampieri, M., Baldwin, T., & Lindén, K. (2019). Automatic language identification in texts: A survey. Journal of Artificial Intelligence Research, 65. [journal; Q1 (Artificial Intelligence, 2023 data; SCImago snapshot 2024-04-22)] https://doi.org/10.1613/jair.1.11675
- R41. Jamatia, A., Das, A., & Gambäck, B. (2019). Deep learning-based language identification in English-Hindi-Bengali code-mixed social media corpora. Journal of Intelligent Systems, 28. [journal; Q3 (Artificial Intelligence, Information Systems, Software, 2023 data; SCImago snapshot 2025-03-08)] https://doi.org/10.1515/jisys-2017-0440
- R45. Sen, O., Fuad, M., Islam, M. N., Rabbi, J., Masud, M., ... Iftee, M. A. R. (2022). Bangla natural language processing: A comprehensive analysis of classical, machine learning, and deep learning-based methods. IEEE Access, 10. [journal; Q1 (Computer Science (misc.), 2023 data; SCImago snapshot 2025-03-21)] https://doi.org/10.1109/access.2022.3165563
- R49. Tsui, E., Wang, W. M., Cheung, C. F., & Lau, A. S. M. (2010). A concept-relationship acquisition and inference approach for hierarchical taxonomy construction from tags. Information Processing & Management, 46. [journal; Q1 (Information Systems, 2021 data; SCImago snapshot 2023-01-15)] https://doi.org/10.1016/j.ipm.2009.05.009
- R50. Silla, C. N., & Freitas, A. A. (2011). A survey of hierarchical classification across different application domains. Data Mining and Knowledge Discovery, 22. [journal; Q1 (Information Systems, 2023 data; SCImago snapshot 2024-08-12)] https://doi.org/10.1007/s10618-010-0175-9
- R51. Piao, G., & Breslin, J. G. (2018). Inferring user interests in microblogging social networks: A survey. User Modeling and User-Adapted Interaction, 28. [journal; Q1 (Computer Science Applications; Q2 in HCI, 2023 data; SCImago snapshot 2024-10-09)] https://doi.org/10.1007/s11257-018-9207-8
- R52. Koren, Y. (2010). Collaborative filtering with temporal dynamics. Communications of the ACM, 53. [journal; Q1 (Computer Science (misc.), 2024 data; SCImago snapshot 2025-12-08)] https://doi.org/10.1145/1721654.1721677
- R55. Son, L. H. (2016). Dealing with the new user cold-start problem in recommender systems: A comparative review. Information Systems, 58. [journal; Q1 (Information Systems, 2023 data; SCImago snapshot 2024-08-29)] https://doi.org/10.1016/j.is.2014.10.001
- R54. Rashid, A. M., Karypis, G., & Riedl, J. (2008). Learning preferences of new users in recommender systems. ACM SIGKDD Explorations Newsletter, 10. [journal] https://doi.org/10.1145/1540276.1540302
- R1. Schnabel, T., Bennett, P. N., Dumais, S. T., & Joachims, T. (2018). Short-term satisfaction and long-term coverage: Understanding how users tolerate algorithmic exploration. Proc. 11th ACM WSDM. [conference] https://doi.org/10.1145/3159652.3159700
- R2. Ziegler, C.-N., McNee, S. M., Konstan, J. A., & Lausen, G. (2005). Improving recommendation lists through topic diversification. Proc. 14th WWW. [conference] https://doi.org/10.1145/1060745.1060754
- R3. Su, Y., Wang, X., Le, E. Y., Liu, L., Li, Y., Lu, H., ... Chen, M. (2024). Long-term value of exploration: Measurements, findings and algorithms. Proc. 17th ACM WSDM. [conference] https://doi.org/10.1145/3616855.3635833
- R4. Yi, X., Wang, S.-C., He, R., Chandrasekaran, H., Wu, C., Heldt, L., Hong, L., Chen, M., & Chi, E. H. (2023). Online matching: A real-time bandit system for large-scale recommendations. Proc. 17th ACM RecSys. [conference] https://doi.org/10.1145/3604915.3608792
- R5. Li, L., Chu, W., Langford, J., & Schapire, R. E. (2010). A contextual-bandit approach to personalized news article recommendation. Proc. 19th WWW. [conference] https://doi.org/10.1145/1772690.1772758
- R6. Huang, Y., Wang, W., Zhang, L., & Xu, R. (2021). Sliding spectrum decomposition for diversified recommendation. Proc. 27th ACM SIGKDD. [conference] https://doi.org/10.1145/3447548.3467108
- R7. Anderson, A., Maystre, L., Anderson, I., Mehrotra, R., & Lalmas, M. (2020). Algorithmic effects on the diversity of consumption on Spotify. Proc. The Web Conference 2020. [conference] https://doi.org/10.1145/3366423.3380281
- R8. Carbonell, J., & Goldstein, J. (1998). The use of MMR, diversity-based reranking for reordering documents and producing summaries. Proc. 21st ACM SIGIR. [conference] https://doi.org/10.1145/290941.291025
- R9. Steck, H. (2018). Calibrated recommendations. Proc. 12th ACM RecSys. [conference] https://doi.org/10.1145/3240323.3240372
- R27. Wang, Y., Halpern, Y., Chang, S., Feng, J., Le, E. Y., ... Bi, S. (2023). Learning from negative user feedback and measuring responsiveness for sequential recommenders. Proc. 17th ACM RecSys. [conference] https://doi.org/10.1145/3604915.3610244
- R28. Pan, Y., Gao, C., Chang, J., Niu, Y., Song, Y., Gai, K., Jin, D., & Li, Y. (2023). Understanding and modeling passive-negative feedback for short-video sequential recommendation. Proc. 17th ACM RecSys. [conference] https://doi.org/10.1145/3604915.3608814
- R29. Liu, A., Wu, S., & Resnick, P. (2024). How to train your YouTube recommender to avoid unwanted videos. Proc. ICWSM, 18. [conference] https://doi.org/10.1609/icwsm.v18i1.31363
- R31. Eslami, M., Rickman, A., Vaccaro, K., Aleyasen, A., Vuong, A., Karahalios, K., Hamilton, K., & Sandvig, C. (2015). "I always assumed that I wasn't really that close to [her]": Reasoning about invisible algorithms in news feeds. Proc. ACM CHI 2015. [conference] https://doi.org/10.1145/2702123.2702556
- R35. Rudra, K., Rijhwani, S., Begum, R., Bali, K., Choudhury, M., & Ganguly, N. (2016). Understanding language preference for expression of opinion and sentiment: What do Hindi-English speakers do on Twitter? Proc. EMNLP 2016. [conference] https://doi.org/10.18653/v1/d16-1121
- R36. Boeker, M., & Urman, A. (2022). An empirical investigation of personalization factors on TikTok. Proc. ACM Web Conference 2022. [conference] https://doi.org/10.1145/3485447.3512102
- R37. Lui, M., & Baldwin, T. (2014). Accurate language identification of Twitter messages. Proc. 5th Workshop on Language Analysis for Social Media (LASM). [conference] https://doi.org/10.3115/v1/w14-1303
- R40. Zhang, Y., Riesa, J., Gillick, D., Bakalov, A., Baldridge, J., & Weiss, D. (2018). A fast, compact, accurate model for language identification of codemixed text. Proc. EMNLP 2018. [conference] https://doi.org/10.18653/v1/d18-1030
- R43. Joulin, A., Grave, E., Bojanowski, P., & Mikolov, T. (2017). Bag of tricks for efficient text classification. Proc. EACL 2017 (short papers). [conference] https://doi.org/10.18653/v1/e17-2068
- R47. Halpin, H., Robu, V., & Shepherd, H. (2007). The complex dynamics of collaborative tagging. Proc. 16th WWW. [conference] https://doi.org/10.1145/1242572.1242602
- R53. Rashid, A. M., Albert, I., Cosley, D., Lam, S. K., McNee, S. M., Konstan, J. A., & Riedl, J. (2002). Getting to know you: Learning new user preferences in recommender systems. Proc. 7th ACM IUI. [conference] https://doi.org/10.1145/502716.502737
- R42. Mandal, S., Das, S. D., & Das, D. (2018). Language identification of Bengali-English code-mixed data using character & phonetic based LSTM models. arXiv:1803.03859. [preprint] https://arxiv.org/abs/1803.03859
- R44. Joulin, A., Grave, E., Bojanowski, P., Douze, M., Jégou, H., & Mikolov, T. (2016). FastText.zip: Compressing text classification models. arXiv:1612.03651. [preprint] https://arxiv.org/abs/1612.03651
- R48. Treeratpituk, P., Khabsa, M., & Giles, C. L. (2013). Graph-based approach to automatic taxonomy generation (GraBTax). arXiv:1307.1718. [preprint] https://arxiv.org/abs/1307.1718
- R30. Meta (n.d., accessed 2026-10-17). Facebook Feed AI system (Transparency Center system card). Not peer reviewed. [documentation] https://transparency.meta.com/features/explaining-ranking/fb-feed/