https://github.com/buriy/spacy-ru/releases/tag/v2.3_beta
Они используются следующим образом:
wget https://github.com/buriy/spacy-ru/releases/download/v2.3_beta/ru2_combined_400ks_96.zip
unzip ru2_combined_400ks_96.zip
Потом:
import spacy
nlp = spacy.load('ru2_combined_400ks_96')
А здесь дальше идёт документация для версии 2.1
Модель ru2 умеет определять не только POS-tag в x.pos_, но и лемму слова в x.lemma_ . Например, для существительных, лемма совпадает с формой именительного падежа, единственного числа. Из-за особенностей устройства библиотеки spacy, для более хорошего качества лемм, нужно писать
import ru2
nlp = ru2.load_ru2('ru2')
вместо стандартного
import spacy
nlp = spacy.load('ru2')
Это также починит .noun_chunks()
для русского, но они пока не идеально работают, будем доделывать.
Это "пустая" модель, которая использует стемминг (pip install pystemmer
), полезна для пользовательских задач классификации, особенно, когда данных мало. Поскольку в этой модели нет POS-теггера, она не умеет получать леммы.
Для использования стемминга надо писать аналогично модели ru2 выше:
import ru2e
nlp = ru2e.load_ru2('ru2e')
Смотри пример в https://github.com/buriy/spacy-ru/blob/master/notebooks/examples/textcat_news_topics.ipynb
Инсталляция сейчас не супер-простая, кроме того, thinc не всегда из коробки работает. Зависимости из проекта spacy-ru нужны только если вы собираетесь повторять обучение моделей для spacy-ru или повторять ноутбуки.
для примера установки модели в окружении conda, вы можете ознакомится с Dockerfile
- установить pymorphy2==0.8
- pip:
pip install pymorphy2==0.8
- conda: к сожалению в репозиторях anaconda данный пакет доступен только для платформы osx-64
conda install -c romanp pymorphy2==0.8
- установить spacy 2.1:
- pip:
pip install spacy==2.1.9
- conda:
conda install -c conda-forge spacy==2.1.9
- Скопировать каталог ru2 из репозитория себе в проект:
git clone -b v2.1 https://github.com/buriy/spacy-ru.git && cp -r ./spacy-ru/ru2/. /my_project_destination/ru2
После этого нужно загрузить модели с морфологией и синтаксисом
import spacy
sample_sentences = "Привет Миру! Как твои дела? Сегодня неплохая погода."
if __name__ == '__main__':
nlp = spacy.load('ru2')
nlp.add_pipe(nlp.create_pipe('sentencizer'), first=True)
doc = nlp(sample_sentences)
for s in doc.sents:
print(list(['lemma "{}" from text "{}"'.format(t.lemma_, t.text) for t in s]))
Если нужна модель с pymorphy2 в качестве лемматизатора и POS: nlp = spacy.load('ru2', disable=['tagger', 'parser', 'NER'])
вы можете попробовать пример использования ru2 модели:
git clone https://github.com/buriy/spacy-ru.git
cd spacy-ru
docker build -t spacy:ru2 .
docker run --rm spacy:ru2
- Если нужна работа на GPU (ускоряет обучение в 2-3 раза, инференс -- до 5 раз), то, возможно, нужно исправить (явно указать) путь к cuda и переустановить библиотеку thinc:
pip uninstall -y thinc
CUDA_HOME=/usr/local/cuda pip install --no-cache-dir thinc==7.0.8
Другой вариант -- попробовать что-то типа pip install "spacy[cuda91]<2.2"
или pip install "spacy[cuda10]<2.2"
для spacy версии 2.1.x и вашей версии cuda.
Если GPU по-прежнему не работает -- стоит явно проверить, что cupy
установлена верно для вашей версии cuda: link
пример установки для cuda 10.0
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130
$ which nvcc
/usr/local/cuda/bin/nvcc
$ CUDA_HOME=/usr/local/cuda
$ pip install cupy-cuda100
...
Successfully installed cupy-cuda100-7.1.0
$ pip install --no-cache-dir "spacy[cuda10]<2.2"
...
Successfully installed blis-0.2.4 preshed-2.0.1 spacy-2.1.9 thinc-7.0.8
- Если вы переходите с многоязычной модели "xx" на модели ru/ru2, то имейте в виду, что токенизация в моделях ru/ru2 и xx отличается, т.к. xx не отделяет буквы от цифр и дефисы, то есть скажем слова "24-часовой" и "va-sya103" будут едиными неделимыми токенами.
- На Windows клонирование репозитория с настройкой
core.autocrlf true
вgit
может испортить некоторые файлы и привести к ошибкам типаmsgpack._cmsgpack.unpackbTypeError: unhashable type: 'list'
. Для того чтобы этого избежать надо либо клонировать сcore.autocrlf false
, либо, например, скачивать архив репозитория вручную через веб-интерфейс. Обсуждение проблемы и решение можно найти здесь. - Попытка вызова
spacy.displacy.serve()
или некоторых других функций на Python 3 может привести к ошибкеTypeError: __init__() got an unexpected keyword argument 'encoding'
. Чтобы этого избежать, раньше необходимо было явно установить старую версиюmsgpack-numpy<0.4.4.0
. Сейчас вроде бы поправили. Обсуждение проблемы и решение можно найти здесь.