Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Мішок Слів | Базові Текстові Моделі
Вступ до NLP

bookМішок Слів

Розуміння моделі BoW

Модель "мішок слів" (BoW) представляє документи у вигляді векторів, де кожен вимір відповідає унікальному слову. Кожен вимір може відображати наявність слова в документі (1 — якщо присутнє, 0 — якщо відсутнє) або його частоту (кількість разів, коли слово зустрічається). Таким чином, моделі BoW можуть бути бінарними або частотними.

Розглянемо, як одне й те саме речення (документ) представляється кожним типом:

Бінарна модель представляє цей документ у вигляді вектора [1, 1, 1], тоді як частотна модель — як [2, 1, 2], враховуючи частоту слів.

Реалізація BoW

Реалізація моделі BoW є досить простою, особливо за допомогою бібліотеки sklearn (scikit-learn) та її класу CountVectorizer.

Нижче наведено реалізацію бінарної моделі "мішок слів":

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a binary Bag of Words model vectorizer = CountVectorizer(binary=True) # Generate a BoW matrix bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix into a dense array print(bow_matrix.toarray())
copy

Кожен рядок у матриці відповідає документу, а кожен стовпець — токену (слову). Для візуального представлення ми перетворили цю розріджену матрицю у щільний двовимірний масив за допомогою методу .toarray().

Note
Дізнатися більше

Розріджена матриця — це матриця, у якій більшість елементів дорівнюють нулю. Вона використовується для ефективного представлення та обробки даних із великою кількістю нульових значень, економлячи пам’ять і обчислювальні ресурси шляхом зберігання лише ненульових елементів.

Щоб створити частотну модель «мішок слів», достатньо видалити параметр binary=True, оскільки його значення за замовчуванням — False:

1234567891011
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a frequency-based Bag of Words model vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) print(bow_matrix.toarray())
copy

Перетворення матриці у DataFrame

Зручно перетворити отриману матрицю «мішка слів» у pandas DataFrame. Крім того, екземпляр CountVectorizer має метод get_feature_names_out(), який повертає масив унікальних слів (імен ознак), що використовуються у моделі. Ці імена ознак можна використовувати як стовпці DataFrame:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix to a DataFrame bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
copy

Завдяки цьому представленню тепер можна легко отримати не лише вектор для окремого документа, а й вектор для окремого слова:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) # Print the vector for 'global' as a NumPy array print(f"Vector for the word 'global': {bow_df['global'].values}")
copy

Оскільки кожне унікальне слово відповідає стовпцю, доступ до вектору слова здійснюється так само просто, як доступ до стовпця у DataFrame шляхом вказання слова (наприклад, 'global'). Також використовується атрибут values, щоб отримати масив замість Series як результат.

question-icon

Що представляють різні компоненти BoW-матриці?

Rows:
Columns:

A particular element of the matrix:

Натисніть або перетягніть елементи та заповніть пропуски

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 3

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

Can you explain the difference between binary and frequency-based BoW models in more detail?

How does the CountVectorizer handle punctuation and capitalization?

Can you show how to access the vector for a different word in the DataFrame?

Awesome!

Completion rate improved to 3.45

bookМішок Слів

Свайпніть щоб показати меню

Розуміння моделі BoW

Модель "мішок слів" (BoW) представляє документи у вигляді векторів, де кожен вимір відповідає унікальному слову. Кожен вимір може відображати наявність слова в документі (1 — якщо присутнє, 0 — якщо відсутнє) або його частоту (кількість разів, коли слово зустрічається). Таким чином, моделі BoW можуть бути бінарними або частотними.

Розглянемо, як одне й те саме речення (документ) представляється кожним типом:

Бінарна модель представляє цей документ у вигляді вектора [1, 1, 1], тоді як частотна модель — як [2, 1, 2], враховуючи частоту слів.

Реалізація BoW

Реалізація моделі BoW є досить простою, особливо за допомогою бібліотеки sklearn (scikit-learn) та її класу CountVectorizer.

Нижче наведено реалізацію бінарної моделі "мішок слів":

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a binary Bag of Words model vectorizer = CountVectorizer(binary=True) # Generate a BoW matrix bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix into a dense array print(bow_matrix.toarray())
copy

Кожен рядок у матриці відповідає документу, а кожен стовпець — токену (слову). Для візуального представлення ми перетворили цю розріджену матрицю у щільний двовимірний масив за допомогою методу .toarray().

Note
Дізнатися більше

Розріджена матриця — це матриця, у якій більшість елементів дорівнюють нулю. Вона використовується для ефективного представлення та обробки даних із великою кількістю нульових значень, економлячи пам’ять і обчислювальні ресурси шляхом зберігання лише ненульових елементів.

Щоб створити частотну модель «мішок слів», достатньо видалити параметр binary=True, оскільки його значення за замовчуванням — False:

1234567891011
from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a frequency-based Bag of Words model vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) print(bow_matrix.toarray())
copy

Перетворення матриці у DataFrame

Зручно перетворити отриману матрицю «мішка слів» у pandas DataFrame. Крім того, екземпляр CountVectorizer має метод get_feature_names_out(), який повертає масив унікальних слів (імен ознак), що використовуються у моделі. Ці імена ознак можна використовувати як стовпці DataFrame:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix to a DataFrame bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
copy

Завдяки цьому представленню тепер можна легко отримати не лише вектор для окремого документа, а й вектор для окремого слова:

12345678910111213
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) # Print the vector for 'global' as a NumPy array print(f"Vector for the word 'global': {bow_df['global'].values}")
copy

Оскільки кожне унікальне слово відповідає стовпцю, доступ до вектору слова здійснюється так само просто, як доступ до стовпця у DataFrame шляхом вказання слова (наприклад, 'global'). Також використовується атрибут values, щоб отримати масив замість Series як результат.

question-icon

Що представляють різні компоненти BoW-матриці?

Rows:
Columns:

A particular element of the matrix:

Натисніть або перетягніть елементи та заповніть пропуски

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 3
some-alt