{"id":3420,"date":"2021-05-17T10:00:00","date_gmt":"2021-05-17T08:00:00","guid":{"rendered":"https:\/\/ellycode.com\/?p=3420"},"modified":"2021-05-19T10:15:35","modified_gmt":"2021-05-19T08:15:35","slug":"avviare-la-conversazione-con-un-assistente-virtuale","status":"publish","type":"post","link":"https:\/\/ellycode.com\/it\/blog\/avviare-la-conversazione-con-un-assistente-virtuale\/","title":{"rendered":"Avviare la conversazione con un assistente virtuale"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Uno dei modi con il quale l&#8217;intelligenza artificiale \u00e8 entrata a far parte della vita di tutti i giorni, \u00e8 certamente tramite gli assistenti virtuali, grazie all\u2019integrazione nativa con la stragrande maggioranza degli smartphone in commercio e ai <a href=\"https:\/\/economictimes.indiatimes.com\/magazines\/panache\/ok-google-how-many-people-use-assistant-monthly-its-500-mn\/articleshow\/73157031.cms?from=mdr\" target=\"_blank\" rel=\"noreferrer noopener\">milioni di dispositivi intelligenti<\/a> venduti negli ultimi anni, come gli Amazon Echo o Google Home.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al di l\u00e0 della forma con cui si presentano, tutti gli assistenti virtuali che utilizzano la voce come modalit\u00e0 di interazione hanno una funzionalit\u00e0 in comune: si attivano quando viene rilevata una parola chiave, o <strong>keyword<\/strong>, come ad esempio <em>\u201cAlexa\u201d<\/em>, oppure <em>\u201cHey, Siri\u201d. <\/em>I nostri assistenti ascoltano le voci ed i rumori nell&#8217;ambiente circostante e aspettano che venga pronunciata la parola chiave, attivandosi quando questo succede per rispondere alle nostre richieste.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questa tecnica \u00e8 chiamata <strong>keyword spotting, <\/strong>e pu\u00f2 essere implementata in vari modi. Vediamo insieme come.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-dalla-voce-al-modello\">Dalla voce al modello<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per fare in modo che un dispositivo possa attivarsi tramite comando vocale, c\u2019\u00e8 bisogno innanzitutto di un sistema che permetta l\u2019analisi in tempo reale dell\u2019audio prelevato dal microfono. Per questo tipicamente il sistema di attivazione vocale \u00e8 implementato all\u2019interno del dispositivo stesso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;approccio pi\u00f9 utilizzato \u00e8 quello di affidarsi ad un certo tipo di reti neurali chiamate <strong>CNN<\/strong> (<em>Convolutional Neural Networks<\/em>), che sono di solito impiegate nell&#8217;analisi di immagini. Le CNN lavorano su dati presentati sotto forma di matrici (pi\u00f9 propriamente array a 2 dimensioni), per questo il segnale audio viene convertito in uno <strong>spettrogramma<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uno spettrogramma \u00e8 in grado di rappresentare un segnale audio in tre dimensioni, vale a dire <em>tempo, ampiezza <\/em>e <em>frequenza.<\/em> Possiamo vederlo come una fotografia del segnale audio, dove il colore di ogni pixel rappresenta l\u2019ampiezza del segnale ad una certa frequenza e in un determinato istante.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"850\" height=\"519\" data-attachment-id=\"3425\" data-permalink=\"https:\/\/ellycode.com\/it\/blog\/avviare-la-conversazione-con-un-assistente-virtuale\/attachment\/spectrogram\/\" data-orig-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/05\/spectrogram.png?fit=850%2C519&amp;ssl=1\" data-orig-size=\"850,519\" 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=\"spectrogram\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/05\/spectrogram.png?fit=300%2C183&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/05\/spectrogram.png?fit=850%2C519&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/05\/spectrogram.png?resize=850%2C519&#038;ssl=1\" alt=\"\" class=\"wp-image-3425\" srcset=\"https:\/\/ellycode.com\/wp-content\/uploads\/2021\/05\/spectrogram.png 850w, https:\/\/ellycode.com\/wp-content\/uploads\/2021\/05\/spectrogram-480x293.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 850px, 100vw\" \/><figcaption>Fonte: <a href=\"https:\/\/www.researchgate.net\/figure\/Spectrograms-and-Oscillograms-This-is-an-oscillogram-and-spectrogram-of-the-boatwhistle_fig2_267827408\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.researchgate.net\/figure\/Spectrograms-and-Oscillograms-This-is-an-oscillogram-and-spectrogram-of-the-boatwhistle_fig2_267827408<\/a><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La rete neurale sar\u00e0 cos\u00ec in grado di analizzare il suono e scovare i pattern che corrispondono alla parola che cerchiamo. Lo fa applicando al segnale una serie di filtri consecutivi chiamati <em>convoluzioni<\/em>, da cui il nome della rete neurale. Quando la keyword viene rilevata, l&#8217;assistente si attiva e invia l&#8217;audio a sistemi di riconoscimento vocale pi\u00f9 complessi, che quindi trascrivono l&#8217;audio in testo. Solitamente sistemi del genere non girano direttamente sul dispositivo, ma nei sistemi in cloud dei rispettivi vendor.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"701\" data-attachment-id=\"3428\" data-permalink=\"https:\/\/ellycode.com\/it\/blog\/avviare-la-conversazione-con-un-assistente-virtuale\/attachment\/cnn\/\" data-orig-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/05\/cnn.png?fit=1498%2C1025&amp;ssl=1\" data-orig-size=\"1498,1025\" 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=\"cnn\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/05\/cnn.png?fit=300%2C205&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/05\/cnn.png?fit=1024%2C701&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/ellycode.com\/wp-content\/uploads\/2021\/05\/cnn.png?resize=1024%2C701&#038;ssl=1\" alt=\"\" class=\"wp-image-3428\" srcset=\"https:\/\/ellycode.com\/wp-content\/uploads\/2021\/05\/cnn-980x671.png 980w, https:\/\/ellycode.com\/wp-content\/uploads\/2021\/05\/cnn-480x328.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\" \/><figcaption>Fonte: <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/CNN_ASLPTrans2-14.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2016\/02\/CNN_ASLPTrans2-14.pdf<\/a><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Questa \u00e8 quello che succede a grandi linee. Nel dettaglio, poi, ci sono numerose tecniche che vengono adottate per migliorare le prestazioni del sistema di riconoscimento nel mondo reale. Possiamo misurare le performance del modello in base al numero di <strong>falsi negativi<\/strong> (l&#8217;assistente non si attiva quando dovrebbe) e <strong>falsi positivi<\/strong> (si attiva quando non ci si rivolge ad esso). Sembrer\u00e0 intuitivo a chi utilizza regolarmente un assistente virtuale: performance migliori del modello si traducono direttamente in una migliore esperienza d&#8217;uso del prodotto.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pensate ad esempio ad Alexa, che \u00e8 presente in milioni di case in tutto il mondo. Gli sviluppatori hanno dovuto provvedere ad escludere tutte le menzioni della<a href=\"https:\/\/www.amazon.science\/blog\/why-alexa-wont-wake-up-when-she-hears-her-name-in-amazons-super-bowl-ad\" target=\"_blank\" rel=\"noreferrer noopener\"> parola &#8220;Alexa&#8221; nelle pubblicit\u00e0<\/a>, per evitare che possa attivarsi mentre la tv \u00e8 accesa.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un altro esempio \u00e8 il sistema con il quale Apple ha costruito il sistema di riconoscimento di Siri, che, girando su uno smartphone, ha come priorit\u00e0 quella di preservare la durata della batteria. Tramite l\u2019impiego di hardware ad-hoc, \u00e8 stato possibile ottenere un consumo energetico molto basso nonostante la registrazione continua. Il tutto \u00e8 descritto in un <a href=\"https:\/\/machinelearning.apple.com\/research\/hey-siri\" target=\"_blank\" rel=\"noreferrer noopener\">articolo<\/a> molto interessante tratto dal blog del team di Machine Learning di Apple.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-dal-modello-al-prodotto\">Dal modello al prodotto<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un sistema di keyword spotting pu\u00f2 rivelarsi utile in diversi ambiti applicativi, non solo negli assistenti virtuali. Per chi volesse integrare un sistema di attivazione vocale all&#8217;interno del proprio prodotto, pu\u00f2 fare affidamento su una serie di progetti e dataset che la comunit\u00e0 globale mette a disposizione. Come ormai accade nel mondo del machine learning, ogni giorno vengono pubblicati nuovi esperimenti che provano ad ottenere le migliori performance possibili. Dando un&#8217;occhiata a siti come Kaggle o <a href=\"https:\/\/paperswithcode.com\/task\/keyword-spotting\" target=\"_blank\" rel=\"noreferrer noopener\">Papers with code<\/a>, troviamo moltissimi esempi di modelli per il <em>keyword spotting.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nella scelta di un framework di Machine Learning, bisogna tenere in considerazione le tecnologie che si utilizzano e l\u2019hardware del dispositivo target. In base a questi, si potrebbe propendere per un framework piuttosto che un altro. Ad esempio, \u00e8 possibile far girare un modello TensorFlow non solo su un desktop o un server, ma anche su dispositivi meno potenti come smartphone e sistemi embedded (con TensorFlow Lite), o addirittura nel browser con TensorFlow.js. Questa possibilit\u00e0 ci consente di risolvere anche una questione importante come quella della privacy dell\u2019utente: i dati necessari al training del modello restano sul dispositivo dell\u2019utente, invece di essere inviati ad un server.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Durante lo sviluppo di Elly, il nostro assistente virtuale, ci siamo imbattuti in due sistemi che hanno catturato la nostra attenzione. Il primo \u00e8 il modello <em>speech-commands<\/em> di Google, un modello TensorFlow.js in grado di riconoscere 18 parole chiave da un set di parole inglesi come &#8216;up&#8217;, &#8216;down&#8217;, &#8216;left&#8217;, &#8216;right&#8217;, i numeri da &#8216;zero&#8217; a &#8216;ten&#8217;, etc. Le parole del dataset fornito fanno subito pensare ad un&#8217;interazione utente senza mouse o tastiera, ma non si limita a questo. Tramite una tecnica chiamata <em>transfer learning<\/em> infatti, \u00e8 possibile costruire il proprio modello in grado di riconoscere una nuova parola, adattandolo cos\u00ec al nostro scopo. Nel<a href=\"https:\/\/github.com\/tensorflow\/tfjs-models\/tree\/master\/speech-commands\" target=\"_blank\" rel=\"noreferrer noopener\"> repository GitHub<\/a> del progetto trovate tutto ci\u00f2 che vi occorre costruire un nuovo modello a partire da nuovi campioni audio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La raccolta dei campioni audio per il training di un nuovo modello \u00e8 un altro punto interessante sul quale soffermarsi. Raccogliere le registrazioni potrebbe rallentare le prime fasi di prototipazione, dove magari non \u00e8 necessario che il modello di riconoscimento sia perfetto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per ovviare a questo problema, \u00e8 possibile utilizzare un approccio diverso come quello adottato da Microsoft con <a href=\"https:\/\/speech.microsoft.com\/customkeyword\" target=\"_blank\" rel=\"noreferrer noopener\">Speech Studio<\/a>. Sul portale \u00e8 possibile generare un modello semplicemente scegliendo una parola del vocabolario, senza la necessit\u00e0 di fornire campioni audio per training. Il modello pu\u00f2 essere generato in due modalit\u00e0:, una pi\u00f9 rapida e gratuita, l\u2019altra pi\u00f9 lenta e a pagamento, ma che promette un\u2019affidabilit\u00e0 maggiore. Il modello generato da Speech Studio pu\u00f2 essere utilizzato tramite l\u2019SDK, che supporta C#, Python e Objective-C\/Swift.<\/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\">In un assistente vocale, dove la voce \u00e8 la modalit\u00e0 di interazione principale, un sistema di keyword spotting \u00e8 tipicamente il primo di una serie di strumenti che analizzano la voce e interpretano i comandi impartiti dall\u2019utente. Avere la possibilit\u00e0 di far girare il modello direttamente sul dispositivo dell\u2019utente ci permette di risolvere principalmente due problemi: privacy e latenza.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dal punto di vista della privacy, dal momento in cui vengono inviate solo le registrazioni in cui la keyword \u00e8 stata rilevata, i dati inviati sono limitati alle sole interazioni con l\u2019assistente, evitando l\u2019invio dell\u2019audio prelevato dal microfono 24h su 24h. Questo ci permette anche di non avere i problemi di latenza nell\u2019attivazione dell\u2019assistente vocale, eliminando la trasmissione del flusso audio ad un server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La velocit\u00e0 di risposta \u00e8 un aspetto che impatta moltissimo sulla user experience di chi interagisce con il nostro assistente: un&#8217;esperienza d&#8217;uso piacevole inizia fin dalla prima interazione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avere un buon modello di keyword spotting \u00e8 quindi fondamentale e non vediamo l\u2019ora di condividere con voi i risultati che stiamo avendo con Elly!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Continuate a seguirci.<\/p>\n\n\n[et_pb_section global_module=\"1791\"][\/et_pb_section]\n","protected":false},"excerpt":{"rendered":"<p>Uno dei modi con il quale l&#8217;intelligenza artificiale \u00e8 entrata a far parte della vita di tutti i giorni, \u00e8 certamente tramite gli assistenti virtuali, grazie all\u2019integrazione nativa con la stragrande maggioranza degli smartphone in commercio e ai milioni di dispositivi intelligenti venduti negli ultimi anni, come gli Amazon Echo o Google Home. Al di [&hellip;]<\/p>\n","protected":false},"author":195423238,"featured_media":3421,"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-3420","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\/05\/17_1105x656_blog_Dialogo-B.png?fit=1105%2C656&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pcuDuD-Ta","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/posts\/3420","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=3420"}],"version-history":[{"count":11,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/posts\/3420\/revisions"}],"predecessor-version":[{"id":3457,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/posts\/3420\/revisions\/3457"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/media\/3421"}],"wp:attachment":[{"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/media?parent=3420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/categories?post=3420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ellycode.com\/it\/wp-json\/wp\/v2\/tags?post=3420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}