Szövegosztályozás és előrejelzés a Bag Of Words megközelítéssel

A szöveges osztályozásnak számos megközelítése van. Más cikkekben a Multinomial Naive Bayes-ről és az Ideghálózatokról szóltam.

Az egyik legegyszerűbb és leggyakoribb megközelítést „Szavak zsákjának” hívják. Kereskedelmi elemző termékek, többek között a Clarabridge, a Radian6 és mások használták.

A megközelítés viszonylag egyszerű: adott témakörök és az egyes témákhoz társított kifejezések összessége alapján határozza meg, hogy mely dokumentumok léteznek egy dokumentumban (például egy mondat).

Míg más, egzotikusabb algoritmusok is „zsákokká” szervezik a szavakat, ebben a technikában nem hozunk létre modellt, és nem alkalmazunk matematikát arra a módszerre, ahogyan ez a „táska” metszi a minősített dokumentumot. A dokumentum osztályozása polimorf lesz, mivel több témához társítható.

Túl egyszerűnek tűnik ez ahhoz, hogy hasznos legyen? Próbálja ki, mielőtt a következtetésekre jutna. Az NLP-ben gyakran előfordul, hogy az egyszerű megközelítés néha hosszú utat is elérhet.

Három dologra lesz szükségünk:

  • Témakör / szavak definíciós fájl
  • Osztályozó függvény
  • Jegyzetfüzet az osztályozónk teszteléséhez

És akkor egy kicsit tovább merészkedünk, és egy prediktív modellt építünk és tesztelünk osztályozási adataink felhasználásával.

Témák és szavak

Definíciós fájlunk JSON formátumú. Ezt felhasználjuk a betegek és az ápolásukra kijelölt ápoló közötti üzenetek osztályozásához.

témák.json

Ebben a meghatározásban két megjegyzés található.

Először nézzünk meg néhány kifejezést, néhány kifejezést. Például a „bruis” egy szár. Olyan szuperhalmazokra terjed ki, mint a „zúzódások”, „zúzódások” stb. Másodszor, a * -ot tartalmazó kifejezések valójában minták , például a * dpm egy numerikus d igit mintája, amelyet „pm” követ.

A dolgok egyszerűségének megőrzése érdekében csak numerikus minták illesztését kezeljük, de ez szélesebb körre is kiterjeszthető.

A minták egy kifejezésen belüli megtalálásának ez a képessége nagyon hasznos a dátumokat, időket, pénzértékeket stb.

Próbáljuk ki a besorolást.

Az osztályozó egy JSON eredményhalmazt ad vissza, amely tartalmazza az üzenetben található egyes témákhoz tartozó mondatokat. Az üzenet több mondatot is tartalmazhat, és egy mondat egyetlen, egy vagy több témához is társítható.

Vessünk egy pillantást osztályozónkra. A kód itt van.

msgClassify.py

A kód viszonylag egyszerű, és tartalmaz egy kényelmi funkciót a dokumentum mondatokra bontására.

Prediktív modellezés

Az eredményhez kapcsolódó dokumentumok halmazának összesített osztályozása felhasználható egy prediktív modell felépítésére.

Ebben a felhasználási esetben azt szerettük volna megtudni, hogy megjósolhatjuk-e a kórházi ápolásokat a beteg és az ápoló között az esetet megelőző üzenetek alapján. Összehasonlítottuk azokat az üzeneteket olyan betegek számára, akik kórházi kezelést végeztek és nem szenvedtek el.

Használhat hasonló technikát más típusú bináris kimenetelhez kapcsolódó üzenetekhez.

Ez a folyamat számos lépést tesz:

  • Az üzenetek halmaza besorolásra kerül, és minden téma megkapja a készlet számát. Az eredmény egy fix lista a témákról,% -os elosztással az üzenetekből.
  • Ezután a témakiosztáshoz bináris értéket rendelünk , esetünkben 0-t, ha nem volt kórházi kezelés, és 1-et, ha kórházi kezelés volt
  • A prediktív modell felépítéséhez logisztikai regressziós algoritmust használnak
  • A modellt az új bemenetek kimenetelének előrejelzésére használják

Nézzük meg a bemeneti adatainkat. Adatainak hasonló szerkezetűeknek kell lenniük. Pandas DataFrame-et használunk.

Az „esemény” a bináris eredmény, és ennek a bemeneti adatok első oszlopának kell lennie.

Minden következő oszlop egy téma és az osztályozás% -a a pácienshez tartozó üzenetekből.

A 0. sorban azt látjuk, hogy a páciensnek küldött üzenetek nagyjából negyede köszönet témáról szól, és egyik sem orvosi feltételekkel vagy pénzzel foglalkozik . Így minden sor bináris eredmény és üzenetküldő osztályozási profil a témák között.

A bemeneti adatok különböző témákkal, oszlopcímkékkel és bináris feltételekkel fognak rendelkezni, de egyébként hasonló felépítésűek.

Használjuk a scikit-learn-et egy logisztikai regresszió felépítéséhez, és teszteljük a modellünket.

Itt van a mi kimenetünk:

precision recall f1-score support 0 0.66 0.69 0.67 191 1 0.69 0.67 0.68 202avg / total 0.68 0.68 0.68 393

Ennek a modellnek a pontossága és visszahívása a tesztadatokhoz képest a magas 60-as években van - valamivel jobb, mint egy tipp , és sajnos nem elég pontos ahhoz, hogy nagy értéket képviseljen.

Ebben a példában az adatok mennyisége viszonylag kicsi volt (ezer beteg, betegenként ~ 30 üzenet mintavételezésre kerül). Ne feledje, hogy az adatoknak csak a felét lehet edzésre használni, míg a másik felét (keverés után) tesztelésre használják.

Strukturált adatok, például életkor, nem, állapot, korábbi események stb. Bevonásával megerősíthetjük modellünket és erősebb jelet adhatunk. A több adat birtoklása szintén hasznos lehet, mivel a képzési adatok oszlopainak száma meglehetősen nagy.

Próbáld ki ezt strukturált / strukturálatlan adataiddal, és nézd meg, hogy kaphat-e egy nagyon prediktív modellt. Nem biztos, hogy olyan pontosságot kap, amely automatizált műveletekhez vezet, de a „kockázat” valószínűség felhasználható szűrőként vagy válogatásként, vagy korai figyelmeztető jelként az emberi szakértők számára.

A „szavak zsákja” megközelítés alkalmas bizonyos típusú szövegosztályozási munkákra, különösen ott, ahol a nyelv nem árnyalt.

Élvezd.