Name: Towards AI Legal Name: Towards AI, Inc. Description: Towards AI is the world's leading artificial intelligence (AI) and technology publication. Read by thought-leaders and decision-makers around the world. Phone Number: +1-650-246-9381 Email: pub@towardsai.net
228 Park Avenue South New York, NY 10003 United States
Website: Publisher: https://towardsai.net/#publisher Diversity Policy: https://towardsai.net/about Ethics Policy: https://towardsai.net/about Masthead: https://towardsai.net/about
Name: Towards AI Legal Name: Towards AI, Inc. Description: Towards AI is the world's leading artificial intelligence (AI) and technology publication. Founders: Roberto Iriondo, , Job Title: Co-founder and Advisor Works for: Towards AI, Inc. Follow Roberto: X, LinkedIn, GitHub, Google Scholar, Towards AI Profile, Medium, ML@CMU, FreeCodeCamp, Crunchbase, Bloomberg, Roberto Iriondo, Generative AI Lab, Generative AI Lab Denis Piffaretti, Job Title: Co-founder Works for: Towards AI, Inc. Louie Peters, Job Title: Co-founder Works for: Towards AI, Inc. Louis-François Bouchard, Job Title: Co-founder Works for: Towards AI, Inc. Cover:
Towards AI Cover
Logo:
Towards AI Logo
Areas Served: Worldwide Alternate Name: Towards AI, Inc. Alternate Name: Towards AI Co. Alternate Name: towards ai Alternate Name: towardsai Alternate Name: towards.ai Alternate Name: tai Alternate Name: toward ai Alternate Name: toward.ai Alternate Name: Towards AI, Inc. Alternate Name: towardsai.net Alternate Name: pub.towardsai.net
5 stars – based on 497 reviews

Frequently Used, Contextual References

TODO: Remember to copy unique IDs whenever it needs used. i.e., URL: 304b2e42315e

Resources

Take our 85+ lesson From Beginner to Advanced LLM Developer Certification: From choosing a project to deploying a working product this is the most comprehensive and practical LLM course out there!

Publication

Fake Reviews: Maybe You Should Be Worried About AI’s Writing (and Reading) Skills
Latest   Machine Learning

Fake Reviews: Maybe You Should Be Worried About AI’s Writing (and Reading) Skills

Last Updated on July 18, 2023 by Editorial Team

Author(s): Dora Cee

Originally published on Towards AI.

In a recent, rather troubling, study humans could detect fake reviews with a measly 55.36% success rate. As for AI? It boasted a 96.64% accuracy.

Fake reviews have become a steady crutch for many companies relying on misleading information to hoard in sales. To make things worse, we are a creative lot when it comes to hacking “the system”. Hence, many have already taken false promotion further by reaching for AI.

Needless to say, the abuse of machine-generated recommendations results in an unfair playing field between retailers and disillusioning shopping experiences for consumers. On the flip side, at least we are getting better at taming AI. The irony is that humans are just not good at telling apart writings penned by humans and those by AI if the latter is given enough learning material. It’s almost like we’ve never encountered the lore of Pandora’s Box before.

But I digress — let’s get back to e-commerce first. What should be a useful source of word-of-mouth insight for assessing a product’s quality, relevance and suitability have become notably fractured. All these artificial outputs seem to be gradually eroding trust in online reviews, at a time when social trust is already in decline.

Image by Mohamed Hassan on Pixabay

The problem is not only the staggering number of deceptive reviews and spam, which come in many shades of fiction. The social media influencer promoting the latest snake oil is one thing, but machine learning has unleashed a storm of fabrications on a whole other level. Current text generation methods can now create fine-tuned, realistic scripts — and their detection is challenging for humans.

Topics Covered:

At a Quick Glance: Introductory Pointers
Data Mining Truthful Reviews
The Pen is Mightier Than The Cue
Detection Strategies for Fake Reviews
Combating AI with AI
Practical Everyday Tips for Spotting a Fake
Key Takeaways

At a Quick Glance: Introductory Pointers

Unable to tell fact from fiction, consumers are already rightfully full of doubts. Below are some of the problems this downward spiral is slowly cementing.

U+27A4 Though we may still not have hit rock bottom, eventually the damage to the source credibility of reviews might downgrade them to nothing but the online marketplace iteration of junk mail.

U+27A4 Algorithms also refer back to reviews to determine a product’s ranking in a category. This means that computer-generated reviews can be weaponized to either inflate or deflate marketplace ranking artificially, resulting in unfair competition.

U+27A4 Companies can target rivals by harnessing the destructive impact of negative reviews to lower the other’s visibility on online platforms and search engines. Note that your competitors could also poach your customers by using your brand. In this digital battle of flooding the market with fake appraisals, ultimately only the swindlers can gain ground unless fake reviews become easier to spot and firmly disincentivized.

U+27A4 The damage to a seller’s reputation can also spiral out of control in the age of social media and swift information exchange. Negative reviews can be easily circulated on multiple platforms, potentially making the company in question go viral for all the wrong reasons. And guess what? Unethical practices or even just rumors can get you canceled overnight.

U+27A4 Competitive advantage can also be obtained by manipulating users’ perceptions about products and companies alike. Confirming this fact, a 2016 study by Luca estimated that a one-star addition to a Yelp rating leads to a 5–9% increase in revenue.

U+27A4 Still not convinced? Allow me to frame it differently. In a 2015 report, the CMA estimated that “£23 billion a year of UK consumer spending is potentially influenced by online reviews”. Don’t underestimate the power of social proof.

Image by Mohamed Hassan on Pixabay

Data Mining Truthful Reviews

Refraining from cheating at the online marketplace game comes with some pretty powerful upsides.

U+278A First of all, authentic reviews describe the quality of the product or service in a more believable way. This, in turn, paves the way for a more constructive type of communication.

U+278B Second, consumers are able to better tell whether it is really what they need and what they should expect. In the end, a disclosure of honest experiences and impressions is in the interest of both the buyer and the seller.

U+278C It identifies aspects that are relevant to the product and its usage. Some of these may have entirely escaped the company’s attention, for example, due to insufficient testing or misaligned mental models.

U+278D On the other side of the equation, companies can use them as valuable feedback for shortcomings and improvements. Many firms pay good money for surveys and product testing.

Why, then, would anyone want to ignore original comments from the consumer directly, especially when they come free of charge? Analyzing data from reviews can be put to good use if considered and harnessed properly.

Image by Mohamed Hassan on Pixabay

The Pen is Mightier Than The Cue

A fake review can obviously be composed by a human as part of an exploitive marketing campaign or other incentivized pursuit. However, technology is reaching advanced levels of generated copy-writing and skill at deception. Already, people are finding it challenging to tell the difference between an AI-produced text and a genuine consumer’s opinions.

Exploiting the easy distribution channel of the digital world is the most recent, appealing shortcut to dishonest sellers. Sadly, the influx of fake users and content could become unmanageable unless measures are implemented to tackle misinformation.

This practice is already forbidden by The Consumer Protection from Unfair Trading Regulations 2008, as per the below:

(11) Using editorial content in the media to promote a product where a trader has paid for the promotion without making that clear in the content or by images or sounds clearly identifiable by the consumer (advertorial).

The problem remains the lack of detection strategies being available and used (for now). Once the crackdown on fake reviews begins, chances are individual companies relying on false claims will be crushed under substantial fines.

One challenge in telling truth from lie is that spammers evolve as tactics and advice for sharper perception become common knowledge. Case in point: a 2018 study by Plotkina, et al. found that only 57% of consumers could detect a fake review, even after learning of information cues to keep in mind. This being only slightly above the level of chance does not paint an optimistic picture of our ability to flag lies in written context.

Detection Strategies for Fake Reviews

The other problem is the sheer number of reviews online and their promptly scaling volume. Combing through them manually is an impossible task, so researchers are reaching for an automatic method. Bringing algorithms to the rescue means they scour the data samples to identify patterns.

According to a study by Cardoso, et al. (2018), these detection strategies can be:

  • content-based, where the emphasis is on textual content,
  • behavior-based, checking for atypical and suspicious behaviors,
  • information-based, focusing on product characteristics, or
  • known as spammer group detection, gauging connections between reviewers.

Automatic fake review detection has only had partial success, but combining different types of approaches perform better overall. So far it has been rare to see automatic and manual methods utilized together. Nevertheless, it’s worth a mention that it still comes with marginal gains, according to research by Harris (2019).

Third-party tools can also be used to weed out fake reviews. For example, both Fakespot and Reviewmeta specialize in spotting inauthentic Amazon reviews.

Image by Mohamed Hassan on Pixabay

Combating AI with AI

A study published in 2022 by Salminen, et al. has found that our machine counterparts do better at reading between the lines than us.

They took previous research further by generating 20,000 AI-faked reviews and taking another 20,000 reviews written by humans. Then, they enlisted machine classifiers that were trained to distinguish between computer-generated reviews and original reviews. Finally, the Team Machine results were compared with Team Human to see who was better at calling out fabrications.

(Needless to say, the study is far more comprehensive than this short, simplistic summary. The scope of the research extended to multiple models involving different algorithms. Plotting them against each other, the researchers picked the most efficient winner in terms of AI success and human efficiency at identifying scams.)

The result? Machines with their conditioned classifiers outperformed humans in both recognizing AI-written reviews and “original” (i.e. human) reviews. Looking at the highest-performing model, AI could detect spam reviews with a 96.64% accuracy, whereas the human crowd performed with a meager 55.36% success rate. Once again, our guesses are only slightly above chance level.

Image by Mohamed Hassan on Pixabay

Practical Everyday Tips for Spotting a Fake

If the case above has made you feel mentally overwhelmed, you are not alone. Here are some tips to keep in mind when trying to uncover sham reviews and flaky endorsements.

U+27A4 Use “fake checkers” like the ones mentioned above. In due course more of these types of tools should become available to suss out truth from fiction. Especially as combating scam reviews turns increasingly urgent, it’s a fair guess to say such checkers will be more in demand than ever.

U+27A4 Most online marketplaces signal if the reviewer has actually bought the product. Look out for verified purchase badges and similar terms. Note that this isn’t a fool-proof method, either. Some sellers offer “refunds” and financial incentives like gift cards and vouchers in return for 5-star-reviews.

U+27A4 Read the review: observe its tone and context. Does it stand out from others in an almost cringe-worthy degree? Based on the review, does the purchase sound almost too good to be true? Or is it detailing a rival product’s better features instead of focusing on the one at hand?

Even if the phrasing doesn’t sound entirely unnatural, you can pick up on cues that betray the author’s reliability. If the picture being painted is already looking skewed and distorted, you may well be in trickster company.

U+27A4 Know your consumer rights. Which.co.uk has kindly rounded up a useful list covering the most vital points. These include returns policies, delivery rights, as well as getting repairs, replacements, and refunds, amongst else.

Key Takeaways

U+278A The practice of fake reviews can result in a decline of overall faith in even authentic reviews. Further problems include damage to sellers’ reputations, and gaining competitive advantage by means of manipulation.

U+278B Reviews in general can be an extremely useful source of information and honest feedback, identifying shortcomings and necessary improvements.

U+278C Technology is excellent at fabricating scam appraisals, and we are not very good at detecting these.

U+278D Fake review detection models and tools to address these issues come in many flavors of strategies.

U+278E Researchers have come up with an AI model that can spot fellow computer-crafted text with a 96.64% accuracy. At the same task, humans had a poor 55.36% success rate, which is only slightly above chance-level.

U+278F Increase your odds of spotting a scam review by using “fake checkers”, keeping an eye out for badges confirming verified purchases, paying attention to the review’s tone and context, and finally, by being familiar with your consumer rights.

References & Credits

Join thousands of data leaders on the AI newsletter. Join over 80,000 subscribers and keep up to date with the latest developments in AI. From research to projects and ideas. If you are building an AI startup, an AI-related product, or a service, we invite you to consider becoming a sponsor.

Published via Towards AI

Feedback ↓

Sign Up for the Course
`; } else { console.error('Element with id="subscribe" not found within the page with class "home".'); } } }); // Remove duplicate text from articles /* Backup: 09/11/24 function removeDuplicateText() { const elements = document.querySelectorAll('h1, h2, h3, h4, h5, strong'); // Select the desired elements const seenTexts = new Set(); // A set to keep track of seen texts const tagCounters = {}; // Object to track instances of each tag elements.forEach(el => { const tagName = el.tagName.toLowerCase(); // Get the tag name (e.g., 'h1', 'h2', etc.) // Initialize a counter for each tag if not already done if (!tagCounters[tagName]) { tagCounters[tagName] = 0; } // Only process the first 10 elements of each tag type if (tagCounters[tagName] >= 2) { return; // Skip if the number of elements exceeds 10 } const text = el.textContent.trim(); // Get the text content const words = text.split(/\s+/); // Split the text into words if (words.length >= 4) { // Ensure at least 4 words const significantPart = words.slice(0, 5).join(' '); // Get first 5 words for matching // Check if the text (not the tag) has been seen before if (seenTexts.has(significantPart)) { // console.log('Duplicate found, removing:', el); // Log duplicate el.remove(); // Remove duplicate element } else { seenTexts.add(significantPart); // Add the text to the set } } tagCounters[tagName]++; // Increment the counter for this tag }); } removeDuplicateText(); */ // Remove duplicate text from articles function removeDuplicateText() { const elements = document.querySelectorAll('h1, h2, h3, h4, h5, strong'); // Select the desired elements const seenTexts = new Set(); // A set to keep track of seen texts const tagCounters = {}; // Object to track instances of each tag // List of classes to be excluded const excludedClasses = ['medium-author', 'post-widget-title']; elements.forEach(el => { // Skip elements with any of the excluded classes if (excludedClasses.some(cls => el.classList.contains(cls))) { return; // Skip this element if it has any of the excluded classes } const tagName = el.tagName.toLowerCase(); // Get the tag name (e.g., 'h1', 'h2', etc.) // Initialize a counter for each tag if not already done if (!tagCounters[tagName]) { tagCounters[tagName] = 0; } // Only process the first 10 elements of each tag type if (tagCounters[tagName] >= 10) { return; // Skip if the number of elements exceeds 10 } const text = el.textContent.trim(); // Get the text content const words = text.split(/\s+/); // Split the text into words if (words.length >= 4) { // Ensure at least 4 words const significantPart = words.slice(0, 5).join(' '); // Get first 5 words for matching // Check if the text (not the tag) has been seen before if (seenTexts.has(significantPart)) { // console.log('Duplicate found, removing:', el); // Log duplicate el.remove(); // Remove duplicate element } else { seenTexts.add(significantPart); // Add the text to the set } } tagCounters[tagName]++; // Increment the counter for this tag }); } removeDuplicateText(); //Remove unnecessary text in blog excerpts document.querySelectorAll('.blog p').forEach(function(paragraph) { // Replace the unwanted text pattern for each paragraph paragraph.innerHTML = paragraph.innerHTML .replace(/Author\(s\): [\w\s]+ Originally published on Towards AI\.?/g, '') // Removes 'Author(s): XYZ Originally published on Towards AI' .replace(/This member-only story is on us\. Upgrade to access all of Medium\./g, ''); // Removes 'This member-only story...' }); //Load ionic icons and cache them if ('localStorage' in window && window['localStorage'] !== null) { const cssLink = 'https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css'; const storedCss = localStorage.getItem('ionicons'); if (storedCss) { loadCSS(storedCss); } else { fetch(cssLink).then(response => response.text()).then(css => { localStorage.setItem('ionicons', css); loadCSS(css); }); } } function loadCSS(css) { const style = document.createElement('style'); style.innerHTML = css; document.head.appendChild(style); } //Remove elements from imported content automatically function removeStrongFromHeadings() { const elements = document.querySelectorAll('h1, h2, h3, h4, h5, h6, span'); elements.forEach(el => { const strongTags = el.querySelectorAll('strong'); strongTags.forEach(strongTag => { while (strongTag.firstChild) { strongTag.parentNode.insertBefore(strongTag.firstChild, strongTag); } strongTag.remove(); }); }); } removeStrongFromHeadings(); "use strict"; window.onload = () => { /* //This is an object for each category of subjects and in that there are kewords and link to the keywods let keywordsAndLinks = { //you can add more categories and define their keywords and add a link ds: { keywords: [ //you can add more keywords here they are detected and replaced with achor tag automatically 'data science', 'Data science', 'Data Science', 'data Science', 'DATA SCIENCE', ], //we will replace the linktext with the keyword later on in the code //you can easily change links for each category here //(include class="ml-link" and linktext) link: 'linktext', }, ml: { keywords: [ //Add more keywords 'machine learning', 'Machine learning', 'Machine Learning', 'machine Learning', 'MACHINE LEARNING', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, ai: { keywords: [ 'artificial intelligence', 'Artificial intelligence', 'Artificial Intelligence', 'artificial Intelligence', 'ARTIFICIAL INTELLIGENCE', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, nl: { keywords: [ 'NLP', 'nlp', 'natural language processing', 'Natural Language Processing', 'NATURAL LANGUAGE PROCESSING', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, des: { keywords: [ 'data engineering services', 'Data Engineering Services', 'DATA ENGINEERING SERVICES', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, td: { keywords: [ 'training data', 'Training Data', 'training Data', 'TRAINING DATA', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, ias: { keywords: [ 'image annotation services', 'Image annotation services', 'image Annotation services', 'image annotation Services', 'Image Annotation Services', 'IMAGE ANNOTATION SERVICES', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, l: { keywords: [ 'labeling', 'labelling', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, pbp: { keywords: [ 'previous blog posts', 'previous blog post', 'latest', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, mlc: { keywords: [ 'machine learning course', 'machine learning class', ], //Change your article link (include class="ml-link" and linktext) link: 'linktext', }, }; //Articles to skip let articleIdsToSkip = ['post-2651', 'post-3414', 'post-3540']; //keyword with its related achortag is recieved here along with article id function searchAndReplace(keyword, anchorTag, articleId) { //selects the h3 h4 and p tags that are inside of the article let content = document.querySelector(`#${articleId} .entry-content`); //replaces the "linktext" in achor tag with the keyword that will be searched and replaced let newLink = anchorTag.replace('linktext', keyword); //regular expression to search keyword var re = new RegExp('(' + keyword + ')', 'g'); //this replaces the keywords in h3 h4 and p tags content with achor tag content.innerHTML = content.innerHTML.replace(re, newLink); } function articleFilter(keyword, anchorTag) { //gets all the articles var articles = document.querySelectorAll('article'); //if its zero or less then there are no articles if (articles.length > 0) { for (let x = 0; x < articles.length; x++) { //articles to skip is an array in which there are ids of articles which should not get effected //if the current article's id is also in that array then do not call search and replace with its data if (!articleIdsToSkip.includes(articles[x].id)) { //search and replace is called on articles which should get effected searchAndReplace(keyword, anchorTag, articles[x].id, key); } else { console.log( `Cannot replace the keywords in article with id ${articles[x].id}` ); } } } else { console.log('No articles found.'); } } let key; //not part of script, added for (key in keywordsAndLinks) { //key is the object in keywords and links object i.e ds, ml, ai for (let i = 0; i < keywordsAndLinks[key].keywords.length; i++) { //keywordsAndLinks[key].keywords is the array of keywords for key (ds, ml, ai) //keywordsAndLinks[key].keywords[i] is the keyword and keywordsAndLinks[key].link is the link //keyword and link is sent to searchreplace where it is then replaced using regular expression and replace function articleFilter( keywordsAndLinks[key].keywords[i], keywordsAndLinks[key].link ); } } function cleanLinks() { // (making smal functions is for DRY) this function gets the links and only keeps the first 2 and from the rest removes the anchor tag and replaces it with its text function removeLinks(links) { if (links.length > 1) { for (let i = 2; i < links.length; i++) { links[i].outerHTML = links[i].textContent; } } } //arrays which will contain all the achor tags found with the class (ds-link, ml-link, ailink) in each article inserted using search and replace let dslinks; let mllinks; let ailinks; let nllinks; let deslinks; let tdlinks; let iaslinks; let llinks; let pbplinks; let mlclinks; const content = document.querySelectorAll('article'); //all articles content.forEach((c) => { //to skip the articles with specific ids if (!articleIdsToSkip.includes(c.id)) { //getting all the anchor tags in each article one by one dslinks = document.querySelectorAll(`#${c.id} .entry-content a.ds-link`); mllinks = document.querySelectorAll(`#${c.id} .entry-content a.ml-link`); ailinks = document.querySelectorAll(`#${c.id} .entry-content a.ai-link`); nllinks = document.querySelectorAll(`#${c.id} .entry-content a.ntrl-link`); deslinks = document.querySelectorAll(`#${c.id} .entry-content a.des-link`); tdlinks = document.querySelectorAll(`#${c.id} .entry-content a.td-link`); iaslinks = document.querySelectorAll(`#${c.id} .entry-content a.ias-link`); mlclinks = document.querySelectorAll(`#${c.id} .entry-content a.mlc-link`); llinks = document.querySelectorAll(`#${c.id} .entry-content a.l-link`); pbplinks = document.querySelectorAll(`#${c.id} .entry-content a.pbp-link`); //sending the anchor tags list of each article one by one to remove extra anchor tags removeLinks(dslinks); removeLinks(mllinks); removeLinks(ailinks); removeLinks(nllinks); removeLinks(deslinks); removeLinks(tdlinks); removeLinks(iaslinks); removeLinks(mlclinks); removeLinks(llinks); removeLinks(pbplinks); } }); } //To remove extra achor tags of each category (ds, ml, ai) and only have 2 of each category per article cleanLinks(); */ //Recommended Articles var ctaLinks = [ /* ' ' + '

Subscribe to our AI newsletter!

' + */ '

Take our 85+ lesson From Beginner to Advanced LLM Developer Certification: From choosing a project to deploying a working product this is the most comprehensive and practical LLM course out there!

'+ '

Towards AI has published Building LLMs for Production—our 470+ page guide to mastering LLMs with practical projects and expert insights!

' + '
' + '' + '' + '

Note: Content contains the views of the contributing authors and not Towards AI.
Disclosure: This website may contain sponsored content and affiliate links.

' + 'Discover Your Dream AI Career at Towards AI Jobs' + '

Towards AI has built a jobs board tailored specifically to Machine Learning and Data Science Jobs and Skills. Our software searches for live AI jobs each hour, labels and categorises them and makes them easily searchable. Explore over 10,000 live jobs today with Towards AI Jobs!

' + '
' + '

🔥 Recommended Articles 🔥

' + 'Why Become an LLM Developer? Launching Towards AI’s New One-Stop Conversion Course'+ 'Testing Launchpad.sh: A Container-based GPU Cloud for Inference and Fine-tuning'+ 'The Top 13 AI-Powered CRM Platforms
' + 'Top 11 AI Call Center Software for 2024
' + 'Learn Prompting 101—Prompt Engineering Course
' + 'Explore Leading Cloud Providers for GPU-Powered LLM Training
' + 'Best AI Communities for Artificial Intelligence Enthusiasts
' + 'Best Workstations for Deep Learning
' + 'Best Laptops for Deep Learning
' + 'Best Machine Learning Books
' + 'Machine Learning Algorithms
' + 'Neural Networks Tutorial
' + 'Best Public Datasets for Machine Learning
' + 'Neural Network Types
' + 'NLP Tutorial
' + 'Best Data Science Books
' + 'Monte Carlo Simulation Tutorial
' + 'Recommender System Tutorial
' + 'Linear Algebra for Deep Learning Tutorial
' + 'Google Colab Introduction
' + 'Decision Trees in Machine Learning
' + 'Principal Component Analysis (PCA) Tutorial
' + 'Linear Regression from Zero to Hero
'+ '

', /* + '

Join thousands of data leaders on the AI newsletter. It’s free, we don’t spam, and we never share your email address. Keep up to date with the latest work in AI. From research to projects and ideas. If you are building an AI startup, an AI-related product, or a service, we invite you to consider becoming a sponsor.

',*/ ]; var replaceText = { '': '', '': '', '
': '
' + ctaLinks + '
', }; Object.keys(replaceText).forEach((txtorig) => { //txtorig is the key in replacetext object const txtnew = replaceText[txtorig]; //txtnew is the value of the key in replacetext object let entryFooter = document.querySelector('article .entry-footer'); if (document.querySelectorAll('.single-post').length > 0) { //console.log('Article found.'); const text = entryFooter.innerHTML; entryFooter.innerHTML = text.replace(txtorig, txtnew); } else { // console.log('Article not found.'); //removing comment 09/04/24 } }); var css = document.createElement('style'); css.type = 'text/css'; css.innerHTML = '.post-tags { display:none !important } .article-cta a { font-size: 18px; }'; document.body.appendChild(css); //Extra //This function adds some accessibility needs to the site. function addAlly() { // In this function JQuery is replaced with vanilla javascript functions const imgCont = document.querySelector('.uw-imgcont'); imgCont.setAttribute('aria-label', 'AI news, latest developments'); imgCont.title = 'AI news, latest developments'; imgCont.rel = 'noopener'; document.querySelector('.page-mobile-menu-logo a').title = 'Towards AI Home'; document.querySelector('a.social-link').rel = 'noopener'; document.querySelector('a.uw-text').rel = 'noopener'; document.querySelector('a.uw-w-branding').rel = 'noopener'; document.querySelector('.blog h2.heading').innerHTML = 'Publication'; const popupSearch = document.querySelector$('a.btn-open-popup-search'); popupSearch.setAttribute('role', 'button'); popupSearch.title = 'Search'; const searchClose = document.querySelector('a.popup-search-close'); searchClose.setAttribute('role', 'button'); searchClose.title = 'Close search page'; // document // .querySelector('a.btn-open-popup-search') // .setAttribute( // 'href', // 'https://medium.com/towards-artificial-intelligence/search' // ); } // Add external attributes to 302 sticky and editorial links function extLink() { // Sticky 302 links, this fuction opens the link we send to Medium on a new tab and adds a "noopener" rel to them var stickyLinks = document.querySelectorAll('.grid-item.sticky a'); for (var i = 0; i < stickyLinks.length; i++) { /* stickyLinks[i].setAttribute('target', '_blank'); stickyLinks[i].setAttribute('rel', 'noopener'); */ } // Editorial 302 links, same here var editLinks = document.querySelectorAll( '.grid-item.category-editorial a' ); for (var i = 0; i < editLinks.length; i++) { editLinks[i].setAttribute('target', '_blank'); editLinks[i].setAttribute('rel', 'noopener'); } } // Add current year to copyright notices document.getElementById( 'js-current-year' ).textContent = new Date().getFullYear(); // Call functions after page load extLink(); //addAlly(); setTimeout(function() { //addAlly(); //ideally we should only need to run it once ↑ }, 5000); }; function closeCookieDialog (){ document.getElementById("cookie-consent").style.display = "none"; return false; } setTimeout ( function () { closeCookieDialog(); }, 15000); console.log(`%c 🚀🚀🚀 ███ █████ ███████ █████████ ███████████ █████████████ ███████████████ ███████ ███████ ███████ ┌───────────────────────────────────────────────────────────────────┐ │ │ │ Towards AI is looking for contributors! │ │ Join us in creating awesome AI content. │ │ Let's build the future of AI together → │ │ https://towardsai.net/contribute │ │ │ └───────────────────────────────────────────────────────────────────┘ `, `background: ; color: #00adff; font-size: large`); //Remove latest category across site document.querySelectorAll('a[rel="category tag"]').forEach(function(el) { if (el.textContent.trim() === 'Latest') { // Remove the two consecutive spaces (  ) if (el.nextSibling && el.nextSibling.nodeValue.includes('\u00A0\u00A0')) { el.nextSibling.nodeValue = ''; // Remove the spaces } el.style.display = 'none'; // Hide the element } }); // Add cross-domain measurement, anonymize IPs 'use strict'; //var ga = gtag; ga('config', 'G-9D3HKKFV1Q', 'auto', { /*'allowLinker': true,*/ 'anonymize_ip': true/*, 'linker': { 'domains': [ 'medium.com/towards-artificial-intelligence', 'datasets.towardsai.net', 'rss.towardsai.net', 'feed.towardsai.net', 'contribute.towardsai.net', 'members.towardsai.net', 'pub.towardsai.net', 'news.towardsai.net' ] } */ }); ga('send', 'pageview'); -->