logo

Nepretržité vrece slov (CBOW) v NLP

Aby počítač porozumel písanému textu, môžeme slová reprezentovať ako číselné vektory. Jedným zo spôsobov, ako to urobiť, je použitie vloženia programu Word, ktoré predstavuje spôsob reprezentácie slov ako číselných vektorov. Tieto vektory zachytávajú význam slov a ich vzťah k iným slovám v jazyku. Vkladanie slov možno generovať pomocou algoritmov učenia bez dozoru, ako napr Word2vec, Rukavice , alebo FastText .

Word2vec je metóda založená na neurónovej sieti na generovanie slovných vložení, čo sú husté vektorové reprezentácie slov, ktoré zachytávajú ich sémantický význam a vzťahy. Existujú dva hlavné prístupy k implementácii Word2vec:



    Nepretržité vrece slov (CBOW)
  • Preskočiť gram

Čo je to súvislý vrece slov (CBOW)?

Continuous Bag of Words (CBOW) je populárna technika spracovania prirodzeného jazyka, ktorá sa používa na generovanie vložených slov. Vkladanie slov je dôležité pre mnohé úlohy NLP, pretože zachytávajú sémantické a syntaktické vzťahy medzi slovami v jazyku. CBOW je algoritmus založený na neurónovej sieti, ktorý predpovedá cieľové slovo vzhľadom na jeho okolité kontextové slová. Ide o typ bez dozoru učenie, čo znamená, že sa môže učiť z neoznačených údajov a často sa používa na predbežné trénovanie vkladania slov, ktoré možno použiť na rôzne úlohy NLP, ako je analýza sentimentu, strojový preklad.

Príklad modelu CBOW

Príklad modelu CBOW

Existuje nejaký rozdiel medzi modelom Bag-of-Words (BoW) a Continuous Bag-of-Words (CBOW)?

  • Model Bag-of-Words a Continuous Bag-of-Words model sú techniky používané pri spracovaní prirodzeného jazyka na reprezentáciu textu v počítačom čitateľnom formáte, líšia sa však tým, ako zachytávajú kontext.
  • Model BoW predstavuje text ako zbierku slov a ich frekvenciu v danom dokumente alebo korpuse. Neberie do úvahy poradie alebo kontext, v ktorom sa slová vyskytujú, a preto nemusí zachytiť úplný význam textu. Model BoW je jednoduchý a ľahko implementovateľný, má však obmedzenia pri zachytení významu jazyka.
  • Naproti tomu model CBOW je prístup založený na neurónovej sieti, ktorý zachytáva kontext slov. Učí sa predpovedať cieľové slovo na základe slov, ktoré sa objavia pred ním a za ním v danom kontextovom okne. Pri zohľadnení okolitých slov dokáže model CBOW lepšie zachytiť význam slova v danom kontexte.

Architektúra modelu CBOW

Model CBOW používa cieľové slovo okolo kontextového slova, aby ho predpovedal. Zvážte vyššie uvedený príklad Je to skvelá tanečnica. Model CBOW prevádza túto frázu na dvojice kontextových slov a cieľových slov. Párovanie slov by vyzeralo takto ([ona, a], je), ([je, skvelá], a) ([a, tanečnica], skvelá) s veľkosťou okna = 2.



Architektúra CBOW

Architektúra CBOW

Model zvažuje kontextové slová a snaží sa predpovedať cieľový výraz. Štyri 1∗W vstupné vektory budú odovzdané vstupnej vrstve, ak majú štyri slová ako kontextové slová, ktoré sa použijú na predikciu jedného cieľového slova. Skrytá vrstva prijme vstupné vektory a potom ich vynásobí maticou W∗N. Výstup 1∗N zo skrytej vrstvy nakoniec vstupuje do súčtovej vrstvy, kde sa vektory po prvkoch sčítajú pred vykonaním konečnej aktivácie a výstup sa získa z výstupnej vrstvy.

Implementácia kódu CBOW

Implementujme vkladanie slov, aby sme ukázali podobnosť slov pomocou modelu CBOW. V tomto článku som definoval svoj vlastný korpus slov, môžete použiť ľubovoľný dataset. Najprv naimportujeme všetky potrebné knižnice a načítame dataset. Ďalej tokenizujeme každé slovo a konvertujeme ho na vektor celých čísel.



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)>

>

>

Výkon:

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]]>

Teraz vytvoríme model CBOW s veľkosťou okna = 2.

excelový rozdiel dátumov

Python3




# 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'>)>

>

>

Ďalej použijeme model na vizualizáciu vloženia.

Python3




# 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()>

abeceda čísel

>

>

Výkon:

Vektorizované znázornenie slov pomocou modelu CBOW

Vektorizované znázornenie slov pomocou modelu CBOW

Táto vizualizácia nám umožňuje pozorovať podobnosť slov na základe ich vloženia. Očakáva sa, že slová, ktoré majú podobný význam alebo kontext, budú v zápletke blízko seba.