Мішок слів
Свайпніть щоб показати меню
Розуміння моделі BoW
Модель bag of words (BoW) представляє документи у вигляді векторів, де кожен вимір відповідає унікальному слову. Кожен вимір може відображати наявність слова в документі (1 — якщо присутнє, 0 — якщо відсутнє) або його частоту (кількість повторень слова). Таким чином, моделі BoW можуть бути бінарними або частотними.
Розглянемо, як одне й те саме речення (документ) представляється кожним типом:
Бінарна модель представляє цей документ як вектор [1, 1, 1], тоді як частотна модель — як [2, 1, 2], враховуючи частоту слів.
Реалізація BoW
Реалізація моделі BoW є простим процесом, особливо з використанням бібліотеки sklearn (scikit-learn) та її класу CountVectorizer.
Нижче наведено реалізацію бінарної моделі bag of words:
12345678910111213from 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())
from sklearn.feature_extraction.text import CountVectorizer
Цей рядок імпортує клас CountVectorizer з sklearn.
corpus = [
'Global climate change poses significant risks to global ecosystems.',
'Global warming and climate change demand urgent action.',
'Sustainable environmental practices support environmental conservation.',
]
Ці рядки визначають список з назвою corpus, який містить три рядкові елементи. Кожен рядок — це текстовий документ.
vectorizer = CountVectorizer(binary=True)
Цей рядок створює екземпляр класу CountVectorizer. Параметр binary=True вказує, що модель повинна використовувати бінарні підрахунки.
bow_matrix = vectorizer.fit_transform(corpus)
Метод спочатку навчає модель на даних, вивчаючи словник корпусу, а потім перетворює текстові документи у розріджену матрицю підрахунків токенів (матриця bag of words).
print(bow_matrix.toarray())
Цей рядок перетворює розріджену матрицю bow_matrix у щільний масив (numpy.ndarray) за допомогою методу .toarray() і виводить його.
Кожен рядок у матриці відповідає документу, а кожен стовпець — токену (слову). Для візуального представлення ми перетворили цю розріджену матрицю на щільний двовимірний масив за допомогою методу .toarray().
Розріджена матриця — це матриця, у якій більшість елементів дорівнюють нулю. Вона використовується для ефективного представлення та обробки даних із великою кількістю нульових значень, економлячи пам’ять і обчислювальні ресурси шляхом зберігання лише ненульових елементів.
Щоб створити частотну модель «мішок слів», достатньо прибрати параметр binary=True, оскільки його значення за замовчуванням — False:
1234567891011from 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())
Перетворення матриці у DataFrame
Зручно перетворити отриману матрицю bag of words у pandas DataFrame. Крім того, екземпляр CountVectorizer надає метод get_feature_names_out(), який повертає масив унікальних слів (імен ознак), використаних у моделі. Ці імена ознак можна використовувати як стовпці DataFrame:
12345678910111213from 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)
Завдяки цьому представленню ми можемо легко отримати не лише вектор для окремого документа, а й вектор для окремого слова:
12345678910111213from 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}")
Оскільки кожне унікальне слово відповідає окремому стовпцю, отримати вектор слова так само просто, як звернутися до стовпця у DataFrame, вказавши слово (наприклад, 'global'). Також використовується атрибут values, щоб отримати масив замість Series як результат.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Мішок слів
Розуміння моделі BoW
Модель bag of words (BoW) представляє документи у вигляді векторів, де кожен вимір відповідає унікальному слову. Кожен вимір може відображати наявність слова в документі (1 — якщо присутнє, 0 — якщо відсутнє) або його частоту (кількість повторень слова). Таким чином, моделі BoW можуть бути бінарними або частотними.
Розглянемо, як одне й те саме речення (документ) представляється кожним типом:
Бінарна модель представляє цей документ як вектор [1, 1, 1], тоді як частотна модель — як [2, 1, 2], враховуючи частоту слів.
Реалізація BoW
Реалізація моделі BoW є простим процесом, особливо з використанням бібліотеки sklearn (scikit-learn) та її класу CountVectorizer.
Нижче наведено реалізацію бінарної моделі bag of words:
12345678910111213from 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())
from sklearn.feature_extraction.text import CountVectorizer
Цей рядок імпортує клас CountVectorizer з sklearn.
corpus = [
'Global climate change poses significant risks to global ecosystems.',
'Global warming and climate change demand urgent action.',
'Sustainable environmental practices support environmental conservation.',
]
Ці рядки визначають список з назвою corpus, який містить три рядкові елементи. Кожен рядок — це текстовий документ.
vectorizer = CountVectorizer(binary=True)
Цей рядок створює екземпляр класу CountVectorizer. Параметр binary=True вказує, що модель повинна використовувати бінарні підрахунки.
bow_matrix = vectorizer.fit_transform(corpus)
Метод спочатку навчає модель на даних, вивчаючи словник корпусу, а потім перетворює текстові документи у розріджену матрицю підрахунків токенів (матриця bag of words).
print(bow_matrix.toarray())
Цей рядок перетворює розріджену матрицю bow_matrix у щільний масив (numpy.ndarray) за допомогою методу .toarray() і виводить його.
Кожен рядок у матриці відповідає документу, а кожен стовпець — токену (слову). Для візуального представлення ми перетворили цю розріджену матрицю на щільний двовимірний масив за допомогою методу .toarray().
Розріджена матриця — це матриця, у якій більшість елементів дорівнюють нулю. Вона використовується для ефективного представлення та обробки даних із великою кількістю нульових значень, економлячи пам’ять і обчислювальні ресурси шляхом зберігання лише ненульових елементів.
Щоб створити частотну модель «мішок слів», достатньо прибрати параметр binary=True, оскільки його значення за замовчуванням — False:
1234567891011from 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())
Перетворення матриці у DataFrame
Зручно перетворити отриману матрицю bag of words у pandas DataFrame. Крім того, екземпляр CountVectorizer надає метод get_feature_names_out(), який повертає масив унікальних слів (імен ознак), використаних у моделі. Ці імена ознак можна використовувати як стовпці DataFrame:
12345678910111213from 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)
Завдяки цьому представленню ми можемо легко отримати не лише вектор для окремого документа, а й вектор для окремого слова:
12345678910111213from 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}")
Оскільки кожне унікальне слово відповідає окремому стовпцю, отримати вектор слова так само просто, як звернутися до стовпця у DataFrame, вказавши слово (наприклад, 'global'). Також використовується атрибут values, щоб отримати масив замість Series як результат.
Дякуємо за ваш відгук!