logo

Ciągły zbiór słów (CBOW) w NLP

Aby komputer zrozumiał tekst pisany, możemy przedstawić słowa jako wektory numeryczne. Jednym ze sposobów jest użycie osadzania programu Word, które umożliwia reprezentowanie słów jako wektorów liczbowych. Wektory te oddają znaczenie słów i ich powiązania z innymi słowami w języku. Osadzanie słów można wygenerować przy użyciu algorytmów uczenia się bez nadzoru, takich jak Word2vec, Rękawica , Lub Szybki Tekst .

Word2vec to oparta na sieci neuronowej metoda generowania osadzania słów, czyli gęstych reprezentacji wektorowych słów, które oddają ich znaczenie semantyczne i powiązania. Istnieją dwa główne podejścia do wdrażania Word2vec:



    Ciągły zbiór słów (CBOW)
  • Pomiń gram

Co to jest ciągły zbiór słów (CBOW)?

Continuous Bag of Words (CBOW) to popularna technika przetwarzania języka naturalnego używana do generowania osadzania słów. Osadzanie słów jest ważne w wielu zadaniach NLP, ponieważ wychwytuje semantyczne i syntaktyczne relacje między słowami w języku. CBOW to algorytm oparty na sieci neuronowej, który przewiduje słowo docelowe na podstawie otaczających go słów kontekstu. Jest to rodzaj bez nadzoru uczenie się, co oznacza, że ​​może uczyć się na nieoznaczonych danych i często jest używane do wstępnego uczenia osadzania słów, które można wykorzystać do różnych zadań NLP, takich jak analiza nastrojów, tłumaczenie maszynowe.

Przykład modelu CBOW

Przykład modelu CBOW

Czy jest jakaś różnica między modelem Bag-of-Words (BoW) a ciągłym Bag-of-Words (CBOW)?

  • Model Bag-of-Words i Continuous Bag-of-Words to techniki stosowane w przetwarzaniu języka naturalnego w celu przedstawienia tekstu w formacie czytelnym dla komputera, ale różnią się sposobem uchwycenia kontekstu.
  • Model BoW przedstawia tekst jako zbiór słów i ich częstotliwość w danym dokumencie lub korpusie. Nie uwzględnia kolejności ani kontekstu, w jakim pojawiają się słowa, dlatego może nie uchwycić pełnego znaczenia tekstu. Model BoW jest prosty i łatwy do wdrożenia, ale ma ograniczenia w uchwyceniu znaczenia języka.
  • Natomiast model CBOW to podejście oparte na sieci neuronowej, które rejestruje kontekst słów. Uczy się przewidywać słowo docelowe na podstawie słów, które pojawiają się przed nim i po nim w danym oknie kontekstowym. Uwzględniając otaczające słowa, model CBOW może lepiej uchwycić znaczenie słowa w danym kontekście.

Architektura modelu CBOW

Model CBOW wykorzystuje słowo docelowe wokół słowa kontekstowego, aby je przewidzieć. Rozważ powyższy przykład Ona jest świetną tancerką. Model CBOW konwertuje tę frazę na pary słów kontekstowych i słów docelowych. Pary słów będą wyglądać następująco ([ona, a], jest), ([jest, świetna], a) ([a, tancerka], świetna) mając rozmiar okna = 2.



Architektura CBOW

Architektura CBOW

Model uwzględnia słowa kontekstu i próbuje przewidzieć termin docelowy. Cztery wektory wejściowe 1∗W zostaną przekazane do warstwy wejściowej, jeśli zawierają cztery słowa, ponieważ słowa kontekstu są używane do przewidywania jednego słowa docelowego. Warstwa ukryta otrzyma wektory wejściowe, a następnie pomnoży je przez macierz W∗N. Wyjście 1∗N z warstwy ukrytej trafia ostatecznie do warstwy sumarycznej, gdzie wektory są sumowane elementowo przed wykonaniem ostatecznej aktywacji i uzyskiwany jest wynik z warstwy wyjściowej.

logo Javy

Implementacja kodu CBOW

Zaimplementujmy osadzanie słów, aby pokazać podobieństwo słów za pomocą modelu CBOW. W tym artykule zdefiniowałem własny zbiór słów, możesz użyć dowolnego zbioru danych. Najpierw zaimportujemy wszystkie niezbędne biblioteki i załadujemy zbiór danych. Następnie tokenizujemy każde słowo i konwertujemy je na wektor liczb całkowitych.



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

>

Konwerter ciągu znaków na int
>

Wyjście:

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 zbudujemy model CBOW o rozmiarze okna = 2.

Python3


bool do napisania Java



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

>

>

Następnie użyjemy modelu do wizualizacji osadzania.

Python3

instancja w Javie




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

>

Wiek Salmana Khana Khana
>

Wyjście:

Wektorowa reprezentacja słów przy użyciu modelu CBOW

Wektorowa reprezentacja słów przy użyciu modelu CBOW

Ta wizualizacja pozwala nam zaobserwować podobieństwo słów na podstawie ich osadzania. Oczekuje się, że słowa o podobnym znaczeniu lub kontekście będą blisko siebie w fabule.