Обработка естественного языка для полных новичков

Natural Language Processing for beginners

Решение сложных задач NLP в 10 строках кода на Python

Изображение, созданное автором

Правда в том, что NLP (обработка естественного языка) является сложной областью компьютерной науки. Фреймворки, такие как SpaCy или NLTK, являются объемными и часто требуют изучения. Но с помощью открытых больших языковых моделей (LLM) и современных библиотек Python, многие задачи можно решить намного проще. И даже больше, результаты, которые всего несколько лет назад были доступны только в научных статьях, теперь могут быть достигнуты всего за 10 строк кода на Python.

Без лишних слов, приступим.

1. Перевод языка

Когда-нибудь задумывались, как работает Google Translate? Google использует модель глубокого обучения, обученную на большом объеме текста. Теперь, с помощью библиотеки Transformers, это можно сделать не только в Google Labs, но и на обычном ПК. В этом примере я буду использовать предварительно обученную модель T5-base (Text-to-Text Transfer Transformer). Эта модель сначала была обучена на сырых текстовых данных, а затем дообучена на парах исходный-целевой текст, например (“перевести с английского на немецкий: дом замечательный”, “Das Haus ist Wunderbar”). Здесь “перевести с английского на немецкий” – это префикс, который “говорит” модели, что нужно делать, а фразы – это фактический контекст, который модель должна выучить.

Важное предупреждение. Большие языковые модели действительно довольно объемные. Класс T5ForConditionalGeneration, используемый в этом примере, автоматически загрузит модель “t5-base”, размер которой составляет около 900 МБ. Перед запуском кода убедитесь, что у вас достаточно места на диске и что ваш трафик не ограничен.

Предварительно обученную модель T5 можно использовать в Python:

from transformers import T5Tokenizer, T5ForConditionalGenerationpreprocessed_text = "перевести с английского на немецкий: погода хорошая"tokenizer = T5Tokenizer.from_pretrained('t5-base',                                        max_length=64,                                        model_max_length=512,                                        legacy=False)tokens = tokenizer.encode(preprocessed_text,                          return_tensors="pt",                          max_length=512,                          truncation=True)model =…