Модель «мешка слов» — это модель текста, в которой используется представление текста, основанное на неупорядоченной коллекции (или « мешке ») слов. Он используется при обработке естественного языка и поиске информации (IR). Он игнорирует порядок слов (и, следовательно, любое нетривиальное понятие грамматики [ необходимы пояснения ] ), но учитывает множественность . Модель «мешка слов» также использовалась для компьютерного зрения . [1]
Модель «мешка слов» обычно используется в методах классификации документов , где, например, частота (частота) появления каждого слова используется в качестве признака для обучения классификатора . [2]
Раннее упоминание «мешка слов» в лингвистическом контексте можно найти в статье Зеллига Харриса « Структура распределения» 1954 года . [3]
Следующее моделирует текстовый документ с использованием набора слов. Вот два простых текстовых документа:
(1) Джон любит смотреть фильмы. Мэри тоже любит кино.
(2) Мэри также любит смотреть футбольные матчи.
На основе этих двух текстовых документов для каждого документа строится список следующим образом:
«Джон» , «нравится» , «чтобы» , «смотреть» , «фильмы» , «Мэри» , «лайки» , «фильмы» , «тоже»«Мэри» , «тоже» , «любит» , «чтобы» , «смотреть» , «футбол» , «игры»
Представление каждого набора слов в виде объекта JSON и присвоение соответствующей переменной JavaScript :
BoW1 = { "Джон" : 1 , "лайки" : 2 , "кому" : 1 , "смотреть" : 1 , "фильмы" : 2 , "Мэри" : 1 , "тоже" : 1 }; BoW2 = { "Мэри" : 1 , "также" : 1 , "нравится" : 1 , "кому" : 1 , "смотреть" : 1 , "футбол" : 1 , "игры" : 1 };
Каждый ключ — это слово, а каждое значение — это количество вхождений этого слова в данный текстовый документ.
Порядок элементов свободен, поэтому, например, {"too":1,"Mary":1,"movies":2,"John":1,"watch":1,"likes":2,"to":1}
также эквивалентен BoW1 . Это также то, чего мы ожидаем от строгого представления объекта JSON .
Примечание: если другой документ представляет собой объединение этих двух,
(3) Джон любит смотреть фильмы. Мэри тоже любит кино. Мэри также любит смотреть футбольные матчи.
его представление JavaScript будет:
BoW3 = { "Джон" : 1 , "лайки" : 3 , "кому" : 2 , "смотреть" : 2 , "фильмы" : 2 , "Мэри" : 2 , "тоже" : 1 , "также" : 1 , «футбол» : 1 , «игры» : 1 };
Итак, как мы видим в алгебре мешков , «объединение» двух документов в представлении мешков слов формально представляет собой непересекающееся объединение , суммирующее кратности каждого элемента.
.
Реализации модели «мешка слов» могут включать использование частот слов в документе для представления его содержимого. Частоты могут быть «нормализованы» посредством обратной частоты документа или tf–idf . Кроме того, для конкретной цели классификации были разработаны контролируемые альтернативы для учета метки класса документа. [4] Наконец, для некоторых задач вместо частот используется двоичное (наличие/отсутствие или 1/0) взвешивание (например, эта опция реализована в системе программного обеспечения машинного обучения WEKA ).
# Сначала обязательно установите необходимые пакеты # pip install --upgrade pip # pip install tensorflow из tensorflow import keras from typing import List from keras.preprocessing.text import Tokenizerпредложение = [ "Джон любит смотреть фильмы. Мэри тоже любит фильмы." ]def print_bow ( предложение : List [ str ]) -> Нет : tokenizer = Tokenizer () tokenizer . fit_on_texts ( предложение ) последовательности = токенизатор . texts_to_sequences ( предложение ) word_index = токенизатор . word_index лук = {} для ключа в word_index : лук [ ключ ] = последовательности [ 0 ] . счетчик ( word_index [ ключ ]) print ( f "Мешок слов, предложение 1: \n { лук } " ) print ( f "Мы нашли { len ( word_index ) } уникальных токенов." )print_bow ( предложение )
Распространенной альтернативой использованию словарей является прием хеширования , при котором слова сопоставляются непосредственно с индексами с помощью хеш-функции. [5] Таким образом, для хранения словаря не требуется никакой памяти. Коллизии хэшей обычно решаются через освобожденную память для увеличения количества хеш-корзин [ необходимы пояснения ] . На практике хеширование упрощает реализацию моделей «мешка слов» и улучшает масштабируемость.
И этот запас комбинаций элементов становится фактором, повлиявшим на последующий выбор... ибо язык — это не просто мешок слов, а инструмент с особыми свойствами, которые сформировались в ходе его использования.