Bayesian Noise
61 subscribers
57 photos
234 links
Канал @nesterione. Посты про ИТ, машинное обучение, рациональность, иногда просто заметки и наблюдения.

з.ы. картинка не картинка...
Download Telegram
Тут в новостях проскочил анонс о том, что 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
Оказывается 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