Pull to refresh

Comments 17

Ого, спасибо, полезно! Будем пробовать. И буду ждать Т5. Это вообще бомба.

Посему лайкайте данный пост, подписывайтесь на мой канал про NLP,

Интересно, в чем причина того, что что Хабр перестал банить пользователей, кто не платит за Ынтерпрайз аккаунт, за размещение джинсы? Моя гипотеза — это ответная мера на полное отсутствие авторского контента на Хабре.

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

А джинсой, насколько я знаю, называется "необъективный материал, публикация которого была тайно оплачена". За написание этого поста мне никто не платил (хоть было бы и неплохо).

Факт остается фактом, за аналогичные посты N лет я назад я получал саспенд аккаунта.

В общем и целом хотел бы сказать, что автор молодец, так как топит за применимость и компактность алгоритмов. Но по-моему, сделанное автором — это очень жесткий over-engineering, который к тому же будет адом при поддержке или репликации.


Поскольку я собираюсь использовать маленький BERT в первую очередь для классификации коротких текстов

Может я пропустил в статье метрики, но вроде сетка делалась для какой-то конкретной бизнес задачи.


Очевидный вопрос — а как показали себя все off-the shelf методы в порядке усложнения? Основное правило — усложнять систему надо четко понимая зачем. 1 процентный пункт прироста качества против FastText сложно обосновать.


Например:


  • FastText
  • USE / LASER (и их новые аналоги)
  • FastText embedding + простая сетка
  • Off-the shelf BERT-ы

Поэтому я не дообучаю модели, а использую их как готовые feature extractors, и обучаю поверх их эмбеддингов простые модели – логистическую регрессию и KNN.

Вообще тут можно написать стандартный комментарий, что любую сетку можно натюнить на микро-бенчмарки пятилетней давности. Тут он применим меньше из-за KNN, но тем не менее. Я склонен думать, что качество все-таки надо оценивать на каких-то сложных "больших" задачах.

будет адом при поддержке или репликации

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

Может я пропустил в статье метрики, но вроде сетка делалась для какой-то конкретной бизнес задачи.

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

 1 процентный пункт прироста качества против FastText сложно обосновать.

С посылом согласен: я тоже люблю простоту. Поэтому сам долго сидел на FastText'е и на трансформеры не переходил. Но сейчас таки понемногу на них пересаживаюсь, ибо нравится лёгкость дообучения на смежные задачи.

Но фидбек принят: в следующий раз включу в бенчмарк более простые бейзлайны.

Я склонен думать, что качество все-таки надо оценивать на каких-то сложных "больших" задачах.

Да, я собираюсь на RussianSuperGlue тоже померяться.

Сберт имеет метрики по стс на ру домене, которые можно найти для всех его датасетов в колабе и к статьям по сберту. Слабо верится,что модель целево обученная для сентенс таски уступает указанной тини. Метрики стс для сберта есть в статье к нему в разрезе каждого сета, наверно правильно было бы использовать многофакторное сравнение по ним. Так же нужно заметить,что сентенс представление в сберте это не cls, а mean pool. Именно его тюнили под сближение парафраз и на нем замеряли качество.

Под Сбертом ты понимаешь модель sberbank-ai/sbert_large_nlu_ru и пост "Обучение модели естественного языка с BERT и Tensorflow"? Если да, то расчёта метрик по STS для русского языка я там не нашёл (может быть, проглядел). Если поделишься ссылкой, буду весьма благодарен.

Вопрос второй, качество измерял для cls представления? Там указано что эффективное по статье sbert_en пуллинг представление предложения, на нем метрики будут иные.

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

Понял спасибо за ответы! Хорошая работа!
Спасибо за статью. Небольшая опечатка:
т.к. с маленькой моделью можно собрать более батч большего размера.
А можно немного подробней про то как выкинуть лишние эмбеддинги из мультиязычной модели? Надо же tokenizer тоже править?

Да, надо править и веса нейросети, и токенайзер. Из токенайзера выкинуть лишние токены, из весов - лишние строки матриц входных и выходных эмбеддингов.

Я разбирал это в англоязычном посте про T5 (кстати, надо ли его переводить на русский?), там есть примеры кода, как это делать: https://cointegrated.medium.com/how-to-adapt-a-multilingual-t5-model-for-a-single-language-b9f94f3d9c90

Для BERT'а алгоритм даже чуть проще, чем для T5, поскольку словарь токенизатора в берте хранится как текстовый файлик, а не бинарь.

Круто, разобрался.

(кстати, надо ли его переводить на русский?)

Если бы пост был изначально на русском, то я бы посоветовал перевести на английский) А так все понятно, хотя на хабр русскую версию тоже можно закинуть.
Получилось всё это сделать с моделью от sentence-transformers (которая 'distiluse-base-multilingual-cased-v2'), она стала в два раза легче (с 530 до 220 Мб). Качество почти не упало, но быстрее считать эмбеддинги она не стала.
Да, инференс такая процедура ускорить не помогает, потому что «расчёт» эмбеддингов — это lookup, его сложность от размера словаря не зависит.

Но вот обучение ускориться должно, потому что не будем тратить время на расчёт градиента по эмбеддингам неиспользуемых токенов (который всё равно нулевой). Плюс за счёт экономии пространства на GPU можно делать батчи более крупными, что тоже поможет ускориться.
Sign up to leave a comment.

Articles