Я был выбран в качестве участника Google Summer of Code (19) на Tensorflow для работы с командой tenorflow hub. Мой профиль на github находится здесь. В этой статье я задокументирую приложение, период объединения сообщества и обзор моего времени. Мои наставники - Войтех Бардиовский и Сачин Йоглекар, а второй товарищ по команде - Адриш Дэй. Пейдж Бейли также работает над наблюдением за парами ученик-наставник. Эта статья больше похожа на биографию, чем на полностью технический пост.

Применение

Во время периода подачи заявки я изначально хотел подать заявку с предложением проекта по тензорному потоку-ранжированию и быстро просмотрел документы, перечисленные в репозитории. Рейтинг Tensorflow - это недооцененная библиотека для обучения ранжированию задач с реализациями общих функций потерь и метрик для соответствующих проблем. Обучение ранжированию относится к использованию методов машинного обучения для результатов систем поиска информации, например, если у вас есть 50000 релевантных результатов для данного запроса, но вы, по сути, хотите, чтобы наиболее релевантный результат для вас был на вершине, немного менее релевантен результат быть на втором и так далее. Каждая перестановка из 50000 документов на самом деле имеет для вас определенную полезность ранжирования, и вы хотите, чтобы вам была представлена ​​лучшая перестановка результатов этих документов. Я подумал, что продукт классный. Однако после некоторого изучения я понял, что библиотека уже устранила большинство проблем, упомянутых в проблемах Github, и мне нужно изучить другие проекты. Предложение не получилось.

После этого я начал изучать библиотеку Tensorflow-Hub, и она мне сразу понравилась. С помощью Tenorflow Hub люди могут получать повторно используемые компоненты других моделей машинного обучения, такие как предварительно обученные вложения и веса для сверточных сетей для задач компьютерного зрения, которые были обучены в Imagenet, и сразу же использовать их в своих собственных проектах, собирать их вместе, настраивать их на своих собственный набор данных и так далее. В итоге я сделал предложение о добавлении дополнительных модулей в хаб и подал заявку.

Попасть в

На самом деле я не ожидал, что меня примут, март 2019 года (период подачи заявок) был для меня очень тяжелым временем. Две мои кошки (Мотурам и Мини) умерли один за другим за две недели от кошачьей панлейкопении. Моя тетя принесла из зоомагазина двух новых кошек, которые заразились вирусом и распространились на моих кошек. Хуже всего то, что мои кошки не были вакцинированы, и один из котят, привезенных моей тетей, также умер (тот, у кого действительно был вирус). Панлейкопения - это разрушительный вирус, способный буквально уничтожить колонию кошек за неделю. С 30 февраля по 20 марта я не работал ни над чем, связанным с GSoC. Для нас дома это была буквально война не на жизнь, а на смерть. С одной стороны, я должен был попытаться остановить распространение вируса, с другой стороны, я хотел проводить как можно больше времени со своими умирающими кошками. Я бросил свой курс языка программирования, потому что было невозможно справиться с ситуацией, работая полный рабочий день на всех курсах. У меня был проект для моего курса машинного обучения, в котором мы пытались предсказать цены на акции на основе данных новостей, и это тоже отнимало много времени.

Я начал работать над заявкой в ​​последние 10 дней предложения и закончил ее 7 апреля. Я оцепенел от горя и на самом деле ничего не чувствовал, кроме того факта, что А) были более опытные люди, чем я, которые тоже подали заявку на Tensorflow, и мои шансы на то, чтобы быть принятым, были невелики, Б) после того, как я столкнулся со смертью за членов нашей семьи (наши питомцы - члены нашей семьи), какое-то время я ни о чем не хотел думать. Я также боялся, что подам заявку и получу отказ, поскольку более 1500 человек болтали на канале Gitter о своем приложении, в то время как многие другие организации получили меньше внимания. Но моя мать красноречиво сказала: «Нет логической причины, по которой вас следует принимать во внимание каждый раз, когда вы к чему-то обращаетесь», тонко подчеркнув, что рисковать - это нормально.

Прошедший GSOC 2018

Я работал с Центром Интернета и общества Беркмана Кляйна, исследовательской лабораторией в Гарварде, которая занимается медийными данными для проекта визуализации сети в последней версии GSoC, и создал Mediaviz, библиотеку сетевой визуализации для автоматического масштабирования графиков с принудительной компоновкой. У меня был опыт работы с проектами машинного обучения из Kaggle и моих классных проектов (вот мой веб-сайт с большим количеством проектов), но перейти к проекту в стиле глубокого обучения из сетевой визуализации на самом деле довольно сложно.

Во-первых, разный образ мышления. Когда мы делаем проект dataviz, внимание уделяется тому, какую информацию я представляю, и использую ли я правильные абстракции (цвет, форма, макет и т. Д.) Для ее представления? Какую информацию получит потребитель dataviz? Но когда мы делаем проект машинного обучения, мы должны думать о других вещах, таких как производительность модели, время обучения, полезность решаемой проблемы, развертывание и так далее. Когда дело доходит до глубокого обучения, вместо обычных параметров мы должны думать об архитектуре модели.

Связь с сообществом

Во время периода сближения с сообществом я впервые познакомился с Адришем, который в итоге оказался из Калькутты. Прямо сейчас он делает образцы TPU для TF-Hub и тренирует ESRGAN как модуль для своего проекта. Вскоре я сел со своим наставником Войтехом, и мы начали изучать проекты. Мы остановились на обучении ULMFiT (Тонкая настройка универсальной языковой модели) в качестве модуля для TF-Hub вместе с исправлением других проблем с github и внедрением новых функций. Я новичок в использовании глубокого обучения для НЛП, но довольно быстро начинаю понимать. Мы также разработали план выполнения задач, определили соответствующие шаги для проектов, и я начал возиться с кодовой базой, чтобы ознакомиться.

Честно говоря (опять же) перейти на Tensorflow 2.0 напрямую проще, но когда я работаю с движущейся базой кода, такой как текущая бета-версия 2.0, все буквально меняется. Чтобы понять или обновить некоторые совместные приложения или функции до TF2.0, важно также понимать соответствующие аспекты предыдущего API, а также иметь практическое представление о том, какие части были объявлены устаревшими или добавлены.

Рабочее время

Обзор

В первую неделю я исправил колабо о том, как выполнять классификацию текста с помощью наборов данных kaggle и тензорного хаба. Затем я создал инструмент экспорта для экспорта предварительно обученных встраиваний, таких как FastText и Glove, в модуль концентратора тензорного потока. Прямо сейчас я использую модуль концентратора, который я сделал, чтобы сделать демонстрационную коллаборацию, чтобы показать, как обучить модель для любого местного языка с помощью Tf-Hub, и углубиться в ULMFiT.

Текст, текст и другой текст

В этот раз мой проект очень ориентирован на НЛП. Создавая предварительно обученный экспортер встраивания, мне пришлось привыкнуть к файловому вводу-выводу tenorflow, встраиванию слоев и прояснить мои представления о том, как слой встраивания работает внутри. Встраиваемый слой работает, по сути, как таблица поиска, где мы изучаем веса, соответствующие токенам (словам или символам), на основе контролируемой задачи, такой как обучение языковой модели. Результирующие векторы слов поддерживают семантическую связь между словами и работают как плотное представление слов в качестве входных данных для моделей. Множественные предварительно обученные вложения доступны в Интернете, такие как FastText и Glove, мой экспортер встраиваний делает модуль TF2.0 из этих встраиваний, который можно использовать для последующих задач. Например, здесь мы берем вложения FastText для Bangla, моего родного языка, и делаем его модулем концентратора.

Для демонстрации на местном языке, которую я делаю прямо сейчас, мы используем более крупную версию модуля со 100 000 наиболее часто используемых токенов и пытаемся классифицировать набор данных новостной статьи Bangla. Конечно, вместо Bangla тот же процесс можно использовать для любого другого языка, для которого доступны предварительно обученные вложения.

Баланс с университетом

К счастью, в этом семестре я прохожу курс НЛП, который проходит очень хорошо. Учитель садист, поэтому он поручил нам реализовать эту работу Неконтролируемый машинный перевод с использованием только одноязычных корпусов. Мы довольно хорошо обсудили RNN, векторы слов, обучение языковой модели и архитектуру кодировщика-декодера для моделей Seq-to-Seq. Мой проект для этого курса - создать модель машинного перевода с бангла на английский. Мы уже попросили набор данных у других профессоров и в конечном итоге заставили одного из наших младших ребят загрузить набор данных машинного перевода с бангла на английский из IEEE. Наверное, буду реализовывать проект с помощью tf.keras.

Чтобы быть ясным, я не особо увлекаюсь данными Бангла, но вся область НЛП как бы втягивает меня, и, учитывая, что в прошлый раз, когда я был на конференции НЛП в Бангладеш, все жаловались на состояние НЛП в Бангладеш, я Я действительно плыву по течению. Кроме того, полученные знания должны быть полезны в будущих проектах, когда я хочу работать над более общими проблемами. Кроме этого, у меня есть курс по микропроцессорам, который я считаю невероятно скучным, курс истории требований GED, над которым я пока откладывал, и кучу лабораторных работ. Уравновешивание работы GSOC с университетом - это еще не такая большая нагрузка. В учебные дни я остаюсь с утра до вечера в своем университете и в основном работаю по выходным. У других участвующих в GSOC студентов есть собственное расписание. Это мой последний GSOC, так что я вполне доволен полученным опытом.

Модульное тестирование и очистка кода

В Tensorflow есть набор тестов tf.test для запуска тестов, который я взял при реализации экспортера встраивания. На самом деле моей самой большой проблемой была очистка кода, и мне пришлось привыкнуть к инструментам автоматического форматирования.

Базель

Bazel - это инструмент сборки, используемый тензорным потоком и многими другими продуктами. Я не углублялся в Bazel, кроме как научился создавать и запускать тесты и, в значительной степени, как изменять файлы BUILD. Но это был новый инструмент, который мне пришлось изучить, и отслеживать рабочее пространство и каталоги пакетов может быть несколько проблематично.

Облачная платформа Google

До GSOC я понятия не имел, как работать с облачной консолью. Раньше я экспериментировал с запуском записных книжек Gradient в пространстве документов, но когда дело дошло до AWS, мне это показалось довольно трудным. Кроме того, поскольку я из Бангладеш, у нас возникла огромная проблема с добавлением способов оплаты. У моей семьи не было международной кредитной карты, а та, которая у нас есть, должна пройти несколько процессов, таких как подтверждение денег с паспортом в банке, а затем запрос на открытие международного шлюза для оплаты. Узнав, как добавлять кредиты GCP и позаботившись о платежах, мне нужно было научиться запускать виртуальную машину с глубоким обучением в облаке с помощью графического процессора. Затем возник вопрос об увеличении квоты.

Мне очень понравился этот новый проект AI Hub, представленный в Google I / O19, который представляет собой каталог всех источников, связанных с ИИ, которые предоставляет Google, включая готовые экземпляры виртуальных машин и способы их запуска. Настоящая проблема с облаком заключается не только в стоимости (которая казалась довольно дешевой, если я не использую модели глубокого обучения ежедневно), но и в том, как ее использовать, выгрузка и скачивание данных, работа с ведрами облачного хранилища и привыкание к команде. Инструмент линии gcloud занял у меня некоторое время. Но в конечном итоге я смог использовать встраивание всего fasttext bangla и экспортировать его как ведро 3,5 ГБ для дальнейшего использования.

Первая оценка

Мне казалось, что я делал много ошибок стиля новичка в первом периоде, и мне также пришлось подбирать много нового. Но, как я вижу, моя сила в том, что я учусь довольно быстро, но моя слабость в том, что мне не хватает опыта. Так что наличие такого рода силового кормления меня знаниями действительно работает для меня. Не говоря уже о том, что мой наставник был исключительно полезен, давая мне обратную связь о том, как улучшить и где я ошибаюсь. Он очень общителен и очень терпелив, когда дает обратную связь. Прямо сейчас динамика заставила меня пытаться закончить работу быстро, потому что я работаю таким образом, в то время как наставник поощряет меня делать что-то хорошо, не торопясь. Я прошел первую оценку, так что ура. У нас есть еще два месяца, так что я надеюсь закончить обучение ULMFiT и, надеюсь, стать экспертом в НЛП.