Naiivse Bayesi tekstiklassifikaatori väljatöötamine JAVA PlatoBlockchain Data Intelligences. Vertikaalne otsing. Ai.

Naiivse Bayesi tekstiklassifikaatori väljatöötamine JAVA-s

Varasemates artiklites oleme käsitlenud selle teoreetilist tausta Naiivne Bayesi teksti klassifikaator ja kasutamise tähtsust Funktsioonide valiku tehnikad teksti klassifikatsioonis. Selles artiklis paneme kõik kokku ja ehitame Naive Bayesi teksti klassifitseerimisalgoritmi lihtsa juurutuse JAVA-s. Klassifikaatori kood on avatud lähtekoodiga (GPL v3 litsentsi alusel) ja selle saate alla laadida aadressilt Github.

Värskendus: Datumboxi masinõppe raamistik on nüüd avatud lähtekoodiga ja tasuta lae alla. Tutvuge paketiga com.datumbox.framework.machinelearning.classification, et näha Naive Bayesi klassifikaatori rakendamist Javas.

Naiivne Bayesi Java rakendamine

Kood on kirjutatud JAVA keeles ja seda saab otse alla laadida Github. See on litsentsitud GPLv3 alusel, nii et võite seda vabalt kasutada, muuta ja levitada.

Teksti klassifikaator rakendab Multinomaalne Naive Bayes mudel koos Chisquare funktsioonide valik algoritm. Kõik teoreetilised üksikasjad mõlema tehnika toimimise kohta on käsitletud eelmistes artiklites ja üksikasjalikud Javadoci kommentaarid leiate juurutamist kirjeldavast lähtekoodist. Seega keskendun selles segmendis klassifikaatori arhitektuuri kõrgetasemelisele kirjeldusele.

1. NaiveBayesi klass

See on teksti klassifikaatori põhiosa. See rakendab selliseid meetodeid nagu train() ja ennusta(), mis vastutavad klassifikaatori treenimise ja selle ennustamiseks kasutamise eest. Tuleb märkida, et see klass vastutab ka sobivate väliste meetodite väljakutsumise eest, et dokument enne koolitust/ennustust eeltöötleda ja märgistada.

2. NaiveBayesKnowledgeBase objekt

Koolituse väljundiks on NaiveBayesKnowledgeBase objekt, mis salvestab kogu vajaliku teabe ja tõenäosused, mida Naive Bayesi klassifikaator kasutab.

3. Dokumendi objekt

Nii koolituse kui ka ennustustekstid rakenduses salvestatakse sisemiselt dokumendiobjektidena. Dokumendiobjekt salvestab kõik dokumendi märgid (sõnad), nende statistika ja dokumendi sihtklassifikatsiooni.

4. FeatureStats Object

Objekt FeatureStats salvestab mitu statistikat, mis luuakse funktsiooni väljavõtmise etapis. Sellised statistikad on tunnuste ja klasside ühised arvud (mille põhjal hinnatakse ühiseid tõenäosusi ja tõenäosusi), klasside arv (millest hinnatakse prioriteedid, kui neid ei anta sisendina) ja koolituseks kasutatud vaatluste koguarv.

5. Funktsioonide väljatõmbamise klass

See on klass, mis vastutab funktsioonide ekstraheerimise eest. Tuleb märkida, et kuna see klass arvutab sisemiselt mitu statistikat, mida klassifitseerimisalgoritm hilisemas etapis tegelikult nõuab, salvestatakse kogu see statistika vahemällu ja tagastatakse nende ümberarvutamise vältimiseks FeatureStats Object.

6. TextTokeniseri klass

See on lihtne teksti tokeniseerimisklass, mis vastutab originaaltekstide eeltöötluse, tühjendamise ja märgistamise ning nende dokumendiobjektideks teisendamise eest.

NaiveBayesi JAVA klassi kasutamine

NaiveBayesExample klassist leiate näiteid NaiveBayes klassi kasutamisest. Näidiskoodi eesmärk on esitada näide, mis koolitab lihtsat naiivset Bayesi klassifikaatorit teksti keele tuvastamiseks. Klassifikaatori koolitamiseks esitame algselt HashMapis koolitusandmehulkade teed ja seejärel laadime nende sisu.

   //map of dataset files
   Map<String, URL> trainingFiles = new HashMap<>();
   trainingFiles.put("English", NaiveBayesExample.class.getResource("/datasets/training.language.en.txt"));
   trainingFiles.put("French", NaiveBayesExample.class.getResource("/datasets/training.language.fr.txt"));
   trainingFiles.put("German", NaiveBayesExample.class.getResource("/datasets/training.language.de.txt"));

   //loading examples in memory
   Map<String, String[]> trainingExamples = new HashMap<>();
   for(Map.Entry<String, URL> entry : trainingFiles.entrySet()) {
      trainingExamples.put(entry.getKey(), readLines(entry.getValue()));
   }

NaiveBayesi klassifikaatorit treenitakse talle andmete edastamisega. Kui koolitus on lõpetatud, salvestatakse NaiveBayesKnowledgeBase'i objekt hilisemaks kasutamiseks.

   //train classifier
   NaiveBayes nb = new NaiveBayes();
   nb.setChisquareCriticalValue(6.63); //0.01 pvalue
   nb.train(trainingExamples);
      
   //get trained classifier
   NaiveBayesKnowledgeBase knowledgeBase = nb.getKnowledgeBase();

Klassifikaatori kasutamiseks ja uute näidete klasside ennustamiseks pole vaja teha muud, kui lähtestada uus klassifikaator, edastades varem koolituse käigus omandatud NaiveBayesKnowledgeBase'i objekti. Seejärel kutsudes lihtsalt ennustamismeetodit () saate dokumendi ennustatud klassi.

   //Test classifier
   nb = new NaiveBayes(knowledgeBase);
   String exampleEn = "I am English";
   String outputEn = nb.predict(exampleEn);
   System.out.format("The sentense "%s" was classified as "%s".%n", exampleEn, outputEn);   

Vajalikud laiendused

Konkreetset JAVA rakendust ei tohiks pidada täielikuks kasutusvalmis lahenduseks keerukate teksti klassifitseerimise probleemide lahendamiseks. Siin on mõned olulised laiendused, mida saaks teha:

1. Märksõna ekstraheerimine:

Ehkki üksikute märksõnade kasutamine võib olla piisav lihtsate probleemide (nt keeletuvastus) jaoks, nõuavad muud keerulisemad probleemid n-grammide eraldamist. Seega saab rakendada keerukamat teksti eraldamise algoritmi, värskendades meetodit TextTokenizer.extractKeywords() või kasutada Datumboxi Märksõna ekstraheerimise API funktsiooni, et hankida dokumendi kõik n-grammid (märksõnakombinatsioonid).

2. Teksti eeltöötlus:

Enne klassifikaatori kasutamist on tavaliselt vaja dokumenti eeltöötleda, et eemaldada mittevajalikud märgid/osad. Kuigi praegune rakendus teostab meetodi TextTokenizer.preprocess() abil piiratud eeltöötlust, muutub HTML-lehtede analüüsimine keerulisemaks. Võib lihtsalt kärpida HTML-märgendeid ja jätta alles ainult dokumendi lihttekst või kasutada keerukamaid masinõppe tehnikaid, mis tuvastavad lehe põhiteksti ja eemaldavad jalusesse, päistesse, menüüdesse jne kuuluva sisu. saab kasutada Datumboxi Teksti ekstraheerimise API funktsiooni.

3. Naive Bayesi täiendavad mudelid:

Praegune klassifikaator rakendab Multinomial Naive Bayesi klassifikaatorit, kuid nagu me rääkisime eelmises artiklis Sentimentide analüüs, nõuavad erinevad klassifikatsiooniprobleemid erinevaid mudeleid. Mõnes kohas oleks sobivam algoritmi binaarne versioon, samas kui teistes annab Bernoulli mudel palju paremaid tulemusi. Kasutage seda rakendust lähtepunktina ja järgige juhiseid Naiivne Bayesi õpetus mudeli laiendamiseks.

4. Täiendavad funktsioonide valikumeetodid:

See teostus kasutab Chisquare funktsioonide valiku algoritmi, et valida klassifikatsiooni jaoks kõige sobivamad omadused. Nagu nägime eelmises artiklis, Chisquare funktsioonide valik meetod on hea tehnika, mis kasutab statistikat sobivate funktsioonide valimiseks, kuid kipub siiski andma kõrgemaid hindu haruldastele funktsioonidele, mis esinevad ainult ühes kategoorias. Täiustusi saab teha, eemaldades mürarikkad/haruldased funktsioonid enne funktsioonide valikuga jätkamist või rakendades täiendavaid meetodeid, nagu vastastikune teave, mida arutasime ülalmainitud artiklis.

5. Toimivuse optimeerimine:

Konkreetse teostuse puhul oli koodi mikrooptimeerimise asemel oluline parandada koodi loetavust. Hoolimata asjaolust, et sellised optimeerimised muudavad koodi koledamaks ja raskemini loetavaks/hooldatavaks, on need sageli vajalikud, kuna paljusid selle algoritmi silmuseid käivitatakse koolituse ja testimise ajal miljoneid kordi. See rakendus võib olla suurepärane lähtepunkt oma häälestatud versiooni väljatöötamiseks.

Peaaegu valmis… Lõpumärkused!

Ma kuulsin, et ta on hea kodeerimiselSelle rakendamise toimimisest hea ülevaate saamiseks soovitame tungivalt lugeda kahte eelmist artiklit Naiivne Bayesi klassifikaator ja Funktsiooni valik. Saate ülevaate meetodite teoreetilisest taustast ja see muudab algoritmi/koodi osad selgemaks.

Tuleb märkida, et hoolimata sellest, et Naive Bayes on lihtne, kiire ja enamasti "üsna täpne", on see ka "naiivne", kuna eeldab funktsioonide tingimuslikku sõltumatust. Kuna seda eeldust teksti klassifitseerimise probleemide puhul peaaegu kunagi ei täideta, pole Naive Bayes peaaegu kunagi kõige paremini toimiv klassifikaator. sisse Datumbox API, mõningaid standardse Naive Bayesi klassifikaatori laiendusi kasutatakse ainult lihtsate probleemide (nt keeletuvastus) jaoks. Keerulisemate tekstide klassifitseerimisprobleemide korral kasutatakse täiustatud tehnikaid, näiteks Max Entropy klassifikaator on vajalikud.

Kui kasutate teostust huvitavas projektis lase meid rida ja me tutvustame teie projekti oma ajaveebis. Kui teile artikkel meeldib, võtke hetk ja jagage seda Twitteris või Facebookis. 🙂

Ajatempel:

Veel alates Datumbox