2022 год только начался, а John Snow Labs уже радует разработчиков ML-приложений новым релизом библиотеки Spark NLP. Ключевые фичи 3.4.0 для версии Apache Spark 3.2.x на Scala 2.12: новые GPT-2 трансформеры, аннотаторы для ALBERT, XLNet, RoBERTa, XLM-RoBERTa и Longformer, расширенный хаб готовых Machine Learning моделей и конвейеров, а также исправление ошибок.
Что такое Spark NLP
Напомним, Spark NLP – это современная библиотека обработки естественного языка на основе Apache Spark, которая предоставляет простые, эффективные и точные аннотации NLP для конвейеров машинного обучения, масштабируемых в распределенной среде. Spark NLP поставляется с более чем 4000 предварительно обученными конвейерами и моделями на более чем 200 языках. Библиотека подходит для таких задач, как токенизация, сегментация слов, тегирование частей речи, встраивание слов и предложений, распознавание именованных сущностей, анализ зависимостей, проверка орфографии, классификация текста и токенов, анализ тональности, мультиязычный машинный перевод, обобщение и ответы на вопросы, генерация текста и пр.
Библиотека разработана компанией John Snow Labs на базе Apache Spark и MLLib-модуля этого фреймворка, представлена сообществу под лицензией Apache и имеет открытый исходный код. Она включает множество современных ML-трансформеров (BERT, ALBERT, ELECTRA, XLNet, DistilBERT, RoBERTa, XLM-RoBERTa, Longformer, ELMO, Universal Sentence Encoder, Google T5, MarianMT и GPT2) для Python, R и экосистемы JVM (Java, Scala и Kotlin).
Новый релиз Spark NLP 3.4.0, выпущенный в январе 2022 года, расширяет поддержку основных выпусков Apache Spark 3.2.x на Scala 2.12, о чем мы писали здесь. Также поддерживаются 5 основных выпусков фреймворка и PySpark 2.3.x, 2.4.x, 3.0.x, 3.1.x и 3.2.x одновременно, позволяя переходить с более ранних версий на новые выпуски, включая облачные решения Databricks и EMR в кластерах Spark 3.2.x. Наиболее важные улучшения и дополнения, а также исправления самых значимых ошибок мы рассмотрим далее.
Новые фичи, улучшения и исправления ошибок в релизе 3.4.0
Добавлены следующие возможности:
- аннотатор GPT2-Transformer для генерации текста с использованием модели OpenAI GPT-2 от HuggingFace, обученной на очень большом массиве общедоступных немаркированных и необработанных англоязычных данных. Это автоматизирует процесс создания входных данных и меток из исходных текстов, позволяя угадывать очередное слово в предложениях.
- аннотатор RoBertaForSequenceClassification, который может загружать модели RoBERTa для задач многоклассовой классификации документов. Он совместим со всеми моделями, обученными/доработанными с помощью RobertaForSequenceClassification для PyTorch или TFRobertaForSequenceClassification для моделей TensorFlow в HuggingFace.
- аннотатор XlmRoBertaForSequenceClassification, который может загружать модели XLM-RoBERTa для задач многоклассовой классификации документов. Он совместим со всеми моделями, обученными/доработанными с помощью XLMRobertaForSequenceClassification для PyTorch или TFXLMRobertaForSequenceClassification для моделей TensorFlow в HuggingFace.
- аннотатор LongformerForSequenceClassification, который может загружать модели ALBERT для задач многоклассовой классификации документов. Он совместим со всеми моделями, обученными/доработанными с помощью LongformerForSequenceClassification для PyTorch или TFLongformerForSequenceClassification для моделей TensorFlow в HuggingFace.
- аннотатор AlbertForSequenceClassification, который может загружать модели ALBERT для задач многоклассовой классификации документов. Он совместим со всеми моделями, обученными/доработанными с помощью AlbertForSequenceClassification для PyTorch или TFAlbertForSequenceClassification для моделей TensorFlow в HuggingFace.
- аннотатор XlnetForSequenceClassification, который может загружать модели XLNet для задач многоклассовой классификации документов. Он совместим со всеми моделями, обученными/доработанными с помощью XLNetForSequenceClassification для PyTorch или TFXLNetForSequenceClassification для моделей TensorFlow в HuggingFace.
- обучаемые и распространяемые аннотаторы Word2Vec на основе Word2Vec в Spark ML., что позволяет обучить Word2Vec в кластере на нескольких компьютерах для обработки крупномасштабных наборов данных и использовать обученную модель для классификаций на уровне токенов, таких как NerDL.
- параметр useBestModel в аннотаторе NerDLApproach, который сохраняет и восстанавливает модель, достигшую наилучшей производительности в конце обучения. В приоритете метрики из testDataset (микро F1), метрики из validationSplit (микро F1). Если ничего не задано, параметр будет отслеживать потери во время обучения.
- поддержка Apache Spark и PySpark 3.2.x на Scala 2.12. Spark NLP по умолчанию поставляется для Spark 3.0.x/3.1.x, но теперь есть пакеты spark-nlp-spark32 и spark-nlp-gpu-spark32;
- новый параметр в функцию start() в Python для Apache Spark 3.2.x (spark32=True);
- обновлены скрипты Colab и Kaggle для более быстрой настройки и работы на Java 11;
- новые скрипты и записные книжки для создания пользовательских графов TensroFlow для аннотатора ContextSpellCheckerApproach;
- новый параметр graphFolder в аннотаторе ContextSpellCheckerApproach, который позволяет обучать ContextSpellChecker из пользовательского графа TensorFlow;
- поддержка файловой системы DBFS в параметре graphFolder – теперь, запустив Spark NLP 3.4.0, можно указать NerDLApproach или ContextSpellCheckerApproach на граф TensorFlow в Databricks;
- новая фича всех классификаторов ForTokenClassification и ForSequenceClassification для извлечения классов из предварительно обученных моделей;
- параметр inputFormats в аннотаторы DateMatcher и MultiDateMatcher – теперь они могут определять список допустимых форматов ввода с помощью шаблонов даты для поиска в тексте.
- пакетная обработка в аннотаторах T5Transformer и MarianTransformer;
- схема readDataset в классе CoNLL();
- 6 новых сред выполнения Databricks и 3 новых серии EMR 6.x: EMR 5.33.1 (Apache Spark 2.4.7/Hadoop 2.10.1) EMR 6.3.1 (Apache Spark 3.1.1/Hadoop 3.2.1) EMR 6.4.0 (Apache Spark 3.1.2/Hadoop 3.2.1).
Также в Spark NLP 3.4.0 исправлены следующие ошибки:
- состояние гонки в кластерном режиме, когда доступ к сеансу TF вызывается столько раз, сколько доступно ядер на машине с драйвером в первый раз. Загрузка модели несколько раз одновременно приводит к увеличению использования диска, а ввод-вывод может стать узким местом для больших моделей, особенно на машине с более медленными дисками.
- проблема с производительностью, появившаяся в выпуске 3.3.3 для аннотаторов T5Transformer и MarianTransformer;
- ошибка в разрешении модели без фильтрации по метке времени;
- некорректный тип параметра configProtoBytes в Python;
- отсутствие DefaultParamsReadable в аннотаторе RegexTokenizer;
- отсутствие моделей lemma_antbnc,entiment_viveknиspellcheck_norvig и конвейеров clean_slang, check_spelling, match_chunks и match_datetime для 3-ей версии фреймворка;
- saveModel в TrainingHelper;
- некорректные имена модулей Keyword/Yake в Scala;
Также расширен хаб готовых NLP-моделей и конвейеров обработки естественного языка. Узнайте больше про применение Apache Spark для разработки распределенных ML-приложений и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
- Основы Apache Spark для разработчиков
- Анализ данных с Apache Spark
- Потоковая обработка в Apache Spark
- Машинное обучение в Apache Spark
- Графовые алгоритмы в Apache Spark
Источники