Кодирование большого количества категориальных переменных

#deep-learning #nlp #embedding

#глубокое обучение #nlp #встраивание

Вопрос:

У меня есть 10 миллионов категориальных переменных (каждая переменная имеет 3 категории). Каков наилучший способ кодирования этих 10 миллионов переменных для обучения модели глубокого обучения на них? (Если я использую одну горячую кодировку, то в итоге у меня будет 30 миллионов переменных. Кроме того, встраивание слоя с одним выходом не имеет смысла (это похоже на целочисленное кодирование, и между этими категориями нет порядка), а встраивание слоя с двумя выходами не имеет большого значения. Обычно мы используем слой встраивания, когда количество категорий велико). Пожалуйста, выскажите мне свое мнение.

Ответ №1:

Вы должны относиться к этой проблеме как к встраиванию word, где у вас также много объектов (обычно 30-50 тысяч).

Сделайте случайное встраивание для каждой категории размером 100-300. Используйте потерю триплета или что-то подобное для обучения вложений. В принципе, создайте допустимую пару вложений или пару встраивания и ввода. Для word vector это слова, которые одновременно встречаются в контекстном окне (они находятся рядом друг с другом в предложении). Затем выберите несколько других, не связанных слов случайным образом. Обучите сеть так, чтобы допустимая пара была ближе (косинусное расстояние), чем случайные пары; вы можете попробовать разные функции потерь, но в основном, чем ближе допустимая пара и чем дальше случайная пара, тем меньше потери.

Тем не менее, я бы подумал о том, как вы сформулировали свою проблему. У вас действительно есть 10 миллионов категорий? Почему у вас больше меток, чем слов в любом человеческом языке? Если вы можете сгруппировать их в иерархии, чтобы у вас было меньше меток на нескольких этапах, ваша модель будет более эффективной.

Комментарии:

1. Спасибо за ваш комментарий. Как я уже объяснял, у меня есть 10 миллионов переменных (каждая переменная представляет собой категориальные переменные с 3 категориями). ИТАК, почему я должен выбирать случайное встраивание для каждой категории размером 100-300 ????!!!!

2. Я понимаю, вы говорите, что у вас 10 миллионов переменных, но на самом деле? Вы уверены, что не можете немного разбить это? Что вообще должны представлять ваши категории? Двигаясь дальше, я предлагаю использовать случайное встраивание в качестве инициализатора, потому что это то, что делают word vectors — это позволяет избежать проблем с однократным встраиванием, сохраняя при этом представление многих элементов.

Ответ №2:

Вы уже использовали порядковый кодировщик? Это будет кодировать категории, но не увеличит количество переменных.