← Назад к вопросам
Как из текстов получить эмбеддинги для трансформера?
2.2 Middle🔥 271 комментариев
#NLP и обработка текста#Глубокое обучение
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Получение эмбеддингов из текстов для трансформера
Эмбеддинги — это численные векторные представления текста, которые захватывают семантическое значение и структуру языка. Трансформеры позволяют получить высококачественные эмбеддинги, которые используются в различных задачах NLP.
Методы получения эмбеддингов
1. Использование библиотеки Hugging Face Transformers
Самый популярный и рекомендуемый подход — использование готовых предобученных моделей.
from transformers import AutoTokenizer, AutoModel
import torch
import numpy as np
# Загрузка модели и токенизатора
model_name = "sentence-transformers/all-MiniLM-L6-v2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
def get_embedding(text):
"""Получить эмбеддинг для одного текста"""
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=512)
with torch.no_grad():
outputs = model(**inputs)
# Берём среднее значение скрытых состояний (mean pooling)
embeddings = outputs.last_hidden_state.mean(dim=1)
return embeddings.numpy()[0]
# Использование
text = "Это пример текста для получения эмбеддинга"
embedding = get_embedding(text)
print(f"Размер эмбеддинга: {embedding.shape}") # (384,)
2. Использование Sentence Transformers (рекомендуется)
Специализированная библиотека для получения эмбеддингов целых предложений:
from sentence_transformers import SentenceTransformer
# Загрузка модели
model = SentenceTransformer('all-MiniLM-L6-v2')
# Получение эмбеддингов для списка текстов
texts = [
"Первое предложение",
"Второе предложение",
"Третье предложение"
]
embeddings = model.encode(texts, show_progress_bar=True)
print(f"Форма: {embeddings.shape}") # (3, 384)
# Получение эмбеддинга для одного текста
single_embedding = model.encode("Текст для анализа")
3. Использование OpenAI API
Для получения высококачественных эмбеддингов в production:
import openai
client = openai.OpenAI(api_key="your-api-key")
def get_openai_embedding(text):
"""Получить эмбеддинг от OpenAI"""
response = client.embeddings.create(
model="text-embedding-3-small",
input=text
)
return response.data[0].embedding
# Использование
embedding = get_openai_embedding("Мой текст")
print(f"Размер: {len(embedding)}") # 1536
Параметры и лучшие практики
Важные параметры:
- max_length: максимальная длина текста (обычно 128-512 токенов)
- truncation: обрезка длинных текстов
- padding: дополнение коротких текстов до единой длины
- pooling: способ агрегации токенов (mean, max, cls)
Оптимизация для больших объёмов:
# Батчевая обработка
batch_size = 32
all_texts = ["текст 1", "текст 2", ..., "текст N"]
embeddings = []
for i in range(0, len(all_texts), batch_size):
batch = all_texts[i:i+batch_size]
batch_embeddings = model.encode(batch)
embeddings.append(batch_embeddings)
all_embeddings = np.vstack(embeddings)
Выбор модели
Различные модели для разных задач:
-
Multilingual models (для русского и других языков):
sentence-transformers/multilingual-MiniLM-L12-v2sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
-
Специализированные модели:
- Для поиска (semantic search):
all-MiniLM-L6-v2 - Для кластеризации:
all-mpnet-base-v2 - Для переводов:
distiluse-base-multilingual-cased-v2
- Для поиска (semantic search):
Сохранение и загрузка эмбеддингов
import pickle
import json
# Сохранение в NumPy формат
np.save('embeddings.npy', embeddings)
loaded = np.load('embeddings.npy')
# Сохранение в JSON
with open('embeddings.json', 'w') as f:
json.dump(embeddings.tolist(), f)
Ключевые выводы
- Hugging Face и Sentence Transformers — стандартный выбор
- Батчевая обработка критична для производительности
- Выбор модели зависит от языка и задачи
- Эмбеддинги можно кешировать для экономии ресурсов
- OpenAI API — премиум-вариант с лучшим качеством, но требует оплаты