Способы использования текста с помощью моделей леса решений Tensorflow

Это страница документации Markdown. Для получения дополнительной информации см. Справочник по Markdown (go/documentation-reference) и Руководство по стилю документации (go/documentation-style).

Фон

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

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

Особенность ID пользователя Предыдущие покупки Название продукта Описание продукта
Пример данных 1234 [«ТВ», «Пылесос»] «Wi-Fi-маршрутизатор» «Этот маршрутизатор…»


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

Краткий справочник

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

Скорость вывода Скорость обучения Возможность запомнить отношения токен <> метка Обобщение
Множественные категорики Самый быстрый (++) Самый быстрый (++) Ограниченное Ограниченный (+)
мульти-горячий Быстро (+) Быстро (при условии относительно небольшого размера словарного запаса) (++) Хороший Ограниченный (+)
Категориальные наборы Самый быстрый (+++) Медленнее (+) Лучший Ограниченный (++)
встраивание Самый медленный (при условии нетривиальных операций кодирования, таких как умножение матриц) (от + до +++) Самый быстрый (при условии, что размер словаря >> размерность внедрения) (+++) Плохой Хорошо (от ++ до +++)

N-граммы

N-граммы (например, {"the", "cat", "is", "blue"} -> {"<start> the", "the cat", "cat is", "is blue", "blue < end>"}) может быть полезным во многих случаях и собирать локальную лексическую информацию. Они поддерживаются во всех описанных ниже методах, но за это приходится платить значительно большим размером словарного запаса, что может сделать их непрактичными из-за затрат на обучение.

Разочарованные стратегии

Одно-горячее/Мульти-горячее кодирование/Мешок слов

Горячее кодирование — это классическая стратегия уплотнения разреженного текста. Здесь мы предполагаем расширение, в котором объект разреженного текста представлен либо мульти-горячим (1 с для всех содержащихся токенов), либо векторизацией на основе счетчика (счет для каждого токена в словаре).

Например, если словарь состоит из 4 элементов и проиндексирован как [«ТВ», «Пылесос», «Wi-Fi», «Маршрутизатор»], признак «Предыдущие покупки» будет плотным вектором <1, 1, 0, 0. >. Если бы учитывались подсчеты и функция была [«ТВ», «ТВ», «Пылесос»], то это было бы <2, 1, 0, 0>.

Плюсы

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

Минусы

  • Эта стратегия часто приводит к сильно несбалансированному и редкому разбиению, что может замедлить сходимость алгоритмов обучения DF или сделать их неудовлетворительными. Это потому что:
    • Для изучения той же информации необходимо больше разбиений.
    • Очень редкие деревья обобщают хуже, чем сбалансированные деревья, что обычно приводит к менее точной модели.
  • Не учитывает позиционную информацию. Это может снизить производительность функций естественного языка.
  • Изучение численного разделения категориальных данных неоптимально; существуют оптимизации для поиска категориальных разбиений, которые здесь не используются.
  • Вычислительная сложность обучения линейно масштабируется в зависимости от количества словарных элементов (каждый из которых будет использоваться как числовая характеристика). На практике, если набор данных не очень мал (в этом случае большие словари могут способствовать переобучению), это приводит к тому, что словари, состоящие из > 5 тысяч элементов, очень медленно обучаются.
  • Потребление обучающей памяти будет составлять 1 байт (для one-hot) или 4 байта (для счетчиков) на элемент словаря в каждом примере, поскольку во время индексации данные будут храниться как плотная версия разреженных данных. Это может стать непомерно большим для больших словарей и наборов данных.

Несколько категориальных функций фиксированной длины

Поскольку категориальные функции могут быть эффективно изучены с помощью алгоритмов леса решений, одним из естественных способов использования разреженных токенов является дополнение/обрезание таким образом, чтобы в каждом примере было фиксированное количество входных токенов, а каждая позиция токена была отдельной и независимой функцией. В приведенном выше примере, если «Предыдущие покупки» содержат не более 5 токенов, мы можем создать функции f1...f5, представляющие токены 1–5, и отбросить все токены > 5 и добавить недостающие значения для примеров, где их < 5.

Плюсы

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

Минусы

  • Добавляет семантику к «отсутствующим» дополненным токенам, которые будут служить шумом для модели. Это будет особенно заметно, если существует большая разница в количестве токенов на пример, что может произойти, например, с функцией «Описание продукта».
  • Обученные деревья будут очень чувствительны к порядку, т.е. если признак [«A», «B»] то прогноз будет отличаться от прогноза для [«B», «A»] и если последний никогда не наблюдался в данных модель не сможет обобщить первое. В общем, для изучения инвариантности положения потребуется гораздо больше данных.
  • По умолчанию каждый токен будет представлен функцией с различным словарем. Даже если вы заставите реализацию учитывать один и тот же набор словарных элементов для каждой функции, f1="TV" будет другим словарным элементом, чем f2="TV". Это означает, что алгоритм будет менее эффективен при изучении связи между токеном «TV» и меткой — ему придется изучать ее отдельно для каждой позиции токена.

Лучшие стратегии

Категориальные наборы

Категориальные наборы ( https://arxiv.org/pdf/2009.09991.pdf ) представляют собой представление функций по умолчанию TF-DF для разреженного текста. Категориальный набор фактически представляет собой мешок слов, игнорирующий дубликаты и порядок. Например, признак «Телевизор — лучший» будет представлен категориальным набором {«лучший», «есть», «the», «ТВ}».

Собственный разделитель категориальных множеств, согласно тестам для различных задач (см. статью), обычно превосходит по производительности мульти-горячие и категориальные функции фиксированной длины. Теоретически, как категориальные разбиения множеств, так и логические разбиения на объектах горячего кодирования могут получить одну и ту же информацию. Однако возьмем следующий пример, где дерево пытается изучить следующую функцию:

if description contains “high” AND “speed” AND “gaming”:
  return True

В этом случае собственный разделитель категориального набора выучит 1 разделение, где {“высокий”, “скорость”, “игровой”} => True.

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

Плюсы

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

Минусы

  • Стоимость обучения разделенного категориального набора измеряется соотношением num_examples * размер словаря, поэтому, как и в алгоритме one-hot, размер обучаемого словаря может быть довольно небольшим (N тысяч) в практических условиях. Обратите внимание, что эту скорость обучения можно улучшить, регулируя долю выборки жадного алгоритма, но это может привести к неоптимальному качеству.

Вложения

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

Использование предварительно обученных внедрений хорошо работает с нейронными сетями отчасти потому, что инициализация векторного пространства, в котором похожие токены или предложения расположены близко в евклидовом пространстве, хорошо переносится на задачи НЛП, а градиенты от этой инициализации меньше и быстрее сходятся. чем полностью случайная инициализация. Однако деревья решений используют встраивания в качестве отдельных числовых признаков и изучают выровненные по осям разделы этих отдельных признаков 1 . Это означает, что практически невозможно использовать одну и ту же семантическую информацию — например, скалярное произведение или матричное умножение невозможно представить с помощью набора разбиений, выровненных по осям. Более того, в отличие от нейронных сетей, которые могут обновлять вложения посредством градиентного спуска во время обучения, алгоритмы обучения леса решений по умолчанию недифференцируемы, а это означает, что вложения должны оставаться замороженными. Обратите внимание, что есть работа (например , https://arxiv.org/pdf/2007.14761.pdf ) по дифференцируемым лесам решений. Однако, возможно, отчасти потому, что на практике не все биты информации во внедрении фактически используются даже нейронными сетями, эта стратегия по-прежнему хорошо работает с лесами решений.

Плюсы:

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

Минусы

  • Плохо запоминает информацию — разбиение может привести к нечеткой классификации или высокой чувствительности к формулировкам (например, «маршрутизатор отличный» или «отличный маршрутизатор») приведет к появлению разных вложений, которые могут быть близки в евклидовом пространстве, но не обязательно иметь схожие значения. числовые особенности.
  • Самый медленный в обслуживании, поскольку полный прямой проход кодера должен быть выполнен во время вывода. Фактическая задержка сильно зависит от архитектуры, которая создала встраивания; т. е. кодер-трансформер обычно будет намного медленнее, чем поиск в необработанной таблице внедрения с объединением средних значений.

Примечания


  1. Включение косого разделения может позволить изучать информацию, не выровненную по осям, но она все равно будет осуществляться по каждому измерению.