Jotta tietokone ymmärtäisi kirjoitettua tekstiä, voimme esittää sanat numeerisina vektoreina. Yksi tapa tehdä niin on käyttää Wordin upotuksia, ne ovat tapa esittää sanoja numeerisina vektoreina. Nämä vektorit vangitsevat sanojen merkityksen ja niiden suhteet kielen muihin sanoihin. Wordin upotuksia voidaan luoda käyttämällä valvomattomia oppimisalgoritmeja, kuten Word2vec, Käsine , tai FastText .
Word2vec on hermoverkkopohjainen menetelmä, jolla luodaan sanoja upotettuja sanoja, jotka ovat tiheitä vektoriesityksiä sanoista, jotka vangitsevat niiden semanttisen merkityksen ja suhteet. Word2vecin toteuttamiseen on kaksi päätapaa:
- Jatkuva sanapussi (CBOW)
- Ohita gramma
Mikä on jatkuva sanapussi (CBOW)?
Continuous Bag of Words (CBOW) on suosittu luonnollisen kielen käsittelytekniikka, jota käytetään sanan upotusten luomiseen. Sanojen upotukset ovat tärkeitä monissa NLP-tehtävissä, koska ne kuvaavat kielen sanojen välisiä semanttisia ja syntaktisia suhteita. CBOW on hermoverkkopohjainen algoritmi, joka ennustaa kohdesanan sen ympäröivien kontekstisanojen perusteella. Se on eräänlainen valvomatta oppimista, mikä tarkoittaa, että se voi oppia merkitsemättömästä tiedosta, ja sitä käytetään usein esikouluttaen sanan upotuksia, joita voidaan käyttää erilaisiin NLP-tehtäviin, kuten tunteiden analysointiin, konekääntämiseen.

Esimerkki CBOW-mallista
Onko mitään eroa Bag-of-Words (BoW) -mallin ja Continuous Bag-of-Words (CBOW) -mallin välillä?
- Bag-of-Words-malli ja Continuous Bag-of-Words -malli ovat molemmat tekniikoita, joita käytetään luonnollisen kielen prosessoinnissa tekstin esittämiseen tietokoneella luettavassa muodossa, mutta ne eroavat toisistaan siinä, miten ne sieppaavat kontekstin.
- BoW-malli edustaa tekstiä kokoelmana sanoja ja niiden esiintymistiheyttä tietyssä asiakirjassa tai korpusessa. Se ei ota huomioon järjestystä tai kontekstia, jossa sanat esiintyvät, ja siksi se ei välttämättä kuvaa tekstin täyttä merkitystä. BoW-malli on yksinkertainen ja helppo toteuttaa, mutta sillä on rajoituksia kielen merkityksen sieppaamisessa.
- Sitä vastoin CBOW-malli on hermoverkkopohjainen lähestymistapa, joka kaappaa sanojen kontekstin. Se oppii ennustamaan kohdesanan sanojen perusteella, jotka esiintyvät sen edessä ja jälkeen tietyssä kontekstiikkunassa. Ottaen huomioon ympäröivät sanat CBOW-malli voi vangita paremmin sanan merkityksen tietyssä kontekstissa.
CBOW-mallin arkkitehtuuri
CBOW-malli käyttää kohdesanaa kontekstisanan ympärillä ennustaakseen sen. Harkitse yllä olevaa esimerkkiä Hän on loistava tanssija. CBOW-malli muuntaa tämän lauseen kontekstisanojen ja kohdesanojen pareiksi. Sanaparit näyttäisivät tältä ([hän, a], on), ([on, loistava], a) ([a, tanssija], loistava) jonka ikkunan koko = 2.

CBOW-arkkitehtuuri
Malli ottaa huomioon kontekstin sanat ja yrittää ennustaa kohdetermin. Neljä 1∗W syöttövektoria välitetään syöttökerrokseen, jos niissä on neljä sanaa kontekstisaneina ennustamaan yksi kohdesana. Piilotettu kerros vastaanottaa sisääntulovektorit ja kertoo ne sitten W∗N-matriisilla. Piilotetun kerroksen 1∗N ulostulo menee lopulta summakerrokseen, jossa vektorit summataan elementtikohtaisesti ennen kuin lopullinen aktivointi suoritetaan ja tulos saadaan lähtökerroksesta.
CBOW:n koodin toteutus
Toteutetaan sanan upottaminen näyttämään sanojen samankaltaisuus CBOW-mallilla. Tässä artikkelissa olen määritellyt oman sanakokoukseni, käytät mitä tahansa tietojoukkoa. Ensin tuomme kaikki tarvittavat kirjastot ja lataamme tietojoukon. Seuraavaksi tokenisoimme jokaisen sanan ja muunnamme sen kokonaislukuvektoriksi.
Python 3
ero kahden merkkijonon välillä python
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)> |
>
esiintymä
>
Lähtö:
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]]>
Nyt rakennamme CBOW-mallin, jonka ikkunan koko = 2.
Python 3
leijonan ja tiikerin vertailu
# 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'>)> |
>
>
Seuraavaksi käytämme mallia upotusten visualisointiin.
Python 3
lataa youtube-video vlc
# 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()> |
>
mitä ravel tekee pythonissa
>
Lähtö:

Sanojen vektorisoitu esitys CBOW-mallilla
Tämän visualisoinnin avulla voimme havaita sanojen samankaltaisuuden niiden upotusten perusteella. Sanojen, jotka ovat merkitykseltään tai kontekstiltaan samankaltaisia, odotetaan olevan juonessa lähellä toisiaan.