Del II – Typer vektoriseringsteknikker
I denne artikkelen vil vi diskutere vektorisering – en NLP-teknikk, og forstå dens betydning med en omfattende veiledning om ulike typer vektorisering.
Vi har diskutert de grunnleggende konseptene for NLP-forbehandling og tekstrensing. Vi så på det grunnleggende om NLP, dets ulike applikasjoner og teknikker som tokenisering, normalisering, standardisering og tekstrensing.
Før vi diskuterer vektorisering, la oss revidere hva tokenisering er og hvordan det skiller seg fra vektorisering.
Innholdsfortegnelse
Hva er tokenisering?
Tokenisering er prosessen med å bryte ned setninger i mindre enheter kalt tokens. Token hjelper datamaskiner med å forstå og arbeide med tekst enkelt.
EX. «Denne artikkelen er bra»
Tokens- [‘This’, ‘article’, ‘is’, ‘good’.]
Hva er vektorisering?
Som vi vet forstår maskinlæringsmodeller og algoritmer numeriske data. Vektorisering er en prosess for å konvertere tekstlige eller kategoriske data til numeriske vektorer. Ved å konvertere data til numeriske data kan du trene modellen mer nøyaktig.
Hvorfor trenger vi vektorisering?
❇️ Tokenisering og vektorisering har ulik betydning i naturlig språkbehandling (NPL). Tokenisering deler setninger i små tokens. Vektorisering konverterer det til et numerisk format slik at datamaskinen/ML-modellen kan forstå det.
❇️ Vektorisering er ikke bare nyttig for å konvertere den til numerisk form, men også nyttig for å fange semantisk betydning.
❇️ Vektorisering kan redusere dimensjonaliteten til dataene og gjøre dem mer effektive. Dette kan være veldig nyttig når du arbeider med et stort datasett.
❇️ Mange maskinlæringsalgoritmer krever numerisk input, for eksempel nevrale nettverk, slik at vektorisering kan hjelpe oss.
Det finnes forskjellige typer vektoriseringsteknikker, som vi vil forstå gjennom denne artikkelen.
Pose med ord
Hvis du har en haug med dokumenter eller setninger og du vil analysere dem, forenkler en pose med ord denne prosessen ved å behandle dokumentet som en pose som er fylt med ord.
Posen med ord-tilnærmingen kan være nyttig i tekstklassifisering, sentimentanalyse og dokumentinnhenting.
Tenk deg at du jobber med mye tekst. En pose med ord vil hjelpe deg med å representere tekstdata ved å lage et vokabular med unike ord i tekstdataene våre. Etter å ha opprettet ordforråd, vil det kode hvert ord som en vektor basert på frekvensen (hvor ofte hvert ord vises i den teksten) av disse ordene.
Disse vektorene består av ikke-negative tall (0,1,2…..) som representerer antall frekvenser i det dokumentet.
Posen med ord innebærer tre trinn:
Trinn 1: Tokenisering
Det vil bryte dokumenter i tokens.
Eks – (Setning: «Jeg elsker Pizza og jeg elsker burgere»)
Trinn 2: Unik ordseparasjon/ordforråd
Lag en liste over alle de unike ordene som vises i setningene dine.
[“I”, “love”, “Pizza”, “and”, “Burgers”]
Trinn 3: Telle ordforekomst/vektoroppretting
Dette trinnet vil telle hvor mange ganger hvert ord gjentas fra vokabularet og lagre det i en sparsom matrise. I den sparsomme matrisen, hver rad i en setningsvektor hvis lengde (kolonnene i matrisen) er lik størrelsen på ordforrådet.
Importer CountVectorizer
Vi skal importere CountVectorizer for å trene vår Bag of words-modell
from sklearn.feature_extraction.text import CountVectorizer
Lag Vectorizer
I dette trinnet skal vi lage modellen vår ved å bruke CountVectorizer og trene den ved å bruke vårt eksempeltekstdokument.
# Sample text documents documents = [ "This is the first document.", "This document is the second document.", "And this is the third one.", "Is this the first document?", ] # Create a CountVectorizer cv = CountVectorizer()
# Fit and Transform X = cv.fit_transform(documents)
Konverter til en tett matrise
I dette trinnet vil vi konvertere representasjonene våre til tett array. Vi vil også få funksjonsnavn eller ord.
# Get the feature names/words feature_names = vectorizer.get_feature_names_out() # Convert to dense array X_dense = X.toarray()
La oss skrive ut dokumenttermmatrisen og funksjonsord
# Print the DTM and feature names print("Document-Term Matrix (DTM):") print(X_dense) print("\nFeature Names:") print(feature_names)
Dokument – Term Matrix (DTM):
Matrise
Funksjonsnavn:
Funksjonsord
Som du kan se, består vektorene av ikke-negative tall (0,1,2……) som representerer frekvensen av ord i dokumentet.
Vi har fire eksempeltekstdokumenter, og vi har identifisert ni unike ord fra disse dokumentene. Vi lagret disse unike ordene i vokabularet vårt ved å tilordne dem «Funksjonsnavn».
Deretter sjekker vår Bag of Words-modell om det første unike ordet er til stede i vårt første dokument. Hvis den er tilstede, tildeler den verdien 1, ellers tildeler den 0.
Hvis ordet vises flere ganger (f.eks. 2 ganger), tildeler det en verdi tilsvarende.
For eksempel, i det andre dokumentet, gjentas ordet «dokument» to ganger, så verdien i matrisen vil være 2.
Hvis vi vil ha et enkelt ord som en funksjon i vokabularnøkkelen – Unigram-representasjon.
n – gram = Unigram, bigram …….osv.
Det er mange biblioteker som scikit-learn to implementer bag of words: Keras, Gensim og andre. Dette er enkelt og kan være nyttig i forskjellige tilfeller.
Men, Bag of words er raskere, men den har noen begrensninger.
For å løse dette problemet kan vi velge bedre tilnærminger, en av dem er TF-IDF. La oss, forstå i detalj.
TF-IDF
TF-IDF, eller Term Frequency – Inverse Document Frequency, er en numerisk representasjon for å bestemme betydningen av ord i dokumentet.
Hvorfor trenger vi TF-IDF over Bag of Words?
En pose med ord behandler alle ord likt og er bare opptatt av frekvensen av unike ord i setninger. TF-IDF legger vekt på ord i et dokument ved å vurdere både frekvens og unikhet.
Ord som blir gjentatt for ofte overdøver ikke sjeldnere og viktigere ord.
TF: Term Frequency måler hvor viktig et ord er i en enkelt setning.
IDF: Invers dokumentfrekvens måler hvor viktig et ord er i hele dokumentsamlingen.
TF = Frekvens av ord i et dokument / Totalt antall ord i det dokumentet
DF = Dokument som inneholder ord m / Totalt antall dokumenter
IDF = log(Totalt antall dokumenter / Dokumenter som inneholder ordet w)
IDF er gjensidig av DF. Årsaken bak dette er jo mer vanlig ordet er på tvers av alle dokumenter, desto mindre betydning har det i det gjeldende dokumentet.
Endelig TF-IDF-poengsum: TF-IDF = TF * IDF
Det er en måte å finne ut hvilke ord som er vanlige i et enkelt dokument og unike på tvers av alle dokumenter. Disse ordene kan være nyttige for å finne hovedtemaet i dokumentet.
For eksempel,
Doc1 = «Jeg elsker maskinlæring»
Doc2 = «Jeg elsker tipsbilk.net»
Vi må finne TF-IDF-matrisen for dokumentene våre.
Først skal vi lage et vokabular med unike ord.
Ordforråd = [“I,” “love,” “machine,” “learning,” “Geekflare”]
Så vi har 5 fem ord. La oss finne TF og IDF for disse ordene.
TF = Frekvens av ord i et dokument / Totalt antall ord i det dokumentet
TF:
- For «I» = TF for Doc1: 1/4 = 0,25 og for Doc2: 1/3 ≈ 0,33
- For «kjærlighet»: TF for Dok1: 1/4 = 0,25 og for Doc2: 1/3 ≈ 0,33
- For «Maskin»: TF for Doc1: 1/4 = 0,25 og for Doc2: 0/3 ≈ 0
- For «Læring»: TF for Doc1: 1/4 = 0,25 og for Doc2: 0/3 ≈ 0
- For «tipsbilk.net»: TF for Doc1: 0/4 = 0 og for Doc2: 1/3 ≈ 0,33
Nå, la oss beregne IDF.
IDF = log(Totalt antall dokumenter / Dokumenter som inneholder ordet w)
IDF:
- For «I»: IDF er log(2/2) = 0
- For «kjærlighet»: IDF er log(2/2) = 0
- For «Maskin»: IDF er log(2/1) = log(2) ≈ 0,69
- For «Læring»: IDF er log(2/1) = log(2) ≈ 0,69
- For «tipsbilk.net»: IDF er log(2/1) = log(2) ≈ 0,69
La oss nå beregne sluttresultatet til TF-IDF:
- For «I»: TF-IDF for Doc1: 0,25 * 0 = 0 og TF-IDF for Doc2: 0,33 * 0 = 0
- For «kjærlighet»: TF-IDF for Doc1: 0,25 * 0 = 0 og TF-IDF for Doc2: 0,33 * 0 = 0
- For «Maskin»: TF-IDF for Doc1: 0,25 * 0,69 ≈ 0,17 og TF-IDF for Doc2: 0 * 0,69 = 0
- For «Læring»: TF-IDF for Doc1: 0,25 * 0,69 ≈ 0,17 og TF-IDF for Doc2: 0 * 0,69 = 0
- For «tipsbilk.net»: TF-IDF for Doc1: 0 * 0,69 = 0 og TF-IDF for Doc2: 0,33 * 0,69 ≈ 0,23
TF-IDF matrise ser slik ut:
I love machine learning tipsbilk.net Doc1 0.0 0.0 0.17 0.17 0.0 Doc2 0.0 0.0 0.0 0.0 0.23
Verdier i en TF-IDF-matrise forteller deg hvor viktig hvert begrep er i hvert dokument. Høye verdier indikerer at et begrep er viktig i et bestemt dokument, mens lave verdier antyder at begrepet er mindre viktig eller vanlig i den sammenhengen.
TF-IDF brukes mest i tekstklassifisering, bygging av chatbot-informasjonshenting og tekstoppsummering.
Importer TfidfVectorizer
La oss importere TfidfVectorizer fra sklearn
from sklearn.feature_extraction.text import TfidfVectorizer
Lag Vectorizer
Som du vil se, vil vi lage vår Tf Idf-modell ved å bruke TfidfVectorizer.
# Sample text documents text = [ "This is the first document.", "This document is the second document.", "And this is the third one.", "Is this the first document?", ] # Create a TfidfVectorizer cv = TfidfVectorizer()
Lag TF-IDF-matrise
La oss trene modellen vår ved å gi tekst. Etter det vil vi konvertere den representative matrisen til tett matrise.
# Fit and transform to create the TF-IDF matrix X = cv.fit_transform(text)
# Get the feature names/words feature_names = vectorizer.get_feature_names_out() # Convert the TF-IDF matrix to a dense array for easier manipulation (optional) X_dense = X.toarray()
Skriv ut TF-IDF-matrisen og funksjonsordene
# Print the TF-IDF matrix and feature words print("TF-IDF Matrix:") print(X_dense) print("\nFeature Names:") print(feature_names)
TF-IDF matrise:
Funksjonsord
Som du kan se, indikerer disse desimaltallene viktigheten av ord i spesifikke dokumenter.
Du kan også kombinere ord i grupper på 2,3,4, og så videre ved å bruke n-gram.
Det er andre parametere som vi kan inkludere: min_df, max_feature, subliner_tf, etc.
Til nå har vi utforsket grunnleggende frekvensbaserte teknikker.
Men TF-IDF kan ikke gi semantisk mening og kontekstuell forståelse av tekst.
La oss forstå mer avanserte teknikker som har endret verden av ordinnbygging og som er bedre for semantisk mening og kontekstuell forståelse.
Word2Vec
Word2vec er en populær innebygging av ord (type ordvektor og nyttig for å fange semantisk og syntaktisk likhet) teknikk i NLP. Dette ble utviklet av Tomas Mikolov og teamet hans hos Google i 2013. Word2vec representerer ord som kontinuerlige vektorer i et flerdimensjonalt rom.
Word2vec har som mål å representere ord på en måte som fanger deres semantiske betydning. Ordvektorer generert av word2vec er plassert i et kontinuerlig vektorrom.
Eks – «Katt»- og «Hund»-vektorer ville være nærmere enn vektorer for «katt» og «jente».
Kilde: usna.edu
To modellarkitekturer kan brukes av word2vec for å lage ordinnbygging.
CBOW: Kontinuerlig pose med ord eller CBOW prøver å forutsi et ord ved å beregne et gjennomsnitt av betydningen av nærliggende ord. Den tar et fast antall eller et vindu med ord rundt målordet, konverterer det deretter til numerisk form (Innebygging), gjennomsnittliggjør deretter alle, og bruker det gjennomsnittet til å forutsi målordet med det nevrale nettverket.
Eks- forutsi mål: «Fox»
Setningsord: «den», «rask», «brun», «hopper», «over», «den»
Word2Vec
- CBOW tar fast størrelse vindu (antall) av ord som 2 (2 til venstre og 2 til høyre)
- Konverter til ordinnbygging.
- CBOW er gjennomsnittet for ordet innebygging.
- CBOW gir et gjennomsnitt av ordet som er innebygd i kontekstordene.
- Gjennomsnittlig vektor prøver å forutsi et målord ved hjelp av et nevralt nettverk.
La oss nå forstå hvordan skip-gram er forskjellig fra CBOW.
Skip-gram: Det er en ordinnbyggingsmodell, men den fungerer annerledes. I stedet for å forutsi målordet, forutsier skip-gram kontekstordene gitt målord.
Skip-grams er bedre til å fange de semantiske relasjonene mellom ord.
Eks- «King – Men + Women = Queen»
Ønsker du å jobbe med Word2Vec har du to valg: enten kan du trene din egen modell eller bruke en forhåndstrent modell. Vi skal gjennom en forhåndstrent modell.
Importer gensim
Du kan installere gensim ved å bruke pip install:
pip install gensim
Tokenize setningen ved å bruke word_tokenize:
Først vil vi konvertere setninger til lavere. Etter det vil vi tokenisere setningene våre ved å bruke word_tokenize.
# Import necessary libraries from gensim.models import Word2Vec from nltk.tokenize import word_tokenize # Sample sentences sentences = [ "I love thor", "Hulk is an important member of Avengers", "Ironman helps Spiderman", "Spiderman is one of the popular members of Avengers", ] # Tokenize the sentences tokenized_sentences = [word_tokenize(sentence.lower()) for sentence in sentences]
La oss trene modellen vår:
Vi vil trene modellen vår ved å gi tokeniserte setninger. Vi bruker 5 vinduer for denne treningsmodellen, du kan tilpasse etter ditt behov.
# Train a Word2Vec model model = Word2Vec(sentences=tokenized_sentences, vector_size=100, window=5, min_count=1, sg=0) # Find similar words similar_words = model.wv.most_similar("avengers")
# Print similar words print("Similar words to 'avengers':") for word, score in similar_words: print(f"{word}: {score}")
Ord som ligner på «avengers»:
Word2Vec likhet
Dette er noen av ordene som ligner på «avengers» basert på Word2Vec-modellen, sammen med deres likhetspoeng.
Modellen beregner en likhetspoeng (for det meste cosinuslikhet) mellom ordvektorene til «avengers» og andre ord i vokabularet. Likhetsskåren indikerer hvor nært beslektede to ord er i vektorrommet.
Eks –
Her hjelper ordet «hjelp» med kosinuslikhet -0,005911458611011982 med ordet «avengers». Den negative verdien antyder at de kan være forskjellige fra hverandre.
Cosinus likhetsverdier varierer fra -1 til 1, hvor:
- 1 indikerer at de to vektorene er identiske og har positiv likhet.
- Verdier nær 1 indikerer høy positiv likhet.
- Verdier nær 0 indikerer at vektorene ikke er sterkt beslektet.
- Verdier nær -1 indikerer høy ulikhet.
- -1 indikerer at de to vektorene er totalt motsatte og har en perfekt negativ likhet.
Besøk denne link hvis du vil ha en bedre forståelse av word2vec-modeller og en visuell representasjon av hvordan de fungerer. Det er et veldig kult verktøy for å se CBOW og skip-gram i aksjon.
I likhet med Word2Vec har vi GloVe. GloVe kan produsere innbygginger som krever mindre minne sammenlignet med Word2Vec. La oss forstå mer om GloVe.
Hanske
Globale vektorer for ordrepresentasjon (GloVe) er en teknikk som word2vec. Det brukes til å representere ord som vektorer i kontinuerlig rom. Konseptet bak GloVe er det samme som Word2Vecs: det produserer kontekstuelle ordinnbygginger samtidig som man tar hensyn til Word2Vecs overlegne ytelse.
Hvorfor trenger vi GloVe?
Word2vec er en vindusbasert metode, og den bruker nærliggende ord for å forstå ord. Dette betyr at den semantiske betydningen av målordet bare påvirkes av de omkringliggende ordene i setninger, som er en ineffektiv bruk av statistikk.
Mens GloVe fanger opp både global og lokal statistikk for å komme med ordinnbygging.
Når skal man bruke GloVe?
Bruk GloVe når du vil ha ordinnbygging som fanger bredere semantiske relasjoner og global ordassosiasjon.
GloVe er bedre enn andre modeller for navngitte enhetsgjenkjenningsoppgaver, ordanalogi og ordlikhet.
Først må vi installere Gensim:
pip install gensim
Trinn 1: Vi skal installere viktige biblioteker
# Import the required libraries import numpy as np import matplotlib.pyplot as plt from sklearn.manifold import TSNE import gensim.downloader as api
Trinn 2: Importer hanskemodell
import gensim.downloader as api glove_model = api.load('glove-wiki-gigaword-300')
Trinn 3: Hent vektorordrepresentasjon for ordet «søt»
glove_model["cute"]
Vektor for ordet «søt»
Disse verdiene fanger opp ordets betydning og forhold til andre ord. Positive verdier indikerer positive assosiasjoner til visse konsepter, mens negative verdier indikerer negative assosiasjoner til andre konsepter.
I en GloVe-modell representerer hver dimensjon i ordvektoren et bestemt aspekt av ordets betydning eller kontekst.
De negative og positive verdiene i disse dimensjonene bidrar til hvor «søt» er semantisk relatert til andre ord i modellens vokabular.
Verdiene kan være forskjellige for ulike modeller. La oss finne noen ord som ligner på ordet «gutt»
Topp 10 Lignende ord som modellen mener ligner mest på ordet «gutt»
# find similar word glove_model.most_similar("boy")
Topp 10 lignende ord som «gutt»
Som du kan se, er det mest lignende ordet «gutt» «jente».
Nå vil vi prøve å finne hvor nøyaktig modellen vil få semantisk betydning fra de oppgitte ordene.
glove_model.most_similar(positive=['boy', 'queen'], negative=['girl'], topn=1)
Det mest relevante ordet for «dronning»
Vår modell er i stand til å finne perfekt forhold mellom ord.
Definer ordliste:
La oss nå prøve å forstå semantisk betydning eller forhold mellom ord ved å bruke et plott. Definer listen over ord du vil visualisere.
# Define the list of words you want to visualize vocab = ["boy", "girl", "man", "woman", "king", "queen", "banana", "apple", "mango", "cow", "coconut", "orange", "cat", "dog"]
Opprett innebyggingsmatrise:
La oss skrive kode for å lage innbyggingsmatrise.
# Your code for creating the embedding matrix EMBEDDING_DIM = glove_model.vectors.shape[1] word_index = {word: index for index, word in enumerate(vocab)} num_words = len(vocab) embedding_matrix = np.zeros((num_words, EMBEDDING_DIM)) for word, i in word_index.items(): embedding_vector = glove_model[word] if embedding_vector is not None: embedding_matrix[i] = embedding_vector
Definer en funksjon for t-SNE-visualisering:
Fra denne koden vil vi definere funksjon for visualiseringsplottet vårt.
def tsne_plot(embedding_matrix, words): tsne_model = TSNE(perplexity=3, n_components=2, init="pca", random_state=42) coordinates = tsne_model.fit_transform(embedding_matrix) x, y = coordinates[:, 0], coordinates[:, 1] plt.figure(figsize=(14, 8)) for i, word in enumerate(words): plt.scatter(x[i], y[i]) plt.annotate(word, xy=(x[i], y[i]), xytext=(2, 2), textcoords="offset points", ha="right", va="bottom") plt.show()
La oss se hvordan tomten vår ser ut:
# Call the tsne_plot function with your embedding matrix and list of words tsne_plot(embedding_matrix, vocab)
t-SNE tomt
Så, som vi kan se, er det ord som «banan», «mango», «oransje», «kokosnøtt» og «eple» på venstre side av tomten vår. Mens «ku», «hund» og «katt» ligner hverandre fordi de er dyr.
Så modellen vår kan også finne semantisk betydning og relasjoner mellom ord!
Ved å bare endre vokab eller lage modellen fra bunnen av, kan du eksperimentere med forskjellige ord.
Du kan bruke denne innbyggingsmatrisen slik du vil. Den kan brukes på ordlikhetsoppgaver alene eller mates inn i et nevralt nettverks innebyggingslag.
GloVe trener på en samforekomstmatrise for å utlede semantisk mening. Det er basert på ideen om at ord-ord-samforekomster er en essensiell del av kunnskap og at bruken av dem er en effektiv måte å bruke statistikk for å produsere ordinnbygginger. Dette er hvordan GloVe oppnår å legge til «global statistikk» til sluttproduktet.
Og det er GloVe; En annen populær metode for vektorisering er FastText. La oss diskutere mer om det.
Hurtigtekst
FastText er et åpen kildekode-bibliotek introdusert av Facebooks AI Research-team for tekstklassifisering og sentimentanalyse. FastText gir verktøy for å trene innebygging av ord, som er tette vektorrepresenterer ord. Dette er nyttig for å fange opp den semantiske betydningen av dokumentet. FastText støtter både multi-label og multi-class klassifisering.
Hvorfor FastText?
FastText er bedre enn andre modeller på grunn av dens evne til å generalisere til ukjente ord, som hadde manglet i andre metoder. FastText gir ferdigtrente ordvektorer for ulike språk, som kan være nyttige i ulike oppgaver der vi trenger forkunnskaper om ord og deres betydning.
FastText vs Word2Vec
Hvordan virker det?
Som vi diskuterte, bruker andre modeller, som Word2Vec og GloVe, ord for innebygging av ord. Men byggesteinen til FastText er bokstaver i stedet for ord. Noe som betyr at de bruker bokstaver for innbygging av ord.
Å bruke tegn i stedet for ord har en annen fordel. Mindre data er nødvendig for trening. Etter hvert som et ord blir dets kontekst, kan det trekkes ut mer informasjon fra teksten.
Word Embedding oppnådd via FastText er en kombinasjon av lavere nivåinnbygginger.
La oss nå se på hvordan FastText bruker underordsinformasjon.
La oss si at vi har ordet «lesing». For dette ordet vil tegn n-gram med lengde 3-6 bli generert som følger:
- Begynnelsen og slutten er angitt med vinkelparenteser.
- Hashing brukes fordi det kan være et stort antall n-gram; i stedet for å lære en embedding for hvert distinkte n-gram, lærer vi total B embeddings, hvor B står for bøttestørrelsen. Bøttestørrelsen på 2 millioner ble brukt i det originale papiret.
- Hvert tegn n-gram, for eksempel «eadi», er kartlagt til et heltall mellom 1 og B ved å bruke denne hashing-funksjonen, og den indeksen har den tilsvarende innebyggingen.
- Ved å beregne gjennomsnittet av disse konstituerende n-gram-innleiringene, oppnås da hele ordinnbyggingen.
- Selv om denne hashing-tilnærmingen resulterer i kollisjoner, hjelper den i stor grad å håndtere ordforrådets størrelse.
- Nettverket som brukes i FastText ligner på Word2Vec. Akkurat som der kan vi trene hurtigteksten i to moduser – CBOW og skip-gram. Derfor trenger vi ikke gjenta den delen her igjen.
Du kan trene din egen modell, eller du kan bruke en forhåndstrent modell. Vi skal bruke en forhåndstrent modell.
Først må du installere FastText.
pip install fasttext
Vi vil bruke et datasett som består av samtaletekst om noen få rusmidler, og vi må klassifisere disse tekstene i 3 typer. Som med den typen stoffer de er forbundet med.
Datasett
Nå, for å trene en FastText-modell på ethvert datasett, må vi forberede inndataene i et bestemt format, som er:
__label__
La oss gjøre dette for datasettet vårt også.
all_texts = train['text'].tolist() all_labels = train['drug type'].tolist() prep_datapoints=[] for i in range(len(all_texts)): sample="__label__"+ str(all_labels[i]) + ' '+ all_texts[i] prep_datapoints.append(sample)
prep_datapoints
Vi har utelatt mye forbehandling i dette trinnet. Ellers vil artikkelen vår være for stor. I virkelige problemer er det best å gjøre forbehandling for å gjøre data egnet for modellering.
Skriv nå forberedte datapunkter til en .txt-fil.
with open('train_fasttext.txt','w') as f: for datapoint in prep_datapoints: f.write(datapoint) f.write('n') f.close()
La oss trene modellen vår.
model = fasttext.train_supervised('train_fasttext.txt')
Vi vil få spådommer fra modellen vår.
Modellen forutsier etiketten og tildeler den en konfidensscore.
Som med alle andre modeller, er ytelsen til denne avhengig av en rekke variabler, men hvis du ønsker å få en rask ide om hva den forventede nøyaktigheten er, kan FastText være et godt alternativ.
Konklusjon
Avslutningsvis gir tekstvektoriseringsmetoder som Bag of Words (BoW), TF-IDF, Word2Vec, GloVe og FastText en rekke funksjoner for NLP-oppgaver.
Mens Word2Vec fanger ordsemantikk og kan tilpasses en rekke NLP-oppgaver, er BoW og TF-IDF enkle og egnet for tekstklassifisering og anbefaling.
For applikasjoner som sentimentanalyse tilbyr GloVe forhåndstrente innebygginger, og FastText gjør det bra på underordsnivå, noe som gjør det nyttig for strukturelt velstående språk og enhetsgjenkjenning.
Valget av teknikk avhenger av oppgaven, dataene og ressursene. Vi vil diskutere kompleksiteten til NLP dypere etter hvert som denne serien skrider frem. God læring!
Deretter kan du sjekke ut de beste NLP-kursene for å lære naturlig språkbehandling.