logo

Безперервний мішок слів (CBOW) в НЛП

Щоб змусити комп’ютер зрозуміти письмовий текст, ми можемо представити слова у вигляді числових векторів. Один із способів зробити це — використання вбудованих Word, які є способом представлення слів як числових векторів. Ці вектори фіксують значення слів і їхні зв’язки з іншими словами в мові. Вбудовування слів можна генерувати за допомогою алгоритмів неконтрольованого навчання, таких як Word2vec, GloVe , або FastText .

Word2vec — це метод на основі нейронної мережі для створення вбудованих слів, які є щільними векторними представленнями слів, які фіксують їх семантичне значення та зв’язки. Існує два основні підходи до впровадження Word2vec:



    Безперервний пакет слів (CBOW)
  • Пропустити грам

Що таке безперервний пакет слів (CBOW)?

Безперервний мішок слів (CBOW) — це популярна техніка обробки природної мови, яка використовується для створення вставок слів. Вбудовування слів є важливим для багатьох завдань НЛП, оскільки вони фіксують семантичні та синтаксичні зв’язки між словами в мові. CBOW — це алгоритм на основі нейронної мережі, який прогнозує цільове слово з урахуванням навколишніх контекстних слів. Це різновид без нагляду навчання, що означає, що він може навчатися з немаркованих даних, і часто використовується для попереднього навчання вбудовування слів, які можна використовувати для різних завдань НЛП, таких як аналіз настроїв, машинний переклад.

Приклад моделі CBOW

Приклад моделі CBOW

Чи є різниця між моделлю Bag-of-Words (BoW) і Continuous Bag-of-Words (CBOW)?

  • Модель Bag-of-Words і Continuous Bag-of-Words — це методи, які використовуються в обробці природної мови для представлення тексту в форматі, який читається комп’ютером, але вони відрізняються тим, як вони фіксують контекст.
  • Модель BoW представляє текст як набір слів і їхню частоту в певному документі чи корпусі. Він не враховує порядок або контекст, у якому з’являються слова, і, отже, може не передати повного значення тексту. Модель BoW є простою та легкою для реалізації, але вона має обмеження у захопленні значення мови.
  • Навпаки, модель CBOW — це підхід на основі нейронної мережі, який фіксує контекст слів. Він навчається передбачати цільове слово на основі слів, які з’являються перед і після нього в певному контекстному вікні. Враховуючи навколишні слова, модель CBOW може краще вловити значення слова в певному контексті.

Архітектура моделі CBOW

Модель CBOW використовує цільове слово навколо контекстного слова, щоб передбачити його. Розглянемо наведений вище приклад Вона чудово танцює. Модель CBOW перетворює цю фразу на пари контекстних слів і цільових слів. Пари слів виглядатимуть так ([вона, а], є), ([це, чудово], а) ([а, танцівниця], чудово) має розмір вікна=2.



Архітектура CBOW

Архітектура CBOW

Модель враховує контекстні слова та намагається передбачити цільовий термін. Чотири вхідні вектори 1∗W будуть передані на вхідний рівень, якщо мають чотири слова як контекстні слова, які використовуються для прогнозування одного цільового слова. Прихований шар отримає вхідні вектори, а потім помножить їх на матрицю W∗N. Вихід 1∗N із прихованого шару нарешті потрапляє на рівень суми, де вектори підсумовуються поелементно перед тим, як буде виконана остаточна активація, і вихідні дані отримають із вихідного рівня.

Реалізація коду CBOW

Давайте реалізуємо вбудовування слів, щоб показати подібність слів за допомогою моделі CBOW. У цій статті я визначив власний корпус слів, ви використовуєте будь-який набір даних. Спочатку ми імпортуємо всі необхідні бібліотеки та завантажимо набір даних. Далі ми будемо токенізувати кожне слово та перетворити його на вектор цілих чисел.



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

>

>

Вихід:

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

Тепер ми побудуємо модель CBOW з розміром вікна = 2.

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

>

алфавіт чисел

>

Далі ми будемо використовувати модель для візуалізації вбудовування.

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

метод підрядка в java

>

>

Вихід:

Векторизоване представлення слів за допомогою моделі CBOW

Векторизоване представлення слів за допомогою моделі CBOW

Ця візуалізація дозволяє нам спостерігати подібність слів на основі їх вкладень. Очікується, що слова, схожі за змістом або контекстом, будуть близькі одне одному в сюжеті.