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