Тут в новостях проскочил анонс о том, что MS выложили в open source алгоритм векторного поиска используемый в bing. Почему-то не ожидал ничего нового, но всё же проверил.
Про библиотеку можно прочитать тут https://github.com/microsoft/SPTAG и это распределенная реализация approximate nearest neighborhood search.
В общем немного о том, в чём заключается идея семантического поиска (https://en.wikipedia.org/wiki/Semantic_search - поиск, который учитывает смысл фразы, а не только ключевые слова)
Тексты/документы нужно преобразовать в вектора, которые будут выражать смысл текста в числах. При том не случайным образом, а чтобы похожие тексты располагались рядом в пространстве. (см. идеи word2vec, glove или контекстуальные эмбеддинги)
Каждый текст мы преобразуем в такой вектор.
Запрос пользователя будет преобразовываться тоже в вектор, а дальше дело за малым: нужно найти наиболее близкие вектора в пространстве.
Как вы понимаете самая сложная часть, это построить вектора и именно это влияет на качество поиска.
Вторая задача, когда у нас документов много, то искать наиболее похожие документы задача тоже не просто. Для поиска надо выбрать правильную структуру данных, для этого подходят разные модификации kd-tree.
Резюмируя сказанное библиотека от microsoft всего лишь ещё одна реализация ANN, только распределённая. Если интересно какие реализации есть ещё, смотрите сравнение алгоритмов http://ann-benchmarks.com/. Я предпочитаю https://github.com/spotify/annoy.
#algorithms #search
Про библиотеку можно прочитать тут https://github.com/microsoft/SPTAG и это распределенная реализация approximate nearest neighborhood search.
В общем немного о том, в чём заключается идея семантического поиска (https://en.wikipedia.org/wiki/Semantic_search - поиск, который учитывает смысл фразы, а не только ключевые слова)
Тексты/документы нужно преобразовать в вектора, которые будут выражать смысл текста в числах. При том не случайным образом, а чтобы похожие тексты располагались рядом в пространстве. (см. идеи word2vec, glove или контекстуальные эмбеддинги)
Каждый текст мы преобразуем в такой вектор.
Запрос пользователя будет преобразовываться тоже в вектор, а дальше дело за малым: нужно найти наиболее близкие вектора в пространстве.
Как вы понимаете самая сложная часть, это построить вектора и именно это влияет на качество поиска.
Вторая задача, когда у нас документов много, то искать наиболее похожие документы задача тоже не просто. Для поиска надо выбрать правильную структуру данных, для этого подходят разные модификации kd-tree.
Резюмируя сказанное библиотека от microsoft всего лишь ещё одна реализация ANN, только распределённая. Если интересно какие реализации есть ещё, смотрите сравнение алгоритмов http://ann-benchmarks.com/. Я предпочитаю https://github.com/spotify/annoy.
#algorithms #search
GitHub
GitHub - microsoft/SPTAG: A distributed approximate nearest neighborhood search (ANN) library which provides a high quality vector…
A distributed approximate nearest neighborhood search (ANN) library which provides a high quality vector index build, search and distributed online serving toolkits for large scale vector search sc...
Оказывается Elasticsearch начиная с версии 7 поддерживает поиск по векторам https://www.elastic.co/blog/text-similarity-search-with-vectors-in-elasticsearch как-то совсем пропустил эту новость,
Поиск по векторам - это когда вы каким-то умным способом генерируете вектор для каждого документа, а во время поиска генерируете вектор для запроса и находите похожие вектора. Поиск в данном случае зависит от алгоритма, генерирующего вектора, вы можете использовать, например BERT.
К слову для многих это хорошо, т.к. теперь не надо тащить дополнительные системы, многие используют annoy (https://github.com/spotify/annoy) или faiss (https://github.com/facebookresearch/faiss).
К слову у другого известного движка для поиска Solr пока только висят открытые тикеты (https://issues.apache.org/jira/browse/SOLR-12890 https://issues.apache.org/jira/browse/SOLR-12890)
#elastic #ann #semantic #search
Поиск по векторам - это когда вы каким-то умным способом генерируете вектор для каждого документа, а во время поиска генерируете вектор для запроса и находите похожие вектора. Поиск в данном случае зависит от алгоритма, генерирующего вектора, вы можете использовать, например BERT.
К слову для многих это хорошо, т.к. теперь не надо тащить дополнительные системы, многие используют annoy (https://github.com/spotify/annoy) или faiss (https://github.com/facebookresearch/faiss).
К слову у другого известного движка для поиска Solr пока только висят открытые тикеты (https://issues.apache.org/jira/browse/SOLR-12890 https://issues.apache.org/jira/browse/SOLR-12890)
#elastic #ann #semantic #search
Elasticsearch Labs
Text similarity search with vector fields - Elasticsearch Labs
This post explores how text embeddings and Elasticsearch’s new dense_vector type could be used to support similarity search.