Codifica di un'app Android con IBM Watson Machine Learning

All'inizio del 2011, un sistema informatico di comprensione del linguaggio naturale chiamato IBM Watson è stato in grado di battere tutti i concorrenti umani in un gioco a quiz simile a Jeopardy! È stato un evento storico ed è stato forse il momento in cui il grande pubblico ha iniziato a rendersi conto che l'intelligenza artificiale non era più roba da fantascienza.

Allora, Watson aveva un supercomputer e poteva fare poco più di una semplice risposta alle domande di quiz. Oggi, tuttavia, è stato trasformato in un sistema molto più versatile e molte delle sue funzionalità sono disponibili sul cloud.

In questa serie di esercitazioni, ti mostrerò come utilizzare vari servizi offerti da IBM Watson Developer Cloud in app Android. In questo tutorial introduttivo imparerai come lavorare con IBM Bluemix, Watson Java SDK e il servizio di analisi del tono di Watson per creare una semplice app Android in grado di identificare le emozioni presenti in qualsiasi parte di testo.

Prerequisiti

Per poter seguire, avrai bisogno di:

  • una versione recente di Android Studio
  • un account IBM Bluemix gratuito
  • e un dispositivo o emulatore con Android 4.4 o versioni successive

1. Creazione di un servizio Watson

I servizi di Watson sono accessibili solo tramite la piattaforma cloud Bluemix di IBM. Ciò significa che puoi utilizzarli nella tua applicazione solo dopo averli abilitati nella console Bluemix e aver acquisito le credenziali richieste.

Inizia accedendo alla console e navigando verso Servizi> Watson.

Quindi, premere il tasto Crea un servizio Watson pulsante per vedere tutti i servizi Watson disponibili.

Per ora, perché siamo interessati solo ad analizzare il tono emotivo nel testo scritto, seleziona il Analizzatore di toni servizio.

Nella schermata successiva, cambia il nome del servizio in qualcosa di significativo e premi il tasto Creare pulsante.

Il servizio analizzatore di toni verrà ora attivato per il tuo account e verrà generato un set di credenziali di accesso. Per vedere quali sono queste credenziali, apri il Credenziali di servizio scheda e selezionare il Visualizza le credenziali azione.

Salva il contenuto del documento JSON in un file sul tuo computer. Ti suggerisco di nominare il file credentials.json.

2. Impostazione del progetto

Watson Java SDK rende molto semplice la comunicazione con qualsiasi servizio Watson. Per poterlo usare nel tuo progetto, aggiungilo come a compilare dipendenza nel App modulo di build.gradle file.

compila 'com.ibm.watson.developer_cloud: java-sdk: 3.7.2'

Per questo tutorial, avrai bisogno di altre due librerie: Commons IO, per semplificare le operazioni IO sui file e Android Design Support, per poter utilizzare alcuni widget di Material Design. Aggiungi anche loro come compilare dipendenze.

compila 'commons-io: commons-io: 2.5' compile 'com.android.support:design:23.4.0'

Avrai anche bisogno del INTERNET permesso di comunicare con i server IBM, quindi aggiungere la seguente riga al AndroidManifest.xml file:

Infine, premi il Sincronizza ora pulsante per completare la configurazione del progetto.

3. Inizializzazione del Tone Analyzer

Per comunicare con il servizio di analisi dei toni di Watson, è necessario utilizzare ToneAnalyzer classe. Il suo costruttore si aspetta una stringa di data come argomento, che userà per determinare automaticamente la versione del servizio di analizzatore di toni da utilizzare.

ToneAnalyzer finale toneAnalyzer = new ToneAnalyzer ("2017-07-01");

Si noti che la data dovrebbe sempre essere una stringa statica. Ciò aiuta a garantire che la tua app non smetta di funzionare quando una nuova versione del servizio introduce modifiche irrisolte.

Il ToneAnalyzer istanza deve essere configurata per utilizzare le tue credenziali, quindi sposta il file credentials.json file, quello che hai creato in precedenza in questo tutorial, al tuo progetto res / raw cartella.

Successivamente, è necessario estrarre i valori di nome utente e parola d'ordine chiavi dal file JSON. Il seguente codice mostra come farlo rapidamente usando IOUtils e JSONObject classi:

Credenziali JSONObject = new JSONObject (IOUtils.toString (getResources (). OpenRawResource (R.raw.credentials), "UTF-8")); // Converti il ​​file in un oggetto JSON // Estrai i due valori String username = credentials.getString ("username"); String password = credentials.getString ("password");

Ora puoi completare la configurazione di ToneAnalyzer istanza chiamando il setUsernameAndPassword () metodo.

toneAnalyzer.setUsernameAndPassword (username, password);

4. Creazione di un'interfaccia utente

La nostra app richiede un'interfaccia che consenta all'utente di digitare alcune frasi e premere un pulsante per iniziare l'analisi del tono. In altre parole, ora devi creare un semplice layout contenente un Modifica il testo widget e a Pulsante widget di.

Puoi, facoltativamente, anche lanciare a TextInputLayout contenitore per assicurarsi che il Modifica il testo widget è conforme alle linee guida di Material Design.

Di conseguenza, aggiungi il seguente codice al file XML di layout della tua attività:

   

5. Utilizzo del Tone Analyzer

L'analisi del tono deve iniziare non appena l'utente preme il pulsante. Pertanto, è necessario aggiungere un gestore eventi on-click al file Pulsante widget che usa il suo setOnClickListener () metodo. Prima di farlo, tuttavia, non dimenticare di ottenere un riferimento al widget usando il findViewById () metodo.

Button analyzeButton = (Button) findViewById (R.id.analyze_button); analyzeButton.setOnClickListener (new View.OnClickListener () @ Override pubblico onClick (Visualizzazione vista) // Altro codice qui);

All'interno del gestore di eventi on-click, la prima cosa che devi fare è determinare che cosa l'utente ha digitato nel file Modifica il testo widget che usa il suo getText () metodo.

EditText userInput = (EditText) findViewById (R.id.user_input); final String textToAnalyze = userInput.getText (). toString ();

Come tutti i servizi Watson, il servizio analizzatore di toni offre molte caratteristiche diverse. Ad esempio, può identificare le emozioni, lo stile della lingua e le tendenze sociali nel suo contributo. Può anche funzionare con documenti JSON, testo normale e HTML. Pertanto, per utilizzarlo in modo efficiente, è necessario specificare esplicitamente le funzionalità necessarie utilizzando un ToneOptions oggetto, che può essere facilmente creato usando il ToneOptions.Builder classe.

Per ora, useremo il servizio solo per elencare tutte le emozioni che sono presenti in una stringa di testo semplice. Ecco come si crea a ToneOptions oggetto dicendo così:

Opzioni ToneOptions = new ToneOptions.Builder () .addTone (Tone.EMOTION) .html (false) .build ();

È ora possibile comporre una richiesta di analisi del tono chiamando il Gettone () metodo, che si aspetta una stringa contenente il testo da analizzare e a ToneOptions oggetto come i suoi soli argomenti. Per eseguire effettivamente la richiesta in modo asincrono, è necessario chiamare anche il enqueue () metodo, che prende un ServiceCallback istanza come argomento.

toneAnalyzer.getTone (textToAnalyze, options) .enqueue (new ServiceCallback() @ Override public onResponse (risposta ToneAnalysis) // Altro codice qui @Override public void onFailure (Exception e) e.printStackTrace (); );

Dentro il onResponse () metodo del ServiceCallback classe, hai accesso a a ToneAnalysis oggetto. Chiamando il suo getDocumentTone () metodo, è possibile determinare il tono generale del testo passato al servizio.

Il valore di ritorno del getDocumentTone () il metodo è un ElementTone oggetto contenente un elenco di categorie di toni. Poiché abbiamo esplicitamente affermato in precedenza che siamo interessati solo alla categoria delle emozioni, la lista conterrà solo un elemento. Di conseguenza, ecco come estraggono i punteggi per tutte le emozioni che il servizio ha rilevato:

Elenco scores = response.getDocumentTone () .getTones () .get (0) .getTones ();

Come puoi immaginare, a ToneScore l'oggetto rappresenta un'unica emozione. Ha un Doppio contenente il punteggio effettivo e a Stringa dicendoti il ​​nome dell'emozione. Se il punteggio è maggiore di 0,5, significa che c'è una buona possibilità che l'emozione venga espressa nel testo.

Vediamo ora solo quelle emozioni i cui punteggi sono maggiori di 0,5 e li usano per creare un messaggio che può essere visualizzato all'utente utilizzando a Crostini.

String detectedTones = ""; for (ToneScore score: scores) if (score.getScore ()> 0.5f) detectedTones + = score.getName () + "";  final String toastMessage = "Sono state rilevate le seguenti emozioni: \ n \ n" + detectedTones.toUpperCase ();

Perché il onResponse () il metodo viene eseguito su thread diversi, è necessario assicurarsi di creare e visualizzare il file Crostini solo dopo aver chiamato il runOnUiThread () metodo.

runOnUiThread (new Runnable () @Override public void run () Toast.makeText (getBaseContext (), toastMessage, Toast.LENGTH_LONG) .show (););

L'app è ora pronta. Se lo esegui, digita alcune frasi e avvia l'analisi, sarai in grado di vedere Watson identificare accuratamente le emozioni presenti nel tuo testo.

Conclusione

In questo tutorial, hai creato un'app Android che può utilizzare il servizio di analisi dei toni di IBM Watson per eseguire il complesso compito di indovinare le emozioni espresse in un testo. Hai anche imparato le basi dell'utilizzo dell'SDK Java Watson e della console Bluemix IBM.

Per saperne di più sul servizio, puoi fare riferimento alla sua documentazione ufficiale.

Nel frattempo, puoi consultare alcuni dei nostri altri post sull'utilizzo dell'apprendimento automatico per le tue app Android proprio qui su Envato Tuts+!