Umělá inteligence začíná pomáhat s diagnózou Alzheimera

26. 10. 2020

Sdílet

Autor: phonlamaiphoto
Vývojáři z IBM vyvíjejí systém, který na základě analýzy řeči dokáže rozpoznat riziko propuknutí Alzheimerovy choroby.

Letitá kresba dětí pokradmu beroucích si sušenky za matčinými zády je podkladem pro umělou inteligenci, která se s její pomocí učí detekovat riziko propuknutí Alzheimerovy choroby. Systém pracuje s analýzou hlasu lidí, kteří obrázek popisují a jeho tvůrci tvrdí, že riziko dokáže identifikovat o sedm let dříve než lékař, a to s až sedmdesátiprocentní přesností. Přitom právě včasnost odhalení rizika a zahájení medikace je pro další průběh Alzheimerovy choroby zásadní.

„Podobný průzkum je zoufale potřeba, jelikož Alzheimerova choroba vede ke změnám na mozku už patnáct let před tím, než se projeví její symptomy,“ hodnotí Fiona Carragherová z britské Alzheimerovské společnosti. „Jde však o ohromný krok vpřed v tom, jak využít umělou inteligenci a analýzu řeči k tomu, abychom získali včasnější a přesnější diagnózu, ačkoliv je samozřejmě potřeba další testování na rozmanitějším vzorku lidí.“

Alzheimer poškozuje paměť a další kognitivní funkce tím, že ničí spojení mezi nervovými buňkami v mozku. Nemoc celosvětově postihuje stále více lidí. V roce 2018 jí v Česku trpělo 167 tisíc lidí a dle lékařů se tento počet může do roku 2050 až zdvojnásobit. Pro srovnání, ve Spojených státech žije s Alzheimerem až 5,5 milionů lidí a dle některých studií je nemoc třetí nejčastější příčinou úmrtí po srdečních chorobách a rakovině.

AI model vyvinutý v IBM Research ve spolupráci s farmaceutickou firmou Pfizer k analýze využívá krátké útržky z popisu obrázku, který se už léta používá k diagnostikování demence a dalších kognitivních poruch. Umělá inteligence si přitom všímá drobných změn v projevu, jako jsou gramatické chyby nebo špatný slovosled, které patří k příznakům horšících se kognitivních funkcí. Vzorek, ze kterého výzkumníci vycházejí, pochází z tzv. Framinghamské srdeční studie (Framingham Heart Study), v rámci které je už od roku 1948 sledováno víc než pět tisíc obyvatel (dnes už čtvrtá generace) amerického města Framingham.

Původně sice kvůli sledování poruch kardiovaskulárního systému, v rámci studie však vzniklo ohromné množství audiozáznamů, které umělá inteligence analyzuje.

„Klíčové je zjištění, že oproti klinické diagnóze dokážeme s až sedmiletým předstihem a sedmdesátiprocentní přesností určit, zda se u někoho projeví Alzheimerova choroba,“ říká Ajay Royyuru, viceprezident IBM Healthcare Research.

Cyber25

Přestože na onemocnění v současnosti neexistuje definitivní lék, vědět, u koho může nemoc propuknout, může s potlačováním jejích projevů značně pomoct. Na druhou stranu, Royyuru připouští, že ne každý pacient může mít o tuto informaci zájem a apeluje tak na otázku etiky.

„Lidé se do tohoto projektu musí zapojit na základě dobrovolnosti a výsledky průzkumu se musí dozvědět jen se svým vlastním svolením.“ Doufá však, že v budoucnu můžou podobné systémy založené na umělé inteligenci lékařům s diagnózami pomáhat. „Pro zkušeného praktika jde o další pomocný nástroj. Konečnou diagnózu stejně bude vždy určovat lékař, nikoliv stroj.“

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
OSZAR »