- Január 27, 2014
- Vasilis Vryniotis
- . 16 megjegyzés
Korábbi cikkeinkben az elméleti hátteret tárgyaltuk Naiv Bayes szövegosztályozó és a használat fontossága Funkciókiválasztási technikák a szöveges osztályozásban. Ebben a cikkben mindent összeállítunk, és elkészítjük a Naive Bayes szövegosztályozó algoritmus egyszerű megvalósítását JAVA-ban. Az osztályozó kódja nyílt forráskódú (GPL v3 licenc alatt), és letölthető innen GitHub.
Frissítés: A Datumbox Machine Learning Framework nyílt forráskódú és ingyenes letöltés. Tekintse meg a com.datumbox.framework.machinelearning.classification csomagot a Naive Bayes Classifier Java nyelven való megvalósításának megtekintéséhez.
Naív Bayes Java implementáció
A kód JAVA nyelven íródott, és közvetlenül letölthető innen GitHub. A GPLv3 licenc alatt van, így nyugodtan használhatja, módosíthatja és szabadon terjesztheti.
A Szövegosztályozó megvalósítja a Multinomiális Naive Bayes modell együtt a Chisquare funkció kiválasztása algoritmus. Mindkét technika működésének minden elméleti részlete megtalálható a korábbi cikkekben, és részletes javadoc megjegyzések találhatók a megvalósítást leíró forráskódon. Így ebben a szegmensben az osztályozó architektúrájának magas szintű leírására fogok összpontosítani.
1. NaiveBayes osztály
Ez a szövegosztályozó fő része. Olyan módszereket valósít meg, mint például a train() és a prediction(), amelyek felelősek az osztályozó betanításáért és az előrejelzésekhez való felhasználásáért. Meg kell jegyezni, hogy ez az osztály felelős azért is, hogy meghívja a megfelelő külső módszereket a dokumentum előfeldolgozására és tokenizálására a betanítás/előrejelzés előtt.
2. NaiveBayesKnowledgeBase objektum
A képzés kimenete egy NaiveBayesKnowledgeBase objektum, amely tárolja az összes szükséges információt és valószínűséget, amelyet a Naive Bayes osztályozó használ.
3. Dokumentumobjektum
Mind a betanítás, mind a predikciós szövegek a megvalósításban belsőleg dokumentumobjektumként vannak tárolva. A Dokumentumobjektum a dokumentum összes tokenjét (szavait), azok statisztikáit és a dokumentum célosztályozását tárolja.
4. FeatureStats Object
A FeatureStats objektum számos statisztikát tárol, amelyek a Feature Extraction fázis során jönnek létre. Ilyen statisztika a jellemzők és osztályok együttes száma (amelyből a közös valószínűségek és valószínűségek becslése történik), az osztályok száma (amelyből a prioritásokat kiértékeli, ha nem adjuk meg bemenetként) és a képzéshez használt megfigyelések teljes száma.
5. FeatureExtraction Class
Ez az az osztály, amely a jellemzők kinyeréséért felelős. Meg kell jegyezni, hogy mivel ez az osztály a későbbi szakaszban az osztályozási algoritmus által ténylegesen megkövetelt statisztikák közül többet számít ki, ezek a statisztikák gyorsítótárazásra kerülnek, és egy FeatureStats objektumban kerülnek visszaadásra, hogy elkerüljék az újraszámításukat.
6. TextTokenenizer osztály
Ez egy egyszerű szöveg tokenizációs osztály, amely az eredeti szövegek előfeldolgozásáért, törléséért és tokenizálásáért, valamint Dokumentum objektumokká konvertálásáért felelős.
A NaiveBayes JAVA osztály használata
A NaiveBayesExample osztályban példákat találhat a NaiveBayes osztály használatára. A mintakód célja egy olyan példa bemutatása, amely egy egyszerű naiv Bayes osztályozót tanít a szöveg nyelvének észlelésére. Az osztályozó betanításához először megadjuk a betanítási adatkészletek elérési útját egy HashMap-ben, majd betöltjük azok tartalmát.
//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())); }
A NaiveBayes osztályozó képzése az adatok átadásával történik. A képzés befejezése után a NaiveBayesKnowledgeBase objektum tárolásra kerül későbbi használatra.
//train classifier NaiveBayes nb = new NaiveBayes(); nb.setChisquareCriticalValue(6.63); //0.01 pvalue nb.train(trainingExamples); //get trained classifier NaiveBayesKnowledgeBase knowledgeBase = nb.getKnowledgeBase();
Végül az osztályozó használatához és az új példák osztályainak előrejelzéséhez mindössze annyit kell tennie, hogy inicializál egy új osztályozót a NaiveBayesKnowledgeBase Object átadásával, amelyet korábban betanítással szerzett meg. Ezután egyszerűen apredit() metódus meghívásával megkapjuk a dokumentum előrejelzett osztályát.
//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);
Szükséges bővítések
Az adott JAVA implementáció nem tekinthető teljes, használatra kész megoldásnak kifinomult szövegosztályozási problémákra. Íme néhány fontos bővítés, amelyet meg lehetne tenni:
1. Kulcsszókivonás:
Annak ellenére, hogy egyetlen kulcsszó használata elegendő lehet olyan egyszerű problémákhoz, mint például a nyelvészlelés, más bonyolultabb problémákhoz n-gramok kinyerése szükséges. Így vagy megvalósítható egy kifinomultabb szövegkivonási algoritmus a TextTokenizer.extractKeywords() metódus frissítésével, vagy a Datumbox Kulcsszókivonás API függvényt a dokumentum összes n-gramjának (kulcsszókombinációjának) lekéréséhez.
2. Szöveg előfeldolgozása:
Az osztályozó használata előtt általában szükséges a dokumentum előfeldolgozása, hogy eltávolítsuk a felesleges karaktereket/részeket. Annak ellenére, hogy a jelenlegi megvalósítás korlátozott előfeldolgozást végez a TextTokenizer.preprocess() metódussal, a HTML-oldalak elemzésekor a dolgok bonyolultabbá válnak. Egyszerűen levághatja a HTML-címkéket, és csak a dokumentum egyszerű szövegét tarthatja meg, vagy kifinomultabb gépi tanulási technikákat alkalmazhat, amelyek észlelik az oldal fő szövegét, és eltávolítják a láblécekhez, fejlécekhez, menükhöz stb. tartozó tartalmat. használhatja a Datumbox-ot Szövegkivonás API funkciót.
3. További Naive Bayes modellek:
A jelenlegi osztályozó a Multinomial Naive Bayes osztályozót valósítja meg, ennek ellenére, amint arról egy korábbi cikkünkben beszéltünk. Érzelmi elemzés, a különböző osztályozási problémák különböző modelleket igényelnek. Egyes esetekben az algoritmus bináris változata lenne megfelelőbb, míg másokban a Bernoulli-modell sokkal jobb eredményeket biztosít. Használja ezt a megvalósítást kiindulási pontként, és kövesse a Naiv Bayes bemutatója a modell bővítésére.
4. További funkcióválasztási módszerek:
Ez a megvalósítás a Chisquare jellemzőválasztó algoritmust használja az osztályozáshoz legmegfelelőbb jellemzők kiválasztásához. Ahogy egy korábbi cikkünkben láttuk, a Chisquare funkció kiválasztása A módszer egy jó technika, amely statisztikákra támaszkodik a megfelelő jellemzők kiválasztásához, ennek ellenére általában magasabb pontszámot ad a ritka jellemzőkre, amelyek csak az egyik kategóriában jelennek meg. Fejlesztések végezhetők a zajos/ritka jellemzők eltávolításával, mielőtt folytatnánk a funkciók kiválasztását, vagy további módszerek alkalmazásával, például a kölcsönös információval, amelyet a fent említett cikkben tárgyaltunk.
5. Teljesítményoptimalizálás:
Az adott megvalósításban a kód olvashatóságának javítása volt fontos, nem pedig a kód mikrooptimalizálása. Annak ellenére, hogy az ilyen optimalizálás csúnyábbá és nehezebben olvashatóvá/karbantarthatóvá teszi a kódot, gyakran szükség van rájuk, mivel ebben az algoritmusban sok ciklus milliószor kerül végrehajtásra a betanítás és a tesztelés során. Ez a megvalósítás remek kiindulópont lehet a saját tuningolt verziójának kidolgozásához.
Majdnem kész… Utolsó megjegyzések!
A megvalósítás működésének alapos megértése érdekében erősen javasoljuk, hogy olvassa el a két korábbi cikket Naiv Bayes osztályozó és a Funkció kiválasztása. Betekintést kap a módszerek elméleti hátterébe, és áttekinthetőbbé teszi az algoritmus/kód egyes részeit.
Meg kell jegyeznünk, hogy a Naive Bayes annak ellenére, hogy könnyű, gyors és legtöbbször „meglehetősen pontos”, egyben „naiv”, mert feltételezi a funkciók feltételes függetlenségét. Mivel ez a feltételezés szinte soha nem teljesül a szövegosztályozási problémákban, a Naive Bayes szinte soha nem a legjobban teljesítő osztályozó. Ban ben Datumbox API, a szabványos Naive Bayes osztályozó egyes bővítései csak olyan egyszerű problémák esetén használhatók, mint például a nyelvészlelés. Bonyolultabb szövegosztályozási problémák esetén fejlettebb technikák, mint pl Max Entropy osztályozó szükségesek.
Ha egy érdekes projektben használja a megvalósítást nekünk egy csepp sor és a projektedet bemutatjuk a blogunkban. Ha tetszett a cikk, kérjük, szánjon egy percet, és ossza meg a Twitteren vagy a Facebookon. 🙂
- AI
- ai művészet
- ai art generátor
- van egy robotod
- mesterséges intelligencia
- mesterséges intelligencia tanúsítás
- mesterséges intelligencia robot
- mesterséges intelligencia robotok
- mesterséges intelligencia szoftver
- blockchain
- blokklánc konferencia ai
- coingenius
- társalgási mesterséges intelligencia
- kriptokonferencia ai
- dall's
- Datumbox
- mély tanulás
- google azt
- gépi tanulás
- Gépi tanulás és statisztika
- Plató
- plato ai
- Platón adatintelligencia
- Platón játék
- PlatoData
- platogaming
- Programozás
- skála ai
- szintaxis
- zephyrnet