Új, nyílt forráskódú gépi tanulási keretrendszer, amelyet Java PlatoBlockchain Data Intelligence-ben írtak. Függőleges keresés. Ai.

Új, Java nyelven írt nyílt forráskódú gépi tanulási keretrendszer

Örömmel jelentem be, hogy a Datumbox Machine Learning Framework már nyílt forráskódú GPL 3.0 alatt, és a kódja letölthető innen GitHub!

Mi ez a keretrendszer?

A Datumbox gépi tanulási keretrendszer egy Java nyelven írt nyílt forráskódú keretrendszer, amely lehetővé teszi a Machine Learning modellek és statisztikai alkalmazások gyors fejlesztését. Ez az a kód, amely jelenleg bekapcsolja a Datumbox API-t. A keretrendszer fő célja, hogy nagyszámú gépi tanulási algoritmust és statisztikai módszert tartalmazzon, és képes legyen kezelni a kis-közepes méretű adatkészleteket. Annak ellenére, hogy a keretrendszer célja, hogy segítse a különböző területekről származó modellek fejlesztését, olyan eszközöket is biztosít, amelyek különösen hasznosak a természetes nyelvi feldolgozó és szövegelemző alkalmazásokban.

Milyen típusú modellek/algoritmusok támogatottak?

A keretrendszer több rétegre oszlik, mint például a gépi tanulás, a statisztika, a matematika, az algoritmusok és a segédprogramok. Mindegyik egy sor osztályt biztosít, amelyeket a gépi tanulási modellek betanításához használnak. A két legfontosabb réteg a Statisztika és a Gépi tanulási réteg.

A Statisztika réteg osztályokat biztosít a leíró statisztikák kiszámításához, különböző típusú mintavételek végrehajtásához, CDF-ek és PDF-ek becsléséhez az általánosan használt valószínűségi eloszlások alapján, valamint több mint 35 paraméteres és nem paraméteres teszt elvégzéséhez. Az ilyen típusú osztályokra általában szükség van a magyarázó adatelemzés, mintavétel és jellemzőválasztás során.

A gépi tanulási réteg számos problémában használható osztályokat biztosít, beleértve az osztályozást, a regressziót, a klaszterelemzést, a témamodellezést, a dimenziócsökkentést, a jellemzőválasztást, az együttes tanulást és az ajánlórendszereket. Íme néhány támogatott algoritmus: LDA, Max Entropy, Naive Bayes, SVM, Bootstrap Aggregation, Adaboost, Kmeans, Hierarchical Clustering, Dirichlet Process Mixture Models, Softmax Regression, Ordinal Regression, Linear Regression, Stepwise Regression, PCA és még sok más.

Datumbox Framework VS Mahout VS Scikit-Learn

Mind a Mahout, mind a Scikit-Learn nagyszerű projektek, és mindkettőnek teljesen más a célja. A Mahout csak nagyon korlátozott számú algoritmust támogat, amelyek párhuzamosíthatók, és így a Hadoop Map-Reduce keretrendszerét használják a Big Data kezelésére. Másrészt a Scikit-Learn számos algoritmust támogat, de nem tud nagy mennyiségű adatot kezelni. Ezen túlmenően Pythonban fejlesztették ki, amely nagyszerű nyelv a prototípusok készítéséhez és a tudományos számítástechnikához, de nem a személyes kedvencem a szoftverfejlesztésben.

A Datumbox Framework a két megoldás közepén helyezkedik el. Nagyszámú algoritmust próbál támogatni, és Java nyelven íródott. Ez azt jelenti, hogy könnyebben beépíthető a gyártási kódba, könnyebben módosítható a memóriafelhasználás csökkentése érdekében, és valós idejű rendszerekben is használható. Végül, bár jelenleg a Datumbox Framework képes közepes méretű adatkészletek kezelésére, terveim között szerepel a bővítése a nagy méretű adatkészletek kezelésére is.

Mennyire stabil?

A keretrendszer korai verzióit (0.3.x-ig) 2013 augusztusában és szeptemberében fejlesztették ki, és PHP-ben írták (yeap!). 2014 májusában és júniusában (0.4.x verzió) a keretrendszert Java nyelven átírták, és további funkciókkal bővítették. Mindkét ágat alaposan tesztelték kereskedelmi alkalmazásokban, beleértve a Datumbox API-t is. A jelenlegi verzió 0.5.0, és elég érettnek tűnik ahhoz, hogy a keretrendszer első nyilvános alfa verziójaként megjelenjen. Ennek ellenére fontos megjegyezni, hogy a keretrendszer egyes funkcióit alaposabban tesztelik, mint másokat. Sőt, mivel ez a verzió alfa, drasztikus változásokra kell számítanod a jövőbeli kiadásokon.

Miért írtam, és miért nyílt forráskódú?

A Machine Learning-ben és az NLP-ben való részvételem 2009-ig nyúlik vissza, amikor társalapítója voltam a WebSEOAnalytics.com-nak. Azóta különféle gépi tanulási algoritmusok implementációit fejlesztem különböző projektekhez és alkalmazásokhoz. Sajnos az eredeti megvalósítások többsége nagyon probléma-specifikus volt, és aligha lehetett más problémára használni. 2013 augusztusában úgy döntöttem, hogy személyes projektként elindítom a Datumboxot, és kifejlesztek egy keretrendszert, amely eszközöket biztosít az NLP és a szövegosztályozás területére fókuszáló gépi tanulási modellek fejlesztéséhez. Célom egy olyan keretrendszer felépítése volt, amelyet a jövőben újra felhasználnának gyors gépi tanulási modellek fejlesztésére, beépítve olyan projektekbe, amelyek gépi tanulási komponenseket igényelnek, vagy szolgáltatásként kínálják (Machine Learning as a Service).

És most itt vagyok, több sornyi kóddal később, és nyílt forrású a projektet. Miért? Az őszinte válasz az, hogy ezen a ponton nem szerepel a terveim között, hogy „építsünk egy új start-upot” utat. Ugyanakkor úgy éreztem, hogy nincs értelme a kódot a merevlemezemen tartani, ha a jövőben szükségem lenne rá. Tehát az egyetlen logikus dolog az volt, hogy nyílt forráskódú. 🙂

Dokumentáció?

Ha elolvassa az előző két bekezdést, valószínűleg látnia kell, hogy jön. Mivel a keretrendszert nem úgy fejlesztették ki, hogy megosszam másokkal, a dokumentáció szegényes/nincs. A legtöbb osztály és nyilvános metódus nincs megfelelően kommentálva, és nincs olyan dokumentum, amely leírná a kód architektúráját. Szerencsére az összes osztálynév magától értetődő, és a keretrendszer JUnit teszteket biztosít minden nyilvános metódushoz és algoritmushoz, és ezek példaként használhatók a kód használatára. Bízom benne, hogy a közösség segítségével megfelelő dokumentációt készítünk, ezért számítok Önökre!

Jelenlegi korlátok és jövőbeli fejlődés

Mint minden szoftvernél (és különösen az alfa verziójú nyílt forráskódú projekteknél), a Datumbox Machine Learning Frameworknek is megvannak a maga egyedi és imádnivaló korlátai. Vágjunk bele ezekbe:

  1. Dokumentáció: Mint korábban említettük, a dokumentáció gyenge.
  2. Nincs többszálas: Sajnos a keretrendszer jelenleg nem támogatja a Multithreading-et. Természetesen meg kell jegyeznünk, hogy nem minden gépi tanulási algoritmus párhuzamosítható.
  3. Példák a kódra: Mivel a keretrendszer most jelent meg, a weben nem találsz más kódpéldákat, mint amiket a keretrendszer JUnit tesztek formájában biztosít.
  4. Kódszerkezet: Egy szilárd architektúra létrehozása bármilyen nagy projekthez mindig kihívást jelent, nem is beszélve arról, ha olyan gépi tanulási algoritmusokkal kell megküzdenie, amelyek jelentősen különböznek egymástól (felügyelt tanulás, felügyelet nélküli tanulás, dimenziócsökkentő algoritmusok stb.).
  5. A modell állandósága és nagy adatgyűjtések: Jelenleg a modellek betaníthatók és tárolhatók lemezen lévő fájlokban vagy MongoDB adatbázisokban. Ahhoz, hogy nagy mennyiségű adatot lehessen kezelni, más megoldásokat kell vizsgálni. Például MapDB jó jelöltnek tűnik adatok és paraméterek tárolására edzés közben. Ezenkívül fontos eltávolítani minden 3rd pártkönyvtárak, amelyek jelenleg kezelik a modellek tartósságát, és jobb száraz és moduláris megoldást fejlesztenek ki.
  6. Új algoritmusok/tesztek/modellek: Nagyon sok nagyszerű technika jelenleg nem támogatott (különösen az idősorelemzésnél).

Sajnos a fentiek mindegyike túl sok munka és nagyon kevés az idő. Éppen ezért, ha érdekli a projekt, lépjen előre, és segítsen a fentiek bármelyikében. Ezenkívül szívesen vennék olyan emberek véleményét, akik tapasztalattal rendelkeznek a nyílt forráskódú közepes-nagy projektekben, és tanácsot adnának ezek kezeléséhez. Ezen kívül hálás lennék minden bátor léleknek, aki bele mer nézni a kódba és dokumentálni néhány osztályt vagy nyilvános módszert. Végül, de nem utolsósorban, ha valami érdekesre használod a keretrendszert, kérlek írj egy sort, vagy oszd meg egy blogbejegyzéssel.

Végül szeretném megköszönni szerelmem, Kyriaki, hogy eltűrt a projekt írásakor, barátomnak és szuper-nindzsa-Java-fejlesztőmnek. Eleftherios Bampaletakis a fontos Java-problémákban való segítségnyújtásért és a projektbe való bekapcsolódásért. Várom észrevételeiket.

Időbélyeg:

Még több Datumbox