Codarea unui aplicație Android cu IBM Watson Machine Learning

La începutul anului 2011, un sistem informatic de înțelegere a limbajului natural, numit IBM Watson, a reușit să bată toți concurenții umani într-un spectacol de joc quiz-numit Jeopardy! A fost un eveniment istoric și a fost probabil punctul în care publicul larg a început să-și dea seama că inteligența artificială nu mai era chestiunea science fiction.

În acel moment, Watson a fugit pe un supercomputer și nu putea decât să răspundă la întrebări despre întrebări. Astăzi, totuși, a fost transformat într-un sistem mult mai versatil, și o mulțime de capabilități sunt disponibile peste nor.

În această serie de tutoriale, vă vom arăta cum să utilizați diverse servicii oferite de IBM Watson Developer Cloud în aplicațiile Android. În acest tutorial introductiv, veți învăța cum să lucrați cu IBM Bluemix, Watson Java SDK și serviciul de analizoare ton Watson pentru a crea o aplicație Android simplă care poate identifica emoțiile prezente în orice text.

Cerințe preliminare

Pentru a putea urmări, veți avea nevoie de:

  • o versiune recentă de Android Studio
  • un cont gratuit IBM Bluemix
  • și un dispozitiv sau emulator care rulează Android 4.4 sau o versiune ulterioară

1. Crearea unui serviciu Watson

Serviciile Watson pot fi accesate numai prin platforma cloud IBM Bluemix. Aceasta înseamnă că le puteți utiliza în aplicația dvs. numai după ce le-ați activat în consola Bluemix și ați obținut acreditările necesare.

Începeți prin conectarea la consola și navigând la Servicii> Watson.

Apoi, apăsați pe Creați serviciul Watson pentru a vedea toate serviciile Watson disponibile pentru dvs..

Pentru moment, deoarece suntem interesați doar de analizarea tonului emoțional în textul scris, selectați Analizor de tonuri serviciu.

În ecranul următor, schimbați numele serviciului la ceva semnificativ și apăsați pe Crea buton.

Serviciul de analiză a tonurilor va fi acum activat pentru contul dvs. și se va genera un set de acreditări de autentificare. Pentru a vedea ce acreditări sunt, deschideți Serviciul de acreditare și selectați Vizualizați acreditările acțiune.

Salvați conținutul documentului JSON într-un fișier de pe computer. Îți sugerez să numești dosarul credentials.json.

2. Configurarea proiectului

SDK-ul Watson Java vă face foarte ușor să comunicați cu orice serviciu Watson. Pentru a putea să o utilizați în proiectul dvs., adăugați-l ca pe un compila dependența în aplicaţia ale modulului build.gradle fişier.

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

Pentru acest tutorial, veți avea nevoie de încă două biblioteci: Commons IO, pentru a simplifica operațiile de fișiere IO și Android Design Support, pentru a putea utiliza câteva widget-uri pentru Material Design. Adăugați-le și la fel compila dependențe.

compilați comuni-io: commons-io: 2.5 'compilați com.android.support:design:23.4.0'

Veți avea nevoie de asemenea INTERNET permisiunea de a comunica cu serverele IBM, deci adăugați următoarea linie la AndroidManifest.xml fişier:

În cele din urmă, apăsați pe Sincronizați acum pentru a finaliza configurația proiectului.

3. Inițializarea analizorului de tonuri

Pentru a comunica cu serviciul de analiză a tonurilor Watson, trebuie să utilizați ToneAnalyzer clasă. Constructorul său așteaptă ca argument argumentul unui șir de date, pe care îl va utiliza pentru a determina automat versiunea serviciului de analizoare ton.

final ToneAnalyzer tonAnalyzer = nou ToneAnalyzer ("2017-07-01");

Rețineți că data ar trebui să fie întotdeauna un șir static. Acest lucru vă ajută să vă asigurați că aplicația dvs. nu se oprește atunci când o nouă versiune a serviciului introduce modificări de rupere.

ToneAnalyzer instanță trebuie să fie configurat să utilizeze acreditările dvs., deci mișcați credentials.json fișierul pe care l-ați creat mai devreme în acest tutorial, la proiectul dvs. res / raw pliant.

Apoi, trebuie să extrageți valorile nume de utilizator și parola chei din fișierul JSON. Următorul cod vă arată cum să faceți acest lucru rapid folosind IOUtils și obiect JSON clase:

Certificările JSONObject = noul JSONObject (IOUtils.toString (getResources (). OpenRawResource (R.raw.credentials), "UTF-8")); // Convertiți fișierul într-un obiect JSON // Extrageți cele două valori String username = credentials.getString ("username"); String parola = credentials.getString ("parola");

Acum puteți completa configurația ToneAnalyzer instanță apelând setUsernameAndPassword () metodă.

toneAnalyzer.setUsernameAndPassword (nume de utilizator, parolă);

4. Crearea unei interfețe de utilizator

Aplicația noastră are nevoie de o interfață care să permită utilizatorului să introducă câteva propoziții și să apese un buton pentru a începe analiza tonurilor. Cu alte cuvinte, trebuie să creați acum un aspect simplu care să conțină un Editează textul widget și a Buton widget.

Poți, opțional, să arunci și a TextInputLayout pentru a vă asigura că Editează textul widget-ul respectă instrucțiunile din Material Design.

În consecință, adăugați următorul cod în fișierul XML de aspect al activității dvs .:

   

5. Folosind analizorul de tonuri

Analiza tonului trebuie să înceapă de îndată ce utilizatorul apasă butonul. Prin urmare, trebuie să adăugați un handler de evenimente pe clic la Buton widget folosind setOnClickListener () metodă. Înainte de a face acest lucru, cu toate acestea, nu uitați să obțineți o referință la widget folosind findViewById () metodă.

Buton analyzeButton = (buton) findViewById (R.id.analyze_button); analyzeButton.setOnClickListener (noul View.OnClickListener () @Override public void onClick (Vizualizare vizualizare) // Mai mult cod aici);

În interiorul handler-ului evenimentului on-click, primul lucru pe care trebuie să-l faceți este să determinați ce a introdus utilizatorul în Editează textul widget folosind getText () metodă.

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

Ca toate serviciile Watson, serviciul de analizoare ton oferă multe caracteristici diferite. De exemplu, ea poate identifica emotiile, stilul limbajului și tendințele sociale în ceea ce îi privește. De asemenea, poate funcționa cu documente JSON, text simplu și HTML. Prin urmare, pentru a le utiliza eficient, trebuie să specificați explicit caracteristicile de care aveți nevoie utilizând a ToneOptions obiect, care poate fi ușor creat folosind ToneOptions.Builder clasă.

Pentru moment, vom folosi serviciul numai pentru a enumera toate emoțiile prezente într-un șir de text simplu. Iată cum creați a ToneOptions obiect spunând astfel:

Opțiunile ToneOptions = nou ToneOptions.Builder () .addTone (Tone.EMOTION) .html (false) .build ();

Acum puteți compune o solicitare de analiză a sunetului prin apelarea getTone () care se așteaptă ca un șir care conține textul să fie analizat și a ToneOptions obiect ca singurele sale argumente. Pentru a executa cererea în mod asincron, trebuie de asemenea să apelați Puneți în coadă () metodă, care ia o ServiceCallback instanță ca argument.

tonAnalyzer.getTone (textToAnalyze, opțiuni) .enqueue (nou ServiceCallback() @Override public void onResponse (răspuns ToneAnalysis) // Mai mult cod aici @Override public void onFailure (Excepție e) e.printStackTrace (); );

În interiorul onResponse () metodă a ServiceCallback clasa, aveți acces la un ToneAnalysis obiect. Prin apelarea lui getDocumentTone () , puteți determina tonul general al textului pe care l-ați transmis serviciului.

Valoarea returnată a getDocumentTone () este o metodă ElementTone obiect care conține o listă de categorii de tonuri. Pentru că am afirmat mai devreme că nu ne interesează decât categoria de emoții, lista va conține doar un singur element. Prin urmare, iată cum extragi scorurile pentru toate emoțiile pe care le-a detectat serviciul:

Listă scoruri = answer.getDocumentTone () .getTones () .get (0) .getTones ();

Așa cum v-ați putea aștepta, a ToneScore obiect reprezintă o singură emoție. Are o Dubla conținând scorul real și a Şir spunându-ți numele emoției. Dacă scorul este mai mare de 0,5, înseamnă că există o șansă bună ca emoția să fie exprimată în text.

Să alegem acum numai acele emoții ale căror scoruri sunt mai mari de 0,5 și să le folosim pentru a crea un mesaj care poate fi afișat utilizatorului folosind Paine prajita.

String detectedTones = ""; pentru (scor ToneScore: scoruri) if (score.getScore ()> 0.5f) detectTones + = score.getName () + "";  String final toastMessage = "Următoarele emoții au fost detectate: \ n \ n" + detectedTones.toUpperCase ();

Deoarece onResponse () metoda rulează pe fir diferit, trebuie să vă asigurați că creați și afișați Paine prajita numai după ce a sunat runOnUiThread () metodă.

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

Aplicația este acum gata. Dacă o rulați, introduceți câteva propoziții și începeți analiza, veți putea vedea cu precizie că Watson identifică cu exactitate emoțiile prezente în textul dvs..

Concluzie

În acest tutorial, ați creat o aplicație Android care poate utiliza serviciul de analiză a tonurilor IBM Watson pentru a îndeplini sarcina complexă de a ghici emotiile exprimate într-o bucată de text. Ați învățat, de asemenea, elementele de bază ale utilizării Watson Java SDK și a consolei IBM Bluemix.

Pentru a afla mai multe despre acest serviciu, vă puteți referi la documentația oficială.

Între timp, puteți să consultați unele dintre celelalte postări ale noastre despre utilizarea mașinilor de învățare pentru aplicațiile dvs. Android chiar aici pe Envato Tuts+!

Cod