Код файнтюнинга оригинального CLIP на русский язык

Overview

О чем репозиторий

В этом репозитории представлен способ файтюнить оригинальный CLIP на новый язык

Model predictions

Почему модель не видит женщину и откуда на картинке с текстом слон?

Основные особенности:

  • Используются оригинальные картиночные и текстовые трансформеры;
  • Поэтому есть возможность использовать оригинальные эмбединги картинок, а тексты обучать или дообучать на требуемый язык.

Что ожидалось?

  • Для обучения трансформера русскому языку будет достаточно 3.7 млн пар картинка-текст;
  • Будет использована вся сила исходных картиночных эмбедингов, обученных на сотнях миллионов пар картинка-текст;
  • Сохранится скорость и качество работы алгоритма.

Что не получилось?

  • Модель выучила русский, но не так хорошо, как ожидалось. Видно, что она многое не понимает. Газель для нее - это машина, а не животное. А метроном и минарет для неё вообще неизвестны;
  • 3.7 млн пар мало для полноценного обучения текстового трансформера для нового языка, не хватает охвата понятий;

Как улучшить?

  • Больше и разнообразнее данных;
  • Заменить текстовый трансформер на уже предобученную языковую модель нужного языка.

Какие репозитории использовались?

Детали

Веса обученной модели можно скачать по ссылке. Код инференса есть в скрипте testing.py

Датасет

Датасет взят с соревнования Yandex Cup 2021, но правилами запрещается использовать его вне соревнования.

Всего там было 5.5 млн картинок, к каждой шло 5 поисковых запросов, после которых люди выбрали эту картинку.

Вместо картинок были ссылки на картинки, мне удалось скачать только 3.7 млн.

Токенайзер для русского языка (и любого другого)

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

В итоге я сделала так:

  • Переписала оригинальный токенайзер так, чтобы он умел в английские буквы и русские;
  • Пришлось убрать обработку utf символов, так как русские слова тогда мапились в набор букв, а не в слово. Никак иначе не удавалось разобраться с этой проблемой;
  • Оставила английские bpe пары, так как в датасете встречались английские слова;
  • Добавила русские bpe пары, нашла файл только у переводчика от фейсбука, но пришлось почистить от дублей.

Трансформер для картинок

Оригинальный ViT-B/32 с замороженными весами.

Обучение

  • Подгружала веса оригинального клипа;
  • Замораживала картиночный трансформер;
  • Текстовый трансформер переопределяла с новым размером словаря;
  • Дальше стандартное обучение clip, где картиночные эмбединги не меняются, а текстовые учатся с нуля;
  • Всего было 30 эпох, на одну эпоху уходило 70-90 минут, всего около 40 часов на A100 80gb c amp.

Ресурсы

Обучение производилось на платформе Yandex Datasphere, по сути - это jupyter lab/notebooks с урезанным bash функционалом, но очень сильными машинками.

Jupyter наложи свой отпечаток, в коде остались ноутбуковские артефакты - например, вынесение аргументов в класс в скрипте, а не передача через командную строку.

К сожалению, у меня не было возможности отладить код на обычном сервере или компьютере, так как ноут слабый, всё падало при загрузке модели.

Но код в том виде, что есть, работает запуском скрипта main.py (если его импортировать в ноутбук, хехе)

Результаты

Метрики по нескольким датасетам можно посмотреть ниже. А сейчас хотелось бы обсудить особенности обученной модели.

correlation

  • В целом, результаты неплохие и все кроме одной картинки имеют наибольшую корреляцию с подходящим текстом, а с остальными маленькую;
  • Но про фото текста модель, увы, не знает ничего, получается, в датасете не было достаточного количества подобных данных;
  • Ракета угадывается на нескольких фото, хотя один раз, вероятно, это не она, что тоже нормально;
  • Самое забавное с фото кота, потому что в надписи присутствует слово фото - и модель, напомню, обученная на поисковых запросах, хорошо знает что такое фото. Для силуэта лошади и текста она выдает низкие корреляции. Силуэт - это рисунок, а про текст она ничего не знает. Если заменить фразу "фото морды полосатого кота" на "морда полосатого кота", то эти корреляции уходят.

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

В репозитории и блоге Сбера, откуда я взяла код для этих двух визуализаций, с женщиной всё в порядке. А текст тоже имеет неверные корреляции.

Еще одна картинка с матрицей ошибок по датасету cifar10. Для остальных датасетов визуализации можно найти в папке pics.

cifar10

Самым проблемным оказался кот и совершенно не ясно почему! Остальные недопонимания достаточно понятны, а с котом нет.

Результаты - метрики

Сравнительная табличка результатов работы нескольких алгоритмов, метрика accuracy потому что у Сбера и OpenAI она уже посчитана.

У моей модели и сберовской язык русский (и мы классы могли немного по-разному перевести).

Для OpenAI язык английский, данные из статьи.

Датасет Cifar10 Cifar100 Caltech101 Размер датасета для обучения Время обучения
CLIP Russian (моя модель) 76% 32% 54% 3.7 млн картинок и 5 поисковых запросов к каждой ~40 часов на А100 80gb
Sber ruCLIP* 78% 41% - Предобученная RuGPT3Small и 3 млн пар 5 дней на 16 Tesla GPU V100
OpenAi CLIP** 95% 80% 93% 400 million (image, text) pairs collected from the internet 12 days on 256 V100 GPUs***
  • * Блогпост о ruCLIP от Сбера
  • ** Paper OpenAI
  • *** У оригинального клипа это всё время обучения, в то время как у Сбера и моего клипа - это только дообучение русскому языку

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

Названия классов, переведенных на русский, и код инференса можно увидеть в папке testing.

Owner
Valentina Biryukova
Data Scientist, ML/DL Engineer
Valentina Biryukova
This module extends twarc to allow you to print out tweets as text for easy testing on the command line

twarc-text This module extends twarc to allow you to print out tweets as text for easy testing on the command line. Maybe it's useful for spot checkin

Documenting the Now 2 Oct 12, 2021
gwcheck is a tool to check .gnu.warning.* sections in ELF object files and display their content.

gwcheck Description gwcheck is a tool to check .gnu.warning.* sections in ELF object files and display their content. For an introduction to .gnu.warn

Frederic Cambus 11 Oct 28, 2022
A simple, fantasy and fast note taking program.

notes A simple, fantasy and fast note taking program Installation This program supposed to run in linux and may have some bugs on windows or any other

Ali Hosseinverdi 1 Apr 06, 2022
A 3D Slicer Extension to view data from the flywheel heirarchy

flywheel-connect A 3D Slicer Extension to view, select, and download images from a Flywheel instance to 3D Slicer and storing Slicer outputs back to F

4 Nov 05, 2022
Simple and easy to use python API for the COVID registration booking system of the math department @ unipd (torre archimede)

Simple and easy to use python API for the COVID registration booking system of the math department @ unipd (torre archimede). This API creates an interface with the official browser, with more useful

Guglielmo Camporese 4 Dec 24, 2021
Convert text with ANSI color codes to HTML or to LaTeX.

Convert text with ANSI color codes to HTML or to LaTeX.

PyContribs 326 Dec 28, 2022
The blancmange curve can be visually built up out of triangle wave functions if the infinite sum is approximated by finite sums of the first few terms.

Blancmange-curve The blancmange curve can be visually built up out of triangle wave functions if the infinite sum is approximated by finite sums of th

Shankar Mahadevan L 1 Nov 30, 2021
The fetch of the delegator list and the input of the epoch nonce need to be done independently

raffle The fetch of the delegator list and the input of the epoch nonce need to be done independently. Get the list of delegators at the epoch change.

1 Dec 15, 2021
Load dependent libraries dynamically.

dypend dypend Load dependent libraries dynamically. A few days ago, I encountered many users feedback in an open source project. The Problem is they c

Louis 5 Mar 02, 2022
Simple tools to make/dump CPC+ CPR cartridge files

Simple tools to make/dump CPC+ CPR cartridge files mkcpr.py: make a CPR file from files (one chunk per file); see notes cprdump.py: dump the chunks of

Juan J. Martínez 3 May 30, 2022
Lookup for interesting stuff in SMB shares

SMBSR - what is that? Well, SMBSR is a python script which given a CIDR/IP/IP_file/HOSTNAME(s) enumerates all the SMB services listening (445) among t

Vincenzo 112 Dec 15, 2022
Python Example Project Structure

Python Example Project Structure Example of statuses that can be in readme: Visit my docs for the full documentation, examples and guides. With this p

1 Oct 31, 2021
PKU team for 2021 project 'Guangchangwu detection'.

PKU team for 2021 project 'Guangchangwu detection'.

Helin Wang 3 Feb 21, 2022
A water drinking notification every hour to keep you healthy while coding :)

Water_Notification A water drinking notification every hour to keep you healthy while coding. 💧 💧 Stay Hydrated Stay Healthy 💧 💧 Authors @CrazyCat

Arghya Banerjee 1 Dec 22, 2021
A Python script to delete movies with a certain tag after a certain amount of days.

radarr_autodelete Simple script, which deletes movies with a specific tag after a certain amount of days Pip Packages pip3 install pyarr python-dotenv

7 Dec 06, 2022
Better GitHub statistics images for your profile, with stats from private and public repos

Better GitHub statistics images for your profile, with stats from private and public repos

Jacob Strieb 2k Dec 30, 2022
Block fingerprinting for the beacon chain, for client identification & client diversity metrics

blockprint This is a repository for discussion and development of tools for Ethereum block fingerprinting. The primary aim is to measure beacon chain

Sigma Prime 49 Dec 08, 2022
Checks for Vaccine Availability at your district and notifies you using E-mail, subscribe to our website.

Vaccine Availability Notifier Project Description Checks for Vaccine Availability at your district and notifies you using E-mail every 10 mins. Kindly

Farhan Hai Khan 19 Jun 03, 2021
Scraping comments from the political section of popular Nigerian blog (Nairaland), and saving in a CSV file.

Scraping_Nairaland This project scraped comments from the political section of popular Nigerian blog www.nairaland.com using the Python BeautifulSoup

Ansel Orhero 1 Nov 14, 2021
Repositorio com arquivos processados da CPI da COVID para facilitar analise

cpi4all Repositorio com arquivos processados da CPI da COVID para facilitar analise Organização No site do senado é possivel encontrar a lista de todo

Breno Rodrigues Guimarães 12 Aug 16, 2021