Koding av en Android-app med IBM Watson Machine Learning

I begynnelsen av 2011 var et naturlig språkkunnskap datasystem kalt IBM Watson i stand til å slå alle menneskelige deltakere i et quiz-lignende spillprogram kalt Jeopardy! Det var en historisk begivenhet, og det var kanskje poenget da allmennheten begynte å innse at kunstig intelligens ikke lenger var noe av science fiction.

Deretter kjørte Watson på en supercomputer og kunne ikke gjøre mer enn å svare på trivia-spørsmål. I dag er det imidlertid blitt forvandlet til et langt mer allsidig system, og mange av dens evner er tilgjengelige over skyen.

I denne serien av opplæringsprogrammer viser jeg deg hvordan du bruker ulike tjenester som tilbys av IBM Watson Developer Cloud i Android-apper. I denne innledende veiledningen lærer du hvordan du arbeider med IBM Bluemix, Watson Java SDK og Watson-toneanalysatortjenesten for å lage en enkel Android-app som kan identifisere følelsene som finnes i et hvilket som helst tekststykke.

Forutsetninger

For å kunne følge med, må du:

  • en nylig versjon av Android Studio
  • en gratis IBM Bluemix-konto
  • og en enhet eller emulator som kjører Android 4.4 eller høyere

1. Opprette en Watson-tjeneste

Watsons tjenester kan bare nås via IBM Bluemix Cloud Platform. Det betyr at du bare kan bruke dem i søknaden din etter at du har aktivert dem i Bluemix-konsollen og fått de nødvendige legitimasjonene.

Start med å logge inn på konsollen og navigere til Tjenester> Watson.

Deretter trykker du på Opprett Watson service knappen for å se alle Watson-tjenestene som er tilgjengelige for deg.

For nå, fordi vi bare er interessert i å analysere følelsesmessige tonen i skriftlig tekst, velger du Tone Analyzer service.

På neste skjerm endrer du navnet på tjenesten til noe meningsfylt og trykker på Skape knapp.

Toneanalysatortjenesten vil nå bli aktivert for kontoen din, og et sett med påloggingsinformasjon vil bli generert. For å se hva disse legitimasjonene er, åpne Tjenestegodkjenninger kategorien og velg Se påloggingsinformasjon handling.

Lagre innholdet i JSON-dokumentet til en fil på datamaskinen. Jeg foreslår at du navngir filen credentials.json.

2. Prosjektoppsett

Watson Java SDK gjør det veldig enkelt for deg å kommunisere med hvilken som helst Watson-tjeneste. For å kunne bruke det i prosjektet, legg det til som en kompilere avhengighet i app modulens build.gradle fil.

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

For denne opplæringen trenger du to flere biblioteker: Commons IO, for å forenkle fil IO operasjoner, og Android Design Support, for å kunne bruke noen Material Design widgets. Legg til dem også som kompilere avhengig.

kompilere 'commons-io: commons-io: 2,5' compile 'com.android.support:design:23.4.0'

Du vil også trenge INTERNETT Tillatelse til å kommunisere med IBMs servere, så legg til følgende linje til AndroidManifest.xml fil:

Til slutt trykker du på Synkroniser nå knappen for å fullføre prosjektkonfigurasjonen.

3. Initialisere tonanalysatoren

For å kommunisere med Watsons toneanalysetjeneste må du bruke ToneAnalyzer klasse. Konstruktøren forventer en datastreng som argument, som den vil bruke til å automatisk bestemme versjonen av toneanalysatortjenesten som skal brukes.

siste ToneAnalyzer toneAnalyzer = ny ToneAnalyzer ("2017-07-01");

Merk at datoen alltid skal være en statisk streng. Dette hjelper til med at appen din ikke slutter å fungere når en ny versjon av tjenesten introduserer bryte endringer.

De ToneAnalyzer forekomst må konfigureres for å bruke legitimasjonene dine, så flytt credentials.json fil, den du opprettet tidligere i denne opplæringen, til prosjektet ditt res / rå mappe.

Deretter må du trekke ut verdiene til brukernavn og passord nøkler fra JSON-filen. Følgende kode viser hvordan du gjør det raskt ved hjelp av IOUtils og JSONObject klasser:

JSONObject credentials = nytt JSONObject (IOUtils.toString (getResources (). OpenRawResource (R.raw.credentials), "UTF-8")); // Konverter filen til et JSON objekt // Trekk ut de to verdiene String brukernavn = credentials.getString ("brukernavn"); String passord = credentials.getString ("passord");

Du kan nå fullføre konfigurasjonen av ToneAnalyzer eksempel ved å ringe setUsernameAndPassword () metode.

toneAnalyzer.setUsernameAndPassword (brukernavn, passord);

4. Opprette et brukergrensesnitt

Vår app trenger et grensesnitt som lar brukeren skrive inn noen få setninger og trykk på en knapp for å starte toneanalysen. Med andre ord må du nå lage et enkelt layout som inneholder en EditText widget og a Knapp widget.

Du kan eventuelt også kaste inn en TextInputLayout beholder for å sikre at EditText Widget er i samsvar med retningslinjene for Material Design.

Følgelig legg til følgende kode i aktivitetsens layout XML-fil:

   

5. Bruke Tone Analyzer

Toneanalysen må starte så snart brukeren trykker på knappen. Derfor må du legge til en hendelseshåndterer på klikk på Knapp widget ved hjelp av dens setOnClickListener () metode. Før du gjør det, må du ikke glemme å få en referanse til widgeten ved hjelp av findViewById () metode.

Knapp analyseButton = (Button) findViewById (R.id.analyze_button); analyzeButton.setOnClickListener (new View.OnClickListener () @Override public void onClick (View view) // Mer kode her);

Inne i hendelseshåndtereren på klikk er det første du må gjøre, å avgjøre hva brukeren har skrevet inn i EditText widget ved hjelp av dens GetText () metode.

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

Som alle Watson-tjenester tilbyr toneanalysatortjenesten mange forskjellige funksjoner. For eksempel kan den identifisere følelser, språkstil og sosiale tendenser i sin inngang. Det kan også fungere med JSON-dokumenter, vanlig tekst og HTML. For å bruke den effektivt må du derfor spesifikt spesifisere funksjonene du trenger ved å bruke en ToneOptions objekt, som lett kan opprettes ved hjelp av ToneOptions.Builder klasse.

For nå bruker vi bare tjenesten for å liste alle følelsene som er til stede i en ren tekststreng. Slik lager du en ToneOptions objekt å si det slik:

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

Du kan nå skrive en toneanalyseforespørsel ved å ringe getTone () metode, som forventer en streng som inneholder teksten som skal analyseres og a ToneOptions objekt som sine eneste argumenter. For å faktisk utføre forespørselen asynkront må du også ringe Enqueue () metode, som tar a ServiceCallback eksempel som argument.

toneAnalyzer.getTone (textToAnalyze, alternativer) .enqueue (ny ServiceCallback() @Override public void onResponse (ToneAnalysis respons) // Mer kode her @Override public void onFailure (Unntak e) e.printStackTrace (); );

Inne i onResponse () metode av ServiceCallback klasse, har du tilgang til a ToneAnalysis gjenstand. Ved å ringe det getDocumentTone () Metode, du kan bestemme den samlede tonen i teksten du har sendt til tjenesten.

Returneringsverdien til getDocumentTone () metoden er en ElementTone objekt som inneholder en liste over tonekategorier. Fordi vi uttrykkelig uttalte tidligere at vi bare er interessert i kategoriene følelser, vil listen bare inneholde ett element. Følgelig, her er hvordan du trekker ut poengene for alle følelsene tjenesten oppdages:

Liste score = response.getDocumentTone () .getTones () .get (0) .getTones ();

Som du kanskje regner med, a ToneScore objekt representerer en følelse. Den har en Dobbelt inneholder den faktiske poengsummen og a string forteller deg navnet på følelsene. Hvis poengsummen er større enn 0,5, betyr det at det er en god sjanse for at følelsen blir uttrykt i teksten.

La oss nå velge bare de følelsene som har en score større enn 0,5, og bruk dem til å lage en melding som kan vises til brukeren ved hjelp av en Skål.

String detectedTones = ""; for (ToneScore score: score) if (score.getScore ()> 0.5f) detectedTones + = score.getName () + "";  siste String toastMessage = "Følgende følelser ble oppdaget: \ n \ n" + detectedTones.toUpperCase ();

Fordi det onResponse () Metoden går på forskjellig tråd, du må sørge for at du oppretter og viser Skål bare etter å ha ringt runOnUiThread () metode.

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

Appen er nå klar. Hvis du kjører det, skriver du inn noen få setninger, og starter analysen, vil du kunne se Watson nøyaktig identifisere følelsene som er tilstede i teksten.

Konklusjon

I denne opplæringen har du opprettet en Android-app som kan bruke IBM Watsons toneanalysetjeneste til å utføre den komplekse oppgaven med å gjette følelsene uttrykt i et stykke tekst. Du lærte også grunnleggende om å bruke Watson Java SDK og IBM Bluemix-konsollen.

For å lære mer om tjenesten, kan du se den offisielle dokumentasjonen.

I mellomtiden kan du sjekke ut noen av våre andre innlegg på bruk av maskinlæring for Android-appene dine her på Envato Tuts+!