Инструменты обработки данных
Обработка естественного языка (NLP) — важная ветвь искусственного интеллекта, а обработка данных — ключ к успеху проектов NLP.
В этой статье будет систематически представлен основной набор инструментов для всего рабочего процесса обработки данных NLP, охватывающий ключевые этапы, такие как очистка данных, численные вычисления, конструирование признаков, машинное обучение и визуализация.

Pandas: очистка и предварительная обработка данных
Основные структуры данных Pandas
Pandas предоставляет две основные структуры данных, которые являются краеугольным камнем обработки данных NLP:
| Структура данных | Особенности | Сценарии применения NLP |
|---|---|---|
| Серия | Одномерный массив с метками | Хранить один столбец текстовых признаков |
| DataFrame | Двумерная табличная структура | Хранить весь текстовый набор данных |
Распространённые операции обработки текста
Пример
# Создание тестовых данных
data = {'text': ['Hello World!', 'NLP is amazing', 'Python 3.8'],
'label': [1, 0, 1]}
df = pd.DataFrame(data)
# 1. Очистка текста
df['clean_text'] = df['text'].str.lower() # Преобразовать в нижний регистр
df['clean_text'] = df['clean_text'].str.replace('[^\w\s]', '') # Удаление пунктуации
# 2. Токенизация
df['tokens'] = df['clean_text'].str.split() # Токенизация по пробелам
# 3. Подсчёт частоты слов
word_counts = df['tokens'].explode().value_counts()
print(word_counts)
Расширенные методы обработки текста
- Фильтрация с помощью регулярных выражений:
df['text'].str.contains(r'\bNLP\b') - Удаление стоп-слов: использование библиотек NLTK или spaCy
- Обработка пропущенных значений:
df.dropna()илиdf.fillna('UNK')
NumPy: эффективные численные вычисления
Основные функции
NumPy предоставляет эффективные возможности численных вычислений для NLP:
- Многомерные массивы: хранение векторов слов и матриц вложений
- Механизм вещания: эффективное выполнение поэлементных операций
- Линейная алгебра: разложение матриц, вычисление схожести
Типичные примеры применения
Пример
# Создать матрицу векторов слов (3 слова, каждое 5-мерное)
word_vectors = np.array([
[0.1, 0.2, 0.3, 0.4, 0.5], # Слово 1
[0.6, 0.7, 0.8, 0.9, 1.0], # Слово 2
[1.1, 1.2, 1.3, 1.4, 1.5] # Слово 3
])
# Вычислить косинусное сходство
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * (np.linalg.norm(b))
# Вычислить схожесть первых двух слов
sim = cosine_similarity(word_vectors[0], word_vectors[1])
print(f"Similarity: {sim:.2f}")
Советы по оптимизации производительности
- Используйте
np.vectorizeдля замены циклов Python - Используйте
np.save/np.loadдля эффективного хранения больших матриц - Освойте
np.einsumдля сложных тензорных операций
Scikit-learn: конвейер машинного обучения
Извлечение признаков NLP
Пример
корпус = [
'Это первый документ.',
'Этот документ — второй документ.',
'И это третий.'
]
# Создать векторизатор TF-IDF
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
print(f"Форма матрицы признаков: {X.shape}")
print(f"Словарь признаков: {vectorizer.get_feature_names_out()}")
Полный пример конвейера NLP
Пример
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# Создание конвейера
nlp_pipeline = Pipeline([
('tfidf', TfidfVectorizer(max_features=1000)),
('clf', RandomForestClassifier(n_estimators=100))
])
# Подготовка примера данных
texts = ["хороший фильм", "плохой фильм", "отличная история"] * 100
labels = [1, 0, 1] * 100
# Разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(texts, labels)
# Обучите модель
nlp_pipeline.fit(X_train, y_train)
# Оценить
print(f"Точность на тесте: {nlp_pipeline.score(X_test, y_test):.2f}")
Типичные компоненты NLP
| Категория компонента | Основные классы | Описание |
|---|---|---|
| Извлечение признаков | CountVectorizer | Модель мешка слов |
| TfidfVectorizer | Взвешивание TF-IDF | |
| Предобработка текста | HashingVectorizer | Экономичное по памяти извлечение признаков |
| Снижение размерности | TruncatedSVD | Латентно-семантический анализ |
Инструменты визуализации
Базовая визуализация в Matplotlib
Пример
# Пример визуализации частоты слов
words = ['nlp', 'python', 'learning']
frequencies = [25, 40, 35]
plt.figure(figsize=(8, 4))
plt.bar(words, frequencies, color=['#3498db', '#2E7DCC', '#e74c3c'])
plt.title('Распределение частоты терминов NLP')
plt.xlabel('Термины')
plt.ylabel('Частота')
plt.show()
Расширенные библиотеки визуализации
Seaborn: статистическая графика стала проще
Пример
sns.heatmap(tfidf_matrix, annot=True)
WordCloud: создание облаков слов
Пример
wordcloud = WordCloud().generate(' '.join(texts))
plt.imshow(wordcloud)
Plotly: интерактивная визуализация
Пример
fig = px.scatter_3d(embeddings, x=0, y=1, z=2)
fig.show()
Комплексный практический проект
Полный рабочий процесс анализа тональности
Пример
df = pd.read_csv('reviews.csv')
# 2. Очистка данных
df['clean_text'] = df['text'].str.lower().str.replace('[^\w\s]', '')
# 3. Разработка признаков
vectorizer = TfidfVectorizer(max_features=5000)
X = vectorizer.fit_transform(df['clean_text'])
y = df['sentiment']
# 4. Обучение модели
from sklearn.svm import LinearSVC
model = LinearSVC()
model.fit(X, y)
# 5. Визуализация
import seaborn as sns
from sklearn.metrics import confusion_matrix
y_pred = model.predict(X)
cm = confusion_matrix(y, y_pred)
sns.heatmap(cm, annot=True, fmt='d')
Советы по оптимизации производительности
- Параллельная обработка: использовать
n_jobsпараметр - Отбор признаков:
SelectKBestуменьшить размерность - Кэширование конвейера:
memoryпараметр кэширует промежуточные результаты
Рекомендуемые расширения инструментальной цепочки
- NLTK: классический инструментарий NLP
- spaCy: промышленная обработка NLP
- Gensim: тематическое моделирование и векторные представления слов
- HuggingFace Transformers: предварительно обученные модели

Освоив совместное использование этих инструментов, вы сможете эффективно решать большинство задач обработки данных NLP и заложить прочную основу для более продвинутых приложений NLP.
Другие расширения