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

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

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