Da bi računalnik razumel napisano besedilo, lahko besede predstavimo kot numerične vektorje. Eden od načinov za to je uporaba Wordovih vdelav, ki predstavljajo besede kot numerične vektorje. Ti vektorji zajemajo pomen besed in njihova razmerja do drugih besed v jeziku. Besedne vdelave je mogoče ustvariti z uporabo nenadzorovanih učnih algoritmov, kot je npr Word2vec, GloVe , oz FastText .
Word2vec je na nevronski mreži temelječa metoda za ustvarjanje vdelanih besed, ki so goste vektorske predstavitve besed, ki zajemajo njihov semantični pomen in razmerja. Obstajata dva glavna pristopa za implementacijo Word2vec:
- Neprekinjena vreča besed (CBOW)
- Preskoči gram
Kaj je neprekinjena vreča besed (CBOW)?
Continuous Bag of Words (CBOW) je priljubljena tehnika obdelave naravnega jezika, ki se uporablja za ustvarjanje vdelav besed. Vdelave besed so pomembne za številne naloge NLP, ker zajamejo semantična in skladenjska razmerja med besedami v jeziku. CBOW je algoritem, ki temelji na nevronski mreži in napove ciljno besedo glede na njene kontekstne besede. Je vrsta brez nadzora učenja, kar pomeni, da se lahko uči iz neoznačenih podatkov, in se pogosto uporablja za predhodno usposabljanje vdelav besed, ki se lahko uporabljajo za različne naloge NLP, kot so analiza razpoloženja, strojno prevajanje.

Primer modela CBOW
Ali obstaja razlika med modelom Bag-of-Words (BoW) in Continuous Bag-of-Words (CBOW)?
- Model Bag-of-Words in model Continuous Bag-of-Words sta tehniki, ki se uporabljata pri obdelavi naravnega jezika za predstavitev besedila v računalniško berljivi obliki, vendar se razlikujeta v tem, kako zajemata kontekst.
- Model BoW predstavlja besedilo kot zbirko besed in njihovo pogostost v danem dokumentu ali korpusu. Ne upošteva vrstnega reda ali konteksta, v katerem se pojavljajo besede, zato morda ne zajame celotnega pomena besedila. Model BoW je preprost in enostaven za implementacijo, vendar ima omejitve pri zajemanju pomena jezika.
- V nasprotju s tem je model CBOW pristop, ki temelji na nevronski mreži in zajame kontekst besed. Nauči se predvideti ciljno besedo na podlagi besed, ki se pojavijo pred in za njo v danem kontekstnem oknu. Z upoštevanjem okoliških besed lahko model CBOW bolje zajame pomen besede v danem kontekstu.
Arhitektura modela CBOW
Model CBOW uporablja ciljno besedo okoli kontekstne besede, da jo napove. Razmislite o zgornjem primeru Je odlična plesalka. Model CBOW pretvori to frazo v pare kontekstnih besed in ciljnih besed. Besedne pare bi bile videti takole ([ona, a], je), ([je, super], a) ([a, plesalka], super) z velikostjo okna=2.

Arhitektura CBOW
fmovies Indija
Model upošteva sobesedilne besede in poskuša predvideti ciljni izraz. Štirje vhodni vektorji 1∗W bodo posredovani vhodni plasti, če imajo štiri besede kot kontekstne besede, ki se uporabljajo za predvidevanje ene ciljne besede. Skrita plast bo prejela vhodne vektorje in jih nato pomnožila z matriko W∗N. Izhod 1∗N iz skrite plasti končno vstopi v plast vsote, kjer se vektorji po elementih seštejejo, preden se izvede končna aktivacija in se izhod pridobi iz izhodne plasti.
Implementacija kode CBOW
Implementirajmo vdelavo besed, da pokažemo podobnost besed z uporabo modela CBOW. V tem članku sem definiral svoj korpus besed, vi pa uporabite poljuben nabor podatkov. Najprej bomo uvozili vse potrebne knjižnice in naložili nabor podatkov. Nato bomo vsako besedo tokenizirali in jo pretvorili v vektor celih števil.
Python3
import> tensorflow as tf> from> tensorflow.keras.models>import> Sequential> from> tensorflow.keras.layers>import> Dense,> >Embedding, Lambda> from> tensorflow.keras.preprocessing.text>import> Tokenizer> import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.decomposition>import> PCA> # Define the corpus> corpus>=> [>'The cat sat on the mat'>,> >'The dog ran in the park'>,> >'The bird sang in the tree'>]> # Convert the corpus to a sequence of integers> tokenizer>=> Tokenizer()> tokenizer.fit_on_texts(corpus)> sequences>=> tokenizer.texts_to_sequences(corpus)> print>('After converting our words>in> the corpus> into vector of integers:')> print>(sequences)> |
>
abeceda številk
>
Izhod:
After converting our words in the corpus into vector of integers: [[1, 3, 4, 5, 1, 6], [1, 7, 8, 2, 1, 9], [1, 10, 11, 2, 1, 12]]>
Zdaj bomo zgradili model CBOW z velikostjo okna = 2.
Python3
graditelj nizov
# Define the parameters> vocab_size>=> len>(tokenizer.word_index)>+> 1> embedding_size>=> 10> window_size>=> 2> # Generate the context-target pairs> contexts>=> []> targets>=> []> for> sequence>in> sequences:> >for> i>in> range>(window_size,>len>(sequence)>-> window_size):> >context>=> sequence[i>-> window_size:i]>+>> >sequence[i>+> 1>:i>+> window_size>+> 1>]> >target>=> sequence[i]> >contexts.append(context)> >targets.append(target)> # Convert the contexts and targets to numpy arrays> X>=> np.array(contexts)> # Define the CBOW model> model>=> Sequential()> model.add(Embedding(input_dim>=>vocab_size,> >output_dim>=>embedding_size,> >input_length>=>2>*>window_size))> model.add(Lambda(>lambda> x: tf.reduce_mean(x, axis>=>1>)))> model.add(Dense(units>=>vocab_size, activation>=>'softmax'>))> model.save_weights(>'cbow_weights.h5'>)> # Load the pre-trained weights> model.load_weights(>'cbow_weights.h5'>)> |
>
>
Nato bomo model uporabili za vizualizacijo vdelav.
Python3
tipkopisni datum
# Get the word embeddings> embeddings>=> model.get_weights()[>0>]> # Perform PCA to reduce the dimensionality> # of the embeddings> pca>=> PCA(n_components>=>2>)> reduced_embeddings>=> pca.fit_transform(embeddings)> # Visualize the embeddings> plt.figure(figsize>=>(>5>,>5>))> for> i, word>in> enumerate>(tokenizer.word_index.keys()):> >x, y>=> reduced_embeddings[i]> >plt.scatter(x, y)> >plt.annotate(word, xy>=>(x, y), xytext>=>(>5>,>2>),> >textcoords>=>'offset points'>,> >ha>=>'right'>, va>=>'bottom'>)> plt.show()> |
>
objektni razred v Javi
>
Izhod:

Vektorizirana predstavitev besed z uporabo modela CBOW
Ta vizualizacija nam omogoča opazovanje podobnosti besed na podlagi njihove vdelave. Pričakuje se, da bodo besede, ki so podobne po pomenu ali kontekstu, v zapletu blizu druga drugi.