LSI-семантика и векторная релевантность (BM25 / Palekh / YATI)
1. Архитектура и принцип работы
Исторически поиск начинался с булевых моделей и TF-IDF, где вес термина рос с частотой в документе и падал с частотой в коллекции. BM25 (Okapi) усовершенствовал эту формулу, добавив насыщение частоты и нормализацию длины документа, что снизило переоптимизацию. LSI (Latent Semantic Indexing) через сингулярное разложение матрицы термин-документ выявлял скрытые темы, позволяя находить синонимы и связанные понятия. В Яндексе эволюция привела к алгоритмам Palekh и YATI: Palekh использует векторные представления запросов и документов на основе нейросетей, а YATI (Yet Another Transformer Index) применяет трансформеры для семантического сопоставления. Google развивает Entity Graph и Core Updates, где сущности и их связи в графе знаний определяют релевантность. Таким образом, архитектура сместилась от лексическогоа к семантическому векторному поиску.
2. Математическая механика и триггеры ранжирования
Формула BM25: score(D,Q) = Σ (IDF(qi) * (f(qi,D)*(k1+1)) / (f(qi,D) + k1*(1-b+b*|D|/avgdl))), где k1 и b — параметры насыщения и нормализации (обычно k1=1.2-2.0, b=0.75). IDF(qi) = ln((N - n(qi) + 0.5)/(n(qi)+0.5) + 1). Векторная релевантность в Palekh/YATI использует косинусное сходство между эмбеддингами запроса и документа: cos(θ) = (A·B)/(||A||·||B||). Веса факторов в Яндексе динамически настраиваются через машинное обучение (MatrixNet, CatBoost), где признаки включают семантическую близость, авторитетность, поведенческие метрики. Триггеры пессимизации: переоптимизация ключевыми словами (высокая плотность), несоответствие интента, низкая семантическая связность (высокая перплексия), дублирование контента. В Google Core Updates пессимизируются страницы с низким E-E-A-T, спамные техники, отсутствие сущностной глубины. Влияние на ранжирование: документы с высокой векторной близостью и правильной LSI-структурой получают буст, а примитивные SEO-тексты — понижение.
3. Специфика в Яндекс (YATI) vs Google
Яндекс использует YATI и Palekh для векторного сопоставления запроса и документа, опираясь на нейросетевые эмбеддинги и поведенческие факторы. YATI анализирует последовательности токенов через трансформеры, а Palekh строит векторные представления для семантического поиска. Важна роль ПФ (поведенческих факторов): клики, время на сайте, отказы корректируют релевантность. Google делает ставку на Entity Graph и Core Updates: сущности и их связи в графе знаний определяют тематическую авторитетность. Core Updates оценивают качество контента по E-E-A-T, а семантика учитывается через BERT и MUM. Google меньше зависит от поведенческих сигналов, но строже к соответствию сущностей и экспертности.
4. Нормативы SLA и диагностическая матрица
| Параметр / Метрика | Эталон по SLA | Критическая ошибка |
|---|---|---|
| Косинусное сходство эмбеддингов | ≥ 0.75 | < 0.5 |
| Плотность ключевых слов (BM25) | 1-3% | > 5% |
| Перплексия текста (семантическая связность) | < 50 | > 100 |
5. Пошаговый инженерный протокол внедрения
- Шаг 1: Соберите семантическое ядро и кластеризуйте запросы по интенту, используя LSI-анализ для выявления связанных понятий и синонимов.
- Шаг 2: Для каждого кластера постройте векторные эмбеддинги топ-10 конкурентов через API (например, Yandex GPT или OpenAI) и вычислите косинусное сходство.
- Шаг 3: Оптимизируйте текст под BM25: контролируйте плотность ключей, добавляйте LSI-термины, избегайте переспама, следите за длиной и насыщением.
- Шаг 4: Внедрите сущностную разметку Schema.org и свяжите страницы с авторитетными источниками для усиления Entity Graph.
- Шаг 5: Настройте мониторинг векторной релевантности через YATI-подобные модели и A/B-тесты поведенческих факторов, корректируйте контент.
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
# BM25 score example (simplified)
def bm25_score(q, d, k1=1.5, b=0.75, avgdl=100):
score = 0
for term in q:
f = d.count(term)
idf = np.log((len(corpus) - df[term] + 0.5)/(df[term] + 0.5) + 1)
score += idf * (f*(k1+1)) / (f + k1*(1-b+b*len(d)/avgdl))
return score
# Vector similarity
cos_sim = cosine_similarity([query_vec], [doc_vec])[0][0]
6. Типичные ошибки при оптимизации
- Фатальная ошибка 1: Переоптимизация ключевыми словами с высокой плотностью. Избегайте: используйте синонимы и LSI-термины, следите за естественностью языка и показателем TF-IDF.
- Фатальная ошибка 2: Игнорирование интента и семантической связности. Избегайте: анализируйте топ выдачи, стройте векторные профили конкурентов и проверяйте косинусное сходство.
- Фатальная ошибка 3: Отсутствие сущностной глубины и авторитетности. Избегайте: добавляйте экспертные данные, ссылки на первоисточники, разметку Schema.org и улучшайте E-E-A-T.
