Uus avatud lähtekoodiga masinõppe raamistik, mis on kirjutatud Java PlatoBlockchain Data Intelligence'is. Vertikaalne otsing. Ai.

Uus Java keeles kirjutatud avatud lähtekoodiga masinõppe raamistik

Mul on hea meel teatada, et Datumboxi masinõppe raamistik on nüüd avatud lähtekoodiga GPL 3.0 all ja selle koodi saate alla laadida aadressilt Github!

Mis see raamistik on?

. Datumboxi masinõppe raamistik on Java keeles kirjutatud avatud lähtekoodiga raamistik, mis võimaldab masinõppe mudelite ja statistikarakenduste kiiret arendamist. See on kood, mis praegu käivitab Datumbox API. Raamistiku põhieesmärk on hõlmata suurt hulka masinõppe algoritme ja statistilisi meetodeid ning suutma käsitleda väikese ja keskmise suurusega andmekogumiid. Kuigi raamistiku eesmärk on aidata välja töötada erinevate valdkondade mudeleid, pakub see ka tööriistu, mis on eriti kasulikud loomuliku keele töötlemise ja tekstianalüüsi rakendustes.

Mis tüüpi mudeleid/algoritme toetatakse?

Raamistik on jagatud mitmeks kihiks, nagu masinõpe, statistika, matemaatika, algoritmid ja utiliidid. Igaüks neist pakub mitmeid klasse, mida kasutatakse masinõppemudelite koolitamiseks. Kaks kõige olulisemat kihti on statistika ja masinõppe kiht.

Statistikakiht pakub klasse kirjeldava statistika arvutamiseks, erinevat tüüpi valimite tegemiseks, CDF-ide ja PDF-ide hindamiseks sagedamini kasutatavate tõenäosusjaotuste põhjal ning enam kui 35 parameetrilise ja mitteparameetrilise testi tegemiseks. Sellist tüüpi klassid on tavaliselt vajalikud selgitavate andmete analüüsi, valimi ja funktsioonide valimisel.

Masinõppe kiht pakub klasse, mida saab kasutada paljudes probleemides, sealhulgas klassifitseerimises, regressioonis, klastrianalüüsis, teemade modelleerimises, mõõtmete vähendamises, funktsioonide valikus, ansambliõppes ja soovitussüsteemides. Siin on mõned toetatud algoritmid: LDA, Max Entropy, Naive Bayes, SVM, Bootstrap Aggregation, Adaboost, Kmeans, hierarhiline klasterdamine, Dirichleti protsessisegude mudelid, Softmax regressioon, ordinaalne regressioon, lineaarne regressioon, astmeline regressioon, PCA ja palju muud.

Datumbox Framework VS Mahout VS Scikit-Learn

Nii Mahout kui ka Scikit-Learn on suurepärased projektid ja mõlemal on täiesti erinevad eesmärgid. Mahout toetab ainult väga piiratud arvu algoritme, mida saab paralleelselt kasutada ja seega kasutada suurandmete käsitlemiseks Hadoopi Map-Reduce raamistikku. Teisest küljest toetab Scikit-Learn suurt hulka algoritme, kuid see ei saa hakkama suure hulga andmetega. Lisaks on see välja töötatud Pythonis, mis on suurepärane keel prototüüpide loomiseks ja teaduslikuks andmetöötluseks, kuid mitte minu isiklik lemmik tarkvaraarenduse jaoks.

Datumbox Framework asub kahe lahenduse keskel. See üritab toetada suurt hulka algoritme ja see on kirjutatud Java keeles. See tähendab, et seda saab hõlpsamini tootmiskoodi lisada, seda saab hõlpsamini mälutarbimise vähendamiseks kohandada ja seda saab kasutada reaalajas süsteemides. Lõpuks, kuigi praegu on Datumbox Framework võimeline käsitlema keskmise suurusega andmekogumeid, on minu plaanides seda laiendada ka suuremahuliste andmekogumite käsitlemiseks.

Kui stabiilne see on?

Raamistiku varased versioonid (kuni 0.3.x) töötati välja 2013. aasta augustis ja septembris ning need on kirjutatud PHP-s (jep!). 2014. aasta mais ja juunis (versioonid 0.4.x) kirjutati raamistik Java keeles ümber ja täiustati lisafunktsioonidega. Mõlemat haru testiti põhjalikult kommertsrakendustes, sealhulgas Datumbox API-s. Praegune versioon on 0.5.0 ja see tundub piisavalt küps, et avaldada raamistiku esimese avaliku alfaversioonina. Sellegipoolest on oluline märkida, et mõnda raamistiku funktsionaalsust testitakse põhjalikumalt kui teisi. Pealegi, kuna see versioon on alfaversioon, peaksite ootama drastilisi muudatusi tulevastes versioonides.

Miks ma selle kirjutasin ja miks ma selle avatud lähtekoodiga kasutan?

Minu seotus masinõppe ja NLP-ga pärineb aastast 2009, mil asutasin WebSEOAnalytics.com-i. Sellest ajast alates olen arendanud erinevate masinõppe algoritmide rakendusi erinevate projektide ja rakenduste jaoks. Kahjuks olid enamus algsetest rakendustest väga probleemipõhised ja neid ei saanud peaaegu üheski teises probleemis kasutada. 2013. aasta augustis otsustasin käivitada Datumboxi isikliku projektina ja töötada välja raamistiku, mis pakub tööriistu NLP ja teksti klassifitseerimise valdkonnale keskenduvate masinõppemudelite arendamiseks. Minu eesmärk oli luua raamistik, mida saaks tulevikus taaskasutada kiirete masinõppemudelite väljatöötamiseks, kaasates selle projektidesse, mis nõuavad masinõppe komponente või pakuvad seda teenusena (Machine Learning as a Service).

Ja siin ma nüüd olen, mitu koodirida hiljem, projekti avatud lähtekoodiga hankimas. Miks? Aus vastus on, et praegu ei ole minu plaanides läbida teekonda “Ehitame uue idufirma”. Samas tundsin, et koodi kõvakettal hoidmine juhuks, kui mul seda tulevikus vaja läheb, pole mõtet. Nii et ainus loogiline asi, mida teha, oli see avatud lähtekoodiga. 🙂

Dokumentatsioon?

Kui loete kahte eelmist lõiku, peaksite tõenäoliselt nägema seda tulemas. Kuna raamistikku ei välja töötatud silmas pidades, et jagan seda teistega, siis on dokumentatsioon kehv/puudub. Enamik klasse ja avalikke meetodeid pole korralikult kommenteeritud ning koodi arhitektuuri kirjeldav dokument puudub. Õnneks on kõik klassinimed iseenesestmõistetavad ja raamistik pakub JUniti teste iga avaliku meetodi ja algoritmi jaoks ning neid saab kasutada koodi kasutamise näidetena. Loodan, et kogukonna abiga koostame korraliku dokumentatsiooni, seega loodan teie peale!

Praegused piirangud ja tulevane areng

Nagu igal tarkvaral (ja eriti avatud lähtekoodiga projektidel alfaversioonis), on ka Datumboxi masinõppe raamistikul ainulaadsed ja jumalikud piirangud. Uurime neid:

  1. Dokumentatsioon: Nagu varem mainitud, on dokumentatsioon halb.
  2. Mitme lõimega töötlemine puudub: Kahjuks ei toeta raamistik praegu Multithreadingut. Muidugi peaksime märkima, et kõiki masinõppe algoritme ei saa paralleelstada.
  3. Koodi näited: Kuna raamistik on äsja avaldatud, ei leia veebist ühtegi koodinäidet peale nende, mis raamistik pakub JUniti testide kujul.
  4. Koodi struktuur: Suure projekti jaoks kindla arhitektuuri loomine on alati keeruline, rääkimata siis, kui peate tegelema masinõppe algoritmidega, mis erinevad oluliselt (järelvalvega õpe, järelevalveta õpe, dimensioonide vähendamise algoritmid jne).
  5. Mudeli püsivus ja suured andmekogud: Praegu saab mudeleid treenida ja salvestada kas kettale või MongoDB andmebaasidesse. Suure andmemahu käsitlemiseks tuleb uurida muid lahendusi. Näiteks MapDB tundub olevat hea kandidaat andmete ja parameetrite salvestamiseks treenimise ajal. Lisaks on oluline eemaldada kõik 3rd parteiraamatukogud, mis praegu tegelevad mudelite püsimisega ja töötavad välja parema kuiva ja modulaarse lahenduse.
  6. Uued algoritmid/testid/mudelid: On nii palju suurepäraseid tehnikaid, mida praegu ei toetata (eriti aegridade analüüsi jaoks).

Kahjuks on kõik eelnev liiga palju tööd ja aega on nii vähe. Sellepärast, kui olete projektist huvitatud, astuge edasi ja andke mulle mõni ülaltoodud käsi. Lisaks sooviksin kuulda inimestelt, kellel on avatud lähtekoodiga keskmise ja suurte projektide kogemus ja kes võiksid anda näpunäiteid nende haldamiseks. Lisaks oleksin tänulik igale julgele hingele, kes julgeb koodi sisse uurida ja mõnda klassi või avalikku meetodit dokumenteerida. Lõpuks, kui kasutate raamistikku millegi huvitava jaoks, kirjutage mulle või jagage seda ajaveebipostitusega.

Lõpetuseks tahaksin tänada oma armastust Kyriakit selle projekti kirjutamise ajal sallimise eest, mu sõpra ja super-ninja-Java arendajat Eleftherios Bampaletakis oluliste Java-probleemide lahendamisel abistamise eest ja projektis osalemise eest. Ootan teie kommentaare.

Ajatempel:

Veel alates Datumbox