Ну... Я вам оппонирую, не потому, что в области нейросетей нет проблем и все это надумано. Статья хорошая, много правильного, и проблемы поднятые имеют место быть. Я оппонирую потому, что в том виде, как проблемы сформулированы - они порождают у массы людей ощущение того, что ИНС - тупик и надо "копать в другую сторону". ;)
Факт: нейросети плохо "дообучаются". Это действительно так. Catastrophic forgetting. Но... Эту проблему, как минимум частично можно решить, если новыми данными дополнять один большой датасет и/или брать новые и старые данные в какой-то пропорции. При этом то, что человек, дескать хорошо обучается на малых данных - это не правда. Человек это сильно предобученная система, которая в основном использует именно зеро-шот в задачах, которые решает сразу (кто-бы что не говорил, но формирование новых нейронных связей - процесс очень небыстрый). Сети на примере GPT (а последнее время, стало модно называть примеры в промте - few-shot) тоже так могут.
Факт: Нейросети путаются на тех картинках, на которых человек никогда не запутался бы. Да, и что? Это значит, что сети у нас в голове и ИНС устроены, а главное обучаются сильно по-разному! Но и две разных сети, например какой-нить AlexNet и современный ViT точно так же отличаются друг от друга (будут подвержены разным adversarial-атакам). Важно не то, чем отличаемся, а чем похожи. А похожи тем, что и для нас существует свои adversarial. Полагаю, это значит, что можно подобрать такие архитектуры/методики обучения, которые сведут "путаницу" к допустимому минимуму.
Факт: Сети обученные на одном домене плохо переносятся на другой. Да. А если сеть обучена на многих доменах? ;) Что, как правило верно для человека... То расклад уже немного другой. Если вы возьмете снимки из 10 больниц, то 11 скорее всего зайдет без проблем. Человек тоже учится всему-чему-только-можно и именно этим определяется его высокая адаптивность.
>>> Но на данный момент у нас нет возможности обучить нейросеть на таком количестве данных.
Ну почему же... И датасеты появляются все интереснее. И не столь важно количество данных (хотя все же важно), сколько их... Полнота, что ли. Что бы по возможности вообще убрать такое понятие, как "домен"... Но это отдельная и долгая история! ;)
>>> Например, нейросеть, которая отлично распознает лица европейцев, будет плохо работать на лицах людей из Африки… Для человека проблемы domain shift практически не стоит…
Серьезно? Вы считаете, что настолько же хорошо различаете чернокожих или, скажем, азиатов, как европейцев (при условии, что живете среди европецев)? Вы сильно заблуждаетесь, либо где-то уникальны. Среднестатистическому европейцу «китайцы все на одно лицо».
>>> Даже самое малое изменение картинки, малое добавление шума может сильно изменить ответ нейросети. Посмотрим, например, на две картинки ниже.
Шум подбирается специально через бекпроп под конкретную архитектуру. Не факт, что для сетки у вас в голове нельзя подобрать такой же. )) Впрочем, в основном такие атаки актуальны для чистых конволюционнок, с современными архитектурами вроде не очень актуально.
>>> При малом количестве обучающих данных нейросети переобучаются. Человек же может обучиться под новую задачу на основе ограниченного опыта.
Вы путаете обучение (изменение весов) и иференс! ) Человек на малом количестве опыта не обучается, а использует те репрезентации, которые есть. Современные нейросети тоже так умеют (зерошот). Обучение у человека организовано иначе, но его можно «эмулировать», если не дообучать на малом, а дополнять «датасет» и дообучать на полном… Предположительно. Там тоже не все просто — проблема дообучения актуальна, но… Блин, не правильно ее иллюстрировать сравнивая обучение сети на малом наборе данных и человека, который первый раз видит какую-то задачу и быстро ей «научается». Корректнее сравнение с GPT, которой в промте дается пример того, что нужно сделать. Но в этом примере человек и нейросеть практически идентичны.
За структуру…
В современных нейросетях все больше разговоров за всевозможные латентные пространства. Они многомерны. Знаменитый пример world2vec: «king-man+woman=queen»(в векторном виде), или тот же самый фокус для FaceNet с очками показывает, что в этом векторном представлении могут содержаться довольно разнообразные структурные компоненты… Главный вопрос — как сделать так, что бы эта структура в конечном итоге соответствовала нашей. Есть мнение, что только если датасетом будет сама жизнь. )
Вот вы вроде инженер же, а оцениваете прогресс как обыватель. )) Айфон — это маркетинг, а не прогресс.
Сравните технологии производства чипов и прогресс за эти 26 лет, например. Вот неплохой обзорчик. Я думаю можно привести много примеров из других областей, что бы понять, что прогресс с повсеместным распространением компьютеров значительно ускорился.
Но в чем-то вы правы. Он ускорился за счет переложения части функционала на электронные системы, что возможно несколько изменило общий «интеллектуальный профиль» инженера. Но насколько это плохо для прогресса — вопрос. Порог вхождения, время, необходимое для подготовки специалиста, а так же период его продуктивности — критические параметры для прогресса в целом. Да, есть вероятность, что современный инженер менее глубоко понимает какие-то аспекты и нюансы, но зато за счет автоматизации он может проверить полсотни гипотез за час, автоматически или полуавтоматически подобрать параметры сложной модели, запустить симуляцию в конце-концов!
Я уверен, что были обвинения справочникам, что они расхолаживают, мол раньше все нужное в голове держали, или калькуляторам, что люди считать разучились. ;)
Я хорошо понимаю о чем вы: я сам, к примеру, плохо себе представляю разработку больше 100 строк кода без google под боком, но… Не вполне уверен, что это так уж плохо! Ресурс мозга тоже не бесконечен, и возможно перекладывая часть функций на компьютеры, мы эти ресурсы высвобождаем.
Я не говорю, что проблема именно и только в российском происхождении. Скорее стечение факторов. Но учитывая паранойю про русских хакеров, компания из России, разрабатывающая мультитул для "хаккеров"... Ну, закономерно, что они решили перебдеть. ;)
Удивляет что среди всех комментариев нет ни одного (или я не внимательно читал?), предполагающего, что проблема в российском происхождении бизнеса. Что компания зарегистрирована в штатах, не отменяет того факта, что основатель и большая часть команды - россияне. Логично предположить, что подобная компания в текущих реалиях, занимающаяся разработкой хакерских примочек - первая в очереди. С учетом повсеместной "отмены" всего российского...
>>> Неестественность картинок я улавливаю явно и четко
Вы уверены, что это не является самовнушением? Каким образом вы отличаете «неестественность картинки»? В данном конкретном посте картинки, на мой взгляд, довольно адекватны. На некоторых доменах, типа лиц и рук SD действительно лажает и результат выглядит криповато, но, что б везде…
В идеале вам бы провести слепое тестирование — убедится, что вы сами себя не накрутили, или у вас не реакция на современных художников такая…
Я не понимаю, чем безусловный доход может помочь в ситуации, когда «чем важнее твоя работа, тем меньше ты получаешь»? Т.е. у нас есть масса необходимых обществу, но плохо оплачиваемых работ, а так же есть куча «нахлебников», которые «маются фигней», но получают большие деньги. Если все будут получать ББД — первые видимо перестанут делать свою работу (сейчас только необходимость платить по счетам мотивирует их вкалывать за копейки), а вторые… Вторые тоже ничего особо не выиграют. ББД им будет мало, но на общественно полезные работы они не перейдут (в силу, опять же, невысокой ЗП).
Если только идти по модели Мира полудня, Стругацких, когда работа — это привилегия, и ты должен доказать, что нужен/способен/действительно хочешь и т.п. Т.е. базовые потребности закрыты у всех, но есть некоторое число реально востребованных вакансий, где к соискателю серьезные требования и длинная скамейка запасных. Что бы ЛЮБАЯ работа была престижна и уважаема, в силу самого факта принесения пользы обществу, и мерилом оной будут не деньги, а что-то иное — социальный капитал например, право голоса…
Но все это сложно реализовать в капиталистической среде. А социализм и тем паче коммунизм не взлетели… ХЗ, что это должна быть за формация…
Автор несколько неверно ставит акценты. Конечно профессиональный иллюстратор сделает точнее и быстрее сам, и ему такой инструмент не нужен от слова «совсем»! Такой инструмент нужен тем, у кого не столь серьезные запросы/бюджеты/задачи, что бы обращаться к профессиональному иллюстратору! Если человек не умеет рисовать, но ему по каким-то причинам нужно изображение — раньше вариантов было два: или найти что-то в стоках, или все-таки обратится в профессионалу. В стоках есть не все и не всегда. Профессионал — это не всегда оправдано. Вот Далле — это третий путь, когда можно дешево и быстро подобрать что-то подходящее. Чуть более продвинутая версия стока…
И конечно профессиональные иллюстраторы не останутся без работы. Возможно даже наоборот — такие инструменты избавят их от рутинных однотипных простых вещей, и позволит заниматься чем-то более и интересным и нетривиальным.
Еще интересный момент, который я упустил... Используемая вами функция batch_encode_plus, при настройках padding=True, truncation=True сделает ровно то, что вы и хотели - создаст батч с токенизированными входными последовательностями равной длины. Если при этом токенайзер знает максимальную размерность входа, или вы укажете параметр max_length - то не больше максимальной, но! Важно понимать, что при padding=True - он не будет добивать до максимальной, если ВСЕ последовательности в сете короче. Т.е. они будут просто самой большой длины из тех, что есть. А вот что бы их сделать ровно max_length не больше и не меньше, нужно указывать padding = 'max_length'. добавил пару примеров в colab.
split - еще хуже! Вы в таком случае обрезаете половину значащего текста.
Токены, это токены! Не слова, не символы. И как строка будет перекодирована в токены - зависит от токенайзера: в "ванильном" мультиязычном берте в тестовой строке - 24 токена, в DeepPavlov - 16, после split() - 9! См. пример.
>>> А можете привести пример воспроизводимого кода, в котором показано, что padding=True, truncation=True будет достаточно, для обрезания и с той и с другой стороны предложения.
Да. см ссылку выше. Классификатор берта знает размер входа модели, что называется "из коробки" - там достаточно этих двух параметров. DeepPavlov пошли своим путем - у них не знает. :) Но там достаточно добавить просто ограничение в 512 и все будет хорошо. Не нужно ничего пытаться высчитывать - зачем? Где вы взяли эту чушь про "разреженность данных"?
>>> В чем смысл навешивать лишний слой нейронки поверх Bert, если сам Bert не меняет свои предобученные веса...
Ну как бы в этом сущность fine tuning вообще-то. :) И да - можно обучить небольшую сеть на эмбеддингах - это тоже вариант, но усложняет pipeline. А смысл очень простой: берт обучался на большом релевантном датасете, в нем контролировались важные параметры вроде перплексии и те, кто его обучали добились почти идеальных эмбеддингов для широкого класса задач. Вы своим дообучением на небольшой выборке веса не улучшите, а с большой вероятностью добьетесь оверфита на тестовой выборке в ущерб генерализации. Иногда без этого никак (когда задача узкая и универсальных эмбеддингов недостаточно), но у вас явно не тот случай: оценка тональности отзывов - хрестоматийный пример!
Ну и да - при чем тут "лишний слой"? Вы же используете BertForSequenceClassification - а это как раз и есть берт, плюс небольшой классификатор на выходе. :) Так что слой там уже и так есть, нужно просто немного настроить обучение, что бы обучался только этот слой - это еще и значительно быстрее! И уже только если вы понимаете, что на основе ванильных эмбеддингов этот классификатор не может решить задачу, тогда решать уже - действительно брать с берта эмбеддинги и обучать что-то посерьезнее, или пожертвовать предобученными весами берта.
И еще: словарь берта - это токенайзер. Так что словарь вы точно не расширяете... обучение токенайзера - отдельная тема и это уж точно не файн-тюнинг.
>>> поэтому для train и test буду брать предложения длиной 417, а не 512 как по умолчанию, для того, чтобы уменьшить разреженность данных...
Ох... все в кучу. Какая "разреженность данных"! У вас на входе берта вектор в 512 токенов, считая стартовый и оконечный. Вы берете предобученный токенайзер, который знает эту размерность и все, что вам нужно сделать, это выставить padding=True, truncation=True, что бы недостающее забивалось, лишнее обрезалось - все! А вы зачем-то проверяете длину строк... Вы же знаете, да, что токен ≠ символ? то, что у вас 417 символов в строке не говорит о том, что у вас 417 токенов будет. Их будет меньше: токен ближе к понятию слова, иногда - части слова, но не букве. Вы берете датасет и говорите ему забивать до 417 токенов (хотя по факту в токенах там я дума будет не больше 200 всегда), но при этом на входе у вас ожидается 512... Хм.. Полагаю это вообще должно давать ошибку, при условии, что вы не используете модифицированную модель берта со входом 417. Проверить не могу, тк. from_pretrained('rubert_base_cased_sentence/') - это что-то с вашего локального диска, а не из хаба хуггинов. Но если брать from_pretrained('DeepPavlov/rubert-base-cased-sentence') - будет ошибка, к гадалке не ходить хотя, может и не будет (у хуггингов модель навороченная - может приводить к нужной размерности сама), но это все равно глупо!
Ну и так - по уму надо бы конечно зафризить параметры самого берта и обучать только классификатор:
for param in model.bert.parameters():
param.requires_grad = False
Иначе это в общем не совсем Fine-Tune. Хотя это, конечно по-всякому бывает.
Как же бесят феминитивы от слов с ор/ер, где ударения не падают на последний слог. Вызывает отторжение на уровне физиологии - надругательство над языком. Авторка, блогерка, докторка... Ассоциации, простите больше с кокотка и проститутка, чем с пионерка и лаборантка. Нету таких слов! От безударных скорее будет блогерша и авторша, хотя на мой взгляд в русском языке женщина блогер, доктор и автор, а все остальное - от лукавого! ;)
Да раньше и деревья были зеленее и девушки красивее... ;) Стандартная мантра про "в наше время такого бардака не было...". Автор стареет просто. ))))))
Хм, а что для вас "заметки"? ;) Очевидно, что в наше время только текста маловато. Как минимум нужны картинки, схемы и как бы не мультимедийный контент. Для меня это уже давно база знаний по всем вопросам, и, следовательно, она вполне очевидно не легче текстового редактора...
"почему вы чем то недовольны" - я где-то высказал недовольство?
"Чубайс, Абрамович, Владельцы «Крупп» и «Байер» в нацисткой Германии" - ну куда же без нацисткой германии-то...
"чтобы окончательно выдать в себе либерала" - ... Внезапно!
Столь много высказываний на грани фола, переход на личности, нацисты, либералы... Но главное - нет ответа на вопрос: если все это не в человеческой природе, то откуда оно все? Извне? Инопланетяне-Рептилоиды-Нацисты-либералы?
Вы зря пытаетесь меня классифицировать. Я к данному вопросу подхожу достаточно отстраненно, как сторонний наблюдатель. И подход "Природа человека не причем- виноват капитализм" вызывает у меня недоумение. Как будто капитализм - это что-то такое навязанное извне,..
Ваши действия рассматриваются как нарушение протокола безопасности! Оставайтесь на месте к вам уже выехали! )))
Ну... Я вам оппонирую, не потому, что в области нейросетей нет проблем и все это надумано. Статья хорошая, много правильного, и проблемы поднятые имеют место быть. Я оппонирую потому, что в том виде, как проблемы сформулированы - они порождают у массы людей ощущение того, что ИНС - тупик и надо "копать в другую сторону". ;)
Факт: нейросети плохо "дообучаются". Это действительно так. Catastrophic forgetting. Но... Эту проблему, как минимум частично можно решить, если новыми данными дополнять один большой датасет и/или брать новые и старые данные в какой-то пропорции. При этом то, что человек, дескать хорошо обучается на малых данных - это не правда. Человек это сильно предобученная система, которая в основном использует именно зеро-шот в задачах, которые решает сразу (кто-бы что не говорил, но формирование новых нейронных связей - процесс очень небыстрый). Сети на примере GPT (а последнее время, стало модно называть примеры в промте - few-shot) тоже так могут.
Факт: Нейросети путаются на тех картинках, на которых человек никогда не запутался бы. Да, и что? Это значит, что сети у нас в голове и ИНС устроены, а главное обучаются сильно по-разному! Но и две разных сети, например какой-нить AlexNet и современный ViT точно так же отличаются друг от друга (будут подвержены разным adversarial-атакам). Важно не то, чем отличаемся, а чем похожи. А похожи тем, что и для нас существует свои adversarial. Полагаю, это значит, что можно подобрать такие архитектуры/методики обучения, которые сведут "путаницу" к допустимому минимуму.
Факт: Сети обученные на одном домене плохо переносятся на другой. Да. А если сеть обучена на многих доменах? ;) Что, как правило верно для человека... То расклад уже немного другой. Если вы возьмете снимки из 10 больниц, то 11 скорее всего зайдет без проблем. Человек тоже учится всему-чему-только-можно и именно этим определяется его высокая адаптивность.
>>> Но на данный момент у нас нет возможности обучить нейросеть на таком количестве данных.
Ну почему же... И датасеты появляются все интереснее. И не столь важно количество данных (хотя все же важно), сколько их... Полнота, что ли. Что бы по возможности вообще убрать такое понятие, как "домен"... Но это отдельная и долгая история! ;)
>>> Например, нейросеть, которая отлично распознает лица европейцев, будет плохо работать на лицах людей из Африки… Для человека проблемы domain shift практически не стоит…
Серьезно? Вы считаете, что настолько же хорошо различаете чернокожих или, скажем, азиатов, как европейцев (при условии, что живете среди европецев)? Вы сильно заблуждаетесь, либо где-то уникальны. Среднестатистическому европейцу «китайцы все на одно лицо».
>>> Даже самое малое изменение картинки, малое добавление шума может сильно изменить ответ нейросети. Посмотрим, например, на две картинки ниже.
Шум подбирается специально через бекпроп под конкретную архитектуру. Не факт, что для сетки у вас в голове нельзя подобрать такой же. )) Впрочем, в основном такие атаки актуальны для чистых конволюционнок, с современными архитектурами вроде не очень актуально.
>>> При малом количестве обучающих данных нейросети переобучаются. Человек же может обучиться под новую задачу на основе ограниченного опыта.
Вы путаете обучение (изменение весов) и иференс! ) Человек на малом количестве опыта не обучается, а использует те репрезентации, которые есть. Современные нейросети тоже так умеют (зерошот). Обучение у человека организовано иначе, но его можно «эмулировать», если не дообучать на малом, а дополнять «датасет» и дообучать на полном… Предположительно. Там тоже не все просто — проблема дообучения актуальна, но… Блин, не правильно ее иллюстрировать сравнивая обучение сети на малом наборе данных и человека, который первый раз видит какую-то задачу и быстро ей «научается». Корректнее сравнение с GPT, которой в промте дается пример того, что нужно сделать. Но в этом примере человек и нейросеть практически идентичны.
За структуру…
В современных нейросетях все больше разговоров за всевозможные латентные пространства. Они многомерны. Знаменитый пример world2vec: «king-man+woman=queen»(в векторном виде), или тот же самый фокус для FaceNet с очками показывает, что в этом векторном представлении могут содержаться довольно разнообразные структурные компоненты… Главный вопрос — как сделать так, что бы эта структура в конечном итоге соответствовала нашей. Есть мнение, что только если датасетом будет сама жизнь. )
Сравните технологии производства чипов и прогресс за эти 26 лет, например. Вот неплохой обзорчик. Я думаю можно привести много примеров из других областей, что бы понять, что прогресс с повсеместным распространением компьютеров значительно ускорился.
Но в чем-то вы правы. Он ускорился за счет переложения части функционала на электронные системы, что возможно несколько изменило общий «интеллектуальный профиль» инженера. Но насколько это плохо для прогресса — вопрос. Порог вхождения, время, необходимое для подготовки специалиста, а так же период его продуктивности — критические параметры для прогресса в целом. Да, есть вероятность, что современный инженер менее глубоко понимает какие-то аспекты и нюансы, но зато за счет автоматизации он может проверить полсотни гипотез за час, автоматически или полуавтоматически подобрать параметры сложной модели, запустить симуляцию в конце-концов!
Я уверен, что были обвинения справочникам, что они расхолаживают, мол раньше все нужное в голове держали, или калькуляторам, что люди считать разучились. ;)
Я хорошо понимаю о чем вы: я сам, к примеру, плохо себе представляю разработку больше 100 строк кода без google под боком, но… Не вполне уверен, что это так уж плохо! Ресурс мозга тоже не бесконечен, и возможно перекладывая часть функций на компьютеры, мы эти ресурсы высвобождаем.
Я не говорю, что проблема именно и только в российском происхождении. Скорее стечение факторов. Но учитывая паранойю про русских хакеров, компания из России, разрабатывающая мультитул для "хаккеров"... Ну, закономерно, что они решили перебдеть. ;)
Удивляет что среди всех комментариев нет ни одного (или я не внимательно читал?), предполагающего, что проблема в российском происхождении бизнеса. Что компания зарегистрирована в штатах, не отменяет того факта, что основатель и большая часть команды - россияне. Логично предположить, что подобная компания в текущих реалиях, занимающаяся разработкой хакерских примочек - первая в очереди. С учетом повсеместной "отмены" всего российского...
Ну… это не сильно хуже, чем сейчас, когда большинство обречено на унылую работу без которой можно обойтись… работа ради работы, а не результата.
Вы уверены, что это не является самовнушением? Каким образом вы отличаете «неестественность картинки»? В данном конкретном посте картинки, на мой взгляд, довольно адекватны. На некоторых доменах, типа лиц и рук SD действительно лажает и результат выглядит криповато, но, что б везде…
В идеале вам бы провести слепое тестирование — убедится, что вы сами себя не накрутили, или у вас не реакция на современных художников такая…
Что можете об этих сказать:
Если только идти по модели Мира полудня, Стругацких, когда работа — это привилегия, и ты должен доказать, что нужен/способен/действительно хочешь и т.п. Т.е. базовые потребности закрыты у всех, но есть некоторое число реально востребованных вакансий, где к соискателю серьезные требования и длинная скамейка запасных. Что бы ЛЮБАЯ работа была престижна и уважаема, в силу самого факта принесения пользы обществу, и мерилом оной будут не деньги, а что-то иное — социальный капитал например, право голоса…
Но все это сложно реализовать в капиталистической среде. А социализм и тем паче коммунизм не взлетели… ХЗ, что это должна быть за формация…
И конечно профессиональные иллюстраторы не останутся без работы. Возможно даже наоборот — такие инструменты избавят их от рутинных однотипных простых вещей, и позволит заниматься чем-то более и интересным и нетривиальным.
Еще интересный момент, который я упустил... Используемая вами функция
batch_encode_plus, при настройках padding=True, truncation=True сделает ровно то, что вы и хотели - создаст батч с токенизированными входными последовательностями равной длины. Если при этом токенайзер знает максимальную размерность входа, или вы укажете параметр max_length - то не больше максимальной, но! Важно понимать, что при padding=True - он не будет добивать до максимальной, если ВСЕ последовательности в сете короче. Т.е. они будут просто самой большой длины из тех, что есть. А вот что бы их сделать ровно max_length не больше и не меньше, нужно указывать padding = 'max_length'. добавил пару примеров в colab.С токенами, понимаете? Не со словами...
В приеденном выше примере split() разобьет строку на две. А токенов там, после токенайзера - шесть!
split - еще хуже! Вы в таком случае обрезаете половину значащего текста.
Токены, это токены! Не слова, не символы. И как строка будет перекодирована в токены - зависит от токенайзера: в "ванильном" мультиязычном берте в тестовой строке - 24 токена, в DeepPavlov - 16, после split() - 9! См. пример.
>>> А можете привести пример воспроизводимого кода, в котором показано, что padding=True, truncation=True будет достаточно, для обрезания и с той и с другой стороны предложения.
Да. см ссылку выше. Классификатор берта знает размер входа модели, что называется "из коробки" - там достаточно этих двух параметров. DeepPavlov пошли своим путем - у них не знает. :) Но там достаточно добавить просто ограничение в 512 и все будет хорошо. Не нужно ничего пытаться высчитывать - зачем? Где вы взяли эту чушь про "разреженность данных"?
>>> В чем смысл навешивать лишний слой нейронки поверх Bert, если сам Bert не меняет свои предобученные веса...
Ну как бы в этом сущность fine tuning вообще-то. :) И да - можно обучить небольшую сеть на эмбеддингах - это тоже вариант, но усложняет pipeline. А смысл очень простой: берт обучался на большом релевантном датасете, в нем контролировались важные параметры вроде перплексии и те, кто его обучали добились почти идеальных эмбеддингов для широкого класса задач. Вы своим дообучением на небольшой выборке веса не улучшите, а с большой вероятностью добьетесь оверфита на тестовой выборке в ущерб генерализации. Иногда без этого никак (когда задача узкая и универсальных эмбеддингов недостаточно), но у вас явно не тот случай: оценка тональности отзывов - хрестоматийный пример!
Ну и да - при чем тут "лишний слой"? Вы же используете
BertForSequenceClassification- а это как раз и есть берт, плюс небольшой классификатор на выходе. :) Так что слой там уже и так есть, нужно просто немного настроить обучение, что бы обучался только этот слой - это еще и значительно быстрее! И уже только если вы понимаете, что на основе ванильных эмбеддингов этот классификатор не может решить задачу, тогда решать уже - действительно брать с берта эмбеддинги и обучать что-то посерьезнее, или пожертвовать предобученными весами берта.И еще: словарь берта - это токенайзер. Так что словарь вы точно не расширяете... обучение токенайзера - отдельная тема и это уж точно не файн-тюнинг.
tokenizer("Привет, мир!", return_tensors='pt', max_length = 10, padding = 'max_length', truncation=True)>>> {'input_ids': tensor([[ 101, 77527, 128, 6913, 106, 102, 0, 0, 0, 0]], device='cuda:0'), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], device='cuda:0'), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 0, 0, 0, 0]], device='cuda:0')}101 = [CLS], 102 = [SEP], 128 = ",", 106 = "!"
Итого слова "Привет" и "мир" кодируются каждое в единственный токен 77527 и 6913 соответственно.
>>> поэтому для train и test буду брать предложения длиной 417, а не 512 как по умолчанию, для того, чтобы уменьшить разреженность данных...
Ох... все в кучу. Какая "разреженность данных"! У вас на входе берта вектор в 512 токенов, считая стартовый и оконечный. Вы берете предобученный токенайзер, который знает эту размерность и все, что вам нужно сделать, это выставить padding=True, truncation=True, что бы недостающее забивалось, лишнее обрезалось - все! А вы зачем-то проверяете длину строк... Вы же знаете, да, что токен ≠ символ? то, что у вас 417 символов в строке не говорит о том, что у вас 417 токенов будет. Их будет меньше: токен ближе к понятию слова, иногда - части слова, но не букве. Вы берете датасет и говорите ему забивать до 417 токенов (хотя по факту в токенах там я дума будет не больше 200 всегда), но при этом на входе у вас ожидается 512... Хм.. Полагаю это вообще должно давать ошибку, при условии, что вы не используете модифицированную модель берта со входом 417. Проверить не могу, тк.
from_pretrained('rubert_base_cased_sentence/')- это что-то с вашего локального диска, а не из хаба хуггинов. Но если братьfrom_pretrained('DeepPavlov/rubert-base-cased-sentence')-будет ошибка, к гадалке не ходитьхотя, может и не будет (у хуггингов модель навороченная - может приводить к нужной размерности сама), но это все равно глупо!Ну и так - по уму надо бы конечно зафризить параметры самого берта и обучать только классификатор:
for param in model.bert.parameters():param.requires_grad = FalseИначе это в общем не совсем Fine-Tune. Хотя это, конечно по-всякому бывает.
Как же бесят феминитивы от слов с ор/ер, где ударения не падают на последний слог. Вызывает отторжение на уровне физиологии - надругательство над языком. Авторка, блогерка, докторка... Ассоциации, простите больше с кокотка и проститутка, чем с пионерка и лаборантка. Нету таких слов! От безударных скорее будет блогерша и авторша, хотя на мой взгляд в русском языке женщина блогер, доктор и автор, а все остальное - от лукавого! ;)
Да раньше и деревья были зеленее и девушки красивее... ;) Стандартная мантра про "в наше время такого бардака не было...". Автор стареет просто. ))))))
Хм, а что для вас "заметки"? ;) Очевидно, что в наше время только текста маловато. Как минимум нужны картинки, схемы и как бы не мультимедийный контент. Для меня это уже давно база знаний по всем вопросам, и, следовательно, она вполне очевидно не легче текстового редактора...
А OneNote как же? ;)
Мне зашло из-за возможности размещать текст и картинки практически произвольно...
"почему вы чем то недовольны" - я где-то высказал недовольство?
"Чубайс, Абрамович, Владельцы «Крупп» и «Байер» в нацисткой Германии" - ну куда же без нацисткой германии-то...
"чтобы окончательно выдать в себе либерала" - ... Внезапно!
Столь много высказываний на грани фола, переход на личности, нацисты, либералы... Но главное - нет ответа на вопрос: если все это не в человеческой природе, то откуда оно все? Извне? Инопланетяне-Рептилоиды-Нацисты-либералы?
Вы зря пытаетесь меня классифицировать. Я к данному вопросу подхожу достаточно отстраненно, как сторонний наблюдатель. И подход "Природа человека не причем- виноват капитализм" вызывает у меня недоумение. Как будто капитализм - это что-то такое навязанное извне,..