Kad kompiuteris suprastų parašytą tekstą, žodžius galime pavaizduoti kaip skaitinius vektorius. Vienas iš būdų tai padaryti yra naudojant „Word“ įterpimus, jie yra būdas pavaizduoti žodžius kaip skaitinius vektorius. Šie vektoriai fiksuoja žodžių reikšmę ir jų ryšį su kitais kalbos žodžiais. Word įterpimas gali būti generuojamas naudojant neprižiūrimus mokymosi algoritmus, pvz Word2vec, Pirštinės , arba FastText .
Word2vec yra neuroniniu tinklu pagrįstas metodas, skirtas generuoti žodžių įterpimus, kurie yra tankūs vektoriniai žodžių atvaizdai, fiksuojantys jų semantinę reikšmę ir ryšius. Yra du pagrindiniai „Word2vec“ diegimo būdai:
- Nepertraukiamas žodžių rinkinys (CBOW)
- Praleisti gramą
Kas yra nenutrūkstamas žodžių maišas (CBOW)?
Continuous Bag of Words (CBOW) yra populiari natūralios kalbos apdorojimo technika, naudojama žodžių įterpimui generuoti. Žodžių įterpimas yra svarbus daugeliui NLP užduočių, nes jie fiksuoja semantinius ir sintaksinius ryšius tarp kalbos žodžių. CBOW yra neuroniniu tinklu pagrįstas algoritmas, numatantis tikslinį žodį, atsižvelgiant į jį supančius konteksto žodžius. Tai yra rūšis neprižiūrimas mokymasis, o tai reiškia, kad jis gali mokytis iš nepažymėtų duomenų, ir jis dažnai naudojamas iš anksto apmokyti žodžių įterpimą, kuris gali būti naudojamas įvairioms NLP užduotims, pvz., nuotaikų analizei, mašininiam vertimui.

CBOW modelio pavyzdys
Ar yra koks nors skirtumas tarp „BoW“ ir „Continuous Bag-of-Words“ (CBOW) modelio?
- „Mag-of-Words“ ir „Continuous Bag-of-Words“ modelis yra natūralios kalbos apdorojimo būdai, skirti tekstui pateikti kompiuteriu skaitomu formatu, tačiau jie skiriasi tuo, kaip fiksuoja kontekstą.
- BoW modelis vaizduoja tekstą kaip žodžių rinkinį ir jų dažnumą tam tikrame dokumente ar korpuse. Jame neatsižvelgiama į žodžių eiliškumą ar kontekstą, todėl gali neatspindėti visos teksto reikšmės. BoW modelis yra paprastas ir lengvai įgyvendinamas, tačiau jis turi apribojimų fiksuojant kalbos reikšmę.
- Priešingai, CBOW modelis yra neuroniniu tinklu pagrįstas metodas, fiksuojantis žodžių kontekstą. Jis išmoksta nuspėti tikslinį žodį pagal žodžius, kurie rodomi prieš ir po jo tam tikrame konteksto lange. Atsižvelgiant į aplinkinius žodžius, CBOW modelis gali geriau užfiksuoti žodžio reikšmę tam tikrame kontekste.
CBOW modelio architektūra
CBOW modelis naudoja tikslinį žodį aplink kontekstinį žodį, kad jį nuspėtų. Apsvarstykite aukščiau pateiktą pavyzdį Ji yra puiki šokėja. CBOW modelis konvertuoja šią frazę į kontekstinių žodžių ir tikslinių žodžių poras. Žodžių poros atrodytų taip ([ji, a], yra), ([yra, puiki], a) ([a, šokėja], puiki) kurio lango dydis = 2.

CBOW architektūra
Modelis atsižvelgia į konteksto žodžius ir bando numatyti tikslinį terminą. Keturi 1∗W įvesties vektoriai bus perduoti į įvesties sluoksnį, jei vienam tiksliniam žodžiui numatyti naudojami keturi konteksto žodžiai. Paslėptas sluoksnis gaus įvesties vektorius ir padaugins juos iš W∗N matricos. 1∗N išvestis iš paslėpto sluoksnio galiausiai patenka į suminį sluoksnį, kuriame vektoriai sumuojami pagal elementus prieš atliekant galutinį aktyvavimą ir išvestis gaunama iš išvesties sluoksnio.
CBOW kodo įgyvendinimas
Įdiegkime žodžių įterpimą, kad parodytume žodžių panašumą naudodami CBOW modelį. Šiame straipsnyje apibrėžiau savo žodžių korpusą, jūs naudojate bet kokį duomenų rinkinį. Pirmiausia importuosime visas reikalingas bibliotekas ir įkelsime duomenų rinkinį. Toliau kiekvieną žodį paversime sveikųjų skaičių vektoriumi.
Python3
komanda arp-a
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)> |
>
atsitiktinis ne java
>
Išvestis:
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]]>
Dabar sukursime CBOW modelį, kurio lango dydis = 2.
Python3
java atidaryti failą
# 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'>)> |
>
>
Tada mes naudosime modelį įterpimams vizualizuoti.
Python3
mesti eilutę į int
# 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()> |
>
>
Išvestis:

Vektorizuotas žodžių vaizdavimas naudojant CBOW modelį
Ši vizualizacija leidžia stebėti žodžių panašumą pagal jų įterpimą. Tikimasi, kad žodžiai, kurie yra panašūs pagal reikšmę ar kontekstą, siužete bus arti vienas kito.