Код файнтюнинга оригинального 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
A utility control surface for Ableton Live that makes the initialization of a Mixdown quick

Automate Mixdown initialization A script that transfers all the VSTs on your MIDI tracks to a new track so you can freeze your MIDI tracks and then co

Aarnav 0 Feb 23, 2022
Run-Your-Own Firefox Sync Server

Run-Your-Own Firefox Sync Server This is an all-in-one package for running a self-hosted Firefox Sync server. It bundles the "tokenserver" project for

Mozilla Services 1.7k Dec 30, 2022
Whatsapp Messenger master

Whatsapp Messenger master

Swarup Kharul 5 Nov 21, 2021
Never miss a deadline again

Hack the Opportunities Never miss a deadline again! Link to the excel sheet Contribution This list is not complete and I alone cannot make it whole. T

Vibali Joshi 391 Dec 28, 2022
Vaksina - Vaksina COVID QR Validation Checker With Python

Vaksina COVID QR Validation Checker Vaksina is a general purpose library intende

Michael Casadevall 33 Aug 20, 2022
Compiler Final Project - Lisp Interpreter

Compiler Final Project - Lisp Interpreter

2 Jan 23, 2022
RELATE is an Environment for Learning And TEaching

RELATE Relate is an Environment for Learning And TEaching RELATE is a web-based courseware package. It is set apart by the following features: Focus o

Andreas Klöckner 311 Dec 25, 2022
IPython: Productive Interactive Computing

IPython: Productive Interactive Computing Overview Welcome to IPython. Our full documentation is available on ipython.readthedocs.io and contains info

IPython 15.6k Dec 31, 2022
Anki for desktop computers

Anki This repo contains the source code for the computer version of Anki. If you'd like to try development builds of Anki but don't feel comfortable b

Ankitects 12.9k Jan 09, 2023
Visualization of COVID-19 Omicron wave data in Seoul, Osaka, Tokyo, Hong Kong and Shanghai. 首尔、大阪、东京、香港、上海由新冠病毒 Omicron 变异株引起的本轮疫情数据可视化分析。

COVID-19 in East Asian Megacities This repository holds original Python code for processing and visualization COVID-19 data in East Asian megacities a

STONE 10 May 18, 2022
Collatz Sanısını Test Eden Ve Kanıtlayan Bir Python Programı

Collatz Sanısı Collatz Sanısını Test Eden Ve Kanıtlayan Bir Python Programı. Kullanım Terminalde: 1- git clone https://github.com/detherminal/Collatz-

Cemal Mert 2 May 07, 2022
monster hunter world randomizer project

mhw_randomizer monster hunter world randomizer project Settings are in rando_config.py Current script for attack randomization is n mytest.py There ar

2 Jan 24, 2022
Mata kuliah Bahasa Pemrograman

praktikum2 MENGHITUNG LUAS DAN KELILING LINGKARAN FLOWCHART : OUTPUT PROGRAM : PENJELASAN : Tetapkan nilai pada variabel sesuai inputan dari user :

2 Nov 09, 2021
Number calculator application.

Number calculator application.

Michael J Bailey 3 Oct 08, 2021
Reproduce digital electronics in Python

Pylectronics Reproduce digital electronics in Python Report Bug · Request Feature Table of Contents About The Project Getting Started Prerequisites In

Filipe Garcia 45 Dec 20, 2021
🔤 Measure edit distance based on keyboard layout

clavier Measure edit distance based on keyboard layout. Table of contents Table of contents Introduction Installation User guide Keyboard layouts Dist

Max Halford 42 Dec 18, 2022
A simple panel with IP, CNPJ, CEP and PLACA queries

Painel mpm Um painel simples com consultas de IP, CNPJ, CEP e PLACA Início 🌐 apt update && apt upgrade -y pkg i python git pip install requests Insta

MrDiniz 4 Nov 04, 2022
this is a basic python project that I made using python

this is a basic python project that I made using python. This project is only for practice because my python skills are still newbie.

Elvira Firmansyah 2 Dec 14, 2022
Robotic hamster to give you financial advice

hampp Robotic hamster to give you financial advice. I am not liable for any advice that the hamster gives. Follow at your own peril. Description Hampp

1 Nov 17, 2021
Function Plotter✨

Function-Plotter Build With : Python PyQt5 unittest matplotlib Getting Started This is an list of needed instructions to set up your project locally,

Ahmed Lotfy 3 Jan 06, 2022