Sobes.tech
Back to questions
Middle — Senior
10

Как считать косинусную близость между вопросами?

Companies where asked
WildberriesWildberries

Answer from AI

sobes.tech AI

Что хотят услышать интервьюеры:

Косинусную близость между вопросами считают не по самим строкам, а по их векторным представлениям. Сначала каждый вопрос переводят в числовой вектор, затем измеряют косинус угла между ними. Чем ближе значение к 1, тем семантически похожее вопросы.

Определение:

Косинусная близость — это метрика сходства двух векторов, которая показывает, насколько совпадает их направление, независимо от длины. Для текстов вопросы обычно сначала преобразуют в эмбеддинги, TF-IDF-векторы или другие числовые представления, а затем считают:

[ \text{cosine_similarity}(A, B) = \frac{A \cdot B}{|A| \cdot |B|} ]

Значение обычно лежит в диапазоне от -1 до 1, но для неотрицательных текстовых векторов чаще от 0 до 1.
Важно: это не мера расстояния, а мера похожести.

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

Например, есть два вопроса:

  1. «Как восстановить пароль в системе?»
  2. «Что делать, если забыл пароль от аккаунта?»

Если перевести их в эмбеддинги, то косинусная близость, скорее всего, будет высокой, потому что смысл почти одинаковый.

from sklearn.metrics.pairwise import cosine_similarity

# Допустим, vectors уже получены после эмбеддинга текста
q1 = [[0.2, 0.1, 0.7]]
q2 = [[0.18, 0.12, 0.69]]

score = cosine_similarity(q1, q2)[0][0]
print(score)

Если вместо эмбеддингов используются TF-IDF-векторы, процесс тот же: сначала векторизация, потом вычисление cosine similarity.

Пояснение кода:

В коде два текста уже представлены как числовые векторы q1 и q2.
Функция cosine_similarity сравнивает их направление в многомерном пространстве и возвращает число, отражающее степень сходства.
Результат ближе к 1 означает, что вопросы очень похожи; ближе к 0 — что они слабо связаны по смыслу.

Ключевые моменты:

  • Косинусную близость нельзя считать прямо по тексту — сначала нужен векторный вид вопроса.
  • Для текстов часто используют TF-IDF, word embeddings или sentence embeddings.
  • Метрика хорошо подходит для сравнения смысла, потому что не зависит от длины текста.
  • Для поиска похожих вопросов обычно сравнивают один вопрос со всеми кандидатами и берут top-k по score.
  • Перед сравнением важно одинаково обрабатывать тексты: токенизация, нормализация, удаление мусора.
  • Косинусная близость лучше отражает семантическое сходство, чем простое совпадение слов, если используются хорошие эмбеддинги.