buriy / spacy-ru

Russian language models for spaCy
MIT License
242 stars 29 forks source link

Модель русского языка для библиотеки spaCy

Появились модели для spacy 2.3:

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 для версии 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() для русского, но они пока не идеально работают, будем доделывать.

Модель ru2e

Это "пустая" модель, которая использует стемминг (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 или повторять ноутбуки.

Установка и использование ru2 модели:

для примера установки модели в окружении conda, вы можете ознакомится с Dockerfile

  1. установить pymorphy2==0.8

    • pip: pip install pymorphy2==0.8
    • conda: к сожалению в репозиторях anaconda данный пакет доступен только для платформы osx-64 conda install -c romanp pymorphy2==0.8
  2. установить spacy 2.1:

    • pip: pip install spacy==2.1.9
    • conda: conda install -c conda-forge spacy==2.1.9
  3. Скопировать каталог 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'])

Пример в Docker контейнере

вы можете попробовать пример использования ru2 модели:

git clone https://github.com/buriy/spacy-ru.git
cd spacy-ru
docker build -t spacy:ru2 .
docker run --rm spacy:ru2

Предупреждения и возможные проблемы

Если 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