π₯ Β«ΠΡΠ±Π»ΡΒ» ΠΈ Β«Π½Π΅Π½Π°Π²ΠΈΠΆΡΒ»: Π°Π½Π°Π»ΠΈΠ· ΡΠΌΠΎΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠΊΡΠ°ΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Python
Π Π΅ΡΠ°Π΅ΠΌ Data Science-Π·Π°Π΄Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΌΠΎΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠΊΡΠ°ΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Python-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ spaCy ΠΈ ΡΡΠΎΠΏΠΊΠΈ ΡΠ΅ΡΠ΅Π½Π·ΠΈΠΉ Π½Π° ΡΠΈΠ»ΡΠΌΡ. Π‘Π΅Π½ΡΠΈΠΌΠ΅Π½Ρ-Π°Π½Π°Π»ΠΈΠ· Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ.
ΠΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΠ°ΡΡΠΈ ΠΠ°ΠΉΠ»Π° Π‘ΡΡΠ°ΡΠΈΡΠ° Use Sentiment Analysis With Python to Classify Movie Reviews. Π‘Π½Π°ΡΠ°Π»Π° Π² ΡΡΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΡΠ°ΠΏΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ, ΡΠΊΡΡΡΡΠ΅ Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° spaCy, ΠΏΠΎΡΠΎΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΡΠ·ΡΠ²ΠΎΠ² Π½Π° IMDB ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ΅Π½ΡΠΈΠΌΠ΅Π½Ρ-Π°Π½Π°Π»ΠΈΠ·Π°. Π’Π΅ΠΊΡΡ ΡΡΠ°ΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½ Π² Π²ΠΈΠ΄Π΅ Π±Π»ΠΎΠΊΠ½ΠΎΡΠ° Jupyter.
ΠΠ½Π°Π»ΠΈΠ· ΡΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ (ΡΠ΅Π½ΡΠΈΠΌΠ΅Π½Ρ-Π°Π½Π°Π»ΠΈΠ·) β ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π»ΠΈΠ½Π³Π²ΠΈΡΡΠΈΠΊΠΈ, ΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡΠΈΠΉ ΡΠ°ΠΊΡΡ ΡΡΠ±ΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΡΠ΅ΠΊΡΡΠ°, ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡΡΡΠ΅Π³ΠΎ. Π§Π°ΡΡΠΎ ΡΡΠΎ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΡΠ΄Π½ΠΎΡΡΡ Π΄Π°ΠΆΠ΅ Π΄Π»Ρ ΠΎΠΏΡΡΠ½ΡΡ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ β ΡΡΠΎ ΡΠΆ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ . ΠΠ΄Π½Π°ΠΊΠΎ ΡΠΌΠΎΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΎΠΊΡΠ°ΡΠΊΡ ΡΠ΅ΠΊΡΡΠ° Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Python.
ΠΠ°ΡΠ΅ΠΌ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½ΡΠΆΠ½ΠΎ? Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠΌΠΎΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠΊΡΠ°ΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠ°. ΠΡΠΎΡΡΠΎΠΉ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ β ΡΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±ΠΈΡΠΆΠ΅Π²ΡΡ ΡΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΏΠΎ ΠΎΡΠΊΠ»ΠΈΠΊΠ°ΠΌ Π² ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΠΎΡΠ·ΡΠ²Π°ΠΌ.
Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ:
- Π² ΡΠ΅ΠΌ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° (Π°Π½Π³Π». natural language processing, NLP);
- ΠΊΠ°ΠΊ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ΅ΠΊΡΡΠ°;
- ΠΊΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ spaCy Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈΠΉ.
ΠΠ°Π½Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠ² ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ.
ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΠΎΡΠΈΡΡΠΊΠ° ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ
ΠΡΠ±ΠΎΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½ΡΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ. ΠΠ°Π»Π΅Π΅ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ (pipeline) ΠΏΡΠ΅Π΄ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ:
- ΡΠΎΠΊΠ΅Π½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡ β ΡΠ°Π·Π±ΠΈΡΡ ΡΠ΅ΠΊΡΡ Π½Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ»ΠΎΠ²Π° ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡΡ;
- ΡΠ΄Π°Π»ΠΈΡΡ ΡΡΠΎΠΏ-ΡΠ»ΠΎΠ²Π°;
- ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΡΠ»ΠΎΠ²Π° ΠΊ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΠ΅;
- Π²Π΅ΠΊΡΠΎΡΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡ β ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠΎΠ² Π΄Π»Ρ ΠΈΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ.
ΠΡΠ΅ ΡΡΠΈ ΡΠ°Π³ΠΈ ΡΠ»ΡΠΆΠ°Ρ Π΄Π»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΡΡΠΌΠ°, ΠΏΡΠΈΡΡΡΠ΅Π³ΠΎ Π»ΡΠ±ΠΎΠΌΡ ΠΎΠ±ΡΡΠ½ΠΎΠΌΡ ΡΠ΅ΠΊΡΡΡ, ΠΈ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π·Π°Π΄Π°Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ»ΠΈΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, NLTK, TextBlob ΠΈ spaCy. ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΌΡ ΠΈ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π² ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅.
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΈΠ΄ΡΠΈ Π΄Π°Π»ΡΡΠ΅, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ spaCy ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π»Ρ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°:
pip install spacy python -m spacy download en_core_web_sm
Π’ΠΎΠΊΠ΅Π½ΠΈΠ·Π°ΡΠΈΡ
Π’ΠΎΠΊΠ΅Π½ΠΈΠ·Π°ΡΠΈΡ β ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ° Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΡΠ°ΡΡΠΈ. Π Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ spaCy ΡΠΆΠ΅ Π²ΡΡΡΠΎΠ΅Π½ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ (pipeline), ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ΅ΠΊΡΡΠ° Ρ ΡΠΎΠΊΠ΅Π½ΠΈΠ·Π°ΡΠΈΠΈ. Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ»ΠΎΠ²Π°. ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ ΠΏΡΠΎΠ²Π΅Π΄Π΅ΠΌ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅:
import spacy nlp = spacy.load("en_core_web_sm") text = """ Dave watched as the forest burned up on the hill, only a few miles from his house. The car had been hastily packed and Marta was inside trying to round up the last of the pets. "Where could she be?" he wondered as he continued to wait for Marta to appear with the pets. """ doc = nlp(text) token_list = [token for token in doc] print(token_list)
[ , Dave, watched, as, the, forest, burned, up, on, the, hill, ,, , only, a, few, miles, from, his, house, ., The, car, had, , been, hastily, packed, and, Marta, was, inside, trying, to, round, , up, the, last, of, the, pets, ., ", Where, could, she, be, ?, ", he, wondered, , as, he, continued, to, wait, for, Marta, to, appear, with, the, pets, ., ]
ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΡΠ΅ ΡΠΎΠΊΠ΅Π½Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π·Π½Π°ΠΊΠΈ ΠΏΡΠ΅ΠΏΠΈΠ½Π°Π½ΠΈΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ, Π½Π΅ ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ ΡΠ»ΠΎΠ²Π°ΠΌ. ΠΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΏ-ΡΠ»ΠΎΠ²
Π‘ΡΠΎΠΏ-ΡΠ»ΠΎΠ²Π° β ΡΡΠΎ ΡΠ»ΠΎΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π²Π°ΠΆΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΎΠΌ ΠΎΠ±ΡΠ΅Π½ΠΈΠΈ, Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠΌΡΡΠ»Π° Π΄Π»Ρ ΠΌΠ°ΡΠΈΠ½. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° spaCy ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΡΠΎΠΏ-ΡΠ»ΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ). ΠΡΠΎΠ²Π΅Π΄Π΅ΠΌ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°:
filtered_tokens = [token for token in doc if not token.is_stop] print(filtered_tokens)
[ , Dave, watched, forest, burned, hill, ,, , miles, house, ., car, , hastily, packed, Marta, inside, trying, round, , pets, ., ", ?, ", wondered, , continued, wait, Marta, appear, pets, ., ]
ΠΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ Python-ΠΊΠΎΠ΄Π° ΠΌΡ ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°Π»ΠΈ ΡΡΠΎΠΏ-ΡΠ»ΠΎΠ²Π° ΠΈΠ· ΡΠΎΠΊΠ΅Π½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠ° ΡΠΎΠΊΠ΅Π½ΠΎΠ² .is_stop
. ΠΠΎΡΠ»Π΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΡΠΎΠΏ-ΡΠ»ΠΎΠ² ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ°Π» ΠΊΠΎΡΠΎΡΠ΅, ΠΈΡΡΠ΅Π·Π»ΠΈ ΠΌΠ΅ΡΡΠΎΠΈΠΌΠ΅Π½ΠΈΡ ΠΈ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠ΅ ΡΠ»ΠΎΠ²Π°: Π°ΡΡΠΈΠΊΠ»ΠΈ, ΡΠΎΡΠ·Ρ, ΠΏΡΠ΅Π΄Π»ΠΎΠ³ΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅Π»ΠΎΠ³ΠΈ.
ΠΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΠ΅
Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ΅ ΡΠΎΡΠΌΡ ΡΠ»ΠΎΠ²Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, watched
, watching
ΠΈ watches
ΠΏΠΎΡΠ»Π΅ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΡΡ Π² watch
. ΠΡΡΡ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π° ΠΊ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ: ΡΡΠ΅ΠΌΠΌΠΈΠ½Π³ ΠΈ Π»Π΅ΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ.
Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠ΅ΠΌΠΌΠΈΠ½Π³Π° Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π° ΡΠ»ΠΎΠ²Π°, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ»ΠΎΠ²Π°-ΠΏΠΎΡΠΎΠΌΠΊΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π°ΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ β ΡΡΠ΅ΠΌΠΌΠΈΠ½Π³ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΡΠ΅Π·Π°Π΅Ρ ΡΡΡΠΎΠΊΡ, ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Ρ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅. Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡ ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ feel
ΠΈ felt
.
ΠΠ΅ΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΡΡΠ΅ΠΌΠΈΡΡΡ ΡΠ΅ΡΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠ΅ ΡΠΎΡΠΌΡ ΡΠ»ΠΎΠ²Π° ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ Π΅Π³ΠΎ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΉ ΡΠΎΡΠΌΠΎΠΉ β Π»Π΅ΠΌΠΌΠΎΠΉ. ΠΠ΅ΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΈΠ½ΠΎΡΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ»ΡΠ·Ρ, ΡΠ΅ΠΌ ΡΡΠ΅ΠΌΠΌΠΈΠ½Π³, ΠΈ ΠΏΠΎΡΠΎΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠ΅ΠΉ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠΉ spaCy. Π ΡΠ°ΠΌΠΊΠ°Ρ
NLP-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° Π»Π΅ΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΠ΅ΠΌΠΌΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅Π½Π° Ρ
ΡΠ°Π½ΠΈΡΡΡ Π² Π°ΡΡΠΈΠ±ΡΡΠ΅ .lemma_
:
lemmas = [ f"Token: {token}, lemma: {token.lemma_}" for token in filtered_tokens ] print(lemmas)
['Token: \n, lemma: \n', 'Token: Dave, lemma: Dave', 'Token: watched, lemma: watch', 'Token: forest, lemma: forest', 'Token: burned, lemma: burn', 'Token: hill, lemma: hill', 'Token: ,, lemma: ,', 'Token: \n, lemma: \n', 'Token: miles, lemma: mile', 'Token: house, lemma: house', 'Token: ., lemma: .', 'Token: car, lemma: car', 'Token: \n, lemma: \n', 'Token: hastily, lemma: hastily', 'Token: packed, lemma: pack', 'Token: Marta, lemma: Marta', 'Token: inside, lemma: inside', 'Token: trying, lemma: try', 'Token: round, lemma: round', 'Token: \n, lemma: \n', 'Token: pets, lemma: pet', 'Token: ., lemma: .', 'Token: ", lemma: "', 'Token: ?, lemma: ?', 'Token: ", lemma: "', 'Token: wondered, lemma: wonder', 'Token: \n, lemma: \n', 'Token: continued, lemma: continue', 'Token: wait, lemma: wait', 'Token: Marta, lemma: Marta', 'Token: appear, lemma: appear', 'Token: pets, lemma: pet', 'Token: ., lemma: .', 'Token: \n, lemma: \n']
.lemma_
. ΠΡΠΎ Π½Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠ°, Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ Π² spaCy Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΎΡΠΈΡΠ°Π½Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ.Π‘Π»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅Π½Π° ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΠΌΠ°ΡΠΈΠ½Π΅. ΠΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ.
ΠΠ΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΊΡΡΠ°
ΠΠ΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ β ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅Π½Π° Π² ΡΠΈΡΠ»ΠΎΠ²ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°. Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π²Π΅ΠΊΡΠΎΡ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅Π½Π°. ΠΠ΅ΠΊΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΡΡ ΠΎΠ΄ΡΡΠ²Π° ΡΠ»ΠΎΠ², ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠΎΠ² ΠΈ Ρ. Π΄. Π spaCy ΡΠΎΠΊΠ΅Π½Ρ Π²Π΅ΠΊΡΠΎΡΠΈΠ·ΡΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ»ΠΎΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², Π² ΠΊΠΎΡΠΎΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π½Π΅Π½ΡΠ»Π΅Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΎΡ ΡΠ°Π½Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π² ΠΊΠΎΡΠΎΡΡΡ Π΄Π»Ρ ΡΠ΅Ρ ΠΆΠ΅ ΡΠ΅Π»Π΅ΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΠΈΡΡ ΡΠ°Π·ΡΠ΅ΠΆΠ΅Π½Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ Π±ΡΠ»ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ Π½ΡΠ»ΡΠΌΠΈ.
ΠΠ°ΠΊ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°Π³ΠΈ, Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠ·ΠΎΠ²Π° nlp()
. ΠΠΎΠ»ΡΡΠΈΠΌ Π²Π΅ΠΊΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠΎΠΊΠ΅Π½ΠΎΠ²:
filtered_tokens[1].vector
array([ 1.8371646 , 1.4529226 , -1.6147211 , 0.678362 , -0.6594443 , 1.6417935 , 0.5796405 , 2.3021278 , -0.13260496, 0.5750932 , 1.5654886 , -0.6938864 , -0.59607106, -1.5377437 , 1.9425622 , -2.4552505 , 1.2321601 , 1.0434952 , -1.5102385 , -0.5787632 , 0.12055647, 3.6501784 , 2.6160972 , -0.5710199 , -1.5221789 , 0.00629176, 0.22760668, -1.922073 , -1.6252862 , -4.226225 , -3.495663 , -3.312053 , 0.81387717, -0.00677544, -0.11603224, 1.4620426 , 3.0751472 , 0.35958546, -0.22527039, -2.743926 , 1.269633 , 4.606786 , 0.34034157, -2.1272311 , 1.2619178 , -4.209798 , 5.452852 , 1.6940253 , -2.5972986 , 0.95049495, -1.910578 , -2.374927 , -1.4227567 , -2.2528825 , -1.799806 , 1.607501 , 2.9914255 , 2.8065152 , -1.2510269 , -0.54964066, -0.49980402, -1.3882618 , -0.470479 , -2.9670253 , 1.7884955 , 4.5282774 , -1.2602427 , -0.14885521, 1.0419178 , -0.08892632, -1.138275 , 2.242618 , 1.5077229 , -1.5030195 , 2.528098 , -1.6761329 , 0.16694719, 2.123961 , 0.02546412, 0.38754445, 0.8911977 , -0.07678384, -2.0690763 , -1.1211847 , 1.4821006 , 1.1989193 , 2.1933236 , 0.5296372 , 3.0646474 , -1.7223308 , -1.3634219 , -0.47471118, -1.7648507 , 3.565178 , -2.394205 , -1.3800384 ], dtype=float32)
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡ .vector
Π΄Π»Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅Π½Π° Π² ΡΠΏΠΈΡΠΊΠ΅ filter_tokens
. Π ΡΡΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ ΡΡΠΎ ΡΠ»ΠΎΠ²ΠΎ Dave
.
.vector
Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΠ΅ΡΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄ΡΡΠ³Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ en_core_web_sm
ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ spaCy
.ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ³Π½ΠΎΠ·ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈΠΉ
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ΅ΠΊΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ Π² ΡΠΎΡΠΌΡ, ΠΏΠΎΠ½ΡΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ. ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΈ ΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π΄ΡΡ ΠΎΠ±ΡΠ΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ:
- ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π·Π°Π΄Π°Ρ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
- ΠΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ.
- ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ spaCy Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠ°.
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ
Π ΠΌΠΈΡΠ΅ Python Π΅ΡΡΡ ΡΡΠ΄ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ :
ΠΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΠΈΠΌ, Π½ΠΎ ΡΡΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ (Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ) ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π΄Π»Ρ ΠΏΠΈΡΠΎΠ½ΠΈΡΡΠΎΠ². ΠΡΠΎ ΠΌΠΎΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, Π½Π° ΠΎΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ ΡΡ ΠΎΠ΄ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
TensorFlow ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Google ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ. ΠΠ½ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ, ΡΡΠΎ Π΄Π°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ. PyTorch β ΡΡΠΎ ΠΎΡΠ²Π΅Ρ Facebook Π½Π° TensorFlow, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Ρ ΡΡΠ΅ΡΠΎΠΌ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡΡ Ρ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΌ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Python-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° scikit-learn ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ TensorFlow ΠΈ PyTorch, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΠΎΡΠΎΠ²ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ, Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ . ΠΠ½ ΠΏΡΠΎΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡΡΠΎ ΠΎΠ±ΡΡΠ°ΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π²ΡΠ΅Π³ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΠΊΠΎΠ΄Π°.
Π ΡΡΠ°ΡΡΡΡ, spaCy ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅ΠΊΡΡΠ°. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ ΠΎΠ±ΡΠΈΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π·Π°Π΄Π°Ρ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ:
- Π Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ Π½Π° ΠΎΠ±ΡΡΠ°ΡΡΡΡ ΠΈ ΡΠ΅ΡΡΠΎΠ²ΡΡ Π²ΡΠ±ΠΎΡΠΊΠΈ (Π½Π°Π±ΠΎΡΡ Π΄Π°Π½Π½ΡΡ ).
- ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ°ΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ (ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ΠΌ).
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΡΠΎΠ±Ρ ΠΎΡΠ΅Π½ΠΈΡΡ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π½Π° Π½ΠΎΠ²ΡΡ , ΡΠ°Π½Π΅Π΅ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π²ΡΠΈΡ ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠ³Π½ΠΎΠ·ΠΎΠ².
CΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΡ ΠΏΠΎ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ Π½Π° ΡΡΠΈ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ :
- ΠΠ°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ (training).
- ΠΠ°Π½Π½ΡΠ΅ Π΄Π»Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ (validation).
- ΠΠ°Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠ΅ΡΡΠ° (test).
ΠΠ±ΡΡΠ°ΡΡΠΈΠΉ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΠΎΠ½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΎΡΠ΅Π½ΠΊΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ. ΠΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΡΡΡΠΊΡΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’Π°ΠΊΠΈΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠ° Π΄Π°Π½Π½ΡΡ (Π±Π°ΡΡΠ΅ΠΉ). ΠΠ°Π±ΠΎΡ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’Π΅ΡΡΠΎΠ²ΡΠΉ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ β Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΡΡΠ΄ΠΈΡΡ ΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°Π±ΠΎΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π² ΠΎΠ±ΡΠΈΡ ΡΠ΅ΡΡΠ°Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, ΠΏΠΎΡΠ° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ spaCy.
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ spaCy Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠ°
ΠΡ ΡΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ spaCy Π±Π΅ΡΠ΅Ρ Π½Π° ΡΠ²ΠΎΠΈ ΠΏΠ»Π΅ΡΠΈ Π·Π°Π±ΠΎΡΡ ΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ΅ΠΊΡΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° nlp()
. ΠΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΡΠ°ΠΉΠ»Π΅ JSON
, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΌ Ρ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ (en_core_web_sm
Π² ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅) ΠΈΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡΠ·Π²Π°ΡΠ΅Π»Π΅ΠΌ.
ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ textcat
(ΡΠΎΠΊΡ. TextCategorizer
), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°Π·Π½Π°ΡΠ°ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌ Π΄Π°Π½Π½ΡΠΌ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±ΡΡΠ°ΡΡΠΈΡ
Π΄Π°Π½Π½ΡΡ
Π½Π΅ΠΉΡΠΎΠ½Π½ΠΎΠΉ ΡΠ΅ΡΠΈ. Π§ΡΠΎΠ±Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΠΎΠ±ΡΡΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
- ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ
textcat
Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ. - ΠΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ
textcat
Π²Π°Π»ΠΈΠ΄Π½ΡΠ΅ ΠΌΠ΅ΡΠΊΠΈ (ΠΈΠΌΠ΅Π½Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ). - ΠΠ°Π³ΡΡΠ·ΠΈΡΡ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π½Π° ΡΠ°ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅.
- ΠΠ±ΡΡΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΎΡΠ΅Π½ΠΈΠ²Π°Ρ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΡΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°ΡΡ ΡΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ΅ΠΊΡΡΠ°Ρ , Π½Π΅ Π²Ρ ΠΎΠ΄ΠΈΠ²ΡΠΈΡ Π² ΠΎΠ±ΡΡΠ°ΡΡΡΡ Π²ΡΠ±ΠΎΡΠΊΡ.
- ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ: ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΎΠ±ΡΡΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ.
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ , Π½Π° ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ Large Movie Review, ΡΠΎΠ±ΡΠ°Π½Π½ΡΠΉ ΠΠ½Π΄ΡΡ ΠΠ°Π°ΡΠΎΠΌ.
ΠΡΡΠ°Π²ΠΊΠ° ΠΎΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ IMDB ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ Π΄Π»Ρ ΡΠ΅Π½ΡΠΈΠΌΠ΅Π½Ρ-Π°Π½Π°Π»ΠΈΠ·Π°. Π ΡΠ΅ΡΠ΅Π½Π·ΠΈΡΡ ΠΊ ΡΠΈΠ»ΡΠΌΠ°ΠΌ ΡΠ°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠΆΠ΅ ΡΠΎΠΎΡΠ½Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠ΅Π½Π·ΠΈΡ ΠΈ ΠΎΡΠ΅Π½ΠΊΡ ΡΠΈΠ»ΡΠΌΠ° β ΠΊΠ°ΠΊ Π±Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅, ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΠ² Π±Π»ΠΎΠΊ ΡΠ΅ΠΊΡΡΠ° ΠΈ Π΅Π³ΠΎ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ.
ΠΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΠΉ Π² ΠΏΠΎΡΠΎΠ±ΠΈΠΈ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΆΠ°ΡΠΎΠ³ΠΎ tar-Π°ΡΡ ΠΈΠ²Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ Π½Π° Π΄ΠΈΡΠΊ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ· Python. ΠΠ°ΡΠ°ΡΠ΅ΡΡ ΠΎΠ±ΡΡΠ½ΠΎ Ρ ΡΠ°Π½ΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΡ Π±Π»ΠΎΠΊΠ½ΠΎΡΠΎΠ² Jupyter (ΡΡΠΎΠ±Ρ Π½Π΅ Π²ΡΠ³ΡΡΠΆΠ°ΡΡ ΠΈΡ Π½Π° GitHub), ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡΡΡ ΡΠ°Π±ΠΎΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ:
import os import tarfile # Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΡΡ ΠΊ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Ρ Π°ΡΡ ΠΈΠ²ΠΎΠΌ # Π½Π° ΡΠΎΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ os.chdir(os.path.relpath('../../../Datasets/')) fname = 'aclImdb_v1.tar.gz' with tarfile.open(fname, "r:gz") as tar: tar.extractall() tar.close()
Π’ΡΠ΄Π° ΠΆΠ΅ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ ΠΎΠ±ΡΡΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ .
ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½ΡΡ
ΠΠ°Π»Π΅Π΅ ΠΌΡ ΡΡΠΈΡΠ°Π΅ΠΌ, ΡΡΠΎ Π²Ρ ΡΠΆΠ΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ . Π Π°Π·ΠΎΠ±ΡΠ΅ΠΌ ΡΡΠ°ΠΏ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠ°Π³ΠΈ:
- ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡ ΠΈ ΠΌΠ΅ΡΠΊΠΈ ΠΈΠ· ΡΡΡΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ².
- ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅.
- Π Π°Π·Π΄Π΅Π»ΠΈΠΌ Π΄Π°Π½Π½ΡΠ΅ Π½Π° ΠΎΠ±ΡΡΠ°ΡΡΠΈΠΉ ΠΈ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ Π½Π°Π±ΠΎΡΡ.
- ΠΠ΅ΡΠ½ΡΠΌ Π΄Π²Π° Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ .
ΠΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΠΎΡΠ΅Π½, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π³ΠΎ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Β«ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡΒ» Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ:
def load_training_data( data_directory: str = "aclImdb/train", split: float = 0.8, limit: int = 0 ) -> tuple:
Π ΡΠΈΠ³Π½Π°ΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ² Python 3, ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΈΠΏΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΠΊΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ. ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ
ΡΠ°Π½ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ (data_directory
), ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ°ΡΡΠΈΡ
ΠΈ ΡΠ΅ΡΡΠΎΠ²ΡΡ
Π΄Π°Π½Π½ΡΡ
(split
) ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠ±ΠΈΡΠ°Π΅ΠΌΡΡ
Π·Π°ΠΏΠΈΡΠ΅ΠΉ (limit
). ΠΠ°Π»Π΅Π΅ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π±ΡΠ°ΡΡ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΈ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈΡ
Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠΏΠΈΡΠΎΠΊ:
# ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΡΠ΅ΡΠ΅ΡΠΊΠΈ Π·Π΄Π΅ΡΡ ΠΈ Π΄Π°Π»Π΅Π΅ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΠΊΠΎΠ΄, # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠΉ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ²ΡΠΈΠΉΡΡ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ import os # def load_training_data( data_directory: str = "aclImdb/train", split: float = 0.8, limit: int = 0) -> tuple: # ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ² reviews = [] # for label in ["pos", "neg"]: # labeled_directory = f"{data_directory}/{label}" # for review in os.listdir(labeled_directory): # if review.endswith(".txt"): # with open(f"{labeled_directory}/{review}") as f: text = f.read() # text = text.replace("<br />", "\n\n") # if text.strip(): # spacy_label = { # "cats": { # "pos": "pos" == label, # "neg": "neg" == label # } # } # reviews.append((text, spacy_label)) #
Π₯ΠΎΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌ, Π·Π΄Π΅ΡΡ ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² Π΄Π°Π½Π½ΡΡ
, ΠΈΡΠ΅ΠΌ ΠΈ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π° Π·Π°ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊΠΎΡΡΠ΅ΠΆ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΈ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠΊ Π² ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅ΡΠ΅Π½Π·ΠΈΠΉ reviews
. ΠΡΠΎΡΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠΊ Π² Π²ΠΈΠ΄Π΅ ΡΠ»ΠΎΠ²Π°ΡΡ β ΡΡΠΎ ΡΠΎΡΠΌΠ°Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ spaCy Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΡ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±Π·ΠΎΡ, Π·Π΄Π΅ΡΡ ΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ HTML-ΡΠ΅Π³ΠΈ <br />
ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ .strip ()
Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ
ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ
ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ².
Π ΡΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΡΠ°Π·Ρ ΡΠ΄Π°Π»ΡΡΡ ΡΡΠΎΠΏ-ΡΠ»ΠΎΠ²Π° ΠΈΠ· ΠΎΠ±ΡΡΠ°ΡΡΠ΅ΠΉ Π²ΡΠ±ΠΎΡΠΊΠΈ β ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΡΠ°Π·Ρ ΠΈ ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΠ»Ρ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°.
ΠΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ ΡΡΡΡΠ°Π½ΠΈΡΡ Π»ΡΠ±ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅, ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΎΠ±ΡΡΠ°ΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ :
import os import random # def load_training_data( data_directory: str = "aclImdb/train", split: float = 0.8, limit: int = 0 ) -> tuple: # ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ² reviews = [] for label in ["pos", "neg"]: labeled_directory = f"{data_directory}/{label}" for review in os.listdir(labeled_directory): if review.endswith(".txt"): with open(f"{labeled_directory}/{review}") as f: text = f.read() text = text.replace("<br />", "\n\n") if text.strip(): spacy_label = { "cats": { "pos": "pos" == label, "neg": "neg" == label} } reviews.append((text, spacy_label)) random.shuffle(reviews) # if limit: # reviews = reviews[:limit] # split = int(len(reviews) * split) # return reviews[:split], reviews[split:] #
Π Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΡ
ΡΡΡΠΎΠΊΠ°Ρ
ΠΊΠΎΠ΄Π° ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π»ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ· Π΄Π°Π½Π½ΡΡ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° random.shuffle()
. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΠΌ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π΄Π²Π° ΡΠΏΠΈΡΠΊΠ° ΠΎΠ±Π·ΠΎΡΠΎΠ².
ΠΡΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΠΈΡΠΈ:
load_training_data( data_directory = "aclImdb/train", split = 0.8, limit = 0)[0][0]
('HOLLOW MAN is one of the better horror films of the past decade. The sub-plot is original and the main plot is even better. The special effects are brilliant and possibly the best I have ever seen in a horror film. Kevin Bacon proves again that he can handle...', {'cats': {'pos': True, 'neg': False}})
thinc
(ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ GitHub), ΠΊΠΎΡΠΎΡΡΠΉ, ΠΏΠΎΠΌΠΈΠΌΠΎ Π΄ΡΡΠ³ΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±ΠΎΠ»ΡΡΠΈΠΌ Π½Π°Π±ΠΎΡΠ°ΠΌ Π΄Π°Π½Π½ΡΡ
, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π΄Π°ΡΠ°ΡΠ΅Ρ ΠΎΠ±Π·ΠΎΡΠΎΠ² IMDB, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² ΡΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅.ΠΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°
ΠΠΎΠ½Π²Π΅ΠΉΠ΅Ρ spaCy ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ ΠΎΠ±ΡΡΠΈΡΡ ΡΠ²Π΅ΡΡΠΎΡΠ½ΡΡ Π½Π΅ΠΉΡΠΎΠ½Π½ΡΡ ΡΠ΅ΡΡ (CNN) Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠ΄Π΅ΡΡ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ΅Π½ΡΠΈΠΌΠ΅Π½Ρ-Π°Π½Π°Π»ΠΈΠ·Π°, Π½ΠΎ Π½ΠΈΡΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΠΈΡΡ Π΅Π³ΠΎ ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠΎΠ².
Π ΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΡΠΈ ΡΠ°Π³Π°:
- ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΌ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ spaCy Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°
textcat
. - Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΈΠΊΠ» Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°
textcat
. - ΠΠ°ΡΡΠΈΠΌΡΡ ΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ΅ΡΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠΎΡΠ»Π΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΈΠΊΠ»ΠΎΠ² ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° spaCy Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ textcat
ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ, ΡΡΠΎ ΠΈ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
Π² Π½Π°ΡΠ°Π»Π΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°, Π΄Π°Π»Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ textcat
. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠΊΠ°ΠΆΠ΅ΠΌ textcat
ΠΌΠ΅ΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² Π΄Π°Π½Π½ΡΡ
: pos
Π΄Π»Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΎΡΠ·ΡΠ²ΠΎΠ² ΠΈ neg
Π΄Π»Ρ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΡΡ
:
import os import random import spacy def train_model( training_data: list, test_data: list, iterations: int = 20 ) -> None: # Π‘ΡΡΠΎΠΈΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ nlp = spacy.load("en_core_web_sm") if "textcat" not in nlp.pipe_names: textcat = nlp.create_pipe( "textcat", config={"architecture": "simple_cnn"} ) nlp.add_pipe(textcat, last=True)
ΠΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ textcat ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ spaCy, ΡΠΎ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π²Π°ΠΌ Π·Π½Π°ΠΊΠΎΠΌ. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ en_core_web_sm
, Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡ .pipe_names
, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ textcat
. ΠΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ, ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° .create_pipe()
, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ TextCategorizer. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ .add_pipe()
Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ΠΊΠΎΠ½Π΅Ρ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°.
Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ textcat
ΡΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½. ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΊΠΈ:
import os import random import spacy def train_model( training_data: list, test_data: list, iterations: int = 20 ) -> None: # Π‘ΡΡΠΎΠΈΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ nlp = spacy.load("en_core_web_sm") if "textcat" not in nlp.pipe_names: textcat = nlp.create_pipe( "textcat", config={"architecture": "simple_cnn"} ) nlp.add_pipe(textcat, last=True) else: # textcat = nlp.get_pipe("textcat") # textcat.add_label("pos") # textcat.add_label("neg") #
ΠΠΈΡΠ΅ΠΌ ΡΠΈΠΊΠ» ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ textcat
Π§ΡΠΎΠ±Ρ Π½Π°ΡΠ°ΡΡ ΡΠΈΠΊΠ» ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ, Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ Π½Π° ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° textcat
, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΡ Π΄Π°Π½Π½ΡΡ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° spacy.util
β minibatch()
ΠΈ compounding()
. ΠΠΎΠ΄ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ
, Π±Π°ΡΡΠ΅ΠΌ (Π°Π½Π³Π». batch) ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎ ΡΠ° Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ°ΡΡΠ²ΡΠ΅Ρ Π² ΠΎΠ±ΡΡΠ΅Π½ΠΈΠΈ. ΠΠ°ΠΊΠ΅ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΡΡ
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΈ Π±ΡΡΡΡΠ΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ.
Π Π΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΡΡΠΎΠΊΠΈ:
import os import random import spacy from spacy.util import minibatch, compounding # def train_model( training_data: list, test_data: list, iterations: int = 20 ) -> None: # Π‘ΡΡΠΎΠΈΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ nlp = spacy.load("en_core_web_sm") if "textcat" not in nlp.pipe_names: textcat = nlp.create_pipe( "textcat", config={"architecture": "simple_cnn"} ) nlp.add_pipe(textcat, last=True) else: textcat = nlp.get_pipe("textcat") textcat.add_label("pos") textcat.add_label("neg") # ΠΠ±ΡΡΠ°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ textcat training_excluded_pipes = [ # pipe for pipe in nlp.pipe_names if pipe != "textcat" # ] # with nlp.disable_pipes(training_excluded_pipes): # optimizer = nlp.begin_training() # # ΠΡΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ print("ΠΠ°ΡΠΈΠ½Π°Π΅ΠΌ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅") # batch_sizes = compounding( # 4.0, 32.0, 1.001 # ) # ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²Ρ ΠΎΠ΄Π½ΡΡ ΡΠΈΡΠ΅Π»
Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ
ΡΡΡΠΎΡΠΊΠ°Ρ
ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ textcat
. ΠΠ°Π»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° nlp.disable()
, ΡΡΠΎΠ±Ρ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
ΠΠ°Π»Π΅Π΅ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ nlp.begin_training()
, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠ°. ΠΡΠΎ ΡΠΎ, ΡΡΠΎ nlp.update()
Π±ΡΠ΄Π΅Ρ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π²Π΅ΡΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΠ°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ compounding()
Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°, Π΄Π°ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ batch_sizes
, ΠΊΠΎΡΠΎΡΡΠ΅ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ minibatch()
.
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π±Π°ΡΡΠ°Ρ :
import os import random import spacy from spacy.util import minibatch, compounding # def train_model( training_data: list, test_data: list, iterations: int = 20 ) -> None: # Π‘ΡΡΠΎΠΈΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ nlp = spacy.load("en_core_web_sm") if "textcat" not in nlp.pipe_names: textcat = nlp.create_pipe( "textcat", config={"architecture": "simple_cnn"} ) nlp.add_pipe(textcat, last=True) else: textcat = nlp.get_pipe("textcat") textcat.add_label("pos") textcat.add_label("neg") # ΠΠ±ΡΡΠ°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ textcat training_excluded_pipes = [ pipe for pipe in nlp.pipe_names if pipe != "textcat" ] with nlp.disable_pipes(training_excluded_pipes): optimizer = nlp.begin_training() print("ΠΠ°ΡΠΈΠ½Π°Π΅ΠΌ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅") batch_sizes = compounding( 4.0, 32.0, 1.001 ) # ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²Ρ ΠΎΠ΄Π½ΡΡ ΡΠΈΡΠ΅Π» for i in range(iterations): # loss = {} # random.shuffle(training_data) # batches = minibatch(training_data, size=batch_sizes) for batch in batches: # text, labels = zip(*batch) # nlp.update( # text, # labels, # drop=0.2, # sgd=optimizer, # losses=loss # ) #
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² ΡΠΈΠ³Π½Π°ΡΡΡΠ΅ train_model()
, ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΡΡΠΎΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ loss
, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ nlp.update()
. ΠΠ΅ΡΠ΅ΡΠ°ΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΡΠ°ΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌ ΠΈΡ
Π½Π° ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ minibatch()
.
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΎΡΠ΄Π΅Π»ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡ (text
) ΠΎΡ ΠΌΠ΅ΡΠΎΠΊ (labels
) ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΠΈΡ
Π² ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ nlp.update()
. ΠΡΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ dropout
ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ nlp.update()
, ΠΊΠ°ΠΊΡΡ ΡΠ°ΡΡΡ ΠΎΠ±ΡΡΠ°ΡΡΠΈΡ
Π΄Π°Π½Π½ΡΡ
Π² ΡΡΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π±ΡΠ»ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΏΠ΅ΡΠ΅ΠΎΠ±ΡΡΠΈΡΡΡΡ β Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎΠ±ΡΡΠ°ΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π±Π΅Π· ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΠΎΠ±ΡΠ°ΡΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
ΠΡΠ΅Π½ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠ° ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΡΠ΅Π½ΠΎΠΊ Π½Π° Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ evaluate_model()
. Π ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡ ΠΈΠ· Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ
Π½Π° Π½Π΅Π΄ΠΎΠΎΠ±ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΌΡ Π²ΡΡΠΈΡΠ»ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ:
- ΠΡΡΠΈΠ½Π½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ (true positives, TP) β ΡΠΈΡΠ»ΠΎ ΠΎΡΠ·ΡΠ²ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π»Π° ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅.
- ΠΠΎΠΆΠ½ΠΎΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ (false positives, FP) β ΡΠΈΡΠ»ΠΎ ΠΎΡΠ·ΡΠ²ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ Π½Π΅Π²Π΅ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π»Π° ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅, Ρ ΠΎΡΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΡΠΌΠΈ.
- ΠΡΡΠΈΠ½Π½ΠΎ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ (true negatives, TN) β ΡΠΈΡΠ»ΠΎ ΠΎΡΠ·ΡΠ²ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π»Π° ΠΊΠ°ΠΊ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΡΠ΅.
- ΠΠΎΠΆΠ½ΠΎΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ (false negatives, FN) β ΡΠΈΡΠ»ΠΎ ΠΎΡΠ·ΡΠ²ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ Π½Π΅Π²Π΅ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π»Π° ΠΊΠ°ΠΊ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΡΠ΅, Ρ ΠΎΡΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°ΡΠ° ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ΅ΡΠΊΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠ΅Π½ΠΊΡ ΠΎΡ 0 Π΄ΠΎ 1, ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠ»ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠΎΠΉ ΠΎΡΠ΅Π½ΠΊΠΈ. ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ΅ΡΡΡΠ΅Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΌΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ Π΄Π²Π΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ: ΡΠΎΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ. ΠΡΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ:
- Π’ΠΎΡΠ½ΠΎΡΡΡ (precision) β ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠΈΠ½Π½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ, ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ (ΠΈΡΡΠΈΠ½Π½ΡΠ΅ ΠΈ Π»ΠΎΠΆΠ½ΡΠ΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ). Π’ΠΎΡΠ½ΠΎΡΡΡ 1.0 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΡΠ·ΡΠ², ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΡΠΉ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ.
- ΠΠΎΠ»Π½ΠΎΡΠ° (recall) β ΡΡΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠΈΠ½Π½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΡΠ·ΡΠ²ΠΎΠ² ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΎΡΠ·ΡΠ²Π°ΠΌ, ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΡΠΈΠ½Π½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΡΠ·ΡΠ²ΠΎΠ², Π΄Π΅Π»Π΅Π½Π½ΡΡ Π½Π° ΡΡΠΌΠΌΠ°ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΡΠΈΠ½Π½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈ Π»ΠΎΠΆΠ½ΠΎΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΠΎΡΠ·ΡΠ²ΠΎΠ².
ΠΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠΉ ΠΌΠ΅ΡΡΠΈΠΊΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ F1-ΠΌΠ΅ΡΠ° β ΡΡΠ΅Π΄Π½Π΅Π΅ Π³Π°ΡΠΌΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ. ΠΠ°ΠΊΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ F1-ΠΌΠ΅ΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΈΡ Π΄Π²ΡΡ ΠΊΡΠΈΡΠ΅ΡΠΈΠ΅Π²:
Π evaluate_model()
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠΊΠ΅Π½ΠΈΠ·Π°ΡΠΎΡ, textcat
ΠΈ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ
.
def evaluate_model(tokenizer, textcat, test_data: list) -> dict: reviews, labels = zip(*test_data) reviews = (tokenizer(review) for review in reviews) # Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ TP ΠΊΠ°ΠΊ ΠΌΠ°Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΡΡΠΎΠ±Ρ Π² Π·Π½Π°ΠΌΠ΅Π½Π°ΡΠ΅Π»Π΅ # Π½Π΅ ΠΎΠΊΠ°Π·Π°Π»ΡΡ 0 TP, FP, TN, FN = 1e-8, 0, 0, 0 for i, review in enumerate(textcat.pipe(reviews)): true_label = labels[i]['cats'] score_pos = review.cats['pos'] if true_label['pos']: if score_pos >= 0.5: TP += 1 else: FN += 1 else: if score_pos >= 0.5: FP += 1 else: TN += 1 precision = TP / (TP + FP) recall = TP / (TP + FN) f_score = 2 * precision * recall / (precision + recall) return {"precision": precision, "recall": recall, "f-score": f_score}
Π ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌ ΠΎΠ±Π·ΠΎΡΡ ΠΈ ΠΈΡ
ΠΌΠ΅ΡΠΊΠΈ, Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π΄Π»Ρ ΡΠΎΠΊΠ΅Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠ±Π·ΠΎΡΠΎΠ², ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Ρ ΠΈΡ
Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π² textcat
. ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ ΡΠΎΠΊΠ΅Π½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΠ±Π·ΠΎΡΡ, Π½Π΅ ΡΠΎΡ
ΡΠ°Π½ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ
Π² ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ score
ΠΈ true_label
Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π»ΠΎΠΆΠ½ΡΡ
ΠΈ ΠΈΡΡΠΈΠ½Π½ΡΡ
ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π»Π΅Π΅ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π΄Π»Ρ ΡΠ°ΡΡΠ΅ΡΠ° ΡΠΎΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠ»Π½ΠΎΡΡ ΠΈ F-ΠΌΠ΅ΡΡ.
ΠΡΠ·ΠΎΠ²Π΅ΠΌ evaluate_model()
ΠΈΠ· ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΡΠ°Π½Π΅Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ train_model()
:
import os import random import spacy from spacy.util import minibatch, compounding def train_model( training_data: list, test_data: list, iterations: int = 20) -> None: # Π‘ΡΡΠΎΠΈΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ nlp = spacy.load("en_core_web_sm") if "textcat" not in nlp.pipe_names: textcat = nlp.create_pipe( "textcat", config={"architecture": "simple_cnn"} ) nlp.add_pipe(textcat, last=True) else: textcat = nlp.get_pipe("textcat") textcat.add_label("pos") textcat.add_label("neg") # ΠΠ±ΡΡΠ°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ textcat training_excluded_pipes = [ pipe for pipe in nlp.pipe_names if pipe != "textcat" ] with nlp.disable_pipes(training_excluded_pipes): optimizer = nlp.begin_training() # Training loop print("ΠΠ°ΡΠΈΠ½Π°Π΅ΠΌ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅") print("Loss\t\tPrec.\tRec.\tF-score") # batch_sizes = compounding( 4.0, 32.0, 1.001 ) # ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²Ρ ΠΎΠ΄Π½ΡΡ ΡΠΈΡΠ΅Π» for i in range(iterations): loss = {} random.shuffle(training_data) batches = minibatch(training_data, size=batch_sizes) for batch in batches: text, labels = zip(*batch) nlp.update( text, labels, drop=0.2, sgd=optimizer, losses=loss ) with textcat.model.use_params(optimizer.averages): evaluation_results = evaluate_model( # tokenizer=nlp.tokenizer, # textcat=textcat, # test_data=test_data # ) # print(f"{loss['textcat']:9.6f}\t\ {evaluation_results['precision']:.3f}\t\ {evaluation_results['recall']:.3f}\t\ {evaluation_results['f-score']:.3f}") # Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ # with nlp.use_params(optimizer.averages): # nlp.to_disk("model_artifacts") #
ΠΠ΄Π΅ΡΡ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ·ΠΎΠ²ΠΎΠ² print()
, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ evaluate_model()
, ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ΅ .use_param ()
, ΡΡΠΎΠ±Ρ ΠΎΡΠ΅Π½ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π² Π΅Π΅ ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΎΠ±ΡΡΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ model_artifacts
:
ΠΡΠ°ΠΊ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±ΡΡΠ°Π΅Ρ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΎΡΠ΅Π½ΠΊΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΡΠΎΠΈΠ·Π²Π΅Π΄Π΅ΠΌ Π΅Π΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅:
train, test = load_training_data(limit=5000) train_model(train, test, iterations=10)
ΠΠ°ΡΠΈΠ½Π°Π΅ΠΌ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ Loss Prec. Rec. F-score 13.758302 0.809 0.776 0.792 1.080611 0.827 0.784 0.805 0.264118 0.833 0.776 0.804 ... 0.005302 0.833 0.776 0.804
limit
), ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΅ΡΡΡ ΡΠΈΡΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΌΠ΅Π½Π΅Π΅ ΡΠΎΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ.ΠΠΎ ΠΌΠ΅ΡΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΏΠΎΡΠ΅ΡΡ, ΡΠΎΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠ»Π½ΠΎΡΡ ΠΈ F-ΠΌΠ΅ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΡΠ΅ΡΡ ΡΡΡΠ΅ΠΌΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ. ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΌΠ΅Π½ΡΡΡΡΡ, Π½ΠΎ Π½Π΅ ΡΠ°ΠΊ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ: ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠ½ΠΈ ΡΠ°ΡΡΡΡ Π½Π° ΡΠ°ΠΌΡΡ ΠΏΠ΅ΡΠ²ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΡΡ , Π° ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠΆΠ°ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅.
ΠΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ ΠΎΠ±Π·ΠΎΡΡ
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΎΠ±ΡΡΠ΅Π½Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΏΠΎΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π΅ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΎΠ±Π·ΠΎΡΠ°Ρ β Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΎΠ½Π° ΡΠΏΡΠ°Π²ΠΈΡΡΡ Ρ ΠΎΡΠ΅Π½ΠΊΠΎΠΉ ΠΈΡ ΡΠΌΠΎΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠΊΡΠ°ΡΠΊΠΈ. ΠΠ»Ρ ΡΠ΅Π»Π΅ΠΉ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΌΡ ΠΎΡΠ΅Π½ΠΈΠΌ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±Π·ΠΎΡ, Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡΡ Π»ΡΠ±ΡΠ΅ ΠΈΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
TEST_REVIEW = """ Transcendently beautiful in moments outside the office, it seems almost sitcom-like in those scenes. When Toni Colette walks out and ponders life silently, it's gorgeous.<br /><br />The movie doesn't seem to decide whether it's slapstick, farce, magical realism, or drama, but the best of it doesn't matter. (The worst is sort of tedious - like Office Space with less humor.) """
ΠΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ ΡΠ΅ΠΊΡΡ ΠΎΠ±Π·ΠΎΡΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΡΡΠΎΠ±Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ³Π½ΠΎΠ· ΠΈ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ:
def test_model(input_data: str): # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ loaded_model = spacy.load("model_artifacts") parsed_text = loaded_model(input_data) # ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ if parsed_text.cats["pos"] > parsed_text.cats["neg"]: prediction = "ΠΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΡΠ·ΡΠ²" score = parsed_text.cats["pos"] else: prediction = "ΠΠ΅Π³Π°ΡΠΈΠ²Π½ΡΠΉ ΠΎΡΠ·ΡΠ²" score = parsed_text.cats["neg"] print(f"Π’Π΅ΠΊΡΡ ΠΎΠ±Π·ΠΎΡΠ°: {input_data}\n\ ΠΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅: {prediction}\n\ Score: {score:.3f}")
Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π²Ρ
ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π² Π°ΡΡΠΈΠ±ΡΡΠ΅ cats
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ parsed_text
. ΠΠ°ΡΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΎΡΠ΅Π½ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΊΠΈ Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΌ ΠΏΡΠΎΠ³Π½ΠΎΠ·ΠΎΠΌ. ΠΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΡΠΎ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅.
test_model(input_data=TEST_REVIEW)
Π’Π΅ΠΊΡΡ ΠΎΠ±Π·ΠΎΡΠ°: Transcendently beautiful in moments outside the office, it seems almost sitcom-like in those scenes. When Toni Colette walks out and ponders life silently, it's gorgeous.<br /><br />The movie doesn't seem to decide whether it's slapstick, farce, magical realism, or drama, but the best of it doesn't matter. (The worst is sort of tedious - like Office Space with less humor.) ΠΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅: ΠΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΡΠ·ΡΠ² Score: 0.612
ΠΡΠ·ΡΠ² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ΡΠ΅Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΡΠ΅Π½ΠΊΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ Score
ΡΠ»ΡΠΆΠΈΡ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΎΠΉ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ test_model()
Π½Π° Π΄ΡΡΠ³ΠΈΡ
ΡΡΡΠΎΠΊΠΎΠ²ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ
.
ΠΡΠ°ΠΊ, ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΡΠ΄ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ load_data()
, train_model()
, evaluate_model()
ΠΈ test_model()
, ΠΊΠΎΡΠΎΡΡΠ΅, Π²ΠΌΠ΅ΡΡΠ΅ Π²Π·ΡΡΡΠ΅, Π±ΡΠ΄ΡΡ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΎΠ±ΡΡΠ°ΡΡ, ΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡ, ΡΠΎΡ
ΡΠ°Π½ΡΡΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠΌΠΎΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠΊΡΠ°ΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠ° Π² Python. Π§ΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΡ
Π²ΠΌΠ΅ΡΡΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ if __name__ == "__main__"
:
if __name__ == "__main__": train, test = load_training_data(limit=2500) train_model(train, test) print("Testing model") test_model()
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎΠ·Π΄ΡΠ°Π²Π»ΡΠ΅ΠΌ! ΠΡ ΠΎΠ±ΡΡΠΈΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°.
Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ:
- Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠ°;
- ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ²;
- ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ NLP-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ spaCy.
ΠΡΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ΄Π΅ΠΉ, Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠ°ΡΡ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅:
- ΠΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ
load_data()
ΡΠ΅ΠΊΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡΠ·ΡΠ²Π° Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΡ. ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ? - ΠΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅ ΠΊΠΎΠ΄, ΡΡΠΎΠ±Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΡΡΠΎΠΏ-ΡΠ»ΠΎΠ²Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠ΅Π΄ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ°ΠΊ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ?
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ click, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
- ΠΠ·ΡΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°
textcat
ΠΈ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ.
P.S. ΠΡΠ΅Π½ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΡΠ΅ΡΠ΅Π½Π·ΠΈΡΡ Ρ ΠΠΈΠ½ΠΎΠΏΠΎΠΈΡΠΊΠ°
ΠΠ°ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ Π½Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΠΎΡΠ·ΡΠ²Π°Ρ Π½Π° ΡΡΡΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ spaCy (ΡΠΌ. ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ Π²ΡΡΠ΅) ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ ΠΎΠ±ΡΡΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π½Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π΄Π°Π»Π΅Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ , Π½ΠΎ ΡΠ°Π΄ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ° ΠΌΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΌΠΎΠ΄Π΅Π»ΡΡ, ΡΠΆΠ΅ ΠΎΠ±ΡΡΠ΅Π½Π½ΠΎΠΉ Π½Π° ΡΠ΅ΡΠ΅Π½Π·ΠΈΡΡ IMDB. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ Π½Π° Π΄Π°ΡΠ°ΡΠ΅ΡΠ΅ ΠΈΠ· 3000 Π·Π°ΠΏΠΈΡΠ΅ΠΉ, ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ Ρ ΠΠΈΠ½ΠΎΠΏΠΎΠΈΡΠΊΠ° ΠΠ΅Π½ΠΈΡΠΎΠΌ ΠΡΠ΄ΡΡΠ²ΡΠ΅Π²ΡΠΌ. ΠΡΠ±ΠΎΡΠΊΠ° ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π°: ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΡΡΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ , Π½Π΅Π³Π°ΡΠΈΠ²Π½ΡΡ ΠΈ Π½Π΅ΠΉΡΡΠ°Π»ΡΠ½ΡΡ ΠΎΡΠ·ΡΠ²ΠΎΠ² (Π² Π΄Π°ΡΠ°ΡΠ΅ΡΠ΅ IMDB ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΎΡΠ·ΡΠ²Ρ). ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΠ°Π±ΠΎΡΡ ΠΌΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π»ΠΈ Π½Π°Π±ΠΎΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² Π΅Π΄ΠΈΠ½ΡΠΉ csv-ΡΠ°ΠΉΠ» ΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅Π»ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡ ΡΠ΅ΡΠ΅Π½Π·ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°.
import pandas as pd import sklearn.metrics df = pd.read_csv("kinopoisk.zip", index_col=0) df.sample(frac=1)[:5]
ΠΠ΄Π°ΠΏΡΠΈΡΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ test_model
Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ.
def test_model(input_data): loaded_model = spacy.load("model_artifacts") parsed_text = loaded_model(input_data) if parsed_text.cats["pos"] > parsed_text.cats["neg"]: prediction = "good" score = parsed_text.cats["pos"] else: prediction = "bad" score = parsed_text.cats["neg"] return prediction pred = df.translation.apply(test_model) df['pred'] = pred yy = df.iloc[:1999] y_true = yy['type'] y_pred = yy['pred'] y_true[y_true == 'good'] = 1 y_true[y_true == 'bad'] = 0 y_pred[y_pred == 'good'] = 1 y_pred[y_pred == 'bad'] = 0 accuracy = sklearn.metrics.accuracy_score(y_true.astype(int), y_pred.astype(int)) f_score = sklearn.metrics.f1_score(y_true.astype(int), y_pred.astype(int)) print(f"ΠΠ΅ΡΡΠΈΠΊΠ° accuracy ΡΠΎΡΡΠ°Π²ΠΈΠ»Π°: {accuracy:.3f}.") print(f"F1-ΠΌΠ΅ΡΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ°Π²Π½Π° {f_score:.3f}.")
ΠΠ΅ΡΡΠΈΠΊΠ° accuracy ΡΠΎΡΡΠ°Π²ΠΈΠ»Π°: 0.693. F1-ΠΌΠ΅ΡΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ°Π²Π½Π° 0.735.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ ΡΠ°ΡΡΡ ΡΠΌΡΡΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ ΡΠΊΡΠ°Π΄ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Ρ ΡΡΡΡΠΊΠΎΠ³ΠΎ Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠΉ, ΠΌΠΎΠ΄Π΅Π»Ρ Π²ΡΡ ΡΠ°Π²Π½ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΠΊΡΡΠΎΠ².
>>> df[df['type'] == 'neutral']['pred'].value_counts() good 559 bad 441 Name: pred, dtype: int64
ΠΠ»Ρ Π½Π΅ΠΉΡΡΠ°Π»ΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΈΡΠ»Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΡΡ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΠΉ β ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΎΠΌΠ½Π΅Π²Π°Π΅ΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ, Π²Π΅Π΄Ρ Π² Π½Π΅ΠΉ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π½Π° Π½Π΅ΠΉΡΡΠ°Π»ΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΡΡ .
ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΡΡ ΡΡΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π», Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π»Π°ΠΉΠΊ. ΠΠ° ΡΠ°ΠΉΡΠ΅ Π΅ΡΡΡ ΡΡΠ΄ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΡΡ ΡΡΡΠΎΡΠΈΠ°Π»ΠΎΠ² ΠΏΠΎ ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅ Data Science, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΠ²Π½ΠΎ-ΡΠΎΡΡΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΡ: Π²Π°ΡΠ° ΠΏΠ΅ΡΠ²Π°Ρ GAN-ΠΌΠΎΠ΄Π΅Π»Ρ Π½Π° PyTorch
- ΠΠΈΡΠ΅ΠΌ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΡ Π½Π° Python Ρ Π½ΡΠ»Ρ
- ΠΡΡ ΠΎΠ΄ΠΈΠ½ Π½Π°Ρ ΡΠ΅ΠΊΡΡ ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ spaCy
Π Π΅ΡΠ»ΠΈ ΠΌΠΎΠ·Π³ ΡΠΆΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°ΠΏΡΡΠ³ΡΡ, Π΅ΡΡΡ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΠ΅ΡΡ Π½Π° Π·Π½Π°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΌΠ΅ΡΡ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΠΈ.