Az adatok különböző formákban történő rögzítése exponenciálisan növekszik, ideértve a numerikus adatokat, szöveges adatokat, képadatokat stb.
A numerikus adatok jelentik a fő forrást a különféle „gépi tanulás” és statisztikai modellek felépítéséhez, de a szöveges adatok számának növekedésével az emberek „természetes nyelvi feldolgozási” technikákat alkalmaznak, és értelmes információkat vonnak ki a szöveges adatokból, hogy több betekintést nyerjenek a kulcsfontosságú üzleti döntések.
Szöveges adatokból betekintést generálni nem olyan egyszerű, mint számadatokból betekintést generálni, mert a szöveges adatok nem lesznek strukturált módon. A szöveges adatok feldolgozásához az első lépés a strukturálatlan szöveges adatok strukturált adatokká történő konvertálása.
Különféle Python-könyvtárak állnak rendelkezésünkre szöveges adatok kinyerésére, például NLTK, spacy, text blob.
Ebben a cikkben a "tágas" természetes nyelvű python könyvtárat használjuk egy e-mail spam osztályozási modell felépítésére, amely néhány kódsorból megállapítja, hogy egy e-mail spam-e vagy sem.
Tartalomjegyzék
- "E-mail spam osztályozási modell építése"
- "Spam-ham e-mail adatkészlet betöltése"
- "Térköző szöveges kategorizációs modellfolyamat létrehozása"
- "Vonat felosztása és tesztadatkészletei"
- "Tréningmodell adatok létrehozása"
- „Tréning funkció létrehozása”
- "Előrejelzési funkció létrehozása"
- "Spam e-mail osztályozó modell evolúciója"
- "Pontosság"
- "Zavar mátrix"
- "Mi a következő?"
- "Következtetés"
E-mail spam osztályozási modell építése
Rendszeresen ellenőrizzük e-mailjeinket, a postafiókunkba érkező e-mailek nem mindegyike jelenik meg a beérkező levelek között. Sokan közülük spam vagy levélszemét mappába kerülnek.
Elgondolkozott már azon, hogyan történik?
Hogyan történik a levelek besorolása és a beérkező levelek vagy a spam mappába küldése az e-mail szövege alapján?
Mielőtt bármilyen e-mail eljutna a beérkezett üzenetek mappájába, a Google saját e-mail osztályozóját használja, amely azonosítja, hogy a fogadott e-mailt a beérkező levelek mappába vagy a spambe kell-e küldeni.
Ha még mindig azon gondolkodik, hogyan működik az e-mail osztályozó, ne aggódjon.
Ebben a cikkben egy e-mail spam osztályozót fogunk felépíteni a pythonban, amely besorolja, hogy az adott levél spam-e vagy sem.
Számos módja van az e-mail osztályozó felépítésének a Natural Language Processing különböző algoritmusaival, vagy bármilyen más csomaggal. Ebben a cikkben azonban a térbeli könyvtárat fogjuk használni az e-mail osztályozó felépítéséhez.
A spacy fő előnye, hogy a kód jól optimalizált, számos lehetőséget kínál, amelyek segítségével nagyon rövid idő alatt és minimális kóddal készíthetünk modellt.
Minden késedelem nélkül kezdjük el az e-mail osztályozási modell felépítését.
Spam-ham e-mail adatkészlet betöltése
Az e-mail osztályozó felépítéséhez a kaggle NLP adatkészletekből letöltött e-mail spam adatkészletet fogjuk használni.
Töltsük be az adatkészletet a Pandas read csv módszerrel.
Gyorsan ellenőrizzük a betöltött adatkészlet attribútumait. Az adatkészlet 2 oszlopban tartalmaz információkat, az egyik oszlopban a címke, a másikban a szöveg található.
- címke: Segít azonosítani, hogy a szöveg spam-e vagy hamis.
- szöveg:Az e-mail szövege
Most nézzük meg a betöltött adathalmaz megfigyelések teljes számát, és értsük meg az adatok spam és ham megoszlását is.
5572 megfigyelésünk van a betöltött adatokban.
A fenti grafikon a sonka és a spam eloszlását mutatja. Az eloszlás szerint az adatkészlet a ham-osztályú populációt tartalmazza, mint a spam-osztály populációját.
Hozzon létre üres szöveges kategorizációs modellfolyamatot
Térrel rendelkező modellek készítéséhez betöltheti a meglévő csővezeték-modelleket, vagy létrehozhat egy üres modellt, és a modellezési lépéseket pipeline módon adhatjuk hozzá.
Értsük meg soronként a fenti kódot.
A tizedik sorban az üres modellt hoztuk létre, szóközzel és átadva az angol (en) nyelvet.
A következő sorokban egy folyamatot hozunk létre, amely szerint ennek a modellnek szöveges osztályozást kell végrehajtania.
A konfigurációban exkluzív osztályként írja be, ami azt jelenti, hogy a spam vagy ham esetében megadjuk a célosztályokat. Az íj architektúra használata, ami azt jelenti, hogy a zsákos szavakat kell használni a modellezéshez.
Használhatunk más beépített térbeli architektúrákat is, de ehhez a cikkhez a szavak zsákját használjuk.
Ezután hozzáadjuk a létrehozott text_cat folyamatot az üres modellünkhöz.
Ebben a szakaszban van egy modellünk, és azt mondjuk, hogy ennek a modellnek el kell végeznie a szövegosztályozást a szavak zsák megközelítésével.
Ezután hozzáadjuk a spam és a ham célosztályokat a létrehozott szöveges kategorizációs modellhez.
Ebben a cikkben nem fogunk NLP-vel kapcsolatos adat-előfeldolgozási technikákat végrehajtani a szövegen.
Általában az emberek számos dolgot megtesznek, mielőtt szöveggel kapcsolatos modellt készítenek, mint pl
- Tokenek létrehozása
- Tisztítási tokenek
- Stop szavak eltávolítása
- Lemmatizálás
- Száraz .. stb
De ebben a cikkben ezek közül egyiket sem nem hajtjuk végre. Ha szeretné, a modellezés megkezdése előtt elvégezheti ezeket a lépéseket.
Vonat és teszt adatkészletek felosztása
A betöltött adatokat két különálló adatkészletre osztjuk fel.
- Képzés adatkészlet: A szöveges kategorizációs modell betanításához.
- Teszt adatkészlet: A modell teljesítményének ellenőrzéséhez.
Az adatok 2 ilyen adathalmazra való felosztásához scikit learning modellkiválasztási vonatteszt split módszert alkalmazunk, oly módon, hogy a tesztadatok a betöltött adatok 33%-át teszik ki.
Tegyük fel, hogy 100 rekord van a betöltött adatkészletben, ha a tesztet 30%-ban adjuk meg, akkor a betanítás és a tesztfelosztás módszerrel 70 rekordot osztunk fel a betanításra, a maradék 30 rekordot pedig tesztelésre.
Képzési modell adatok létrehozása
Most két adatkészletünk van, az egyik a képzésre, a másik pedig a modellünk tesztelésére szolgál.
Ellentétben a többi scikit-learn modellel, a célpontot nem lehet egyetlen oszlopként átadni a space-hez, hanem kifejezetten létre kell hoznunk a célokat, mint egy logikai listát.
Mint minden e-mail szövegnél, a célcímke melyik osztályra igaz, és melyik osztályra hamis.
Az alábbi kódban tegyük ezt meg.
Alapvetően onehot kódolásokat hozunk létre a célkategóriákhoz, ahol két logikai címkét hozunk létre, és hozzárendelünk ture-t az aktuális címkéhez, és false-t a másik címkéhez.
Most már vannak funkcióink és célunk a modell betanításához, de először egyetlen adathalmazba kell kombinálnunk a funkciót és a célokat az e-mail osztályozási modell felépítéséhez.
Szolgáltatásokat (e-mail szöveg), átalakított vonatcímkéket (logikai értékeket) veszünk, és a zip módszerrel egyesítjük, ugyanazt a megközelítést, amelyet mind a képzési, mind a tesztadatkészleteknél alkalmazunk.
Képzési funkció létrehozása
Most mind a betanítási, mind a tesztadatokkal rendelkezünk a következő modell felépítéséhez Hozzunk létre egy tanítási függvényt, amely az alábbi bemeneti paramétereket veszi fel a modell felépítéséhez.
- modell:Üres modell létrehozva
- vonatadatok: Létrehozott vonatadatok
- optimalizáló: optimalizáló (a vonat funkció meghívása előtt létrejön)
- Adag mérete: A fürdők mérete
- korszakok: korszakok mérete
Értsük meg soronként a fenti kódot.
Minden korszakhoz véletlenszerű keverési módszerrel keverjük az adatokat, majd létrehozzuk a kötegeket. Minden kötegelt modellfrissítés az optimalizálóval, a végén a veszteségek rögzítése.
Az e-mail osztályozó modell felépítéséhez elkészítettük az optimalizálót, és 5 és 10 epocha kötegmérettel futtatjuk a fenti függvényt, amelyet a modell betanítására hoztunk létre.
Lássuk, milyen veszteségeket kaptunk.
Előrejelző függvény létrehozása
A modellt betanítottuk, most ellenőrizhetjük az általunk épített modell hatékonyságát.
Ehhez létre kell hoznunk egy predikciós függvényt, mielőtt megtennénk, hogy megnézzük, mit jósol a modell egy adott e-mail szövegre.
A fenti e-mail-szöveg esetében a tényleges kimenet sonka, és modellünknek nagy a valószínűsége, ami közel 99% a sonka és 1% a spam. Ez azt jelenti, hogy modellünk megfelelően előrejelzi az e-mail szövegét.
Most írjunk egy általánosított függvényt, amely átveszi a modellt, az e-mail-szövegeket és előrejelzi az eredménycímkéket.
Az előrejelzési funkció két paramétert vesz fel, az egyik a modell, a másik az e-mail szövege, itt a szöveg alapvetően az e-mail tartalma.
A függvény 4. sorában a szöveg a tokenizálást, majd az e-mail tartalmának felosztását és a dokumentumokban való tárolását tartalmazza.
A következő sorokban meghívja az általunk létrehozott textcat metódust, amely a textcat objektumot használja az e-mail osztály megjósolására, amely a szöveg ham vagy spam.
A pontszámok alapvetően mindkét osztály valószínűségét adják meg, a címkeosztály azonosításához a maximális valószínűséget vesszük az argmax segítségével, majd visszaadjuk az előrejelzéseket.
Spam e-mail osztályozó modell Evolution
A build e-mail osztályozó teljesítményének mérésére akuuritási és zavaros mátrix mérőszámokat fogunk használni.
Pontosság
Most hívjuk meg a predikciós függvényt a betanítási adatkészleten és a tesztadatkészletet, hogy mérjük a modell pontosságát.
A pontosság kiszámításához scikit tanulási pontossági pontszám módszert használunk, ez a módszer két paramétert vesz igénybe, ezek a tényleges címkék és az előre jelzett címkék.
A betanítási adatkészlet esetében a modell 99% pontosságú tesztadatkészletet ér el, mi pedig 98% pontosságot kapunk.
A modell pontosságának értékeléséhez önmagában nem lehet hatékony módja annak, hogy megbecsüljük, hogy a modell pontos-e vagy sem.
Hadd mondjak egy példát.
Tegyük fel, hogy előre jelezzük, hogy valaki alapértelmezett lesz-e bármely banki szervezetnél, vagy sem. Ha látjuk az adatokat, az emberek nemteljesítési aránya sokkal kevesebb lesz, mondjuk 10%. Tegyük fel, hogy ha olyan modellt épít fel, amely megjósolja, hogy egy ügyfél alapértelmezett lesz, akkor azt látja, hogy 90%-os pontosságot kap.
Szerinted jó a modell?
Szánjon egy pillanatra, és gondolja át, hogy az adatok szerint az emberek 90%-a vagy nem lesz alapértelmezett, és az emberek 10%-a lesz alapértelmezett. Ha azt mondjuk, hogy az emberek vagy nem lesznek alapértelmezettek anélkül, hogy gépi tanulási modellt építenénk, a pontosság 90%
Az ilyen jellegű problémák kezelésére más mérőszámokat használunk, amelyek ellenőrzik, hogy a kapott pontosság ésszerű-e. Ehhez használhatjuk a zavaros mátrixot.
Zavar mátrix
A zavaros mátrix a tényleges előrejelzéseket és a hiányzó besorolásokat mutatja az egyes célosztályokhoz. A fenti zavaros mátrix ábrázolja a vonatot és a tesztet, amely ugyanezt mutatja be.
Teljes kód
Az e-mail spam osztályozó felépítéséhez szükséges teljes kódot a „github tárhelyünkben” lekérheti.
Mi a következő?
Most felépítjük az e-mail spam osztályozót, ezzel a folyamattal hasonló jellegű problémákat oldhat meg. Csak a bemeneteken és a kimeneteken kell változtatnia, és néhány természetes nyelvű szöveg-előfeldolgozási technikát kell alkalmaznia a modellezés előtt.
- Az alábbiakban néhány példa látható
- Érzelemelemző osztályozó
- Dokumentumok téma azonosítása
- Sport- vagy üzleti hírcikkek besorolása
Következtetés
Ebben a cikkben megtanultuk, hogyan lehet néhány kódsorból felépíteni az e-mail spam osztályozót sapcy segítségével. Ne hagyja abba, ugyanazzal a kóddal próbáljon különféle szövegosztályozási modelleket felépíteni.
Ajánlott NLP tanfolyamok
- "NLP specializáció Pythonnal"
- "NLP osztályozás és vektorterek"
- "NLP modell építés python segítségével"
Kövess minket:
Remélem tetszik ez a bejegyzés. Ha bármilyen kérdése van ? vagy azt akarod, hogy írjak egy cikket egy adott témában? akkor nyugodtan kommentelj alább.
Eredetileg a https://dataaspirant.com oldalon tették közzé 2020. július 20-án.