Перейти к содержанию

brain.encoders — Кодировщики модальностей

Преобразование входных данных в векторные представления. Аналог сенсорных кортексов.


TextEncoder

Кодировщик текста с 4 режимами работы:

Режим Описание Зависимости
tfidf TF-IDF на основе словаря встроен
hash Feature hashing (MurmurHash) встроен
navec Предобученные русские эмбеддинги navec
sentence_transformers Многоязычные трансформеры sentence-transformers

TextEncoder

TextEncoder(model_name: str = DEFAULT_MODEL, use_fallback: bool = True, cache_enabled: bool = True)

Minimal Text Encoder для text-only MVP.

Основной режим: sentence-transformers (768d) Fallback: navec mean-pooled (300d) Degraded: нулевой вектор + warning

Использование

encoder = TextEncoder() result = encoder.encode_event(percept_event) result = encoder.encode("Нейрон — это клетка нервной системы")

Parameters:

Name Type Description Default
model_name str

имя sentence-transformers модели

DEFAULT_MODEL
use_fallback bool

пытаться ли загрузить navec при неудаче основной модели

True
cache_enabled bool

включить in-memory кэш по SHA256(text)

True

mode property

mode: str

Текущий режим: 'primary', 'fallback', 'failed'.

vector_dim property

vector_dim: int

Размерность выходного вектора.

encode

encode(text: str, source: str = 'user_input', quality: float = 1.0, trace_id: str = '', session_id: str = '', cycle_id: str = '') -> EncodedPercept

Удобный wrapper: кодирует строку → EncodedPercept.

encode_batch

encode_batch(percepts: List[PerceptEvent]) -> List[EncodedPercept]

Batch encoding: кодирует список PerceptEvent. Для primary mode использует batch-inference sentence-transformers.

status

status() -> Dict[str, Any]

Статус энкодера.

Пример использования

from brain.encoders.text_encoder import TextEncoder

# Режим по умолчанию (tfidf — без внешних зависимостей)
encoder = TextEncoder(mode="tfidf")
result = encoder.encode("что такое нейрон?")
print(result.vector[:5])   # [0.12, 0.0, 0.34, ...]
print(result.mode)         # "tfidf"

# Режим hash (детерминированный, без обучения)
encoder = TextEncoder(mode="hash", vector_dim=256)
result = encoder.encode("нейрон — базовая единица нервной системы")

# Режим navec (русские эмбеддинги, требует pip install cognitive-core[nlp])
encoder = TextEncoder(mode="navec", navec_path="navec_hudlit_v1_12B.tar")
result = encoder.encode("нейрон")
print(len(result.vector))  # 300

EncodedPercept

Результат кодирования описан в contracts: EncodedPercept.