← Назад к вопросам

Как из текстов получить эмбеддинги для трансформера?

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)

Выбор модели

Различные модели для разных задач:

  1. Multilingual models (для русского и других языков):

    • sentence-transformers/multilingual-MiniLM-L12-v2
    • sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
  2. Специализированные модели:

    • Для поиска (semantic search): all-MiniLM-L6-v2
    • Для кластеризации: all-mpnet-base-v2
    • Для переводов: distiluse-base-multilingual-cased-v2

Сохранение и загрузка эмбеддингов

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)

Ключевые выводы

  1. Hugging Face и Sentence Transformers — стандартный выбор
  2. Батчевая обработка критична для производительности
  3. Выбор модели зависит от языка и задачи
  4. Эмбеддинги можно кешировать для экономии ресурсов
  5. OpenAI API — премиум-вариант с лучшим качеством, но требует оплаты
Как из текстов получить эмбеддинги для трансформера? | PrepBro