ΠΠΎΠ΄Π΅Π»Ρ ΡΡΡΡΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ 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
- ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ 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'])
ΠΡΠΈΠΌΠ΅Ρ Π² 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 (ΡΡΠΊΠΎΡΡΠ΅Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ Π² 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
. Π‘Π΅ΠΉΡΠ°Ρ Π²ΡΠΎΠ΄Π΅ Π±Ρ ΠΏΠΎΠΏΡΠ°Π²ΠΈΠ»ΠΈ. ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π·Π΄Π΅ΡΡ.