NLP для аналитика: базовое

Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.

Зачем это знать

User reviews, support tickets, chat logs — огромная part ваших данных это text. Quantitative аналитик может получить insights из numbers. Plus NLP = расширенный инструментарий.

На собесах NLP basics чаще в NLP-focused companies (Ozon Search, Yandex Search, Skyeng reviews), но базовые concepts полезны везде.

Базовые tasks

1. Tokenization

Split text → words / tokens.

from nltk.tokenize import word_tokenize
tokens = word_tokenize("Карьерник — тренажёр")
# ['Карьерник', '—', 'тренажёр']

2. Stop words

Удалить common words (и, в, не).

from nltk.corpus import stopwords
stop = stopwords.words('russian')
filtered = [t for t in tokens if t not in stop]

3. Stemming / Lemmatization

Reduce к base form:

  • «бежал, бегу, беги» → «бежать»
from nltk.stem.snowball import SnowballStemmer
stemmer = SnowballStemmer('russian')
stemmer.stem('бежал')  # 'бежа'

pymorphy2 — лучше для русского (lemmatization).

4. Sentiment analysis

Positive / negative / neutral.

from transformers import pipeline
sentiment = pipeline('sentiment-analysis')
sentiment("Отличный продукт!")
# {'label': 'POSITIVE', 'score': 0.99}

Для русского — специальные models.

5. Named entity recognition

Identify entities:

import spacy
nlp = spacy.load('ru_core_news_md')
doc = nlp("Тинькофф инвестирует в стартапы")
for ent in doc.ents:
    print(ent.text, ent.label_)
# 'Тинькофф' ORG

6. Topic modeling

Find topics в документах.

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation

vectorizer = CountVectorizer(max_features=1000)
X = vectorizer.fit_transform(documents)
lda = LatentDirichletAllocation(n_components=5)
lda.fit(X)

# Top words per topic
for idx, topic in enumerate(lda.components_):
    top_words = vectorizer.get_feature_names_out()[topic.argsort()[:-11:-1]]
    print(f"Topic {idx}: {top_words}")

7. Text classification

Train model: text → category.

Например, support tickets → [billing, technical, account].

from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import TfidfVectorizer

pipe = Pipeline([
    ('tfidf', TfidfVectorizer()),
    ('clf', LogisticRegression())
])
pipe.fit(train_texts, train_labels)

Embeddings

Превращают text в vectors.

Word embeddings

  • Word2Vec: классика
  • GloVe: alternative
  • FastText: handles typos

Vectors captured semantic: «король» - «мужчина» + «женщина» ≈ «королева».

Sentence embeddings

  • BERT (SBERT)
  • E5, GTE — современные
  • OpenAI embeddings, Cohere

Превращают sentence → vector. Good для similarity, semantic search.

from sentence_transformers import SentenceTransformer

model = SentenceTransformer('cointegrated/rubert-tiny2')
emb = model.encode("Отзыв пользователя")

LLMs в аналитике

ChatGPT, Claude — useful для:

1. Labeling

Label training data быстро.

2. Extraction

«Extract mentioned products from review».

3. Summarization

Suppport tickets → summary.

4. Classification

Zero-shot / few-shot — для cases с мало training data.

Use cases в analytics

Customer feedback analysis

Reviews → sentiment → trends.

Support ticket clustering

Find common problem areas.

Search analytics

Query clustering, intent detection.

Churn feedback

Why users leave — extract reasons.

Sales intelligence

Extract from calls recordings → insights.

Tools

Russian NLP

  • pymorphy2 — morphology
  • Natasha — comprehensive toolkit
  • RuBERT — language model

Multilingual

  • spaCy
  • transformers (HuggingFace)
  • sentence-transformers

Classical

  • nltk
  • scikit-learn (TfidfVectorizer)

Challenges русского

  • Morphology: много форм одного слова
  • Word order: flexible
  • Less training data vs English

Solutions: pymorphy, specifically-trained models.

На собесе

«NLP опыт?» Какие tasks, какие tools.

«Sentiment analysis approach?» Pre-trained model + fine-tune или rule-based.

«Embeddings зачем?» Vector space для similarity, ML features.

«LLM для аналитика?» Labeling, extraction, classification с low data.

Частые ошибки

Neural always

Для simple tasks (sentiment на clear reviews) — TF-IDF + logistic regression часто enough.

Ignoring preprocessing

Dirty text → bad features. Normalize first.

No domain adaptation

Pre-trained model может не знать domain-specific terms.

Связанные темы

FAQ

Я не ML engineer. Надо знать?

Basics полезно. Full NLP — not required для most analyst roles.

Russian или English training data?

Depends on product. Для multilingual — multilingual models.

LLM заменит?

Часто faster, но not always cheaper / better.


Тренируйте ML — откройте тренажёр с 1500+ вопросами для собесов.