Эта серия блогов направлена ​​на то, чтобы сосредоточиться на вопросах интервью, которые задавались на следующих должностях:

  • Ученый по данным
  • Инженер НЛП
  • Инженер машинного обучения
  • Аналитик данных

1.Обнимающее лицо:

Hugging Face — это не эмодзи, а библиотека обработки естественного языка со следующей экосистемой:

  • Трансформеры

В Transformers доступны тысячи предварительно обученных моделей для выполнения заданий в различных модальностях, включая текст, зрение и звук.
Эти модели можно использовать в различных ситуациях, в том числе:

📝 Текст на более чем 100 языках для таких задач, как классификация текста, извлечение информации, ответы на вопросы, обобщение, перевод и создание текста.
🖼️ Категоризация изображений, идентификация объектов и сегментация — все это задачи, для которых требуются изображения.< br /> 🗣️Для таких задач, как распознавание голоса и категоризация аудио, используется аудио.

Табличные ответы на вопросы, оптическое распознавание символов, извлечение информации из отсканированных документов, категоризация видео и визуальные ответы на вопросы — все это задачи, с которыми могут справиться модели-трансформеры.

Transformers предоставляет API-интерфейсы, которые позволяют быстро загружать и использовать предварительно обученные модели для любого текста, точно настраивать их для ваших собственных наборов данных, а затем делиться ими с сообществом в нашем центре моделей. В то же время каждый модуль Python, определяющий архитектуру, является полностью автономным и может обновляться для проведения коротких исследовательских экспериментов.

Transformers поддерживается тремя наиболее известными библиотеками глубокого обучения: Jax, PyTorch и TensorFlow, все из которых легко интегрируются. Легко обучить свои модели с помощью одного, прежде чем загружать их с помощью другого для логического вывода.

  • Наборы данных

Наборы данных — это небольшая библиотека с двумя основными функциями: однострочные загрузчики данных для различных общедоступных наборов данных и быстрая предварительная обработка данных.

Наборы данных также включают +15 метрик оценки и предназначены для того, чтобы сообщество могло вносить и делиться дополнительными наборами данных и метриками.

  • Токенизаторы

Предоставляет рабочую реализацию самых популярных на сегодняшний день токенизаторов с упором на скорость и гибкость.

Характеристики:
Токенизация и обучение новых словарей с использованием самых популярных на сегодняшний день токенизаторов.
Благодаря реализации Rust и обучение, и токенизация выполняются очень быстро. На ЦП сервера токенизация ГБ текста занимает менее 20 секунд.

Он прост в использовании, но он также действительно адаптируется.

Он создан как для исследований, так и для производства.

Отслеживание выравнивания идет с нормализацией. Всегда возможно получить ту часть исходного предложения, которая соответствует определенному токену.

Выполняет всю предварительную обработку: усекает, дополняет и добавляет любые дополнительные токены, необходимые вашей модели.

  • Ускорить

Accelerate был создан для пользователей PyTorch, которым нравится писать циклы обучения моделей PyTorch, но они не решаются писать и поддерживать шаблонный код, необходимый для использования нескольких GPU/TPU/fp16.

Accelerate инкапсулирует только шаблонный код, связанный с мульти-GPU/TPU/fp16, оставляя остальную часть вашего кода без изменений.
Accelerate может даже разместить ваш гаджет для вас (что требует еще нескольких изменений в вашем коде, но безопаснее). в целом).
Accelerate также включает в себя интерфейс командной строки (CLI), который можно использовать для быстрой настройки и тестирования среды обучения перед запуском сценариев.

С DeepSpeed ​​Accelerate может тренироваться на одном или нескольких графических процессорах.

  • Тук-тук

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

При обучении моделей глубокого обучения обычно используют раннюю остановку. Трудно предсказать, когда закончится тренировка, даже при приблизительной оценке. В результате может быть целесообразно настроить автоматические уведомления о тренировках. Также полезно быть предупрежденным, если ваша тренировка сорвется посреди процедуры из-за непредвиденных обстоятельств.

2.T5 — модели «Преобразователь преобразования текста в текст»

Основная идея состоит в том, чтобы подходить к любой проблеме обработки текста как к проблеме «текст в текст», в которой текст принимается в качестве входных данных, а новый текст создается в качестве выходных данных. На этот подход повлияли прежние унифицирующие парадигмы для задач НЛП, такие как представление всех текстовых задач в виде ответов на вопросы, языковое моделирование или задачи извлечения диапазона. Важно отметить, что структура преобразования текста в текст позволяет применять одну и ту же модель, цель, подход к обучению и процесс декодирования для каждой задачи.

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

3. Стримлит

Самый эффективный способ создавать приложения для работы с данными и делиться ими. За считанные минуты Streamlit преобразует сценарии данных в общедоступные веб-приложения. Все написано на Питоне. Это все бесплатно. Нет требований к предыдущему опыту работы с фронтендом.

Установка Стримлита

  1. Убедитесь, что на вашем компьютере установлен Python.
  2. Чтобы установить streamlit, выполните команду ниже.
pip install streamlit

Репозиторий Streamlit на Github можно найти здесь, а также их документацию.

4.БыстрыйAPI

FastAPI — это веб-фреймворк для создания API с Python 3.6+ на основе стандартных подсказок типов Python, который является актуальным и быстрым (высокопроизводительным).

Ниже приведены основные характеристики:

  • Быстро: на одном уровне с NodeJS и Go с точки зрения производительности.
  • Один из самых быстрых фреймворков Python на рынке.
  • Увеличьте скорость разработки функций примерно на 200-300 процентов*.
  • Интуитивно понятный: отличная помощь при редактировании. *
  • Меньше ошибок: Сократите примерно на 40 % ошибок, связанных с человеческим фактором (разработчиком). Везде завершение. Отладка занимает меньше времени.
  • Простой: разработан, чтобы быть простым в использовании и понимании. Меньше времени тратится на чтение документов.
  • Короче говоря, уменьшите дублирование кода. Каждое объявление параметра имеет несколько функций. Багов меньше.
  • Надежный: получите код, готовый к работе. С интерактивной документацией, которая генерируется автоматически.
  • Основанный на стандартах: основан на (и полностью совместим) с открытыми стандартами API OpenAPI (ранее известного как Swagger) и JSON Schema.
  • Оценка основана на тестах, проведенных внутренней командой разработчиков, отвечающей за разработку производственных приложений.

5.Nginx — балансировщик нагрузки

Балансировка нагрузки — отличный способ масштабировать приложение, а также повысить его производительность и избыточность. Nginx, популярное программное обеспечение веб-сервера, можно настроить как простой, но эффективный балансировщик нагрузки, чтобы повысить доступность и эффективность ресурсов вашего сервера.

Балансировка нагрузки между многими экземплярами приложений — это стандартная стратегия повышения пропускной способности, снижения задержки и обеспечения отказоустойчивости конфигураций.

Выбор метода балансировки нагрузки

NGINX Plus добавляет еще два механизма балансировки нагрузки к четырем механизмам, поддерживаемым NGINX Open Source:

Round Robin — запросы равномерно распределяются по серверам с учетом веса серверов. Этот подход используется по умолчанию (отключить его невозможно):

upstream backend {
   # no load balancing method is specified for Round Robin
   server backend1.example.com;
   server backend2.example.com;
}

Наименьшее количество подключений — запрос доставляется на сервер с наименьшим количеством активных подключений, опять же с учетом весов серверов:

upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}

Хэш IP — IP-адрес клиента используется для определения сервера, на который отправляется запрос. В этой ситуации значение хеш-функции вычисляется с использованием либо первых трех октетов адреса IPv4, либо всего адреса IPv6. Если сервер недоступен, этот подход гарантирует, что запросы с одного и того же адреса направляются на один и тот же сервер.

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

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

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
}

Общий хеш — определяемый пользователем ключ, который может быть текстовой строкой, переменной или их комбинацией, определяет сервер, на который перенаправляется запрос. Ключ может быть URI или связанным IP-адресом и портом источника, как в этом примере:

upstream backend {
    hash $request_uri consistent;
    server backend1.example.com;
    server backend2.example.com;
}

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

Наименьшее время (только NGINX Plus) — для каждого запроса NGINX Plus выбирает сервер с наименьшей средней задержкой и наименьшим количеством активных подключений, причем наименьшая средняя задержка определяется тем, какой из следующих параметров директивы least_timeиспользуется:

  • header — Время получения первого байта от сервера
  • last_byte — Время получения полного ответа от сервера
  • last_byte inflight — Время получения полного ответа от сервера с учетом незавершенных запросов.
upstream backend {
    least_time header;
    server backend1.example.com;
    server backend2.example.com;
}

Случайный — каждый запрос будет отправлен на сервер, выбранный случайным образом. Если задан аргумент two, NGINX сначала выбирает два сервера случайным образом, принимая во внимание веса серверов, а затем выбирает один из этих серверов, используя указанный метод:

  • least_conn — наименьшее количество активных подключений
  • least_time=header (NGINX Plus) — наименьшее среднее время получения заголовка ответа от сервера ($upstream_header_time)
  • least_time=last_byte (NGINX Plus) — наименьшее среднее время получения полного ответа от сервера ($upstream_response_time)
upstream backend {
    random two least_time=last_byte;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    server backend4.example.com;
}

Если вы хотите повысить производительность и доступность своего онлайн-приложения, вам обязательно следует подумать о балансировщике нагрузки. Nginx — это надежный веб-сервер с балансировкой нагрузки, который достаточно прост в настройке. Это отличный интерфейс для вашей веб-фермы в сочетании с простым решением для шифрования, таким как клиент Let’s Encrypt.

Ознакомьтесь с документацией по восходящему потоку на сайте nginx.org, чтобы узнать больше.

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

6. Докер

Docker — это программная платформа для быстрой разработки, тестирования и развертывания приложений. Docker организует программное обеспечение в контейнеры, которые включают в себя все, что требуется программному обеспечению для работы, например библиотеки, системные инструменты, код и среду выполнения. Docker позволяет быстро развертывать и масштабировать приложения в любой среде, сохраняя при этом уверенность в том, что ваш код будет работать.
Docker на AWS предоставляет разработчикам и администраторам высоконадежный и недорогой подход к созданию, поставке и запуску распределенных приложений в кратчайшие сроки. любого масштаба.

Docker работает, предоставляя вам согласованный механизм для запуска вашего кода. Docker — контейнерная операционная система. Контейнеры виртуализируют операционную систему сервера так же, как виртуализируют виртуальные машины (устраняют необходимость напрямую обращаться с серверным оборудованием). На каждом сервере установлен Docker, предоставляющий простые команды для создания, запуска и остановки контейнеров.

Docker позволяет быстрее поставлять код, стандартизировать операции приложений, беспрепятственно переносить код и экономить деньги за счет более эффективного использования ресурсов. Docker предоставляет вам единый объект, который может надежно работать где угодно. Простой для понимания синтаксис Docker обеспечивает полный контроль. Поскольку Docker имеет такое широкое распространение, существует надежная экосистема инструментов и готовых приложений, готовых к использованию вместе с ним.

Вышеупомянутый блог был в основном посвящен вопросам и ответам инженеров НЛП, которые были заданы в Accenture.

Часть II этой серии блогов будет посвящена НЛП-вопросам и ответам от разных фирм.

Оставайтесь с нами и удачного обучения!!