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

How Can We Build Machines That Think (and Feel)?
Artificial Intelligence   Latest   Machine Learning

How Can We Build Machines That Think (and Feel)?

Last Updated on September 4, 2023 by Editorial Team

Author(s): Anton Shakov

Originally published on Towards AI.

Photo by Dylan Hunter on Unsplash

A few semesters ago, I had to write an essay for a philosophy course. The guidelines were fairly vague so I used this as a reason to outline my views on creating Artificial General Intelligence (mostly for my own clarity of mind). This was not very long before ChatGPT really blew up and AI became a household topic of discussion. At this point, there were a few articles about a Google engineer who claimed that LaMDA had attained consciousness, but the conversation around AI was nowhere near the scale of what it would become a few months later.

I am by no means an expert on AI, having spent one summer in the first year of my math degree thinking about hypothetical neural network architectures as part of a research project.

On June 11th, 2022, AI engineer Blake Lemoine, who had been employed with Google’s Responsible AI team, published a conversation to his personal blog, which would lead to him being fired. The conversation was not between two humans. It was a conversation between Lemoine and Google’s latest breakthrough in language processing — a model called LaMDA. The reason Lemoine had decided to make his discussion with LaMDA public was that he believed that LaMDA showed signs of sentience, and he felt that continuing to treat LaMDA as a “helpful tool”, as lead developers at Google had done thus far, was no longer ethical. Many people online sided with Lemoine. Whether or not LaMDA had attained sentience, it was clear that machine learning had crossed a new threshold: a language model was now able to convince a rather sizable group of people that it was, in fact, sentient. I will argue that a subjective experience of the world is a precondition to sentience that LaMDA fails to satisfy. I will use the example of advanced language processing models like LaMDA to distinguish between embodying and emulating consciousness. Finally, I will argue that the source of an intelligent system’s subjective experience lies in its engagement with the environment in which it was trained.

If one accepts functionalism as the conclusive theory of mind, then there is almost no doubt that machines are already thinking in the same fundamental way as human beings, or at least that no further conceptual leaps are necessary for us to reach this point. Language models like Google’s LaMDA or OpenAI’s GPT-3 have proved themselves capable of convincing a vocal minority of experts that the chance of them being sentient is at least great enough to reevaluate the ethics of experimenting on them. However, the majority of experts remain unconvinced that these language models are actually conscious. The basic argument against believing that these models are conscious is that experts understand their architecture enough to know that these models have no sensory “organs” that would allow them to think or to have subjective experiences. In a nutshell, these models use deep pattern recognition to probabilistically generate text in response to inputted text. The unprecedented depth of their pattern recognition makes it seem as if the models understand the subtle context of human language and even human emotion:

Lemoine, B. (2022, June 11). Is LAMDA sentient? — an Interview. Medium.

However, this is merely the result of the AI parsing through gigabytes of text that was actually composed by human beings. All of this points to the incompleteness of functionalism’s account of consciousness. LaMDA, as well as other language processing models, are merely replicating human language without meaningfully engaging with it. The aspect of consciousness that is missing in language models is subjective experience. Proponents of LaMDA’s consciousness may object to this by asserting that it is human arrogance that leads one to deny the subjective experience of language models. They may cite the black box problem (i.e., our inability to know in detail how a given machine learning architecture processes information once it has been trained) to argue that we cannot conclude that an AI is not conscious as long as it appears conscious. To show that this is not the case, let’s consider the following example. Imagine we created a physical automaton that moved, spoke and behaved in a totally indistinguishable way from a human being. However, its basic way of functioning was that of LaMDA: it had been trained on the speech and movements of millions of people to recognize deep patterns and extrapolate from this pool probabilistically in response to various stimuli. On the outside, the automaton is entirely indiscernible from a human being. However, it has been given no sensory organs. Now consider the following question: Is the pain felt by the automaton as real as human pain? The automaton will certainly insist that it is. Yet we know, as its designers, that it does not have anything akin to a nervous system that would allow it to experience pain. We understand that the reason it insists that it feels pain is simply because that’s what any human would do in that situation. If we accept that the automaton is experiencing pain in the same fashion as a human being would, then we must also accept that a talented actor pretending to be in pain is experiencing the same degree of pain as someone who is actually injured. Since this is an absurd conclusion, it stands to reason that such an automaton is not actually in pain and that it indeed lacks subjective experience. Thus, we conclude that “functional consciousness” does not imply true consciousness without some degree of subjective experience.

While I’ve argued in the previous paragraph that even the most successful contemporary AIs do not have a subjective experience of the world, this does not aid us in understanding how to build machines that do possess it, or whether this is even possible. Let us begin by making the following two assumptions, which will be necessary for the further development of my argument. The first assumption is that all humans are conscious and have a subjective experience of the world. The second assumption is substrate independence: the assumption that there is nothing implicit in the biology of the human brain that makes it the sole medium on which a conscious mind can be stored and, more generally, that a conscious mind can be stored using electrical circuits and transistors. Having made these assumptions, we return to the discussion of subjective experience. As per our first assumption, how are human beings able to have subjective experiences? What is the key difference between us and the language models that allows us to say that we have a subjective experience while they do not? The difference is that we have sensory “organs” that allow us to authentically respond to our environment and decide independently how we feel about various stimuli. This, in turn, allows us to reason and decide our actions separately from other agents in our environment. I argue that this is precisely the missing source of subjectivity in modern AI. Let us distinguish between two types of intelligent systems: let’s call the first type “Originals” and the second type “Emulators”. The difference between the two is in how they came to be. Originals begin with certain basic goals (such as survival and procreation) and gradually develop their intelligence as a means to satisfy these goals by solving naturally occurring problems in their environment. Therefore, they simultaneously develop various sensory organs that indicate to them whether and how well they are meeting said goals. A human being is an example of such an intelligent system. Our sensory organs, as well as our intelligence, are the result of millions of our ancestors gradually evolving to meet the basic goals of survival and procreation in our environments. The second type of intelligent system is the Emulator. These are systems whose intelligence is the result of emulating other intelligent systems, with next to no interaction with any kind of external, self-contained environment. LaMDA falls into this category. It might be able to describe the ocean as vividly and convincingly as a human being, but it is merely generating strings of text without having any subjective experiences tied to those words. Once we’ve made this distinction, it becomes clear that Emulators are, by definition, incapable of having subjective experiences since they are only recycling the experiences conveyed by Originals. Language processing models, by the nature of their design, are Emulators, along with all of the artificial intelligence programs that are currently being developed (as far as I’m aware). This begs the question: Could there be an artificial intelligence of the first type — one that forms its own subjective experiences and only then turns them into language? To achieve this, it seems to me that the concept of training data should be reconceived as a “General Training Environment”. The AI should independently develop its intelligence by interacting with its environment and simultaneously evolving sensory organs. Intelligence on Earth began with microbial life and slowly evolved towards having sensory organs within the training environment of our planet. An engineer may attempt to design a training environment that speeds up the process of evolution to mitigate many of the obstacles and inefficiencies that terrestrial intelligence faces on our evolutionary journey. However, the training environment should be comparable enough to our own world so that once the AI training is complete, one may extract the artificial intelligence from the training environment and move it to our own world where humanity could attempt to communicate with it. In any event, independent interaction with an environment is essential for the formation of sensory organs and, therefore, essential for subjectivity. Sensory organs cannot arise from the current model of artificial intelligence training, namely, analyzing a set of data and attempting to make predictions of what the output should be from various inputs.

If we assume that this idea works in practice and that by simulating a training environment, one may be able to train a functionally intelligent AI that seems to possess a subjective experience, a possible objection is “how can we be sure that it’s not pretending?” In other words, how can we be sure an Original AI is not merely a more complicated Emulator? We can refute this by using the first of my assumptions. Namely, that human beings are conscious and have a subjective experience of the world. We rather intuitively believe that this is the case. However, if we attempted to justify to an alien species that we have subjective experiences, it would be difficult to convince them that we are not merely Emulators. Ultimately, our best strategy would be to point to our sensory organs and provide evidence that they behave the way that we claim. The same strategy would be available to the artificially intelligent Originals we’ve trained in the simulated environment. It is nonetheless possible that Original’s sensory organs would randomly evolve to behave as if they were generating a subjective experience while secretly being duds and that simultaneously, the Original would randomly evolve to act as if it has a subjective experience when it, in fact, does not. This strikes me as astronomically unlikely: if we live our lives believing that the people who surround us are as conscious as ourselves, there is no reason not to give Original-type AIs the same benefit of the doubt. We should, therefore, believe AIs trained as Originals when they tell us that they are conscious.

I presented an argument that subjective experience is a prerequisite for consciousness and that LaMDA and other language processing units almost certainly do not have subjective experiences. Thus, they should not be considered conscious. I outlined a broad path towards creating intelligent systems that have a subjective experience of the world: namely, Original-type AIs that are trained through independent interaction within a self-contained environment to simultaneously develop intelligence and sensory organs. Distinguishing between Originals and Emulators, I argued that an AI model that develops as an Original and displays functional intelligence can safely be declared conscious.

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'); -->