logo

Nepārtraukts vārdu maiss (CBOW) NLP

Lai dators saprastu rakstītu tekstu, vārdus varam attēlot kā ciparu vektorus. Viens veids, kā to izdarīt, ir izmantot Word iegulšanu, tie ir veids, kā attēlot vārdus kā ciparu vektorus. Šie vektori uztver vārdu nozīmi un to attiecības ar citiem valodas vārdiem. Vārdu iegulšanu var ģenerēt, izmantojot neuzraudzītus mācību algoritmus, piemēram, Word2vec, Cimds , vai FastText .

Word2vec ir uz neironu tīklu balstīta metode vārdu iegulšanu ģenerēšanai, kas ir vārdu blīvi vektora attēlojumi, kas atspoguļo to semantisko nozīmi un attiecības. Word2vec ieviešanai ir divas galvenās pieejas:



    Nepārtraukts vārdu maiss (CBOW)
  • Izlaist gramu

Kas ir nepārtraukts vārdu maiss (CBOW)?

Continuous Bag of Words (CBOW) ir populāra dabiskās valodas apstrādes metode, ko izmanto vārdu iegulšanas ģenerēšanai. Vārdu iegulšana ir svarīga daudziem NLP uzdevumiem, jo ​​tie uztver semantiskās un sintaktiskās attiecības starp vārdiem valodā. CBOW ir uz neironu tīklu balstīts algoritms, kas paredz mērķa vārdu, ņemot vērā tā apkārtējos konteksta vārdus. Tas ir veids bez uzraudzības mācīšanās, kas nozīmē, ka tā var mācīties no nemarķētiem datiem, un to bieži izmanto, lai iepriekš apmācītu vārdu iegulšanu, ko var izmantot dažādiem NLP uzdevumiem, piemēram, sentimenta analīzei, mašīntulkošanai.

CBOW modeļa piemērs

CBOW modeļa piemērs

Vai pastāv atšķirība starp vārdu maisa (BoW) modeli un nepārtraukto vārdu maisu (CBOW)?

  • Modelis “Vārdu maiss” un “Nepārtrauktā vārdu maisa” modelis ir abas metodes, ko izmanto dabiskās valodas apstrādē, lai attēlotu tekstu datorlasāmā formātā, taču tie atšķiras konteksta uztveršanas veidā.
  • BoW modelis attēlo tekstu kā vārdu kopumu un to biežumu noteiktā dokumentā vai korpusā. Tajā netiek ņemta vērā secība vai konteksts, kādā vārdi parādās, un tāpēc tas var neaptvert visu teksta nozīmi. BoW modelis ir vienkāršs un viegli īstenojams, taču tam ir ierobežojumi valodas nozīmes uztveršanā.
  • Turpretim CBOW modelis ir uz neironu tīklu balstīta pieeja, kas atspoguļo vārdu kontekstu. Tas iemācās paredzēt mērķa vārdu, pamatojoties uz vārdiem, kas parādās pirms un pēc tā noteiktā konteksta logā. Apsverot apkārtējos vārdus, CBOW modelis var labāk uztvert vārda nozīmi noteiktā kontekstā.

CBOW modeļa arhitektūra

CBOW modelis izmanto mērķa vārdu ap konteksta vārdu, lai to prognozētu. Apsveriet iepriekš minēto piemēru Viņa ir lieliska dejotāja. CBOW modelis pārvērš šo frāzi konteksta vārdu un mērķa vārdu pāros. Vārdu pāri izskatīsies šādi ([viņa, a], ir), ([ir, lieliska], a) ([a, dejotāja], lieliska) kam loga izmērs = 2.



CBOW arhitektūra

CBOW arhitektūra

Modelis ņem vērā konteksta vārdus un mēģina paredzēt mērķa vārdu. Četri 1∗W ievades vektori tiks nodoti ievades slānim, ja viena mērķa vārda prognozēšanai tiek izmantoti četri vārdi kā konteksta vārdi. Slēptais slānis saņems ievades vektorus un pēc tam reizinās tos ar W∗N matricu. 1∗N izvade no slēptā slāņa beidzot nonāk summas slānī, kur vektori tiek summēti pa elementiem, pirms tiek veikta galīgā aktivizēšana un izvade tiek iegūta no izvades slāņa.

ekspertu sistēmas

CBOW koda ieviešana

Ieviesīsim vārdu iegulšanu, lai parādītu vārdu līdzību, izmantojot CBOW modeli. Šajā rakstā esmu definējis savu vārdu korpusu, jūs izmantojat jebkuru datu kopu. Pirmkārt, mēs importēsim visas nepieciešamās bibliotēkas un ielādēsim datu kopu. Tālāk mēs tokenizēsim katru vārdu un pārveidosim to veselu skaitļu vektorā.



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

>

vlc lejupielādēt youtube
>

Izvade:

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

Tagad mēs izveidosim CBOW modeli, kura loga izmērs = 2.

Android izstrādātāja režīma izslēgšana

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

>

privāts pret publisko java
>

Tālāk mēs izmantosim modeli, lai vizualizētu iegulšanu.

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

bash elifs

>

>

Izvade:

Vārdu vektorizēts attēlojums, izmantojot CBOW modeli

Vārdu vektorizēts attēlojums, izmantojot CBOW modeli

Šī vizualizācija ļauj mums novērot vārdu līdzību, pamatojoties uz to iegulšanu. Paredzams, ka sižetā vārdi, kas ir līdzīgi pēc nozīmes vai konteksta, būs tuvu viens otram.