Код файнтюнинга оригинального 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
Gaia: a chrome extension that curates environmental news of a company

Gaia - Gaia: Your Environment News Curator Call for Code 2021 Gaia: a chrome extension that curates environmental news of a company Explore the docs »

4 Mar 19, 2022
Slimbook Battery 4 is the new version with new features that improves battery control and increases battery duration in laptops.

Slimbookbattery Slimbook Battery 4 is the new version with new features that improves battery control and increases battery duration in laptops. This

SLIMBOOK TEAM 128 Dec 28, 2022
A toy repo illustrating a minimal installable Python package

MyToy: a minimal Python package This repository contains a minimal, toy Python package with a few files as illustration for students of how to lay out

Fernando Perez 19 Apr 24, 2022
This is the DBMS Project done in 5th sem of B.E CS.

Student-Result-Management-System This is the DBMS Project done in 5th sem of B.E CS. You need to install SQlite DB Browser in your pc or laptop to ope

Vivek kulkarni 1 Jan 14, 2022
Processamento da Informação - Disciplina UFABC

Processamento da Informacao Disciplina UFABC, Linguagem de Programação Python - 2021.2 Objetivos Apresentar os fundamentos sobre manipulação e tratame

Melissa Junqueira de Barros Lins 1 Jun 12, 2022
Tool that adds githuh profile views to ur acc

Tool that adds githuh profile views to ur acc

Lamp 2 Nov 28, 2021
Fully cross-platform toolkit (and library!) for MachO+Obj-C editing/analysis

fully cross-platform toolkit (and library!) for MachO+Obj-C editing/analysis. Includes a cli kit, a curses GUI, ObjC header dumping, and much more.

cynder 301 Dec 28, 2022
Mommas-cookbook - A Repository About Mom's Recipes

Mommas Cookbook A Repository for Mom's Recipes Contents bacalhau à Gomes de Sá Beef-Rendang bacalhau à Gomes de Sá, recommended by @s0undt3ch One of t

1 Jan 08, 2022
A PG3D API Made with Python

PG3D Python API A Pixel Gun 3D Python API (Public Ver) Features Count: 29 How To Use? import api as pbn Examples pbn.isBanned(192819483) - True pbn.f

Karim 2 Mar 24, 2022
A funny alarm clock I made in python

Wacky-Alarm-Clock Basically, I kept forgetting to take my medications, so I thought it would be a fun project to code my own alarm clock and make it r

1 Nov 18, 2021
A small script I made that takes any standard Decklist of magic the gathering cards and pulls all card images from scryfall at once!

A small script I made that takes any standard Decklist of magic the gathering cards and pulls all card images from scryfall at once!

15 Aug 26, 2022
Drug Discovery App Using Lipinski's Rule-of-Five.

Drug Discovery App A Drug Discovery App Using Lipinski's Rule-of-Five. TAPIWA CHAMBOKO 🚀 About Me I'm a full stack developer experienced in deploying

tapiwa chamboko 3 Nov 08, 2022
BestBuy Script Designed to purchase any item when it becomes available.

prerequisites: Selnium; undetected-chromedriver. This Script is designed to order an Item provided a link from BestBuy.com only.

Bransen Smith 0 Jan 12, 2022
Grimoire is a Python library for creating interactive fiction as hyperlinked html.

Grimoire Grimoire is a Python library for creating interactive fiction as hyperlinked html. Installation pip install grimoire-if Usage Check out the

Scott Russell 5 Oct 11, 2022
rebalance is a simple Python 3.9+ library for rebalancing investment portfolios

rebalance rebalance is a simple Python 3.9+ library for rebalancing investment portfolios. It supports cash flow rebalancing with contributions and wi

Darik Harter 5 Feb 26, 2022
firefox session recovery

firefox session recovery

Ahmad Sadraei 5 Nov 29, 2022
Repo to store back end infrastructure for Message in a Bottle

Message in a Bottle Backend API RESTful API for Message in a Bottle frontend application consumption. About The Project • Tools Used • Local Set Up •

4 Dec 05, 2021
Start and stop your NiceHash miners using this script.

NiceHash Mining Scheduler Use this script to schedule your NiceHash Miner(s). Electricity costs between 4-9pm are high in my area and I want NiceHash

SeaRoth 2 Sep 30, 2022
Source code for Learn Programming: Python

This repository contains the source code of the game engine behind Learn Programming: Python. The two key files are game.py (the main source of the ga

Niema Moshiri 25 Apr 24, 2022
Prototype application for GCM bias-correction and downscaling

dodola Prototype application for GCM bias-correction and downscaling This is an unstable prototype. This is under heavy development. Features Nothing!

Climate Impact Lab 9 Dec 27, 2022