Telegram Group & Telegram Channel
RQ-VAE: практический гайд по выживанию

Несколько месяцев назад я делал обзор на статью по рекомендациям, базирующейся на так называемых Semantic IDs.

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

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

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

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

Я строил 3 графика обучения двухбашенной модели. Два бейзлайна - нижний и верхний - без контентных фичей документа и обычный бейзлайн, и третий - это модель с RQ-боттлнеком. Если ошибка третьей модели ровно посередине между 2 бейзлайнами, то это значит, что мы как бы теряем 50% качества при использовании квантизации, т.е. не нужно никаких дополнительных анализов для неутешительного вывода. Моей задачей было максимально приблизиться к верхнему бейзлайну.

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

Первый и третий давали процентов 70% от изначального качества, а вот Гумбель давал процентов 30. Интуиция говорила, что Гумбель не может быть хуже, чем Straight Through Estimator. Так как же так? Ответ убил.

В коде с гитхаба после подсчёта матрицы расстояний между векторами и кодами зачем-то вызывался detach. Гумбель софтмакс - дефолтная опция этого, казалось бы, популярного репозитория, оказалась почти полностью сломана. После его исправления модель стала давать примерно 80% от качества бейзлайна. В репе эту ошибку исправили примерно в тот же самый момент, несколько месяцев до этого висела сломанная версия. Не доверяйте людям с гитхаба...

Переход от 80% к 90% произошёл благодаря опции sim_vq - трюка из этой статьи. Идея в том, что мы представляем матрицу кодов не как матрицу параметров, а как произведение 2 матриц параметров. Это известный трюк, позволяющий спутать параметры между собой и мешающий возникновению мёртвых весов, по которым не текут градиенты. Подобное же использовалось в улучшенном конкретном автоэнкодере. Мои графики доли используемых кодов с всего лишь пары десятков процентов сразу взлетели почти до максимума.

Последние 10% были выбиты с помощью научного перебора расписания температуры. Оказалось, что результат очень чувствителен к нему - увеличение в несколько раз не в ту сторону забирало драгоценные проценты. Когда я сделал температуру e^-1 в начале обучения с переходом к e^0 в конце, то наконец увидел примерно 100% от изначального качества. Юзал 8/16 кодов с размером словаря 256. Чем меньше словарь, тем круче будет обобщающая способность у этих id-шников.

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

@knowledge_accumulator



tg-me.com/knowledge_accumulator/290
Create:
Last Update:

RQ-VAE: практический гайд по выживанию

Несколько месяцев назад я делал обзор на статью по рекомендациям, базирующейся на так называемых Semantic IDs.

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

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

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

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

Я строил 3 графика обучения двухбашенной модели. Два бейзлайна - нижний и верхний - без контентных фичей документа и обычный бейзлайн, и третий - это модель с RQ-боттлнеком. Если ошибка третьей модели ровно посередине между 2 бейзлайнами, то это значит, что мы как бы теряем 50% качества при использовании квантизации, т.е. не нужно никаких дополнительных анализов для неутешительного вывода. Моей задачей было максимально приблизиться к верхнему бейзлайну.

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

Первый и третий давали процентов 70% от изначального качества, а вот Гумбель давал процентов 30. Интуиция говорила, что Гумбель не может быть хуже, чем Straight Through Estimator. Так как же так? Ответ убил.

В коде с гитхаба после подсчёта матрицы расстояний между векторами и кодами зачем-то вызывался detach. Гумбель софтмакс - дефолтная опция этого, казалось бы, популярного репозитория, оказалась почти полностью сломана. После его исправления модель стала давать примерно 80% от качества бейзлайна. В репе эту ошибку исправили примерно в тот же самый момент, несколько месяцев до этого висела сломанная версия. Не доверяйте людям с гитхаба...

Переход от 80% к 90% произошёл благодаря опции sim_vq - трюка из этой статьи. Идея в том, что мы представляем матрицу кодов не как матрицу параметров, а как произведение 2 матриц параметров. Это известный трюк, позволяющий спутать параметры между собой и мешающий возникновению мёртвых весов, по которым не текут градиенты. Подобное же использовалось в улучшенном конкретном автоэнкодере. Мои графики доли используемых кодов с всего лишь пары десятков процентов сразу взлетели почти до максимума.

Последние 10% были выбиты с помощью научного перебора расписания температуры. Оказалось, что результат очень чувствителен к нему - увеличение в несколько раз не в ту сторону забирало драгоценные проценты. Когда я сделал температуру e^-1 в начале обучения с переходом к e^0 в конце, то наконец увидел примерно 100% от изначального качества. Юзал 8/16 кодов с размером словаря 256. Чем меньше словарь, тем круче будет обобщающая способность у этих id-шников.

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

@knowledge_accumulator

BY Knowledge Accumulator


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/knowledge_accumulator/290

View MORE
Open in Telegram


Knowledge Accumulator Telegram | DID YOU KNOW?

Date: |

For some time, Mr. Durov and a few dozen staffers had no fixed headquarters, but rather traveled the world, setting up shop in one city after another, he told the Journal in 2016. The company now has its operational base in Dubai, though it says it doesn’t keep servers there.Mr. Durov maintains a yearslong friendship from his VK days with actor and tech investor Jared Leto, with whom he shares an ascetic lifestyle that eschews meat and alcohol.

Telegram Auto-Delete Messages in Any Chat

Some messages aren’t supposed to last forever. There are some Telegram groups and conversations where it’s best if messages are automatically deleted in a day or a week. Here’s how to auto-delete messages in any Telegram chat. You can enable the auto-delete feature on a per-chat basis. It works for both one-on-one conversations and group chats. Previously, you needed to use the Secret Chat feature to automatically delete messages after a set time. At the time of writing, you can choose to automatically delete messages after a day or a week. Telegram starts the timer once they are sent, not after they are read. This won’t affect the messages that were sent before enabling the feature.

Knowledge Accumulator from us


Telegram Knowledge Accumulator
FROM USA