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

  1. "E-mail spam osztályozási modell építése"
  2. "Spam-ham e-mail adatkészlet betöltése"
  3. "Térköző szöveges kategorizációs modellfolyamat létrehozása"
  4. "Vonat felosztása és tesztadatkészletei"
  5. "Tréningmodell adatok létrehozása"
  6. „Tréning funkció létrehozása”
  7. "Előrejelzési funkció létrehozása"
  8. "Spam e-mail osztályozó modell evolúciója"
  9. "Pontosság"
  10. "Zavar mátrix"
  11. "Mi a következő?"
  12. "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

  1. "NLP specializáció Pythonnal"
  2. "NLP osztályozás és vektorterek"
  3. "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.