{"id":2731,"date":"2021-03-01T05:00:00","date_gmt":"2021-03-01T04:00:00","guid":{"rendered":"https:\/\/ellycode.com\/?p=2731"},"modified":"2021-05-07T16:39:39","modified_gmt":"2021-05-07T14:39:39","slug":"possiamo-analizzare-le-emozioni-con-lintelligenza-artificiale","status":"publish","type":"post","link":"https:\/\/ellycode.com\/it\/blog\/possiamo-analizzare-le-emozioni-con-lintelligenza-artificiale\/","title":{"rendered":"Possiamo analizzare le emozioni con l\u2019Intelligenza Artificiale?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Negli ultimi anni, grazie ad Internet, \u00e8 aumentata esponenzialmente la nostra possibilit\u00e0 di esprimere opinioni ed emettere giudizi, sotto forma sia di pollici sollevati che di lunghe recensioni. <strong>A differenza per\u00f2 della chiacchiera da bar, stavolta le nostre frasi non volano via nell\u2019aria ma rimangono per sempre immagazzinate su uno storage digitale.<\/strong> E\u2019 possibile estrarre informazione se non addirittura valore da questa mole di dati?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Qualche giorno fa un politico ha postato su un noto social network un discorso d\u2019addio che \u00e8 stato commentato da oltre 100000 utenti. Pensate anche a un video su Youtube di un gruppo pop che pu\u00f2 ricevere centinaia di milioni di visualizzazioni ma anche milioni di commenti. <strong>E\u2019 impensabile che una persona, o anche un team, legga tutti questi commenti traendone una qualsiasi conclusione<\/strong>. Il politico \u00e8 ancora amato? I fan hanno gradito la nuova canzone? Solo uno strumento di analisi automatico pu\u00f2 fornire queste risposte.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-la-sentiment-analysis\">La Sentiment Analysis<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La Sentiment Analysis \u00e8 un processo di calcolo che serve proprio ad identificare e categorizzare le opinioni espresse in un frammento di testo, principalmente per capire se l\u2019attitudine dell\u2019autore del testo verso quel particolare soggetto \u00e8 <strong>positiva<\/strong>, <strong>negativa <\/strong>o <strong>neutra<\/strong>. L\u2019intento di questo tipo di analisi, nata come un campo dell\u2019elaborazione del linguaggio naturale (NLP) \u00e8 quindi quello di i<strong>nterpretare e catalogare le emozioni<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quali sono gli scenari d\u2019uso possibili? La Sentiment Analysis \u00e8 un ottimo strumento per analizzare recensioni di prodotti, condurre ricerche di mercato, monitorare un servizio clienti o un social media e infine gestire la reputazione di un\u2019organizzazione o di una persona.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"752\" height=\"413\" data-attachment-id=\"2790\" data-permalink=\"https:\/\/ellycode.com\/it\/blog\/possiamo-analizzare-le-emozioni-con-lintelligenza-artificiale\/attachment\/performing-twitter-sentiment-analysis1\/\" data-orig-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/02\/performing-twitter-sentiment-analysis1.jpg?fit=752%2C413&amp;ssl=1\" data-orig-size=\"752,413\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"performing-twitter-sentiment-analysis1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/02\/performing-twitter-sentiment-analysis1.jpg?fit=752%2C413&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/02\/performing-twitter-sentiment-analysis1.jpg?resize=752%2C413&#038;ssl=1\" alt=\"\" class=\"wp-image-2790\" srcset=\"https:\/\/ellycode.com\/wp-content\/uploads\/2021\/02\/performing-twitter-sentiment-analysis1.jpg 752w, https:\/\/ellycode.com\/wp-content\/uploads\/2021\/02\/performing-twitter-sentiment-analysis1-480x264.jpg 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 752px, 100vw\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Ma da un punto di vista statistico, <strong>\u00e8 ragionevole pensare che il campione di persone che frequentano il web sia rappresentativo dell\u2019opinione pubblica mondiale, o nazionale o locale?<\/strong> Molte aziende e organizzazioni pensano di s\u00ec ed hanno scommesso su questo strumento per dirigere le proprie attivit\u00e0. Come si conduce allora una \u201csentiment analysis\u201d?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Partiamo dai dati: un campione di frasi, che potrebbero essere dei tweet o recensioni di qualsiasi tipo e utilizziamo delle librerie software per condurre una analisi. I passi fondamentali da compiere sono:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>eliminare le parole<\/strong> <strong>che non contribuiscono a determinare uno stato d\u2019animo<\/strong>: articoli, preposizioni, congiunzioni, etc. In gergo queste parole sono dette \u201cstop word\u201d.<\/li><li><strong>creare una tabella<\/strong>, chiamata <strong>frequency distributions<\/strong>, per stabilire quante volte ciascuna parola compaia in un testo.<\/li><li><strong>estrarre le concordanze<\/strong>, ossia capire dove appare nel testo una parola e quali parole la circondano.<\/li><li><strong>estrarre le collocazioni<\/strong>, ossia quella serie di parole che appaiono spesso insieme in una frase. Possiamo avere combinazioni di 2, 3 o 4 parole.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ma questi sono solo i passi iniziali che conducono all\u2019utilizzo di un modello pre-trained da scegliere secondo il contesto del nostro problema. Potremmo utilizzare ad esempio<strong> NLTK <\/strong>(<strong>N<\/strong>atural<strong> L<\/strong>anguage<strong> T<\/strong>oolKit), una piattaforma per scrivere programmi in Python che lavorano con il linguaggio umano. Questa piattaforma offre, tra le altre sue librerie, <strong>VADER<\/strong> (<strong>V<\/strong>alence<strong> A<\/strong>ware<strong> D<\/strong>ictionary<strong> <\/strong>and s<strong>E<\/strong>ntiment<strong> R<\/strong>easoner), un modello specializzato per il linguaggio usato nei social media, particolarmente adatto per frasi brevi e gergali, che per\u00f2 perde efficacia quando le frasi sono pi\u00f9 lunghe e strutturate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I passi successivi sono quelli classici: valutare l\u2019efficienza del modello, eventualmente modificarlo aggiungendo ulteriori feature e infine utilizzarlo su nuovi dati.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-facciamo-un-esempio\">Facciamo un esempio<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I principali provider Cloud offrono servizi gi\u00e0 pronti per l\u2019elaborazione del linguaggio naturale come abbiamo visto nell\u2019<a href=\"https:\/\/ellycode.com\/it\/blog\/dal-testo-alla-comprensione-con-lintelligenza-artificiale\/\" target=\"_blank\" rel=\"noreferrer noopener\">articolo di Salvatore<\/a>. Diventa quindi immediato identificare il linguaggio del testo, estrarre le frasi chiave, i luoghi, le persone, i marchi o gli eventi e capire se il testo ha una connotazione positiva o negativa. Tutti offrono la possibilit\u00e0 di creare un modello personalizzato per un proprio dominio definendo delle specifiche entit\u00e0 personalizzate.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"654\" data-attachment-id=\"2818\" data-permalink=\"https:\/\/ellycode.com\/it\/blog\/possiamo-analizzare-le-emozioni-con-lintelligenza-artificiale\/attachment\/image01\/\" data-orig-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/02\/image01.png?fit=1256%2C802&amp;ssl=1\" data-orig-size=\"1256,802\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image01\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/02\/image01.png?fit=1024%2C654&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/02\/image01.png?resize=1024%2C654&#038;ssl=1\" alt=\"\" class=\"wp-image-2818\" srcset=\"https:\/\/ellycode.com\/wp-content\/uploads\/2021\/02\/image01-1024x654.png 1024w, https:\/\/ellycode.com\/wp-content\/uploads\/2021\/02\/image01-980x626.png 980w, https:\/\/ellycode.com\/wp-content\/uploads\/2021\/02\/image01-480x306.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In EllyCode abbiamo sviluppato alcune librerie multi-cloud che ci consentono di fare test molto semplici su Azure, AWS e GCP. Non ho resistito alla tentazione di provarle analizzando il testo della canzone <em>\u201cNo Surprises\u201d<\/em> dei <strong>Radiohead<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Perch\u00e9 i Radiohead? Diciamo che ho voluto agevolare gli algoritmi di Machine Learning scegliendo quello che da molti (ma non da me) \u00e8 considerato come uno dei gruppi dai testi pi\u00f9 deprimenti della storia della musica.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" width=\"1080\" height=\"608\" src=\"https:\/\/www.youtube.com\/embed\/u5CVsCnxyXg?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=it-IT&#038;autohide=2&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\"><\/iframe><\/span>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La prima frase \u00e8<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>A heart that&#8217;s full up like a landfill<br>A job that slowly kills you<br>Bruises that won&#8217;t heal<\/p><\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>You look so tired, unhappy<br>Bring down the government<br>They don&#8217;t, they don&#8217;t speak for us<\/p><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Qui ci sono pochi dubbi. I risultati degli algoritmi sono molto chiari:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>&nbsp;<\/td><td>AWS<\/td><td>Azure<\/td><td>GCP<\/td><\/tr><tr><td>Mixed<\/td><td>0,05<\/td><td>&#8211;<\/td><td>&#8211;<\/td><\/tr><tr><td>Negative<\/td><td>0,85<\/td><td>0,88<\/td><td>&#8211;<\/td><\/tr><tr><td>Neutral<\/td><td>0,07<\/td><td>0,01<\/td><td>&#8211;<\/td><\/tr><tr><td>Positive<\/td><td>0,03<\/td><td>0,11<\/td><td>&#8211;<\/td><\/tr><tr><td>Score, Magnitude<\/td><td>&#8211;<\/td><td>&#8211;<\/td><td>-0,8&nbsp; 0,8<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In GCP lo score indica l\u2019emozione complessiva della frase mentre la magnitude indica quanto contenuto emozionale \u00e8 presente nel documento. Ad esempio, un sentimento chiaramente positivo potr\u00e0 essere valutato con uno score di 0,8 e una magnitude di 3,0 mentre uno chiaramente negativo con uno score di -0,7 e una magnitude di 4,0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La frase successiva \u00e8 la seguente<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>I&#8217;ll take a quiet life<br>A handshake of carbon monoxide<br>No alarms and no surprises<\/p><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>E\u2019 interessante notare come Amazon dia una interpretazione chiaramente positiva, mentre gli altri due servizi hanno meno certezze.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>&nbsp;<\/td><td>AWS<\/td><td>Azure<\/td><td>GCP<\/td><\/tr><tr><td>Mixed<\/td><td>0,02<\/td><td>&#8211;<\/td><td>&#8211;<\/td><\/tr><tr><td>Negative<\/td><td>0,05<\/td><td>0,37<\/td><td>&#8211;<\/td><\/tr><tr><td>Neutral<\/td><td>0,25<\/td><td>0,45<\/td><td>&#8211;<\/td><\/tr><tr><td>Positive<\/td><td>0,68<\/td><td>0,18<\/td><td>&#8211;<\/td><\/tr><tr><td>Score, Magnitude<\/td><td>&#8211;<\/td><td>&#8211;<\/td><td>-0,3&nbsp; 0,3<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sicuramente la frase \u00e8 pi\u00f9 corta e il vero significato circondato da parole apparentemente positive. Questi sistemi per\u00f2 sono incapaci di distinguere il sarcasmo e non hanno saputo cogliere un messaggio ancora pi\u00f9 negativo rispetto alla prima strofa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusioni\">Conclusioni<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">E\u2019 chiaro che siamo davanti a strumenti potentissimi ma anche a scenari largamente inesplorati. Un tweet \u00e8 diverso da una poesia o da una chiacchierata in una stanza o da un comizio politico: <strong>il contesto, come vedremo anche nei prossimi articoli, \u00e8 sempre essenziale<\/strong>!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Continuate a seguirci!<\/p>\n\n\n[et_pb_section global_module=\"1785\"][\/et_pb_section]\n","protected":false},"excerpt":{"rendered":"<p>Negli ultimi anni, grazie ad Internet, \u00e8 aumentata esponenzialmente la nostra possibilit\u00e0 di esprimere opinioni ed emettere giudizi, sotto forma sia di pollici sollevati che di lunghe recensioni. A differenza per\u00f2 della chiacchiera da bar, stavolta le nostre frasi non volano via nell\u2019aria ma rimangono per sempre immagazzinate su uno storage digitale. E\u2019 possibile estrarre [&hellip;]<\/p>\n","protected":false},"author":195423236,"featured_media":2770,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_crdt_document":"","inline_featured_image":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[688637365],"tags":[],"class_list":["post-2731","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/03\/5_1105x656_blog_Sentiment-A.png?fit=1105%2C656&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pcuDuD-I3","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/posts\/2731","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/users\/195423236"}],"replies":[{"embeddable":true,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/comments?post=2731"}],"version-history":[{"count":13,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/posts\/2731\/revisions"}],"predecessor-version":[{"id":3407,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/posts\/2731\/revisions\/3407"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/media\/2770"}],"wp:attachment":[{"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/media?parent=2731"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/categories?post=2731"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/tags?post=2731"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}