Запоминание и обобщение моделей

Допустим, у вас есть сайт с обзорами ресторанов под названием "Мишленовский человек". Вы собираете много отзывов от пользователей и хотите проанализировать, последовательны ли они.

Пользователь только что ел в итальянском ресторане написал сообщение:

Мне нравится повязка.

Распространенный способ решить проблему - взглянуть на сообщение на уровне слов.

["i", "like", "the", "dressing", "."]

Обобщение

Вы можете начать с понимания значения каждого слова, обучив модель на больших текстовых данных генерировать представления слов. Есть много способов сделать это, но, по сути, слово в конечном итоге будет представлено вектором чисел.

like = [.03, -1.45, ..., 0.45, 0.74]

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

Если вы визуализируете эти представления в векторном пространстве, вы увидите, что похожие слова будут сгруппированы вместе.

Допустим, другой человек пишет:

Я восхищаюсь одеждой.

["i", "admire", "the", "dressing", "."]

Теперь «восхищаться» и «нравится» можно считать синонимами. Следовательно, соответствующие представления слов должны быть похожими.

word_similarity("like", "admire") = high

Замечательно! Учитывая, что представления слов были изучены более или менее автоматически, этот метод изучения отношений между словами является расширяемым и полезным.

Способность к обобщению словесных представлений может быть расширена до связности. Один из способов определения связности - это то, подходят ли пары слов друг к другу в одном контексте. Простой способ вычислить это - сравнить сходство слов между двумя словами в предложении.

Итак, из приведенного выше примера вы можете выделить слово «одеваться» и проверить, совместимо ли оно со словами «нравится» и «восхищаться».

word_similarity("like", "dressing") = somewhat high
word_similarity("admire", "dressing") = somewhat low

Это тоже имеет смысл: «нравится» больше похоже, чем «восхищаться».

Однако из вышесказанного неясно, является ли связным словосочетание «восхищаться» и «одеваться». Хотя не исключено, что кто-то будет восхищаться «одеждой», более вероятно, что пользователь проявил изобретательность или ошибся.

Слабость обобщения в том, что оно часто дает сбой за пределами того, что обычно происходит, т.е. в среднем. Несмотря на то, что слово «репрезентации» заключает в себе много значений, он считает, что включение в предложение «восхищаться» и «одеваться» является правдоподобным, поскольку «подобное» близко к «восхищаться» и «одеваться». При нынешней настройке даже слова, которые никогда не были вместе, будут просто проявляться как оттенок сходства.

Запоминание

Простой способ показать последовательность - это счет. Подсчет пар слов выше показывает, существовали ли они раньше.

Быстрое сканирование в Google Ngram Corpus показывает, что восхищаться одеждой никогда раньше не было.

counts_in_the_same_sentence("like", "dressing") = some
counts_in_the_same_sentence("admire", "dressing") = none

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

Визуально распределения этих двух методов очевидны. При использовании метода подсчета подавляющее большинство пар слов будут равны нулю, в то время как у некоторых будет экспоненциально большее количество пар. Сходства слов обычно распределяются, хотя обычно с наклоном вправо, поэтому большие сходства сгруппированы вместе.

Интуитивно понятно, что два метода будут обладать наибольшей дискриминирующей способностью там, где наклон его распределения наибольший. Подсчет хорош при низком подсчете, в то время как представление слов хорошо при большом сходстве.

Смешивание разных моделей вместе - нет ничего нового. Ансамбль - это практически необходимость, если вы хотите выиграть соревнование Kaggle.

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