Spark NLP 3.4.0: новый релиз ML-библиотеки для Apache Spark 3.2.x на Scala 2.12

Автор Категория ,
Spark NLP 3.4.0: новый релиз ML-библиотеки для Apache Spark 3.2.x на Scala 2.12

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 в Москве:

Источники

  1. https://github.com/JohnSnowLabs/spark-nlp
  2. https://medium.com/spark-nlp/spark-nlp-3-4-0-new-openai-gpt2-new-transformers-and-lots-more-f3056b6b41c5