Модель "Сумка слов"

редактировать

Сумка -words модель - это упрощенное представление, используемое в обработке естественного языка и поиске информации (IR). В этой модели текст (такой как предложение или документ) представлен как мешок (мультимножество) его слов, без учета грамматики и даже порядка слов, но с сохранением кратности. Модель мешка слов также использовалась для компьютерного зрения.

Модель мешка слов обычно используется в методах классификации документов, где (частота) появления каждого слово используется как свойство для обучения классификатора .

Раннее упоминание «мешка слов» в лингвистическом контексте можно найти в книге Зеллига Харриса 1954 г. статья о структуре распределения.

Содержание
  • 1 Пример реализации
  • 2 Приложение
  • 3 n-граммовая модель
  • 4 Реализация Python
  • 5 Хеш-трюк
  • 6 Пример использования: фильтрация спама
  • 7 См. Также
  • 8 Примечания
  • 9 Ссылки
Пример реализации

Следующее моделирует текстовый документ с использованием набора слов. Вот два простых текстовых документа:

(1) Джон любит смотреть фильмы. Мэри тоже любит фильмы.
(2) Мэри тоже любит смотреть футбольные матчи.

На основе этих двух текстовых документов для каждого документа составляется список следующим образом:

«Джон», «нравится», «кому», «смотреть», «фильмы», «Мэри», «лайки», "фильмы", "тоже" "Мэри", "также", "лайки", "на", "смотреть", "футбол", "игры"

Представление каждого набора слов в виде Объект JSON и присвоение соответствующей переменной JavaScript :

BoW1 = {"John": 1, "like": 2, "to": 1, "watch": 1, "фильмы": 2, "Мэри": 1, "тоже": 1}; BoW2 = {"Мэри": 1, "также": 1, "нравится": 1, "кому": 1, "смотреть": 1, "футбол": 1, "игры": 1};

Каждый ключ - это слово, а каждое значение - это количество вхождений этого слова в данный текстовый документ.

Порядок элементов свободный, например {"too": 1, "Mary": 1, "movies": 2, "John": 1, "watch": 1, "нравится": 2, "кому": 1}также эквивалентно BoW1. Это то, чего мы ожидаем от строгого представления объекта JSON.

Примечание: если другой документ подобен объединению этих двух,

(3) Джон любит смотреть фильмы. Мэри тоже любит фильмы. Еще Мэри любит смотреть футбольные матчи.

его представление в JavaScript будет:

BoW3 = {"John": 1, "like": 3, "to": 2, "watch": 2, "movies": 2, "Mary": 2, «тоже»: 1, «также»: 1, «футбол»: 1, «игры»: 1};

Итак, как мы видим в алгебре пакетов, «объединение» двух документов в представлении пакетов слов формально является непересекающимся объединением, суммирующим кратности каждого элемента.

. B o W 3 = B o W 1 ⨄ B o W 2 {\ displaystyle BoW3 = BoW1 \ biguplus BoW2}{\ displaystyle BoW3 = BoW1 \ biguplus BoW2} .

Приложение

На практике в основном используется модель «мешок слов» как инструмент создания признаков. После преобразования текста в «мешок слов» мы можем вычислить различные меры для характеристики текста. Наиболее распространенным типом характеристик или характеристик, рассчитываемых по модели «мешка слов», является частота термина, а именно, сколько раз термин встречается в тексте. В приведенном выше примере мы можем построить следующие два списка для записи частот терминов всех отдельных слов (BoW1 и BoW2, упорядоченные, как в BoW3):

(1) [1, 2, 1, 1, 2, 1, 1, 0, 0, 0] (2) [0, 1, 1, 1, 0, 1, 0, 1, 1, 1]

Каждая запись в списках относится к количеству соответствующей записи в список (это также представление гистограммы). Например, в первом списке (который представляет документ 1) первые две записи - «1,2»:

  • Первая запись соответствует слову «Джон», которое является первым словом в списке, и его значением равно «1», потому что «Джон» встречается в первом документе один раз.
  • Вторая запись соответствует слову «нравится», которое является вторым словом в списке, и его значение равно «2», потому что « любит "появляется в первом документе дважды.

Это представление списка (или вектора) не сохраняет порядок слов в исходных предложениях. Это лишь главная особенность модели «Мешок слов». Этот вид представления имеет несколько успешных применений, таких как фильтрация электронной почты.

Однако частота терминов не обязательно является лучшим представлением текста. Такие общие слова, как «the», «a», «to», почти всегда встречаются в тексте чаще всего. Таким образом, наличие большого количества необработанных данных не обязательно означает, что соответствующее слово более важно. Чтобы решить эту проблему, один из самых популярных способов «нормализовать» частоту терминов - это взвесить термин по величине, обратной частоте документа, или tf – idf. Кроме того, для конкретной цели классификации были разработаны контролируемые альтернативы для учета метки класса документа. Наконец, для некоторых задач вместо частот используется двоичное (присутствие / отсутствие или 1/0) взвешивание (например, эта опция реализована в программной системе машинного обучения WEKA ).

n-граммовая модель

Модель «мешок слов» представляет собой беспорядочное представление документа - имеет значение только количество слов. Например, в приведенном выше примере «Джон любит смотреть фильмы. Мэри тоже любит фильмы», набор слов не показывает, что глагол «нравится» всегда следует за именем человека в этом тексте. В качестве альтернативы модель n-грамм может хранить эту пространственную информацию. Применительно к тому же примеру, приведенному выше, модель bigram проанализирует текст на следующие единицы и сохранит частоту термина для каждой единицы, как и раньше.

[«Джон любит», «любит», «смотреть», «смотреть фильмы», «Мэри любит», «любит фильмы», «фильмы тоже»,]

Концептуально мы можем просматривать сумку- словесная модель как частный случай модели n-грамм, при n = 1. Для n>1 модель называется w-shingling (где w эквивалентно n, обозначающему количество сгруппированных слов). См. языковую модель для более подробного обсуждения.

Реализация Python
из keras.preprocessing.text import Tokenizer предложение = ["Джон любит смотреть фильмы. Мэри тоже любит фильмы."] Def print_bow (предложение: str) ->Нет: tokenizer = Tokenizer () tokenizer.fit_on_texts (предложение) последовательности = tokenizer.texts_to_sequences (предложение) word_index = tokenizer.word_index bow = {} для ключа в word_index: лук [ключ] = последовательности [0].count (word_index [key]) print (bow) print (f "Пакет слов, предложение 1: \ n {bow}") print (f'Мы нашли {len (word_index)} уникальных токенов. ') print_bow (предложение)
Уловка хеширования

Распространенной альтернативой использованию словарей является трюк хеширования , при котором слова отображаются напрямую в индексы с помощью функции хеширования. Таким образом, для хранения словаря не требуется памяти. Конфликты хеширования обычно устраняются через освободившуюся память для увеличения количества хэш-сегментов. На практике хеширование упрощает реализацию моделей набора слов и улучшает масштабируемость.

Пример использования: фильтрация спама

В байесовской фильтрации спама сообщение электронной почты моделируется как неупорядоченный набор слов, выбранных из одного из двух распределений вероятностей: представляющий спам и один представляющий законную электронную почту («хам»). Представьте, что есть два буквальных мешка, наполненных словами. Один пакет заполнен словами, найденными в спам-сообщениях, а другой - словами, найденными в законных сообщениях электронной почты. В то время как любое данное слово, вероятно, находится где-то в обоих пакетах, пакет "спам" будет содержать слова, связанные со спамом, такие как "акции", "Виагра" и "купить" значительно чаще, в то время как пакет "ветчина" будет содержать больше слов, связанных с друзьями или работой пользователя.

Чтобы классифицировать сообщение электронной почты, байесовский фильтр спама предполагает, что сообщение представляет собой стопку слов, которая была случайным образом вылита из одного из двух пакетов, и использует байесовскую вероятность

См. также
Примечания
Ссылки
  • McTear, Michael (et al) (2016). Разговорный интерфейс. Springer International Publishing.
Последняя правка сделана 2021-05-11 06:24:13
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте