{"id":2587,"date":"2021-02-22T05:00:00","date_gmt":"2021-02-22T04:00:00","guid":{"rendered":"https:\/\/ellycode.com\/?p=2587"},"modified":"2021-05-07T16:39:56","modified_gmt":"2021-05-07T14:39:56","slug":"dal-testo-alla-comprensione-con-lintelligenza-artificiale","status":"publish","type":"post","link":"https:\/\/ellycode.com\/it\/blog\/dal-testo-alla-comprensione-con-lintelligenza-artificiale\/","title":{"rendered":"Dal testo alla comprensione con l&#8217;Intelligenza Artificiale"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">La comunicazione \u00e8 sempre stata alla base delle relazioni umane, tanto da farci inventare numerosi modi di comunicare, pi\u00f9 o meno fantasiosi. Vengono prodotte ogni giorno enormi quantit\u00e0 di dati sotto forma di messaggi, commenti, post, e-mail, scritte in <em>linguaggio naturale<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per poter analizzare e comprendere questi testi in tutta la loro complessit\u00e0, sono state sviluppate molte tecniche che ricadono nell\u2019area del <strong>Natural Language Processing (NLP)<\/strong>. Queste tecniche possono seguire un approccio basato su un insieme di regole scritte a mano (<em>rule-based<\/em>), oppure sfruttando il <em>Machine Learning<\/em>, costruendo automaticamente un set di regole partendo da dati opportunamente annotati.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le tecniche di analisi del testo sono molteplici e ci aiutano a ricavare informazioni in formato <em>strutturato<\/em>, cos\u00ec da poterle elaborare con i computer. Alcune come la <strong>Named Entity Recognition (NER), Syntax Analysis, Part-of-Speech tagging<\/strong>, si fermano ad un livello \u201csuperficiale\u201d dell\u2019elaborazione linguistica, mentre altre come la <strong>Sentiment Analysis <\/strong>o l\u2019<strong>Entity Linking<\/strong>, estrapolano concetti ad un livello di comprensione pi\u00f9 alto. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vediamo un esempio di come la NER permette di analizzare la frase, distinguendo persino parole il cui significato varia a seconda del contesto:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2601\" data-permalink=\"https:\/\/ellycode.com\/it\/blog\/dal-testo-alla-comprensione-con-lintelligenza-artificiale\/attachment\/ner_ita\/\" data-orig-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/02\/ner_ita.png?fit=641%2C342&amp;ssl=1\" data-orig-size=\"641,342\" 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=\"ner_ita\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/02\/ner_ita.png?fit=641%2C342&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/02\/ner_ita.png?resize=641%2C342&#038;ssl=1\" alt=\"\" class=\"wp-image-2601\" width=\"641\" height=\"342\" srcset=\"https:\/\/ellycode.com\/wp-content\/uploads\/2021\/02\/ner_ita.png 641w, https:\/\/ellycode.com\/wp-content\/uploads\/2021\/02\/ner_ita-480x256.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 641px, 100vw\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Un altro esempio, stavolta di come la Sentiment Analysis consente di riconoscere gli aspetti principali del testo e di verificare il parere per ognuno di esso (<strong>opinion mining<\/strong>), oltre che a restituire un risultato complessivo:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2603\" data-permalink=\"https:\/\/ellycode.com\/it\/blog\/dal-testo-alla-comprensione-con-lintelligenza-artificiale\/attachment\/sentiment_ita\/\" data-orig-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/02\/sentiment_ita.png?fit=650%2C253&amp;ssl=1\" data-orig-size=\"650,253\" 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=\"sentiment_ita\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/02\/sentiment_ita.png?fit=650%2C253&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/02\/sentiment_ita.png?resize=650%2C253&#038;ssl=1\" alt=\"\" class=\"wp-image-2603\" width=\"650\" height=\"253\" srcset=\"https:\/\/ellycode.com\/wp-content\/uploads\/2021\/02\/sentiment_ita.png 650w, https:\/\/ellycode.com\/wp-content\/uploads\/2021\/02\/sentiment_ita-480x187.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 650px, 100vw\" \/><\/figure><\/div>\n\n\n\n<hr class=\"wp-block-coblocks-dynamic-separator\" style=\"height:50px\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Come gi\u00e0 visto nell\u2019<a href=\"https:\/\/ellycode.com\/it\/blog\/quattro-chiacchiere-con-la-nostra-applicazione\/\" target=\"_blank\" rel=\"noreferrer noopener\">articolo precedente<\/a>, se non si hanno conoscenze di intelligenza artificiale o non si vuole sviluppare questi strumenti da zero,<strong> \u00e8 possibile utilizzare i servizi in Cloud<\/strong>. Confronteremo quelli messi a disposizione da Microsoft Azure, Amazon AWS e Google Cloud, dando uno sguardo a quali sono le feature in comune e quelle esclusive.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-azure-cognitive-services\">Azure Cognitive Services<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il servizio sviluppato da Microsoft offre alcune funzionalit\u00e0 interessanti come NER e Linked Entities. La prima consente di riconoscere le entit\u00e0 generiche come nomi, luoghi, eventi, e cos\u00ec via. La seconda invece \u00e8 in grado di discernere tra termini che potrebbero essere ambigui, restituendo per ogni entit\u00e0 riconosciuta un link alla pagina Wikipedia corrispondente. L\u2019 Opinion Mining \u00e8 disponibile a partire dalla versione v3.1, al momento in preview e solo per testi in Inglese.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sono disponibili le librerie di sviluppo, scritte in diversi linguaggi. In alternativa, \u00e8 possibile interrogare l\u2019interfaccia REST. <strong>Come per gli speech services, le funzionalit\u00e0 sono utilizzabili on-premises installando un container Docker<\/strong>, che \u00e8 possibile attivare solo previa richiesta a Microsoft tramite compilazione di un form. Al momento, NER ed Entity Linking non sono disponibili nel container e ci si dovr\u00e0 accontentare del servizio in Cloud.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per un elenco delle funzionalit\u00e0 di Cognitive Services, si pu\u00f2 fare riferimento alla documentazione ufficiale:<br><a href=\"https:\/\/docs.microsoft.com\/it-it\/azure\/cognitive-services\/text-analytics\/\">https:\/\/docs.microsoft.com\/it-it\/azure\/cognitive-services\/text-analytics\/<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-amazon-comprehend\">Amazon Comprehend<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Comprehend \u00e8 un servizio di NLP che fornisce feature come keyphrase extraction, sentiment analysis ed entity recognition. Inoltre Comprehend permette di creare dei modelli specifici per il proprio dominio applicativo, sia per il riconoscimento di entit\u00e0 (come codici o sigle specifiche) sia per la classificazione dei testi. In entrambi i casi il sistema viene <em>istruito <\/em>con delle liste di testi gi\u00e0 catalogati, gli algoritmi di machine learning faranno il resto. \u00c8 possibile utilizzare Comprehend solo tramite gli SDK, che sono disponibili per Java, Python, PHP, Javascript, Ruby, C# e Go. <strong>Al momento non \u00e8 disponibile una API REST.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Trovate la documentazione al seguente link:<br><a href=\"https:\/\/docs.aws.amazon.com\/comprehend\/\">https:\/\/docs.aws.amazon.com\/comprehend\/<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-google-cloud-natural-language-api\">Google Cloud Natural Language API<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le Natural Language API forniscono alcune funzionalit\u00e0 gi\u00e0 viste su modelli generici pre-allenati, gli stessi utilizzati da Google Assistant. Per chi ha esigenze particolari, con AutoML \u00e8 possibile creare dei modelli personalizzati per il proprio dominio applicativo. Questo servizio offre una funzionalit\u00e0 di Syntax Analysis completa, che restituisce informazioni dettagliate sul testo analizzato. Mentre le altre procedure consentono di <em>comprendere<\/em> il significato del testo, la syntax analysis scende nel dettaglio e ne rivela la struttura. Il testo viene suddiviso in tanti token, che vengono classificati (come <em>aggettivo, verbo, soggetto, etc.<\/em>) e messi in relazione l\u2019uno con l\u2019altro. <strong>L\u2019analisi del sentiment relativo alle entit\u00e0 non \u00e8 disponibile in Italiano.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Google mette a disposizione le librerie di sviluppo e la documentazione per le API REST e gRPC.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Qui potete trovare ulteriori informazioni sulle funzionalit\u00e0 supportate:<br><a href=\"https:\/\/cloud.google.com\/natural-language\/docs\">https:\/\/cloud.google.com\/natural-language\/docs<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-azure-aws-e-google-cloud-a-confronto\">Azure, AWS e Google Cloud a confronto<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Proviamo a riassumere le funzionalit\u00e0 offerte dai principali Cloud provider in una tabella riepilogativa:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th><\/th><th class=\"has-text-align-center\" data-align=\"center\">Azure<br>Cognitive Services<\/th><th class=\"has-text-align-center\" data-align=\"center\">Amazon<br>Comprehend<\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Google Cloud<\/strong><br><strong>Natural Language API<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Sentiment analysis<\/td><td class=\"has-text-align-center\" data-align=\"center\"><span class=\"uppercase\">\u2714\ufe0f<\/span><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><\/tr><tr><td>Opinion mining<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f <br>(preview)<\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><\/tr><tr><td>Language recognition<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><\/tr><tr><td>Named entity recognition<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><\/tr><tr><td>Syntax analysis<\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><\/tr><tr><td>Keyphrase extraction<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><\/tr><tr><td>Modelli personalizzati<\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><\/tr><tr><td>Linguaggi supportati<\/td><td class=\"has-text-align-center\" data-align=\"center\">C#, Python, Javascript, Go, Ruby<\/td><td class=\"has-text-align-center\" data-align=\"center\">Java, Python, PHP, Javascript, Ruby, C#, Go<\/td><td class=\"has-text-align-center\" data-align=\"center\">C#, Go, Java, Javascript, PHP, Python, Ruby<\/td><\/tr><tr><td>REST<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><\/tr><tr><td>gRPC<\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<\/td><\/tr><tr><td>On-prem<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2714\ufe0f<br>(Docker)<\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tutti e tre seguono un modello di fatturazione simile che tiene conto del numero di \u201cunit\u00e0\u201d analizzate. Microsoft e Google definiscono come unit\u00e0 un numero di caratteri che va da 0 a 1000 caratteri, Amazon invece da 0 a 100 caratteri. Per Google e Amazon il costo unitario varia a seconda della caratteristica utilizzata e al numero di unit\u00e0: pi\u00f9 \u00e8 alto il numero di unit\u00e0 analizzate mensilmente, minore sar\u00e0 il costo unitario.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-considerazioni-finali\">Considerazioni finali<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per via dell\u2019infinita variet\u00e0 di interpretazioni e significati, comprendere le reali intenzioni dell\u2019utente \u00e8 la vera sfida nella creazione di un assistente virtuale, indipendentemente dalla modalit\u00e0 di interazione. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I servizi che abbiamo visto, combinati opportunamente, possono essere il punto di partenza in questo campo affascinante e complesso. Ma non sono gli unici che il Cloud ci mette a disposizione. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se siete interessati a scoprirne altri, continuate a seguirci!<\/p>\n\n\n[et_pb_section global_module=\"1791\"][\/et_pb_section]\n","protected":false},"excerpt":{"rendered":"<p>La comunicazione \u00e8 sempre stata alla base delle relazioni umane, tanto da farci inventare numerosi modi di comunicare, pi\u00f9 o meno fantasiosi. Vengono prodotte ogni giorno enormi quantit\u00e0 di dati sotto forma di messaggi, commenti, post, e-mail, scritte in linguaggio naturale. Per poter analizzare e comprendere questi testi in tutta la loro complessit\u00e0, sono state [&hellip;]<\/p>\n","protected":false},"author":195423238,"featured_media":2700,"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":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[688637365],"tags":[],"class_list":["post-2587","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"jetpack_shortlink":"https:\/\/wp.me\/pcuDuD-FJ","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/02\/6_1105x656_blog_Analisi-testo.png?fit=1105%2C656&ssl=1","_links":{"self":[{"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/posts\/2587","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\/195423238"}],"replies":[{"embeddable":true,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/comments?post=2587"}],"version-history":[{"count":13,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/posts\/2587\/revisions"}],"predecessor-version":[{"id":3408,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/posts\/2587\/revisions\/3408"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/media\/2700"}],"wp:attachment":[{"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/media?parent=2587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/categories?post=2587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/tags?post=2587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}