Juhend automaatseks süva-/masinõppeks loomuliku keele töötlemiseks: teksti ennustamine

Allikasõlm: 1570302

See artikkel avaldati osana Andmeteaduse ajaveebi

See artikkel algab loomuliku keele töötlemise (NLP) põhitõdede käsitlemisega ja hiljem demonstreeritakse automaatse masinõppe (AutoML) kasutamist, et luua mudeleid tekstiandmete sentimentide ennustamiseks. Muud NLP rakendused on tõlkimiseks, kõnetuvastuseks, vestlusrobotiks, ja nii edasi Võib-olla arvate, et see artikkel on üldine, kuna Internetis on palju NLP-õpetusi ja tundeanalüüse. Kuid see artikkel püüab näidata midagi muud. See demonstreerib AutoKerase kasutamist AutoML-ina, et luua sügavat õpet teksti, eriti sentimentide ja emotsioonide ennustamiseks. Kuid enne seda käsitleme lühidalt põhilist NLP-d, kuna see toetab teksti sentimentide ennustamist.

See artikkel käsitleb järgmisi teemasid:

  1. Regulaaravaldis
  2. Sõna märgistamine
  3. Nimega üksuse tunnustamine
  4. Tüvestamine ja lemmatiseerimine
  5. Sõnapilv
  6. Sõnade kott (BoW)
  7. Terminite sagedus – dokumendi pöördsagedus (TF-IDF)
  8. Sentimentide analüüs
  9. Teksti regressioon (automaatne masinõpe ja süvaõpe)
  10. Teksti klassifikatsioon (automaatne süvaõpe)

NLP eesmärk on tekstiandmete mõtestamine. Andmeteaduses tavaliselt analüüsitavate tekstiandmete näited on toodete ülevaated, sotsiaalmeedia postitused, dokumendid, ja nii edasi Erinevalt arvandmetest ei saa tekstiandmeid kirjeldava statistikaga analüüsida. Kui meil on tootehindade andmete loend, mis sisaldab 1000 numbrit, saame üldistest hindade andmetest aru, uurides keskmist, mediaani, standardhälvet, kastgraafikut ja muid tehnikaid. Me ei pea kõiki numbreid lugema, et neist aru saada.

Kui meil on tuhandeid tekste, mis käsitlevad e-kaubanduse veebipoe tooteid, siis kuidas me teame, mida arvustused ütlevad, ilma neid kõiki lugemata. NLP abil saab neid tekstiülevaateid tõlgendada rahuloluhinnanguks, emotsiooniks, ja nii edasi Seda nimetatakse sentimentanalüüsiks. Masinõppe mudelid on loodud selleks, et ennustada teksti sentimenti.

Enne tundeanalüüsi juurde asumist alustab see artikkel NLP põhitõdedest, nagu regulaaravaldis, sõnade märgistamine, kuni sõnade kottideni ja sellest, kuidas need tundeanalüüsi aitavad. Siin on Pythoni märkmik, mis toetab seda artiklit.

Regular Expression

Regulaaravaldis (RegEx) on muster ühe või mitme lause või sõna sobitamiseks, otsimiseks, leidmiseks või tükeldamiseks. Järgmine kood on näide 6 RegEx-rea kasutamisest sama lause vastendamiseks. RegEx w+, d+, s, [az]+, [AZ]+, (w+|d+) sisaldab vastavalt sõna, numbri, tühiku, väikese tähestiku, suure tähestiku ja numbri otsimiseks vajalikku koodi. Re.match tagastab vastava teksti kindla mustriga teksti esimese sõna kohta. Sel juhul on see sõna "The".

import re text = 'Ahvid söövad puu otsas 7 banaani!' print(re.match('w+', text)) # word print(re.match('d+', text)) # digit print(re.match('s', text)) # space print(re.match ('[az]+', tekst)) # tähestikutrükk(re.match('[AZ]+', tekst)) # suurte tähtedega tähestik(re.match('(w+|d+)', text)) # sõna või number

Väljund:

Puudub Puudub Pole 

Pange tähele, et teine, kolmas ja neljas tagastavad väärtuse "Puudub", kuna sõna "The" ei alga numbri, tühiku ja väikese tähestikuga.

RegEx re.search otsib esimest teksti vastavalt mustrile. Erinevalt re.matchist, mis kontrollib ainult teksti esimest sõna, suudab re.search tuvastada tekstis esimese sõna järel olevad sõnad.

print(re.search('w+', text)) # word print(re.search('d+', text)) # digit print(re.search('s', text)) # space print(re.search ('[az]+', tekst)) # väiketähtedega tähestik (re.search('[az]', tekst)) # väiketähtedega tähestik (re.search('[AZ]+', tekst)) # suurtähtedega tähestik(re.search('(w+|d+)', text)) # sõna või number

Väljund






Selle asemel, et sobitada ainult teksti algust, leiab re.findall tekstist kogu RegExi mustri ja salvestab need loendisse.

print(re.findall('w+', text)) # word print(re.findall('d+', text)) # digit print(re.findall('s', text)) # space print(re.findall ('[az]+', tekst)) # väiketähtedega tähestik(re.findall('[az]', tekst)) # väiketähtedega tähestik(re.findall('[AZ]+', tekst)) # suurte tähtedega tähestik(re.findall('(w+|d+)', text)) # sõna või number

Väljund:

['Ahvid', 'on', 'söövad', '7', 'banaanid', 'sees', 'the', 'puu'] ['7'] [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '] ["ta", "ahvid", "on", "söömine", "banaanid", "sees", "the", "puu"] ["h", "e", "m", "o", "n", "k", "e", "y", "s", "a", "r", "e", " e', 'a', 't', 'i', 'n', 'g', 'b', 'a', 'n', 'a', 'n', 'a', 's' , 'o', 'n', 't', 'h', 'e', ​​'t', 'r', 'e', ​​'e'] ['T'] ["The", "ahvid" , 'are', 'söömine', '7', 'banaanid', 'sees', 'the', 'puu']

re.split otsib kogu tekstist RegEx-mustrit ja jagab teksti Reguleerimismustri alusel stringide loendiks.

print(re.split('w+', text)) # word print(re.split('d+', text)) # number print(re.split('s', text)) # space print(re.split ('[az]+', tekst)) # väiketähtedega tähestik(re.split('[AZ]+', tekst)) # suurte tähtedega tähestikutrükk(re.split('(w+|d+)', tekst )) # sõna või number

Väljund:

['', ' ', ' ', ' ', ' ', ' ', ' ', ', ' ', '!'] ['Ahvid söövad', 'banaanid puu otsas!'] [' "Ahvid", "on", "söövad", "7", "banaanid", "sees", "the", "puu!"] ["T", "", "", ' 7 ', ' ', ' ', ' ', '!'] ['', 'ta ahvid söövad puu otsas 7 banaani!'] ['', 'Ahvid', ' ', 'ahvid', ' ', 'kas', ' ', 'sööb', ' ', '7', ' ', 'banaanid', ' ', 'sees', ' ', ', ' ', 'puu', '! ']

 

Sõna märgistamine

Uurida on veel palju RegExi mustreid, kuid see artikkel jätkab sõnade märgistamist. Sõna tokeniseerimine jagab laused sõnadeks. Allolev kood näitab, kuidas seda tehakse. Kas saate öelda, milline ülaltoodud RegEx-kood võib sama teha?

import nltk saidilt nltk.tokenize import word_tokenize, send_tokenize word_tokenize(text)

Väljund:

["The", "ahvid", "on", "söövad", "7", "banaanid", "sees", "the", "puu", "!"]

Lisaks sõna tokeniseerimisele saame teostada ka lause tokeniseerimist.

text2 = 'Ahvid söövad puu otsas 7 banaani! Puule jääb hiljem alles vaid 5 banaani. Üks ahv hüppab teise puu otsa. sent_tokenize(text2)

Väljund:

['Ahvid söövad puu otsas 7 banaani!', 'Hiljem jääb puule ainult 5 banaani.', 'Üks ahv hüppab teisele puule.']

 

Nimega olemite äratundmine (NER)

Pärast sõna tokeniseerimine saame sellele rakendada NER-i. NER tuvastab, milline üksus on iga sõna. Vaadake altpoolt näidet selle kohta, kuidas nltk-i pos_tagit kasutatakse NER-i teostamiseks.

text_tag = word_tokenize(text2) nltk.pos_tag(text_tag)

Väljund:

[('The', 'DT'), ('ahvid', 'NNS'), ('are', 'VBP'), ('söömine', 'VBG'), ('7', 'CD') , ('banaanid', 'NNS'), ('sees', 'IN'), ('the', 'DT'), ('puu', 'NN'), ('!', '.') , ('The', 'DT'), ('puu', 'NN'), ('will', 'MD'), ('only', 'RB'), ('have', 'VB') , ('5', 'CD'), ('banaanid', 'NNS'), ('left', 'VBD'), ('hiljem', 'RB'), ('.', '.') , ('Üks', 'CD'), ('ahv', 'NN'), ('is', 'VBZ'), ('hüppab', 'VBG'), ('kuni', 'TO') , ('teine', 'DT'), ('puu', 'NN'), ('.', '.')]

Kus, DT = määraja, NNS = mitmuse nimisõna, VBP = tegusõna mitte-3. isiku ainsuse oleviku jaoks, VBG = gerund / olevikuosaline tegusõna, CD = põhiline number, IN = eessõna / alluv sidesõna, NN = nimisõna, MD = modaalverb , RB = määrsõna, VB = põhivorm verb jne.

Teine viis NER-i teostamiseks on ruumipaketi kasutamine. Vaadake järgmist näidet selle kohta, kuidas ruumis identifitseerib iga sõna lemmatisatsioon, PoS, silt, dep, kuju, kas see on tähestik ja kas see on stoppsõna. Lemmatiseerimisest räägime hiljem. PoS ja silt määratlevad kõneosa, nagu määraja, nimisõna, abitegusõna, arv, ja nii edasi "dep" näitab sõna sõltuvused. "Shape" näitab sõna tähti X ja x vastavalt suure ja väikese suurtähe jaoks. "on_alphabet" ja "on_stop_words" näitavad, kas sõna on vastavalt tähestik või lõppsõna.

import spacy spa = spacy.load("en_core_web_sm") spa_text = spa(tekst) print('tekst' + 't' + 'lemmatiseeritud' + 't' + 'PoS' + 't' + 'silt' + 't ' + 'dep' + 't' + 'kuju' + 't' + 'on_alphabet' + 't' + 'on_stop_words') sõna jaoks spa_tekstis: print(sõna.tekst + 't' + sõna.lemma_ + ' tt' + sõna.pos_ + 't' + sõna.märgend_ + 't' + sõna.dep_ + 't' + sõna.kuju_ + 't' + str(sõna.on_alfa) + 'tt' + str(sõna. on_peatus))

Väljund:

tekst lemmatiseeritud PoS silt dep shape is_alphabet is_stop_words The DET DT det Xxx Tõene Tõelised ahvid ahvid NOUN NNS nsubj xxxx Tõene Väär on be AUX VBP aux xxx Tõeline Tõeline söömine Söö VERB VBG ROOT xxxx Tõeline NUM Falsemod7 Tõene NUM Falsemod7 NIMEsõna NNS dobj xxxx Tõene Väär sees ADP IN ettevalmistamisel xx Tõene Tõene DET DT det xxx Tõene Tõene puupuu NIMEsõna NN pobj xxxx Tõene Väär! ! PUNCT . punkt ! Vale Vale

 

Tüvestamine ja lemmatiseerimine

Tüvestamine ja lemmatiseerimine tagastavad sõna selle lihtsama tüvivormi. Nii tüvestamine kui ka lemmatiseerimine on üksteisega sarnased. Erinevuse mõistmiseks järgige järgmist koodi. Siin rakendame sõnale "uuringud" tüvest ja lemmatiseerimist ning need annavad erinevaid väljundeid. Stemming tagastab sõna "studi" kui "uuringute" tüvivormi. Lemmatiseerimine tagastab "uuringu" kui "uuringute" tüvivormi. Lemmatiseerimisega tagastatud tüvivormil on tähendus. Tüve tüvivormil pole mõnikord tähendust. Sõna "studi" tuletatud sõnast ei oma tähendust. Sõnast "uuringud" ei saa tüvest tulenev täht "i" muuta.

# Tuleneb nltk.stem impordist PorterStemmer print(PorterStemmer().stem('studies'))
# Lemmatiseerimine saidilt nltk.stem import WordNetLemmatizer print(WordNetLemmatizer().lemmatize('uuringud'))

Väljund:

studi uuring

 

Word Cloud

Selle harjutuse jaoks kavatseme kasutada naisterõivaste ülevaated e-kaubanduse andmestikust. Andmestik sisaldab tekstiülevaateid ja hinnanguskoori 1–5. Nüüd püüame mõista, mida 23,486 23,486 arvustust ütlesid. Kui arvustused on arvulised, saame andmete jaotuse vaatamiseks kasutada kirjeldavat statistikat. Kuid arvustused on teksti kujul. Kuidas saada kiiresti kokkuvõte XNUMX XNUMX arvustuse tekstist? Nende ükshaaval lugemine ei ole tõhus lahendus.

Lihtne viis on sõnapilve joonistamine. Sõnapilv kuvab kogu andmestikust sageli leitud sõnu. Suurem kirjasuurus tähendab, et leitakse sagedamini.

visual_rev = WordCloud().generate(' '.join(data['Review Text'])) plt.figure(figsize=(8,8)) plt.imshow(visual_rev, interpolation='bilinear') plt.show( )

Sõnapilvest võime märgata, et arvustused räägivad kleidist, armastusest, suurusest, topist, kulumisest jne, kuna need on enimleitud sõnad. Iga sõna täpse sagedusnumbri kuvamiseks saame kasutada Counter(). Demonstreerime seda muutuja “text2” abil.

kogudest import Loendur Counter(word_tokenize(text2))

Väljund:

Counter({'The': 2, 'ahvid': 1, 'on': 1, 'söövad': 1, '7': 1, 'banaanid': 2, 'on': 1, 'the': 1 , 'puu': 3, '!': 1, 'tahab': 1, 'ainult': 1, 'on': 1, '5': 1, 'vasakul': 1, 'hiljem': 1, ' .': 2, 'üks': 1, 'ahv': 1, 'on': 1, 'hüppab': 1, 'kuni': 1, 'teine': 1})

Järgmine kood teeb sama, kuid see kutsub esile ainult 3 kõige levinumat sõna.

Counter(word_tokenize(text2)).most_common(3)

Väljund:

[('puu', 3), ('The', 2), ('banaanid', 2)]

 

Sõnakott (BoW)

Bag-of-Words teeb sarnast asja. See tagastab tabeli funktsioonidega, mis koosnevad arvustustes olevatest sõnadest. Rida sisaldab sõna sagedus. Järgmine kood rakendab naisterõivaste arvustuste andmestikule BOW. See loob andmeraami, mille funktsioonidena on märgistatud sõnad.

CountVectoriceris määrasin funktsioonide arvu piiramiseks väärtuseks max_features 100. “max_df” ja “min_df” määravad dokumentides märgistatud sõnade maksimaalse ja minimaalse ilmumise protsendi. Valitud märgistatud sõnad peaksid esinema rohkem kui 10% ja vähem kui 95% dokumentidest. Seda tehakse liiga harva ja liiga sageli esinevate sõnade valiku tühistamiseks. (1,2) "ngram_range" on seatud 1 sõna ja 2 järjestikuse sõna märgistamiseks (2-sõnaline jada või bigramm). See on oluline kahesõnaliste jadade tuvastamiseks, nagu "must mamba", "maakate", "pole õnnelik", "pole hea", jms. Pange tähele, et kasutatakse ka lemmatisaatorit ja regulaaravaldist.

# Filtreerige ridu veeruga
data = dataset.loc[dataset['Review Text'].notnull(),:]
# Rakenda uni- ja biggrammvektorit
klass lemmatiseerija(objekt): def __init__(self): self.wnl = WordNetLemmatizer() def __call__(self, df): tagasta [self.wnl.lemmatize(word) sõna vastu in word_tokenize(df)] vectorizer = CountVectorizer(max_features=100, max_df=0.95, min_df=0.1, ngram_range=(1,2), tokeniser=lemmatizer(), väiketähed=tõene, stop_words='inglise keel', r'w+muster ') vectorizer.fit(data['Läbivaatamise tekst']) count_vector = vectorizer.transform(data['Ülevaatamise tekst']) # Muutke andmeraamiks
bow = count_vector.toarray() bow = pd.DataFrame(bow, veerud=vectorizer.get_feature_names()) bow.head()
! ilus ... tellitud täiuslik tõesti jooks suurus väike pehme wa kandma töö
0 0 0 ... 0 0 0 0 0 0 0 0 0 0
1 1 0 ... 1 0 0 0 0 0 0 0 0 0
2 1 0 ... 1 0 1 0 1 3 0 3 0 1
3 2 0 ... 0 0 0 0 0 0 0 0 1 0
4 3 0 ... 0 1 0 0 0 0 0 0 1 0
... ... ... ... ... ... ... ... ... ... ... ... ... ...

 

Terminite sagedus – dokumendi pöördsagedus (TF-IDF)

Sarnaselt BoW-ga loob TF-IDF ka tokeniseeritud sõnade funktsioonidega andmeraami. Kuid see püüab suurendada haruldasi termineid ja vähendada sagedasi termineid. See on kasulik, näiteks sõna "the" võib esineda mitu korda, kuid see pole see, mida me ootame, kuna sellel puudub sentimentaalne tendents. TF-IDF väärtused genereeritakse kolmes etapis. 3. samm, arvutage TF = terminite arv / sõnade arv. Näiteks rakendame neid 1 lauset:

1. Ahvid on väikesed. Pardid on ka väikesed.

2. Koomikud on näljas. Koomikud lähevad siis sööma.

3. Koomikutel on väikesed ahvid.

Termin TF 1 TF 2 TF 3
the,en 2/9 2/10 1/5
ahvid 1/9 0/10 1/5
See on 2/9 1/10 0/5
väike 2/9 0/10 1/5
pardid 1/9 0/10 0/5
koomikud 0/9 2/10 1/5
näljane 0/9 1/10 0/5
... ... ... ...

Esimene tekst sisaldab 9 sõna. Sellel on 2 sõna "the". Niisiis, sõna "the" TF 1-s on 2/9.

2. samm, IDF = logi (dokumentide arv / terminiga dokumentide arv)

Termin IDF
the,en logi (3/3)
ahvid logi (3/2)
See on logi (3/2)
väike logi (3/2)
pardid logi (3/1)
koomikud logi (3/2)
näljane logi (3/1)
... ...

Sõna "ahvid" esineb 2 korda kolmes dokumendis. Niisiis, IDF on log(3/3).

Samm 3 arvutage TF-IDF = TF * IDF

Termin TF 1 TF 2 TF 3 IDF TF-IDF 1 TF-IDF 2 TF-IDF 3
the,en 2/9 2/10 1/5 logi (3/3)

0.000

0.000

0.000

ahvid 1/9 0/10 1/5 logi (3/2)

0.020

0.000

0.035

See on 2/9 1/10 0/5 logi (3/2)

0.039

0.018

0.000

väike 2/9 0/10 1/5 logi (3/2)

0.039

0.000

0.035

pardid 1/9 0/10 0/5 logi (3/1)

0.053

0.000

0.000

koomikud 0/9 2/10 1/5 logi (3/2)

0.000

0.035

0.035

näljane 0/9 1/10 0/5 logi (3/1)

0.000

0.048

0.000

... ... ... ... ... ... ... ...

Siin on väljundtabel.

Termin the,en ahvid See on väike pardid koomikud näljane ...

1

0.000

0.020

0.039

0.039

0.053

0.000

0.000

...

2

0.000

0.000

0.018

0.000

0.000

0.035

0.048

...

3

0.000

0.035

0.000

0.035

0.000

0.035

0.000

...

Nüüd võrdleme seda alloleva BoW andmeraamiga. Bow andmeraami sõna "the" väärtused on vastavalt 2, 2 ja 1 teksti 1, 2 ja 3 jaoks. Teisest küljest on sama sõna väärtus 0 kõigi TF-IDF andmeraami kolme teksti jaoks. Seda seetõttu, et sõna "The" esineb kõigis kolmes tekstis. Seega on IDF null (log(3/3)). Sõnad "ahvid" ja "pardid" esinevad esimeses tekstis üks kord, kuid "pardid" on kõrgema väärtusega (3) võrreldes "ahvide" väärtusega (3) TF-IDF andmeraamis. Sõna "pardid" esineb kõigis dokumentides vähem kui "ahvid", seega tõstab see sõna "part" esile.

Tekst the,en ahvid See on väike pardid koomikud näljane ...
1

2

1

2

2

1

0

0

...
2

2

0

1

0

0

2

1

...
3

1

1

0

1

0

1

0

...

Siin on kood TF-IDF-i rakendamiseks naisterõivaste andmekogumile.

from sklearn.feature_extraction.text import TfidfVectorizer tfidf = TfidfVectorizer(max_features=100) tfidf.fit(data['Arvustuse tekst']) tfidf_data = tfidf.transform(data['Arvusta teksti toarray(), veerud=tfidf.get_feature_names()) tfidf_data.head()

Väljund:

kõik Ka am an ja See on ... will koos töö oleks sa
0 0.000000 0.0 0.000000 0.0 0.602589 0.0 ... 0.0 0.000000 0.000000 0.000000 0.0
1 0.000000 0.0 0.148418 0.0 0.133039 0.0 ... 0.0 0.000000 0.000000 0.307109 0.0
2 0.000000 0.0 0.000000 0.0 0.163130 0.0 ... 0.0 0.000000 0.163481 0.000000 0.0
3 0.000000 0.0 0.000000 0.0 0.142825 0.0 ... 0.0 0.000000 0.000000 0.000000 0.0
4 0.228419 0.0 0.000000 0.0 0.082899 0.0 ... 0.0 0.273455 0.000000 0.000000 0.0

Mis kasu on tekstist, mis on teisendatud BOW või TF-IDF andmeraamiks? See on väga oluline, kui tahame masinõpet tekstiandmetele rakendada. Masinõpe ei mõista teksti, seega tuleb tekst teisendada numbriliseks andmeraamiks. Masinõppe üks levinumaid kasutusviise teksti ennustamiseks on sentimentanalüüs. Sentimentanalüüs võib ennustada ülevaateteksti sentimenti. Selle asemel, et arvustusi ükshaaval lugeda, võib sentimentaalanalüüs teisendada teksti arvustuste rahuloluks.

Sentimentide analüüs

Sentimentanalüüsi saab käivitada TextBlobi abil või masinõppe mudeli koolitamisega. TextBlob ei vaja koolitust. See võib öelda arvustuste polaarsuse ja subjektiivsuse. Polaarsus on vahemikus 1 kuni -1, mis väljendab positiivset suhtumist negatiivsesse. Siin on kood tundeanalüüsi rakendamiseks tekstile2 = 'Ahvid söövad puu otsas 7 banaani! Puule jääb hiljem alles vaid 5 banaani. Üks ahv hüppab teise puu otsa.

tekstiblobist import TextBlob TextBlob(text2).sentiment

Väljund:

Sentiment (polaarsus = -0.0125, subjektiivsus = 0.25)

Nüüd vaatame, kuidas see naisterõivaste andmekogus töötab.

# Tekstiblobi sentiment def polaarsuse(t) rakendamine: a = TextBlob(t).sentiment return a[0] def Subjectivity(t): a = TextBlob(t).sentiment return a[1] data['polaarsus'] = data.apply(lambda t: polaarsus(t['Review Text']), axis=1) data['subjektiivsus'] = data.apply(lambda t: subjektiivsus(t['Review Text']), axis=1 ) data.head()

Väljund:

Vaadake tekst üle Hinnang polaarsus subjektiivsus
0 Täiesti imeline – siidine ja seksikas ja mugav… 4 0.633333 0.933333
1 Armasta seda kleiti! see on niii ilus. ma juhtun… 5 0.339583 0.725000
2 Mul olid selle kleidi suhtes nii suured lootused ja tõesti… 3 0.073675 0.356294
3 Ma armastan, armastan, armastan seda kombinesooni. see on lõbus, fl… 5 0.550000 0.625000
4 See särk on kõigile väga meelitav tänu… 5 0.512891 0.568750

Ülaltoodud tabelis kuvatakse ülevaateteksti polaarsuse esimesed 5 rida. Uurige, kuidas "Review Text" sõnad tagastavad "polaarsuse". Samas andmestikus on rahuloluhinnangu andnud ka iga arvustaja funktsioonis „Hinnang”. "Reiting" on vahemikus 1 kuni 5. Allolev joonis kujutab iga reitinguklassi polaarsuse jaotust.

barplot

Joonis 2 Iga reitinguklassi polaarsuse jaotus (allikas: pilt autorilt)

 

Teksti regressioon (automaatne masinõpe ja süvaõpe)

. Kasutajad saavad seda otse tekstile rakendada. Aga mis siis, kui tahame oma uut mudelit teksti analüüsimiseks koolitada? Mis siis, kui tahame teksti positiivsuse ja negatiivsuse määra asemel (nagu TextBlobi kasutamine) luua mudeli, mis tuvastaks meeleolu vahemikus 1 kuni 5?

TextBlobi kasutamise eeliseks on see, et kasutajad ei pea treenima suurt hulka andmeid. Teisest küljest nõuab tekstianalüüsi jaoks uue masinõppe mudeli loomine lisaaega ja -ressursse. Kuid loodud uus mudel on koolitusandmestiku põhjal palju rohkem kohandatud konkreetsele teemale. Näiteks naiste rõivaste ülevaate andmestiku koolitamise tulemuseks on NLP-mudel, mis on meeleolu ennustamisel täpsem.

Tekstianalüüsi või NLP masinõppes on teksti regressioon ja teksti klassifitseerimine. Teksti regressiooni eesmärk on analüüsida teksti pideva või järgulise väljundiga. Naisterõivaste arvustuste andmestiku "hinne" ennustamine nõuab teksti regressioonianalüüsi, kuna väljund on vahemikus 1 kuni 5. Teksti regressiooni märkmik on saadaval siin.

Nii nagu masinõpe struktureeritud andmete jaoks, nõuab ka NLP jaoks mõeldud masinõpe andmeraame, mis sisaldavad projekteeritud funktsioone ja silti. Ennustajate projekteeritud funktsioone saab luua BoW või TF-IDF abil. 2 andmeraami on varem tehtud. Vastavalt sellele, kuidas andmeraamid genereeritakse, nimetagem neid BoW andmekaadriks ja TF-IDF andmekaadriks.

Masinõppemudeli tekstianalüüsi jaoks koolitamiseks on tehnika sama, mis selle struktureeritud andmete jaoks. Saame kasutada lineaarset regressiooni, otsustuspuud, gradiendi võimenduspuud, ja nii edasi Allolev kood kasutab AutoSklearni NLP masinõppe koolitamiseks BoW andmeraamiga. AutoSklearn on automatiseeritud masinõpe, mis suudab automaatselt teostada funktsioonide projekteerimist, mudelite valimist ja hüperparameetrite häälestamist. Kasutajad saavad need protsessid vahele jätta ja saada mudeli kindlaksmääratud ajajaotuse jooksul. Allolev AutoSklearn on seadistatud leidma optimaalse mudeli 3 minutiga. Automatiseeritud masinõppe kohta lisateabe saamiseks külastage minu eelmist artikkel.

# Loo mudel
sklearn = AutoSklearnRegressor (selle_ülesande jaoks jäänud_aeg=3*60, käitamisaja_piir=60, n_tööd=-1)
# Paigaldage treeningu andmed
sklearn.fit(X_train, y_train)

Teksti regressiooni väljundprognoos on pidev arv, mis jääb vahemikku 1 kuni 5. Eesmärk on ennustada arvustuse hinnangut vahemikus 1 kuni 5 täisarvudes. Seega tuleb prognoositud väärtused ümardada lähima täisarvuni vahemikus 1 kuni 5.

# Sprindi statistika
print(sklearn.sprint_statistics())
# Ennusta katseandmeid
pred_sklearn = sklearn.predict(X_test) pred_sklearn2 = [ring(i) i jaoks in pred_sklearn]

Pärast mudeli loomist on järgmine samm mudeli kinnitamine nähtamatu andmekogumiga. Ennustatud nähtamatu andmestiku RMSE on 0.9886. Kui aga kontrollime ennustusväljundeid tõeliste väärtustega, kasutades segadusmaatriksit, võime avastada, et mudel ei suuda reitingutes 1, 2 ja 3 hästi ennustada. Pange tähele, et see ei tähenda tingimata, et AutoSklearn pole piisavalt hea. AutoSklearnile anti mudelite automaatseks loomiseks vaid 3 minutit. Tulemus RMSE võib olla parem, kui tal on rohkem aega.

# Arvutage RMSE
rmse_sklearn = mean_squared_error(y_test, pred_sklearn2)**0.5 print('RMSE: ' + str(rmse_sklearn))

Väljund:

automaatse sklearni tulemused: Andmestiku nimi: 2fbec688-f37c-11eb-8112-0242ac130202 Mõõdik: r2 Parim valideerimisskoor: 0.287286 Sihtalgoritmi käitamiste arv: 27 Edukate sihtalgoritmi käituste arv: 9 Sihtmärgi kokkujooksmiste arv: 0 sihtalgoritmid, mis ületasid ajalimiiti: 9 Sihtalgoritmide arv, mis ületasid mälupiirangut: 9 RMSE: 0.9885634389230906
# Ennustustulemused
print('Segadusmaatriks') print(pd.DataFrame(confusion_matrix(y_test, pred_sklearn2), index=[1,2,3,4,5], veerud=[1,2,3,4,5]))

Väljund:

Segadusmaatriks 1 2 3 4 5 1 0 2 66 90 6 2 0 8 132 160 10 3 0 2 177 347 39 4 0 2 136 605 239 5 0 2 79 1170 1257

Kordame ülaltoodud protsesse, kuid seekord kasutades sisendina TF-IDF andmeraami. Rakendatakse ka AutoSklearni ja nähtamatu andmestiku RMSE on 0.9770. Tulemus on samuti sarnane eelmisele. Ennustused on halvad reitingute 1, 2 ja 3 ennustamisel.

# Loo mudel
sklearn_idf = AutoSklearnRegressor (selle_ülesande jaoks jäänud_aeg=3*60, käitamisaja_piir=60, n_tööd=-1)
# Paigaldage treeningu andmed
sklearn_idf.fit(X_train_idf, y_train)
# Sprindi statistika
print(sklearn_idf.sprint_statistics())
# Ennusta katseandmeid
pred_sklearn_idf = sklearn_idf.predict(X_test_idf) pred_sklearn_idf2 = [ring(i) i jaoks in pred_sklearn_idf]
# Arvutage RMSE
rmse_sklearn_idf = mean_squared_error(y_test, pred_sklearn_idf2)**0.5 print('RMSE: ' + str(rmse_sklearn_idf))

Väljund:

automaatse sklearni tulemused: Andmestiku nimi: a573493e-f37f-11eb-8112-0242ac130202 Mõõdik: r2 Parim valideerimisskoor: 0.285567 Sihtalgoritmi käitamiste arv: 26 Edukate sihtalgoritmi käitamiste arv: 8 Sihtmärgi kokkujooksmiste arv: 0 Kokkujooksnud sihtmärk sihtalgoritmid, mis ületasid ajalimiiti: 8 Sihtalgoritmide arv, mis ületasid mälupiirangut: 10 RMSE: 0.9769930120276676
# Ennustustulemused
print('Segaduse maatriks') pred_sklearn_idf3 = [i kui i <= 5 muidu 5 i jaoks in pred_sklearn_idf2] print(pd.DataFrame(confusion_matrix(y_test, pred_sklearn_idf3), index=[1,2,3,4,5], veerud=[1,2,3,4,5]))

Väljund:

Segadusmaatriks 1 2 3 4 5 1 0 3 75 82 4 2 0 5 147 151 7 3 0 6 178 343 38 4 0 1 124 617 240 5 0 0 84 1198 1226

Et näha, millised masinõppe algoritmid AutoSklearnist luuakse, käivitage allolev kood.

# Näidake mudeleid
print(sklearn_idf.show_models())

Nüüd kasutame teist autoML-i, AutoKeras. AutoKeras loob automaatselt süvaõppe mudelid. Ja jah, see ei hõlma mitte ainult hüperparameetrite häälestamist, vaid ka süvaõppe kihtide arhitektuuri. Pärast AutoKeras paketi installimist ja importimist saame alustada andmete ettevalmistamist. Andmed koostatakse massiivivormingus, mis eraldab koolitus- ja testiandmed. Pange tähele, et funktsioon sisaldab ainult ühte veergu "Arvustuse tekst". AutoKeras ei nõua, et kasutajad töötleksid BoW või TF-IDF rakendamist. Silt on ikka sama, “Hinnang”.

!pip install autokeras import autokeras as ak
# Autokerase andmete ettevalmistamine
X_train_ak = np.array(data.loc[X_train.index, 'Review Text']) y_train_ak = np.array(data.loc[X_train.index, 'Reiting']) X_test_ak = np.array(data.loc[X_test .index, 'Review Text']) y_test_ak = np.array(data.loc[X_test.index, 'Hinnatus'])

Seejärel loome TextRegressori maksimaalse katseajaga 3. AutoKeras loob maksimaalselt 3 ennustusmudelit. Treeningandmed jagatakse, et saada valideerimisandmestik 20% kogu treeningu andmestikust. Seejärel saame selle demonstratsiooni jaoks andmed sobitada 30 epohhiga.

# Loo mudel
keras = ak.TextRegressor(overwrite=True, max_trials=3)
# Paigaldage treeningu andmekogum
keras.fit(X_train_ak, y_train_ak, epochs=30, validation_split=0.2)

Kui AutoKeras töötab, kuvatakse järgmine väljundlahter. Kuid see kaob, kui protsess on tehtud.

Automatiseeritud süvaõppe tabel
Joonis 3, kus töötab AutoKeras (allikas: pilt autorilt)

Pärast mudeli loomist saame selle eksportida ja kokkuvõtte teha. Jälgige AutoKera poolt automaatselt genereeritud kihte. Sisendkihile järgneb expand_last_dim, text_vectorization, Emedding, dropout, conv1d, max_pooling, flatten ja muud kihid.

# Näidake ehitatud mudeleid
keras_export = keras.export_model() keras_export.summary()

Väljund:

Mudel: "mudel" _______________________________________________________________________ Kiht (tüüp) Väljundi kuju parameetrid # ===================================== ============================ input_1 (InputLayer) [(Puudub,)] 0 _______________________________________________________________________ expand_last_dim (ExpandLastD (puudub, 1) 0 _________________________________________________________________ text_vectorization (TextVect (None, 128) 0 _________________________________________________________________ embedding (Embedding) (None, 128, 128) 640128 _________________________________________________________________ dropout (Dropout) (None, 128, 128) 0 _________________________________________________________________ conv1d (Conv1D) (None, 126, 32) 12320 _________________________________________________________________ conv1d_1 (conv1d) (puudub, 124, 32) 3104 _____________________________________________________________________ max_pooling1d (maxPoolid1d) (puudub, 62, 32) 0 __________________________________________________________________________ (1____ (Conv2 COVE, kui see siis, kui kui see siis, kui siis kui siis kui siis kui siis kui siis kui siis kui siis siis siis kui siis kui siis kui siis kui siis kui siis kui siis nii siis seotud sellestvas 1 _________________________________________________________________ max_pooling60d_64 (MaxPooling6208 (None, 1, 3) 1 _________________________________________________________________ flatten (Flatten) (None, 58) 32 _________________________________________________________________ dense (Dense) (None, 6176) 1 _________________________________________________________________ re_lu (ReLU) (None, 1) 1 _________________________________________________________________ dense_29 (Dense ) (Puudub, 32) 0 _______________________________________________________________________ re_lu_928 (ReLU) (puudub, 0) 32 __________________________________________________________________ väljalangevus_29728 (väljalangevus) (puudub, 32) 0 _______________________________________________________________________________________ (===1=en______) ==================================================== ===== Parameetrid kokku: 32 1056 treenitavad parameetrid: 1 32 mittetreenitavad parameetrid: 0 ______________________________________________________________________

Nüüd vaatame ja võrdleme AutoKerase mudeli RMSE-d. RMSE on 0.8389. Segadusmaatriksit jälgides suudab AutoKeras kõiki reitingutasemeid paremini ennustada. Siiski ei suuda see reitingut 1 piisavalt hästi ennustada.

# Ennusta katseandmeid
pred_keras = keras.predict(X_test_ak) pred_keras = list(ahel(*pred_keras)) pred_keras2 = [i if i <= 5 else 5 for i in pred_keras] pred_keras2 = [i kui i >= 1 muu 1 i jaoks in pred_keras2] pred_keras2 = [ring(i) i jaoks in pred_keras2]
# Arvutage RMSE
rmse_keras = keskmine_ruutviga(y_test_ak, pred_keras2)**0.5 print('RMSE: ' + str(rmse_keras))

Väljund:

142/142 [==============================] – 1 s 6 ms/samm RMSE: 0.8388607442242638
# Ennustustulemused
print('Segadusmaatriks') pd.DataFrame(confusion_matrix(y_test, pred_keras2), index=[1,2,3,4,5], veerud=[1,2,3,4,5])

Väljund:

Segadusmaatriks 1 2 3 4 5 1 20 64 54 23 3 2 20 93 145 49 3 3 11 89 252 166 47 4 2 26 188 423 343 5 0 4 103 676 1725

 

Teksti klassifikatsioon (automaatne süvaõpe)

Nagu varem mainitud, on teksti klassifitseerimine teist tüüpi tekstianalüüs. Emotsioonide tuvastamine, filmižanrite klassifikatsioon ja raamatutüüpide klassifikatsioon on tekstide klassifitseerimise näited. Erinevalt teksti regressioonist ennustab teksti klassifikatsioon pidevat, kuid diskreetset silti. Selle harjutuse jaoks kasutame emotsioonisildi andmestik. Andmekogum koosneb ainult kahest veerust: tekst ja silt. Meie ülesanne on luua ennustusmudel teksti emotsiooni tajumiseks. Emotsioonid jagunevad 4 klassi: viha, hirm, rõõm ja kurbus.

Teksti klassifitseerimiseks loome kaks süvaõppe mudelit. Esimene mudel kasutab tehnilist pika lühiajalise mälu (LSTM) mudelit. LSTM-mudel on korduva närvivõrgu (RNN) all olev süvaõppemudel. LSTM on tavalise mitmekihilise perceptroni süvaõppega võrreldes arenenum mudel. See artikkel ei käsitle edasist RNN-i ega LSTM-i, vaid rakendab seda ainult teksti klassifitseerimiseks. Saadaval on LSTM-i tekstiklassifikaatori märkmik siin.

Andmete ettevalmistamiseks rakendame andmesildile one-hot-kodeeringut. See loob ühest sildiveerust 4 veergu.

import numpy as np import panda as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.metrics import make_scorer, accuracy_score, classification_report, confusion_matrix # Load dataset train = pd're/adten_cs = pv/e. -labels-train.csv') test = pd.read_csv('/content/emotion-labels-test.csv') # Treeningu ja testi andmekogumite ühendamine train = pd.concat([train, test], axis=0) train .head()
tekst etikett
0 Tulin just tagasi, kui nägin @GaryDelaneyt Bursis… rõõm
1 Oh kallis õhtu täielik lõbusus, ma ei… rõõm
2 Ootasin seda mängu terve nädala ❤️❤️❤️ #ch… rõõm
3 @gardiner_love : Suur tänu, Gloria! jah… rõõm
4 Tunnen end nii õnnistatud, et saan perega koos töötada, et… rõõm
# One-hot-encoding trainSet = train.reset_index(drop=True) labels = pd.get_dummies(trainSet['silt']) trainSet = pd.concat([trainSet, sildid], axis=1)

Pärast koolitus- ja valideerimisandmehulkade jagamist rakendatakse teksti märgistamiseks tunnusmärk. Selles demonstratsioonis säilitab märgiseadistaja 5000 kõige levinumat sõna. Seejärel teisendab "tekstid_järjestusteks" andmestiku tekstid täisarvude jadadeks.

# Andmete jagamine X_train, X_val, y_train, y_val = train_test_split(trainSet['tekst'].values, trainSet[['viha','hirm','rõõm','kurbus']].values, stratify=trainSet[' label'], test_size=0.2, random_state=123) 
# Rakenda tensorflow.keras.preprocessing.text import Tokenizer saidist tensorflow.keras.preprocessing.sequence import pad_sequences tokenizer = Tokenizer(num_words=5000, oov_token='x') tokenizer.fit_on_tratexts) to(onnizer. (X_val) seq_train = tokenizer.texts_to_sequences(X_train) seq_val = tokeniser.texts_to_sequences(X_val) pad_train = pad_sequences(seq_train) pad_val = pad_sequences(seq_val)

Mis puudutab "pad_sequences", siis vaatame lihtsalt seda näidet.

[ [17, 154, 3], [54, 981, 56, 4], [20, 8] ]

rakendatakse koos pad_sequences olema

[ [17 154 3 0], [54 981 56 4], [20 8 0 0] ]

Jälgige, et komad eemaldataks ja nullid täidetaks, et kõik kolm loendit oleksid ühepikkused.

Järgmisena näitab allolev kood LSTM-i kihtide loomist keras.Sequential abil. LSTM aktsepteerib sisenddimensiooni 5000, mis on 5000 kõige levinuma sõna number märgiseanist. Pärast mõnda "relu" aktiveerimist ja mitme neuroniga väljalangemise kihte on viimasel kihil 4 "softmax" aktiveerimisega neuronit. See liigitab teksti ühte neljast klassist. LSTM on koostatud kaofunktsiooniga "categorical_loss entropy", "adam" optimeerija ja "täpsus" kui hindamismõõdikud.

import tensorflow kui tf from keras.callbacks import EarlyStopping # Mudeli loomine lstm = tf.keras.Sequential([ tf.keras.layers.Embedding(input_dim=5000, output_dim=16), tf.keras.layers.SpatialDropout)1D(0.3 , tf.keras.layers.LSTM(128), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(128, activation='relu'), tf.keras. layers.Dropout(0.3), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(64 , activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(4, activation='softmax') ]) lstm.compile(loss='categorical_crossentropy', optimizer=' Adam', metrics=['täpsus'])

LSTM-mudel treenib optimaalse mudeli leidmiseks 100 epohhi pärast. Kuid enne seda loome varakult peatatud tagasihelistamise. Varajane peatus tehakse selleks, et vältida liiga palju aega kulutatud mudeli treenimisele ajal, mil oodatud eesmärk on saavutatud või kui koolitust ei toimu. Selles harjutuses peatab varajane tagasihelistamise katkestamine treeningu enne 100-ni jõudmistth epohhid, kui teatud eesmärk on täidetud. Sel juhul seadsin eesmärgiks saavutada valideerimisandmestiku minimaalne täpsus 85.5%. Kui see juhtub, lõpetab LSTM-i mudel treenimise, kuigi see pole jõudnud 100 epohhini. Samuti prindib see sõnumi, mis ütleb, et täpsus on jõudnud üle 85.5%. Treeningandmete sobitamise ajal salvestatakse ajalugu muutujasse 'history'.

class earlystop(tf.keras.callbacks.Callback): def on_epoch_end(self, epoch, logs={}): if(logs.get('val_accuracy')>0.855): print("Täpsus on jõudnud > 85.5%!" ) self.model.stop_training = Tõene es = earlystop() ajalugu = lstm.fit(pad_train, y_train, epochs=100, callbacks=[es], validation_data=(pad_val, y_val), verbose=2, batch_size=100)

Väljund:

Epoch 1/100 55/55 - 5s - kadu: 0.0348 - täpsus: 0.9771 - val_loss: 2.1571 - val_accuracy: 0.8505 Epoch 2/100 55/55 - 5s - kaotus: 0.0400 - 0.9750 Epoch 1.9905/0.8460 3/100 - 55s - kadu: 55 - täpsus: 5 - val_loss: 0.0386 - val_accuracy: 0.9728 Epoch 2.0930/0.8386 4/100 - 55s - kaotus: -55_5 val_0.0377: val. Epoch 0.9741/2.0917 0.8505/5 - 100s - kadu: 55 - täpsus: 55 - val_loss: 5 - val_accuracy: 0.0392 Epoch 0.9743/2.1664 0.8431/6 - 100s - kaotus: -55_55 -5: val. Epoch 0.0377/0.9739 1.8948/0.8512 - 7s - kaotus: 100 - täpsus: 55 - val_loss: 55 - val_accuracy: 5 Täpsus on jõudnud > 0.0353%!

Jälgige väljundlahtrit, et LSTM töötab ainult 7. epohhini ja peatub. Nagu me teame, on 7th epohhi valideerimise andmestiku täpsus on 85.64%. Kontrollige allpool toodud koolitus- ja valideerimisandmekogumite täpsust.

# Visualiseerige LSTM-i ajalugu plt.plot(ajalugu.ajalugu['täpsus']) plt.plot(ajalugu.ajalugu['val_accuracy']) plt.title('täpsus') plt.ylabel('täpsus') plt.xlabel( 'epohh') plt.legend(['rong', 'val'], loc='ülemine vasak') plt.show()

Olgu, proovime nüüd luua veel ühe emotsioonide klassifitseerimise mudeli. Seekord rakendatakse AutoKeras. Selleks võib kood sarnaneda varem teostatud tekstiregressoriga AutoKeras. Lihtsalt muutke "TextRegressor" väärtuseks "TextClassifier", siis ülejäänud töötab samamoodi. Kuid allolev kood proovib automaatmudeli abil täiustatud tekstiklassifikaatorit teha. AutoModeliga saame määrata tekstide täisarvulisteks järjestusteks teisendamiseks ja nende manustamiseks TextToIntSequence ja Embedding. Samuti saame määrata eraldatavate konvolutsioonikihtide kasutamise. AutoKerase tekstiklassifikaatori märkmik on saadaval siin.

# Looge mudel node_input = ak.TextInput() node_output = ak.TextToIntSequence()(node_input) node_output = ak.Embedding()(node_output) node_output = ak.ConvBlock(separable=True)(noak_lasheed) )(node_output) keras = ak.AutoModel(inputs=node_input, outputs=node_output, overwrite=True, max_trials=3) # Sobitage treeninguandmekogum keras.fit(X_train_ak, y_train_ak, epochs=80, validation0.2)split=XNUMX.

Jälgige AutoKerase loodud süvaõppe arhitektuuri. Sellel on määratud manustamise, separable_conv1d ja classification_head kihid.

# Näita ehitatud mudeleid keras_export = keras.export_model() keras_export.summary()

Väljund:

Mudel: "mudel" _______________________________________________________________________ Kiht (tüüp) Väljundi kuju parameetrid # ===================================== ============================ sisend_1 (InputLayer) [(Puudub,)] 0 _______________________________________________________________________ expand_last_dim (LaiendaLastD (puudub, 1) 0 _________________________________________________________________ text_vectorization (TextVect (None, 64) 0 _________________________________________________________________ embedding (Embedding) (None, 64, 128) 2560128 _________________________________________________________________ dropout (Dropout) (None, 64, 128) 0 _________________________________________________________________ separable_conv1d (SeparableC (None, 62, 32) 4512 _________________________________________________________________ separable_conv1d_1 (Separabl (None, 60, 32) 1152 _________________________________________________________________ max_pooling1d (MaxPooling1D) (None, 30, 32) 0 _________________________________________________________________ separable_conv1d_2 (Separabl (None, 28, 32) 1152 _________________________________________________________________ separable_conv1d_3 (Separabl (None, 26, 32) 1152 _________________________________________________________________ max_pooling1d_1 ( Max Pooling1 (puudub, 13, 32) 0 __________________________________________________________________ global_max_pooling1d (Global (Puudub, 32) 0 ________________________________________________________________________ tihe (tihe) (puudub, 4) 132 =Pehme =______________________________________ ==================================================== ===== Parameetrid kokku: 1 4 0 treenitavad parameetrid: 2,568,228 2,568,228 0 mittetreenitavad parameetrid: XNUMX ______________________________________________________________________

Mudeli täpsus on 0.80. Uurige allpool loodud segadusmaatriksit. See näitab, et mudel suudab teksti põhjal emotsiooni hästi ennustada. Et teada saada, millist emotsiooni ennustatakse kõige paremini, pöörake tähelepanu f1-skoorile. Rõõmul on kõrgeim f1-skoor, millele järgnevad vastavalt hirm, viha ja kurbus. See tähendab, et mudel oskab rõõmuemotsiooni kõige paremini ennustada.

# Valideerimisandmete ennustamine pred_keras = keras.predict(X_val_ak) # Arvuta täpsus print('Täpsus: ' + str(accuracy_score(y_val_ak, pred_keras)))

Väljund:

25/25 [=============================] – 0 s 3 ms/samm Täpsus: 0.8042929292929293
# Teisenda ennustatud tulemus pandaseeriateks numbritüübiga pred_keras_ = pd.DataFrame(pred_keras) pred_keras_ = pred_keras_[0] # Ennustuse tulemused print('Confusion Matrix') print(pd.DataFrame(confusion_matrix(y_val, pred_keras_), index=[ 'viha','hirm','rõõm','kurb'], columns=['viha','hirm','rõõm','kurb'])) print('') print('Classification Report') print(classification_report(y_val, pred_keras_))

Väljund:

Segadus Maatriks viha hirm rõõm kurb viha 146 6 8 28 hirm 16 191 2 43 rõõm 9 3 166 2 kurb 23 12 3 134
Classification Report precision recall f1-score support anger 0.75 0.78 0.76 188 fear 0.90 0.76 0.82 252 joy 0.93 0.92 0.92 180 sadness 0.65 0.78 0.71 172 accuracy 0.80 792 macro avg 0.81 0.81 0.80 792 weighted avg 0.82 0.80 0.81 792

Järeldus

NLP eesmärk on analüüsida suurt hulka tekstiandmeid. Mõned näited rakendustest on ette nähtud tunde ja emotsioonide ennustamiseks tekstist masinõppe abil. Erinevalt arvandmetest vajavad tekstiandmed enne masinõppe algoritmidesse sobitamist spetsiaalset eeltöötlust, nagu BoW või TF-IDF.

Regulaaravaldis on üks põhilisi NLP-sid lausete või sõnade leidmiseks ja tükeldamiseks. Word Tokenizer jagab laused sõnadeks. Pärast seda saab iga märgistatud sõna töödelda NER-i, tüvest ja lemmatiseerimisega. Iga sõna loendatakse selle sageduse järgi BOW andmeraami kujul. Peatussõnad, mis esinevad sageli, kuid ei anna mingit tähendust, saab eemaldada. Stoppsõnu saab samastada NER-iga.

AutoKeras on pakett teksti regressiooniks ja klassifitseerimiseks süvaõppe abil. Lihtsalt tekstifunktsiooni sisestamine loob mudeli automaatselt, sealhulgas sõnade märgistamise ja eeltöötluse, hüperparameetrite häälestamise ja kihtide üle otsustamise.

 

Teave Autor:

Võtke ühendust minuga siin.

Selles artiklis näidatud meedia ei kuulu Analytics Vidhyale ja seda kasutatakse autori äranägemisel

Allikas: https://www.analyticsvidhya.com/blog/2021/11/a-guide-to-automated-deep-machine-learning-for-natural-language-processing-text-prediction/

Ajatempel:

Veel alates Analüütika Vidhya