{"id":165,"date":"2021-01-26T17:00:11","date_gmt":"2021-01-26T17:00:11","guid":{"rendered":"https:\/\/fde.cat\/index.php\/2021\/01\/26\/how-machine-learning-powers-facebooks-news-feed-ranking-algorithm\/"},"modified":"2021-02-02T13:42:11","modified_gmt":"2021-02-02T13:42:11","slug":"how-machine-learning-powers-facebooks-news-feed-ranking-algorithm","status":"publish","type":"post","link":"https:\/\/fde.cat\/index.php\/2021\/01\/26\/how-machine-learning-powers-facebooks-news-feed-ranking-algorithm\/","title":{"rendered":"How machine learning powers Facebook\u2019s News Feed ranking algorithm"},"content":{"rendered":"<p><span>Designing a personalized ranking system for more than 2 billion people (all with different interests) and a plethora of content to select from presents significant, complex challenges. This is something we tackle every day with News Feed ranking. Without machine learning (ML), people\u2019s News Feeds could be flooded with content they don\u2019t find as relevant or interesting, including overly promotional content or content from acquaintances who post frequently, which can bury the content from the people they\u2019re closest to. Ranking exists to help solve these problems, but how can you build a system that presents so many different types of content in a way that\u2019s personally relevant to billions of people around the world? We use ML to predict which content will matter most to each person to support a more engaging and positive experience. Models for <\/span><a href=\"https:\/\/about.fb.com\/news\/2018\/01\/news-feed-fyi-bringing-people-closer-together\/\"><span>meaningful interactions<\/span><\/a><span> and <\/span><a href=\"https:\/\/about.fb.com\/news\/2019\/04\/people-publishers-the-community\/\"><span>quality content<\/span><\/a><span> are powered by state-of-the-art ML, such as multitask learning on neural networks, embeddings, and <\/span><a href=\"https:\/\/ai.facebook.com\/blog\/online-and-offline-tests-to-improve-news-feed-ranking\/\"><span>offline learning systems<\/span><\/a><span>. We are sharing new details of how we designed an ML-powered News Feed ranking system.<br \/>\n<img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-17221\" src=\"https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/RankingFlow.jpg?resize=750%2C422&#038;ssl=1\" alt=\"How News Feed ranking system works\" width=\"750\" height=\"422\" srcset=\"https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/RankingFlow.jpg?resize=750%2C422&#038;ssl=1 1920w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/RankingFlow.jpg?resize=750%2C422&#038;ssl=1?resize=580,326 580w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/RankingFlow.jpg?resize=750%2C422&#038;ssl=1?resize=916,516 916w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/RankingFlow.jpg?resize=750%2C422&#038;ssl=1?resize=768,432 768w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/RankingFlow.jpg?resize=750%2C422&#038;ssl=1?resize=1024,577 1024w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/RankingFlow.jpg?resize=750%2C422&#038;ssl=1?resize=1536,865 1536w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/RankingFlow.jpg?resize=750%2C422&#038;ssl=1?resize=96,54 96w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/RankingFlow.jpg?resize=750%2C422&#038;ssl=1?resize=192,108 192w\" sizes=\"auto, (max-width: 992px) 100vw, 62vw\" data-recalc-dims=\"1\"><br \/>\n<\/span><\/p>\n<h2><span>Building a ranking algorithm<\/span><\/h2>\n<p><span>To understand how this works, let\u2019s start with a hypothetical person logging in to Facebook: We\u2019ll call him Juan. Since Juan\u2019s login yesterday, his good friend Wei posted a photo of his cocker spaniel. Another friend, Saanvi, posted a video from her morning run. And his favorite Page published an interesting article about the best way to view the Milky Way at night, while his favorite cooking Group posted four new sourdough recipes.\u00a0<\/span><\/p>\n<p><span>Because Juan is connected to or has chosen to follow the producers of this content, it\u2019s all likely to be relevant or interesting to him. To rank some of these things higher than others in Juan\u2019s News Feed, we need to learn what matters most to Juan and which content carries the highest value for him. In mathematical terms, we need to define an objective function for Juan and perform a single-objective optimization.<br \/>\n<\/span><\/p>\n<p><span>Take Saanvi\u2019s running video, for example. On Facebook, one concrete observable signal that an item has value for someone is if they click the like button<\/span><i><span>. <\/span><\/i><span>Given various attributes we know about a post (who is tagged in a photo, when it was posted, etc.)<\/span><i><span>,<\/span><\/i><span> we can use the characteristics of the post <\/span><i>X<sub>it<\/sub><\/i><span> toward viewer<\/span><i><span> j<\/span><\/i><span> at time <\/span><i><span>t<\/span><\/i><span>,<\/span> <span>and predict <\/span><i><span>Y<\/span><\/i><i><sub>ijt<\/sub><\/i><span> (whether Juan might like the post)<\/span><i><span>. <\/span><\/i><span>Mathematically, for each post <i>i<\/i>, we estimate <i><span>Y<\/span><\/i><i><sub>ijt<\/sub><\/i><i><span> = f(x<\/span><\/i><i><sub>ijt1;<\/sub><\/i>x<\/span><i><sub>ijt2;<\/sub><\/i>\u00a0\u2026 x<i><sub>ijtC<\/sub><\/i><span>), where c represents a characteristic <\/span><i><span>c <\/span><\/i><span>(1..<\/span><i>C<\/i><span>) such as the type of post or the relationship between the viewer and the author of the post (e.g., whether they marked each other as family members) and the function <\/span><i><span>f(.)<\/span><\/i><span> combines the attributes into a single value.\u00a0<\/span><\/p>\n<p><span>For example, if Juan tends to interact with Saanvi a lot or share the content Saanvi posts, and the running video is very recent (e.g., from this morning), we might see a high probability that Juan likes content like this. On the other hand, perhaps Juan has previously engaged more with video content than photos, so the like prediction for Wei\u2019s cocker spaniel photo might be lower. In this case, our ranking algorithm would rank Saanvi\u2019s running video higher than Wei\u2019s cocker spaniel photo because it predicts a higher probability that Juan will like that piece of content.<\/span><\/p>\n<p>But is liking the only way Juan expresses his preferences? Surely not. He might share articles he finds interesting, watch videos from his favorite game streamers, or leave thoughtful comments on posts from friends. Things get more mathematically complicated when we need to optimize for multiple objectives that all contribute to our overarching objective (creating the most long-term value for people). You can have multiple values (<i>Y<sub>ijtk<\/sub><\/i>), e.g., likes, comments, and shares, each for a different value of <i><span>k<\/span><\/i><span>, that all need to somehow aggregate up to a single <\/span><i><span>V<\/span><\/i><i><sub>ijt<\/sub><\/i> <span>value. To complicate things further, for each person on Facebook there are thousands of signals we need to evaluate to determine what that person might find most relevant, so the algorithm gets very complex in practice.\u00a0\u00a0<\/span><\/p>\n<p><span>How do you pick the overarching value for an ecosystem the size of Facebook? We want to provide the people using our services with long-term value. How much does seeing this friend\u2019s running video or reading an interesting article create value for Juan? We think the best way to assess whether something is creating long-term value for someone is to pick metrics that are aligned with what people say is important to them. So we <\/span><a href=\"https:\/\/about.fb.com\/news\/2019\/05\/more-personalized-experiences\/\"><span>survey people<\/span><\/a><span> about how meaningful they found an interaction with their friends or whether a post is worth their time to make sure our values (<\/span><i><span>Y<\/span><\/i><i><sub>ijtk<\/sub><\/i><span>)<\/span> <span>reflect <\/span><a href=\"https:\/\/about.fb.com\/news\/2018\/07\/how-users-help-shape-facebook\/\"><span>what people say they find meaningful<\/span><\/a><span>.<\/span><\/p>\n<p><span>Multiple prediction models provide us with multiple predictions for Juan: a probability he\u2019d engage with (e.g., like or leave a comment on) Wei\u2019s cocker spaniel picture, Saanvi\u2019s running video, the article shared on the Page, and the cooking Group posts. Each of these models will try to rank each of these pieces of content for Juan. Sometimes the models disagree (e.g., Juan might like Saanvi\u2019s running video with a higher probability than the Page article, but he might be more likely to share the article than Saanvi\u2019s video), and the way we take each prediction into account for Juan is based on the actions that people tell us (<\/span><a href=\"https:\/\/about.fb.com\/news\/2019\/05\/more-personalized-experiences\/\"><span>via surveys<\/span><\/a><span>) are more meaningful and worth their time.<br \/>\n<\/span><\/p>\n<div class=\"fb-video\" data-allowfullscreen=\"true\" data-href=\"https:\/\/www.facebook.com\/Engineering\/videos\/264352435037706\/\"><\/div>\n<h2><span>Approximating the ideal ranking function in a scalable ranking system<\/span><\/h2>\n<p><span>Now that we know the theory behind ranking (as exemplified through Juan\u2019s News Feed), we need to determine how to build a system for this optimization. We need to score all the posts available for more than 2 billion people (more than 1,000 posts per user, per day, on average), which is challenging. And we need to do this in real time \u2014 so we need to know if an article has received a lot of likes, even if it was just posted minutes ago. We also need to know if Juan liked a lot of other content a minute ago, so we can use this information optimally in ranking.<\/span><\/p>\n<p><span>Our system architecture uses a Web\/PHP layer, which queries the feed aggregator. The role of the feed aggregator is to collect all relevant information about a post and analyze all the features (e.g., how many people have liked this post before) in order to predict the post\u2019s value <\/span><i><span>Y<\/span><\/i><i><sub>ijt<\/sub><\/i><span> to the user, as well as the final ranking score <\/span><i><span>V<\/span><\/i><i><sub>ijt<\/sub><\/i> <span>by aggregating all the predictions.<\/span><span><br \/>\n<\/span><\/p>\n<figure aria-describedby=\"caption-attachment-17222\" class=\"wp-caption alignnone\"><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-17222\" src=\"https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/Under-the-Hood_Stills_1920x1080_Final.jpg?resize=750%2C422&#038;ssl=1\" alt=\"When someone opens up Facebook, regardless of the front-end interface (e.g., iPhone, Android phone, web browser), the interface will send a request to a Web\/PHP (front-end) layer, which then queries the feed aggregator (back-end layer). After accepting a request from the front end, the feed aggregator fetches actions and objects, along with an object summary, from the feed leaf databases so that it can process, aggregate, rank, and return the resulting list of ranked FeedStories to the front end for rendering.\" width=\"750\" height=\"422\" srcset=\"https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/Under-the-Hood_Stills_1920x1080_Final.jpg?resize=750%2C422&#038;ssl=1 1920w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/Under-the-Hood_Stills_1920x1080_Final.jpg?resize=750%2C422&#038;ssl=1?resize=580,326 580w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/Under-the-Hood_Stills_1920x1080_Final.jpg?resize=750%2C422&#038;ssl=1?resize=916,515 916w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/Under-the-Hood_Stills_1920x1080_Final.jpg?resize=750%2C422&#038;ssl=1?resize=768,432 768w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/Under-the-Hood_Stills_1920x1080_Final.jpg?resize=750%2C422&#038;ssl=1?resize=1024,576 1024w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/Under-the-Hood_Stills_1920x1080_Final.jpg?resize=750%2C422&#038;ssl=1?resize=1536,864 1536w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/Under-the-Hood_Stills_1920x1080_Final.jpg?resize=750%2C422&#038;ssl=1?resize=96,54 96w, https:\/\/i0.wp.com\/engineering.fb.com\/wp-content\/uploads\/2021\/01\/Under-the-Hood_Stills_1920x1080_Final.jpg?resize=750%2C422&#038;ssl=1?resize=192,108 192w\" sizes=\"auto, (max-width: 992px) 100vw, 62vw\" data-recalc-dims=\"1\"><figcaption class=\"wp-caption-text\">When someone opens up Facebook, regardless of the front-end interface (e.g., iPhone, Android phone, web browser), the interface will send a request to a Web\/PHP (front-end) layer, which then queries the feed aggregator (back-end layer). After accepting a request from the front end, the feed aggregator fetches actions and objects, along with an object summary, from the feed leaf databases so that it can process, aggregate, rank, and return the resulting list of ranked FeedStories to the front end for rendering.<\/figcaption><\/figure>\n<p><span>Now let\u2019s review how the aggregator works:<\/span><\/p>\n<ol>\n<li aria-level=\"1\"><b>Query inventory.<\/b><span> We first need to collect all the candidate posts we can possibly rank for Juan (the cocker spaniel picture, the running video, etc.). The first part is fairly straightforward: The eligible inventory includes any non-deleted post shared with Juan by a friend, Group, or Page that he is connected to that was made since his last login. But what about posts created before Juan\u2019s last login that he hasn\u2019t seen yet? Maybe these were higher quality or more relevant than the newer posts, but he simply didn\u2019t have time to look at them. To make sure unseen posts are also reconsidered, we have an unread bumping logic: Fresh posts that Juan has not yet seen but that were ranked for him in his previous sessions are eligible again for him to see. We also have an action-bumping logic: If any posts Juan has already seen have triggered an interesting conversation among his friends, Juan may be eligible to see this post again as a comment-bumped post.<\/span><\/li>\n<li aria-level=\"1\"><b>Score <\/b><b><i>X<sub>it<\/sub><\/i><\/b><b> for Juan for each prediction (<\/b><b><i>Y<\/i><\/b><b><i><sub>ijt<\/sub><\/i><\/b><b>).<\/b><span> Now that we have Juan\u2019s inventory, we score each post using multitask neural nets. There are many, many features (<\/span><i><span>x<\/span><\/i><i><sub>ijtc<\/sub><\/i><span>) we can use to predict <\/span><i><span>Y<\/span><\/i><i><sub>ijt<\/sub><\/i><span>, including the type of post, embeddings (i.e., feature representations generated by deep learning models), and what the viewer tends to interact with. To calculate this for more than 1,000 posts, for each of billions of users \u2014 all\u00a0in real time \u2014\u00a0we run these models for all candidate stories in parallel on multiple machines, called predictors.<\/span><\/li>\n<li aria-level=\"1\"><b>Calculate a single score out of many predictions: <\/b><b><i>V<\/i><\/b><b><i><sub>ijt<\/sub><\/i><\/b><b>.<\/b><span> Now that we have all the predictions, we can combine them into a single score. To do this, multiple passes are needed to save computational power and to apply rules, such as content type diversity (i.e., content type should be varied so that viewers don\u2019t see redundant content types, such as multiple videos, one after another), that depend on an initial ranking score. First, certain integrity processes are applied to every post. These are designed to determine which integrity detection measures, if any, need to be applied to the stories selected for ranking. Then, in pass 0, a lightweight model is run to select approximately 500 of the most relevant posts for Juan that are eligible for ranking. This helps us rank fewer stories with high recall in later passes so that we can use more powerful neural network models. Pass 1 is the main scoring pass, where each story is scored independently and then all ~500 eligible posts are ordered by score. Finally, we have pass 2, which is the contextual pass. Here, contextual features, such as content-type diversity rules, are added to help diversify Juan\u2019s News Feed.<\/span><\/li>\n<\/ol>\n<ul>\n<li aria-level=\"2\"><b>A deeper look at pass 1:<\/b><span> Most of the personalization happens in pass 1. We want to optimize how we combine <\/span><i><span>Y<\/span><\/i><i><sub>ijtk<\/sub><\/i><span>into <\/span><i><span>V<\/span><\/i><i><sub>ijt<\/sub><\/i>. For some, the score may be higher for likes than for commenting, as some people like to express themselves more through liking than commenting. For simplicity and tractability, we score our predictions together in a linear way, so that <i>V<sub>ijt<\/sub> = w<sub>ijt1<\/sub>Y<sub>ijt1<\/sub> + w<sub>ijt2<\/sub>Y<sub>ijt2<\/sub> + \u2026 + w<sub>ijtk<\/sub>Y<sub>ijtk<\/sub><\/i>. Note that this linear formulation has an advantage: Any action a person rarely engages in (for instance, a like prediction that\u2019s very close to 0) automatically gets a minimal role in ranking, as <i>Y<sub>ijtk<\/sub><\/i><span> for that event is very low. To personalize beyond this dimension, we continue <\/span><a href=\"https:\/\/dl.acm.org\/doi\/10.1145\/3328526.3329558\"><span>researching personalization based on observational data<\/span><\/a><span>. People with higher correlation gain more value from that specific event, as long as we make this method incremental and control for potential confounding variables.<\/span><\/li>\n<\/ul>\n<p><span>Once we\u2019ve completed these ranking steps, we have a scored News Feed for Juan (and all the people using Facebook) in real time, ready for him to consume and enjoy.<\/span><\/p>\n<p><span>Now that you understand the science, ranking architecture, and engineering behind News Feed more, you can see how our ranking algorithm helps create a valuable experience for people at previously unimaginable scale and speed. Juan benefits by seeing more personally meaningful and interesting content when he comes to Facebook, and so do billions of other people. We are constantly improving our ranking system by iterating on our prediction models, enhancing personalization, and more to help people find the content that creates value and helps them stay connected to friends and family.\u00a0<\/span><\/p>\n<p>The post <a rel=\"nofollow\" href=\"https:\/\/engineering.fb.com\/2021\/01\/26\/ml-applications\/news-feed-ranking\/\">How machine learning powers Facebook\u2019s News Feed ranking algorithm<\/a> appeared first on <a rel=\"nofollow\" href=\"https:\/\/engineering.fb.com\/\">Facebook Engineering<\/a>.<\/p>\n<p><a href=\"https:\/\/engineering.fb.com\/2021\/01\/26\/ml-applications\/news-feed-ranking\/\" target=\"_blank\" rel=\"noopener\">Read More<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Designing a personalized ranking system for more than 2 billion people (all with different interests) and a plethora of content to select from presents significant, complex challenges. This is something we tackle every day with News Feed ranking. Without machine learning (ML), people\u2019s News Feeds could be flooded with content they don\u2019t find as relevant&hellip; <a class=\"more-link\" href=\"https:\/\/fde.cat\/index.php\/2021\/01\/26\/how-machine-learning-powers-facebooks-news-feed-ranking-algorithm\/\">Continue reading <span class=\"screen-reader-text\">How machine learning powers Facebook\u2019s News Feed ranking algorithm<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","footnotes":""},"categories":[1,7],"tags":[],"class_list":["post-165","post","type-post","status-publish","format-standard","hentry","category-external","category-technology","entry"],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":744,"url":"https:\/\/fde.cat\/index.php\/2023\/08\/09\/scaling-the-instagram-explore-recommendations-system\/","url_meta":{"origin":165,"position":0},"title":"Scaling the Instagram Explore recommendations system","date":"August 9, 2023","format":false,"excerpt":"Explore is one of the largest recommendation systems on Instagram. We leverage machine learning to make sure people are always seeing content that is the most interesting and relevant to them. Using more advanced machine learning models, like Two Towers neural networks, we\u2019ve been able to make the Explore recommendation\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":620,"url":"https:\/\/fde.cat\/index.php\/2022\/08\/12\/how-instagram-suggests-new-content\/","url_meta":{"origin":165,"position":1},"title":"How Instagram suggests new content","date":"August 12, 2022","format":false,"excerpt":"A touring alien from a galaxy far, far away is an avid Instagram user. Her Instagram Feed is dominated by: Friends and family posts Some space travel magazines A few general news accounts Lots of science fiction blogs She logs in, scrolls through her feed gently \u2014 catching up with\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":886,"url":"https:\/\/fde.cat\/index.php\/2024\/06\/24\/leveraging-ai-for-efficient-incident-response\/","url_meta":{"origin":165,"position":2},"title":"Leveraging AI for efficient incident response","date":"June 24, 2024","format":false,"excerpt":"We\u2019re sharing how we streamline system reliability investigations using a new AI-assisted root cause analysis system. The system uses a combination of heuristic-based retrieval and large language model-based ranking to speed up root cause identification during investigations. Our testing has shown this new system achieves 42% accuracy in identifying root\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":818,"url":"https:\/\/fde.cat\/index.php\/2024\/01\/29\/improving-machine-learning-iteration-speed-with-faster-application-build-and-packaging\/","url_meta":{"origin":165,"position":3},"title":"Improving machine learning iteration speed with faster application build and packaging","date":"January 29, 2024","format":false,"excerpt":"Slow build times and inefficiencies in packaging and distributing execution files were costing our ML\/AI engineers a significant amount of time while working on our training stack. By addressing these issues head-on, we were able to reduce this overhead by double-digit percentages.\u00a0 In the fast-paced world of AI\/ML development, it\u2019s\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":893,"url":"https:\/\/fde.cat\/index.php\/2024\/07\/10\/metas-approach-to-machine-learning-prediction-robustness\/","url_meta":{"origin":165,"position":4},"title":"Meta\u2019s approach to machine learning prediction robustness","date":"July 10, 2024","format":false,"excerpt":"Meta\u2019s advertising business leverages large-scale machine learning (ML) recommendation models that power millions of ads recommendations per second across Meta\u2019s family of apps. Maintaining reliability of these ML systems helps ensure the highest level of service and uninterrupted benefit delivery to our users and advertisers. To minimize disruptions and ensure\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":461,"url":"https:\/\/fde.cat\/index.php\/2021\/09\/08\/building-a-language-agnostic-neural-machine-translation-system\/","url_meta":{"origin":165,"position":5},"title":"Building a Language-Agnostic Neural Machine Translation System","date":"September 8, 2021","format":false,"excerpt":"Why Machine Translation At Salesforce, our goal in introducing machine translation was to increase scalability and better serve our international customers. Advantages include: Innovating and acquiring know-how internallyReducing translation time by enhancing translators\u2019 productivityIncreasing content freshness by publishing more frequent\u00a0updatesReinvesting savings into high-value content and\u00a0products When we explored commercially available\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/posts\/165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/comments?post=165"}],"version-history":[{"count":1,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/posts\/165\/revisions"}],"predecessor-version":[{"id":203,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/posts\/165\/revisions\/203"}],"wp:attachment":[{"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/media?parent=165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/categories?post=165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/tags?post=165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}