🤖 ИИ  ·  20 вопросов  ·  ~45 мин  ·  ⏱ Таймер 45:00  ·  Сложный  · 

Эмбеддинги и векторный поиск

Эмбеддинг превращает объект в числовой вектор, где близость должна отражать полезное для задачи сходство. Но результат зависит от модели, нормировки, меры расстояния, индекса и корпуса. Тест требует считать косинус, выбирать параметры поиска, замечать ложных соседей и оценивать выдачу по реальным запросам.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выбери один ответ из четырёх. В тесте 20 вопросов и 45 минут; не меньше половины заданий требуют прочитать код, конфигурацию или формализованную схему. После завершения откроются общий процент, четыре тематические шкалы, правильные ответы и разбор каждого решения.
Вопрос 1 из 20
Две фразы имеют одинаковый смысл, но одна длиннее и содержит вводные слова. Что разумнее проверить перед выводом о качестве эмбеддингов?
Python
a = encoder.encode("Верните оплату")
b = encoder.encode("Будьте добры, я хотел бы получить обратно внесённую оплату")
cosine(a,b)
Вопрос 2 из 20
Чему равен косинус между векторами `[1, 0]` и `[0, 2]`?
\cos(a,b)=\frac{a\cdot b}{\lVert a\rVert\lVert b\rVert}
Python
a = np.array([1., 0.])
b = np.array([0., 2.])
score = a @ b / (np.linalg.norm(a) * np.linalg.norm(b))
Вопрос 3 из 20
Корпус содержит 50 миллионов векторов, а полный перебор слишком медленный. Какой следующий шаг разумен?
Python
exact = brute_force(query_vectors, sample_corpus)
approx = ann_index.search(query_vectors, k=10)
recall = overlap(exact, approx)
Вопрос 4 из 20
По запросу «отмена подписки» первым приходит статья «как оформить подписку». Почему одной высокой косинусной близости недостаточно?
Вопрос 5 из 20
Почему нормировка векторов полезна перед поиском по скалярному произведению, если модель ожидает косинус?
Python
X = X / np.linalg.norm(X, axis=1, keepdims=True)
q = q / np.linalg.norm(q)
scores = X @ q
Вопрос 6 из 20
Векторы `[1,1]` и `[10,10]` имеют какой косинус?
Python
a = np.array([1.,1.])
b = np.array([10.,10.])
Вопрос 7 из 20
После перехода на приближённый индекс p95 уменьшился в десять раз, но recall@10 упал с 0,98 до 0,71. Какой вывод?
Вопрос 8 из 20
Почему среднее эмбеддингов токенов может плохо представлять длинный договор?
Python
doc_vector = token_embeddings.mean(axis=0)
Вопрос 9 из 20
HNSW-подобный индекс увеличивает параметр поиска, расширяя число просмотренных кандидатов. Что обычно меняется?
Вопрос 10 из 20
Как оценить поиск, если для каждого запроса известен один особенно важный документ и его позиция в выдаче?
\operatorname{MRR}=\frac{1}{|Q|}\sum_q\frac{1}{rank_q}
Python
rr = 1 / rank_of_first_relevant
mrr = sum(rr_values) / len(rr_values)
Вопрос 11 из 20
Новая версия embedding-модели имеет другую размерность. Можно ли дописывать её в старый индекс?
Вопрос 12 из 20
Чему равен косинус с нулевым вектором?
Python
a = np.zeros(3)
b = np.array([1.,2.,3.])
Вопрос 13 из 20
Индекс поддерживает фильтры по подразделению, но фильтрация применяется после получения top-10. Для редкого подразделения результатов нет. Почему?
Python
hits = index.search(q, k=10)
visible = [h for h in hits if h.department == user.department]
Вопрос 14 из 20
Эмбеддинги имён «Иван Петров» и «Пётр Иванов» близки. Почему это может быть опасно для поиска конкретного человека?
Вопрос 15 из 20
Какой сложный отрицательный пример полезен для запроса «как отключить автопродление»?
Вопрос 16 из 20
Почему перенос embedding-модели с новостей на медицинские сокращения может ухудшить поиск?
Python
general_score = general_encoder.sim("ХСН II ФК", relevant_note)
domain_score = medical_encoder.sim("ХСН II ФК", relevant_note)
Вопрос 17 из 20
При обновлении одного документа старый вектор не удаляется. Какой эффект возможен?
Вопрос 18 из 20
Dot product у длинных ненормированных векторов систематически выше. Что это может означать?
Python
score = q @ x
cos = score / (norm(q) * norm(x))
Вопрос 19 из 20
Поиск хорош на коротких запросах, но проваливается на вопросах из трёх предложений. Какой анализ полезен?
Вопрос 20 из 20
Какой честный процесс выбора embedding-модели лучше?
Python
for encoder in encoders:
    vectors = encoder.encode(corpus)
    index = build_same_index(vectors)
    report[encoder.name] = evaluate(index, labeled_queries, slices=slices)

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу