Эффективный поиск документов, представленных в виде многомерных векторов - PullRequest
1 голос
/ 21 апреля 2020

Я подготовил модель на основе глубокой нейронной сети для поиска информации. В конце моя модель представляет документы в виде 128-мерных векторов. Семанти c представления документов, аналогичные представлению встраивания слов для слов (алгоритм word2ve c). Когда я даю запрос к моей модели, он также представляет запрос в том же 128-мерном векторном пространстве. Теперь из всего векторного пространства я хочу получить верхние k документов, наиболее близких к вектору запроса, представленному в том же векторном пространстве.

Мера подобия - это косинусное сходство, которое определяется следующим образом:

sim(Q, D) = np.dot(Q.T, D)/(np.linalg.norm(Q) * np.linalg.norm(D))

, где sim(Q, D) представляет сходство между запросом Q и документом D. Проще говоря, это точечное произведение единицы векторы запроса и документа.
Теперь у меня есть примерно 36 миллионов документов, поэтому вычисление косинусного сходства для всех документов и их сортировка не являются возможным вариантом для эффективного поиска. Я хочу эффективно искать наиболее похожие k документов для любого вектора запроса, представленного в том же 128-мерном векторном пространстве.

1 Ответ

1 голос
/ 22 апреля 2020

Использовать приблизительную библиотеку поиска ближайшего соседа (ANN), например nmslib . Эти библиотеки позволят вам индексировать плотные векторы и извлекать список таких проиндексированных векторов по запросу. Некоторые примеры i python ноутбуков можно найти здесь .

...