SpaCy: Industrial-Strength Natural Language Processing (NLP) in Python
spaCy — промышленная библиотека NLP на Python.
Быстрая, точная, поддерживает 70+ языков.
Основное
- Установка
pip install -U spacy python -m spacy download en_core_web_sm - Быстрый старт
import spacy nlp = spacy.load("en_core_web_sm") doc = nlp("Apple is looking at buying U.K. startup for $1 billion") for ent in doc.ents: print(ent.text, ent.label_)
Возможности
- токенизация, POS-теги, синтаксис, NER
- готовые модели CNN/Transformer
- обучение и дообучение
- интеграция с PyTorch, Transformers, FastAPI
- GPU/Apple Metal
Примеры
- NER: выделение имён, дат, денег
- Matcher: поиск паттернов
- Projects: end-to-end пайплайны
- spaCy LLM: LLM-интеграция без кода
Ресурсы
Комментарии (40)
- В эпоху LLM традиционный NLP (SpaCy) всё ещё нужен: дешевле, быстрее, работает на обычном железе и не требует постоянной оплаты провайдеру.
- Участники хвалят SpaCy за отличный API, скорость, надёжность NER и удобство пайплайнов; активно используют в enterprise, RAG-метриках и даже на Raspberry Pi.
- Некоторые задачи (классификация, сентимент) LLM решают хуже и дороже, поэтому возвращаются к дискриминативным моделям.
- Сообщество отмечает, что проект немного сократился (v4 задерживается), но библиотека по-прежнему поддерживается и считается недооценённой.
Top Secret: Automatically filter sensitive information
Top Secret — новая open-source библиотека от thoughtbot для удаления чувствительных данных из произвольного текста.
Проблема: регулярки не ловят всё (имена, адреса, карты). Решение: смесь regex и NER (распознавание именованных сущностей) через гем mitie-ruby.
Как работает:
TopSecret::Text.filterзаменяет сущности на токены[PERSON_1],[LOCATION_1]и возвращаетmapping.- После ответа LLM вызываем
TopSecret::FilteredText.restore, чтобы вернуть реальные значения.
Пример:
input = "Ralph lives in Boston."
filtered = TopSecret::Text.filter(input)
#=> "[PERSON_1] lives in [LOCATION_1]."
mapping = { PERSON_1: "Ralph", LOCATION_1: "Boston" }
response = "Hi [PERSON_1]! How is the weather in [LOCATION_1]?"
TopSecret::FilteredText.restore(response, mapping: mapping)
#=> "Hi Ralph! How is the weather in Boston?"
Подходит для чат-ботов, где нужно скрыть персональные данные, но сохранить контекст.
Код и демо: GitHub и стрим.
Комментарии (12)
- Обсуждают лёгкий NER-фильтр на базе MITIE для автоматического скрытия чувствительных данных в строках.
- US Marshalls уже заинтересовались такой «авто-редактурой».
- Участники предупреждают: NER не 100 % точен, модель старая (~10 лет) и плохо переносится на новые домены.
- Возникает вопрос, можно ли применять фильтр к стримингу/шерингу экрана: технически возможно через accessibility-API, но нужно определять координаты сущностей и бороться с ложными срабатываниями.
- Для продакшена с длинными диалогами 1 с на инференс может быть медленно; логировать через LLM-фильтр тоже рискует «убить» скорость.