Szöveg osztályozása Python-tal - forráskód
Oktató | 2018. október 29
A szöveg hangulatának gépi tanulással történő olvasását hangulatelemzésnek nevezzük, és ez a szövegosztályozás egyik legkiemelkedőbb használati esete. Ez a természetes nyelvfeldolgozás (NLP) nagyon aktív kutatási területére esik.
A szöveges osztályozás egyéb gyakori esetei közé tartozik a spamfelismerés, az ügyfélkérdések automatikus címkézése és a szöveg meghatározott témákba sorolása. Tehát hogyan teheti ezt meg?
Válasszon ki egy adatsort
Mielőtt elkezdenénk, vessünk egy pillantást a rendelkezésünkre álló adatokra. Folytassa, töltse le az UCI gépi tanulási adattárból spanyolra lefordított adatkészletet.
Ez az adatkészlet az IMDb, az Amazon és a Yelp címkézett véleményeit tartalmazza. Minden értékelést 0-val jelölnek negatív érzelmek vagy 1 pozitív pontszámot.
Bontsa ki a mappát egy adatmappába, és folytassa, és töltse be az adatokat a Pandas segítségével:
Az eredmény a következő legyen:
Ezzel az adatkészlettel modellt képezhet a mondat hangulatának előrejelzésére.
Ennek egyik módja az, hogy megszámolja az egyes mondatokban az egyes szavak gyakoriságát, és összekapcsolja ezt a számot az adatsor teljes szavakkal. Kezdeném azzal, hogy felveszem az adatokat, és létrehozom az összes mondatban szereplő összes szó szókincsét. A szöveggyűjteményt korpusznak nevezik a PLN-ben.
A szókincs ebben az esetben azoknak a szavaknak a felsorolása, amelyek megjelentek a szövegünkben, ahol minden szónak megvan a maga indexe. Ez lehetővé teszi vektor létrehozását egy mondathoz. Ezután felvenné a vektorizálni kívánt mondatot, és megszámolná annak előfordulását a szókincsben. A kapott vektor lesz a szókincs és a szókincs egyes szavainak száma.
Az így kapott vektort jellemzővektornak is nevezzük. Egy jellemzővektorban minden dimenzió lehet numerikus vagy kategorikus jellemző, például egy épület magassága, egy részvény ára vagy esetünkben egy szó száma a szókincsben. Ezek a jellemzővektorok döntő jelentőségűek az adattudományban és a gépi tanulásban, mivel a betanítani kívánt modell rajtuk múlik.
Ezt szemléltetni fogjuk. Képzelje el, hogy a következő két mondat van:
Ezután a mondatok vektorizálásához használhatja a Scikit-Learn könyvtár által biztosított CountVectorizer alkalmazást.
Vegye ki az egyes mondatokból a szavakat, és készítsen szókincset a mondatokban szereplő összes egyedi szóból. Ez a szókincs felhasználható a szószám-jellemzők vektorának létrehozására:
Ez a szókincs az egyes szavak indexeként is szolgál. Most megteheti az egyes mondatokat, és megszerezheti a fenti szókincsnek megfelelően megjelenő szavakat. A szókincs a mondatainkban szereplő öt szóból áll, amelyek mindegyike egy szót képvisel a szókincsben. Ha átveszi a fenti két mondatot, és átalakítja őket a CountVectorizer segítségével, akkor egy vektorot kap, amely a mondat egyes szavainak számát képviseli:
Most a fenti szókincs alapján láthatja az egyes mondatok eredményvektorait. Például, ha megnézzük az első elemet, láthatjuk, hogy mindkét vektornak van egy 1. Ez azt jelenti, hogy mindkét mondatban előfordul John, aki a szókincsben az első.
Ezt tekintjük Bag of Words modellnek, amely a PLN-ben elterjedt módszer vektorok létrehozására a szövegből. Minden dokumentum vektorként van ábrázolva. Ezeket a vektorokat funkcióvektorként használhatja a gépi tanulási modellhez. Ezzel eljutottunk a következő részünkhöz, meghatározva egy alapmodellt.
Alapmodell meghatározása
A gépi tanulással való munka során fontos lépés az alapmodell meghatározása. Ez általában egy egyszerű modellt tartalmaz, amelyet aztán összehasonlítanak a tesztelni kívánt fejlettebb modellekkel. Ebben az esetben az alapmodell segítségével összehasonlítja azt a fejlettebb módszerekkel, amelyek (mély) neurális hálózatokat tartalmaznak.
Először fel fogja osztani az adatokat egy képzési és tesztkészletre, amely lehetővé teszi, hogy értékelje a pontosságot, és megnézze, hogy a modellje általános-e. Ez azt jelenti, hogy a modell jól működik-e olyan adatokkal, amelyeket még nem látott. Ez az egyik módja annak, hogy meggyőződjünk arról, hogy a modell túlterhelt-e.
Túlterhelés az, amikor egy modell túl jól edzi az edzésadatokat. Kerülni szeretné a túlfeszítést, mivel ez azt jelentené, hogy a modell többnyire csak az edzés adatait jegyezte meg. Ez nagy pontosságot magyarázna az edzésadatokkal, de alacsony pontosságot a tesztadatokban.
Először a Yelp összefoglaló adatkészletét vesszük, amelyet az összefűzött adatkészletből nyerünk ki. Innen vesszük a kifejezéseket és a címkéket. Az ".values" értékek egy pandas objektum helyett egy NumPy tömböt adnak vissza, amely ebben az összefüggésben könnyebben olvasható:
Itt ismét a fenti szavak Bag modelljét használjuk a mondatok vektorizálásához. Ehhez a feladathoz újra használható a CountVectorizer. Mivel nem biztos, hogy a teszt során rendelkezésre állnak a tesztadatok, a szókincset csak az edzésadatok felhasználásával készítheti el. E szókincs használatával létrehozhatja a jellemző vektorokat az oktatási és tesztkészlet minden mondatához:
Eredmény
Láthatja, hogy a kapott jellemzővektoroknak 750 mintája van, ez az edzésminták száma, amely az edzéskészlet felosztása után van. Minden mintának 1714 dimenziója van, ami a szókincs nagysága. Látható továbbá, hogy ritka mátrixot kapunk.
Ez egy olyan adattípus, amely csak néhány nulla nulla elemet tartalmazó tömbökhöz optimalizált, amely csak a nulla elemektől ment nyomon, csökkentve a memória terhelését.
A CountVectorizer olyan tokenizálást hajt végre, amely a mondatokat a szókincsben korábban látható jelzőkészletre választja el. Ezenkívül eltávolítja az írásjeleket és a speciális karaktereket, és minden egyes szóhoz más előfeldolgozást is alkalmazhat. Ha szeretné, használhatja az NLTK könyvtár egyéni tokenizálóját a CountVectorizerrel, vagy tetszőleges számú testreszabást használhat a modell teljesítményének javításához.
Az osztályozási modell, amelyet használni fogunk, a logisztikai regresszió, amely egy egyszerű, de erőteljes lineáris modell. Ez a 0 és 1 közötti regresszió egyik formája a bemeneti jellemzők vektorán alapul.
A határérték megadásával (alapértelmezett, 0,5) a regressziós modellt használják a besoroláshoz.
Láthatja, hogy a logisztikai regresszió lenyűgöző 78,8% -ot ért el, de nézzük meg, hogyan működik ez a modell a többi rendelkezésünkre álló adathalmazban. Ebben a szkriptben elvégezzük és kiértékeljük az összes meglévő adatkészlet teljes folyamatát:
Eredmény
Nagy! Láthatja, hogy ez a meglehetősen egyszerű modell elég jó pontosságot ér el. Érdekes lenne megnézni, hogy sikerül-e legyőzni ezt a modellt. A következő részben megismerkedünk a (mély) neurális hálózatokkal és annak alkalmazásával a szöveges osztályozás során.