Spacy.load: примеры (PYTHON)
spacy.load(name: str): Language objectОсновы функции spacy.load
Функция spacy.load() является основным способом загрузки предварительно обученных или пользовательских языковых моделей в библиотеке spaCy для обработки естественного языка (NLP). Её применяют при инициализации конвейера для выполнения задач, таких как токенизация, определение частей речи, распознавание именованных сущностей и синтаксический анализ.
Аргументы функции:
- name (обязательный, строка): Имя установленной модели (например, 'en_core_web_sm') или путь к директории с моделью.
- vocab (опционально, Vocab): Объект словаря для совместного использования между несколькими моделями. По умолчанию создается новый.
- disable (опционально, список строк): Список имен компонентов конвейера, которые нужно отключить при загрузке.
- exclude (опционально, список строк): Список имен компонентов конвейера, которые нужно исключить из загрузки.
- config (опционально, словарь/строка): Конфигурационные переопределения в виде словаря или путь к конфигурационному файлу.
- enable (опционально, список строк): Список компонентов, которые нужно включить (остальные отключаются).
Возвращаемое значение: Объект Language (например, nlp), который представляет загруженную модель и предоставляет доступ ко всему конвейеру обработки.
Базовые примеры использования
Пример 1: Загрузка базовой модели.
import spacy
# Загрузка небольшой английской модели
nlp = spacy.load('en_core_web_sm')
doc = nlp('Hello world!')
print([token.text for token in doc])['Hello', 'world', '!']
Пример 2: Загрузка с отключением компонентов.
import spacy
# Загрузка без парсера и NER
nlp = spacy.load('en_core_web_sm', disable=['parser', 'ner'])
print(nlp.pipe_names)['tok2vec', 'tagger']
Пример 3: Загрузка модели по пути.
import spacy
nlp = spacy.load('/path/to/your/custom_model')
print(nlp.meta['name'])'custom_model'
Альтернативные методы в Python
spacy.blank: Создает пустой объект Language для указанного языка без модели. Используют, когда нужен только токенизатор или для обучения модели с нуля.
nlp = spacy.blank('en')Прямое использование класса Language: Продвинутый метод для полного контроля над конвейером, применяется в основном при кастомной реализации.
Выбор метода: spacy.load применяют для работы с предобученными моделями. spacy.blank выбирают для создания новых моделей или использования только лингвистических правил.
Аналоги в других языках
JavaScript (использование spaCy через transformers): Аналогов spaCy нет, но для загрузки моделей NLP используют библиотеки типа transformers.
// Пример с использованием библиотеки для трансформеров
const pipeline = await transformers.pipeline('ner');Java (OpenNLP): Загрузка модели происходит через класс TokenizerModel.
InputStream modelIn = new FileInputStream('en-token.bin');
TokenizerModel model = new TokenizerModel(modelIn);R (spacyr): Используют функцию spacy_initialize() для загрузки модели.
spacy_initialize(model = 'en_core_web_sm')Отличия от Python-версии spaCy заключаются в синтаксисе и интеграции с экосистемой языка.
Распространенные ошибки
Ошибка 1: Модель не установлена.
import spacy
nlp = spacy.load('en_core_web_sm')OSError: [E050] Can't find model 'en_core_web_sm'...
Решение: Установить модель через python -m spacy download en_core_web_sm.
Ошибка 2: Несовместимость версий spaCy и модели.
import spacy
nlp = spacy.load('ru_core_news_sm') # Модель для старой версииValueError: [W095] Model ... is incompatible...
Решение: Обновить модель или использовать совместимую версию spaCy.
Изменения в последних версиях
В spaCy версии 3.0 произошел переход на систему конфигурационных файлов. Аргумент config стал основным для передачи настроек. Устарел аргумент path в пользу прямого указания имени модели или пути в аргументе name.
Добавлены аргументы enable и exclude для более гибкого управления компонентами конвейера. Улучшена обработка ошибок при загрузке несовместимых моделей.
Расширенные примеры
Пример 1: Загрузка с конфигурацией и общим словарем.
import spacy
from spacy.vocab import Vocab
# Создание общего словаря
shared_vocab = Vocab()
# Конфигурационные переопределения
custom_config = {'components': {'tagger': {'threshold': 0.8}}}
nlp1 = spacy.load('en_core_web_sm', vocab=shared_vocab, config=custom_config)
nlp2 = spacy.load('en_core_web_md', vocab=shared_vocab)
print(nlp1.vocab is nlp2.vocab)True
Пример 2: Загрузка только определенных компонентов с помощью enable.
import spacy
# Загрузка только токенизатора и векторизатора
nlp = spacy.load('en_core_web_lg', enable=['tok2vec'])
print(nlp.pipe_names)
# Обработка текста (NER не будет работать)
doc = nlp('Google was founded in the USA.')
print(doc.ents)['tok2vec'] ()
Пример 3: Использование кастомного конфигурационного файла.
import spacy
nlp = spacy.load('en_core_web_sm',
config={'components': {'parser': {'batch_size': 128}}})
print(nlp.config['components']['parser']['batch_size'])128
Пример 4: Загрузка модели с диска и проверка метаданных.
import spacy
import pathlib
# Предположим, модель скачана в каталог
model_path = pathlib.Path('/models/en_custom')
nlp = spacy.load(model_path)
print(f"Имя модели: {nlp.meta['name']}")
print(f"Версия модели: {nlp.meta['version']}")
print(f"Язык: {nlp.meta['lang']}")Имя модели: en_custom Версия модели: 0.0.1 Язык: en