Векторизация слов для быстрого поиска похожих
От: Barbar1an Украина  
Дата: 25.03.25 00:44
Оценка: +1
нужно сделать поисковый индекс
чтобы можно был найти "cde" в "abcdefgh" без тупого перебора

по идее это решается вектроризацией которая в ИИ применяется

но как точно это сделать не знаю

потому что если букву просто будут комопнентами ветора, то abd будет ближе к abc, чем ab
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Отредактировано 25.03.2025 2:25 Barbar1an . Предыдущая версия .
Re: Векторизация слов для быстрого поиска похожих
От: DiPaolo Россия  
Дата: 25.03.25 02:31
Оценка:
Ну как вариант, сразу приходит в голову использовать битовые маски и SIMD-овыми операциями искать вхождения. Причем битовая маска подготовлена со сдвигом искомой строки, ну типа:

0: cde
1:  cde
2:   cde
3:    cde
4:     cde
...


И такую штуку прикладываем, проверяя за раз N символов, потом смещаемся на N и ищем вхождение во втором куске. Для AVX512 N будет 512, что теоретически ускорит +- в 500 раз.

Вот похожее решение + еще несколько описаны тут http://0x80.pl/notesen/2016-11-28-simd-strfind.html
Патриот здравого смысла
Re: Векторизация слов для быстрого поиска похожих
От: Pzz Россия https://github.com/alexpevzner
Дата: 25.03.25 02:43
Оценка:
Здравствуйте, Barbar1an, Вы писали:

B>нужно сделать поисковый индекс

B>чтобы можно был найти "cde" в "abcdefgh" без тупого перебора

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

Алгоритм Морриса-Пратта никак не отзывается в твоей душе?

https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BD%D1%83%D1%82%D0%B0_%E2%80%94_%D0%9C%D0%BE%D1%80%D1%80%D0%B8%D1%81%D0%B0_%E2%80%94_%D0%9F%D1%80%D0%B0%D1%82%D1%82%D0%B0
Re[2]: Векторизация слов для быстрого поиска похожих
От: Barbar1an Украина  
Дата: 25.03.25 11:14
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Непонятно. Ты ищешь подстроку в конкретной строке, или у тебя миллион строк, и ты хочешь быстренько выбрать те, которые содержат указанную подстроку?



второй
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Векторизация слов для быстрого поиска похожих
От: sergii.p  
Дата: 25.03.25 11:31
Оценка:
Здравствуйте, Barbar1an, Вы писали:

B>по идее это решается векторизацией которая в ИИ применяется


поищи по word2vec. Там большое количество библиотек готовых: gensym, spacy, fasttext, sentence-transformers и др
Re[2]: Векторизация слов для быстрого поиска похожих
От: Barbar1an Украина  
Дата: 25.03.25 15:54
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>Здравствуйте, Barbar1an, Вы писали:


B>>по идее это решается векторизацией которая в ИИ применяется


SP>поищи по word2vec. Там большое количество библиотек готовых: gensym, spacy, fasttext, sentence-transformers и др


наверно мне эти либы не очень подойдут, потому что в них расстояние семантическое вычисляется, а нужно так сказать орфографическое
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Векторизация слов для быстрого поиска похожих
От: Слава  
Дата: 25.03.25 16:38
Оценка:
Здравствуйте, Barbar1an, Вы писали:

B>потому что если букву просто будут комопнентами ветора, то abd будет ближе к abc, чем ab


Разбейте слова на триплеты и ищите по ним.
Re: Векторизация слов для быстрого поиска похожих
От: kov_serg Россия  
Дата: 26.03.25 07:31
Оценка: 4 (1) +1 :)
Здравствуйте, Barbar1an, Вы писали:

B>нужно сделать поисковый индекс

Индекc для чего. Для полнотекстового поиска, для поиска похожих.

B>чтобы можно был найти "cde" в "abcdefgh" без тупого перебора

Обычный полнотекстовый индекс.

B>по идее это решается вектроризацией которая в ИИ применяется

ага точно, еще можно блокчеин прикрутить.

B>потому что если букву просто будут комопнентами ветора, то abd будет ближе к abc, чем ab

Для такого вводят функцию растояния и разбивают на кластеры и строят kd,vp,r,m деревья.
Отредактировано 26.03.2025 7:32 kov_serg . Предыдущая версия .
Re[2]: Векторизация слов для быстрого поиска похожих
От: Barbar1an Украина  
Дата: 26.03.25 12:24
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, Barbar1an, Вы писали:


B>>нужно сделать поисковый индекс

_>Индекc для чего. Для полнотекстового поиска, для поиска похожих.

B>>чтобы можно был найти "cde" в "abcdefgh" без тупого перебора

_>Обычный полнотекстовый индекс.

B>>по идее это решается вектроризацией которая в ИИ применяется

_>ага точно, еще можно блокчеин прикрутить.

B>>потому что если букву просто будут комопнентами ветора, то abd будет ближе к abc, чем ab

_>Для такого вводят функцию растояния и разбивают на кластеры и строят kd,vp,r,m деревья.

злой ты какойто, но спасибо)

(а блокчейн я уже прикрутил, точнее оно на блокчейне и нужно)
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Отредактировано 26.03.2025 12:25 Barbar1an . Предыдущая версия .
Re: Векторизация слов для быстрого поиска похожих
От: MaximVK Россия  
Дата: 27.03.25 11:21
Оценка: 6 (1)
Здравствуйте, Barbar1an, Вы писали:

B>нужно сделать поисковый индекс

B>чтобы можно был найти "cde" в "abcdefgh" без тупого перебора
B>по идее это решается вектроризацией которая в ИИ применяется
B>но как точно это сделать не знаю
B>потому что если букву просто будут комопнентами ветора, то abd будет ближе к abc, чем ab

В ИИ там семантическое расстояние, можно ChromaDB взять. Но тебе же другое нужно?
По идее, если строк много и они не очень длинные, то можно построить индекс типа trigram, ну или взять уже готовое решение типа lucene.
Если строки по которым ищешь длинные, то можно посмотреть в сторону суффиксных деревьев.
Re[2]: Векторизация слов для быстрого поиска похожих
От: Barbar1an Украина  
Дата: 28.03.25 10:51
Оценка:
Здравствуйте, MaximVK, Вы писали:

MVK>Здравствуйте, Barbar1an, Вы писали:


B>>нужно сделать поисковый индекс

B>>чтобы можно был найти "cde" в "abcdefgh" без тупого перебора
B>>по идее это решается вектроризацией которая в ИИ применяется
B>>но как точно это сделать не знаю
B>>потому что если букву просто будут комопнентами ветора, то abd будет ближе к abc, чем ab

MVK>В ИИ там семантическое расстояние, можно ChromaDB взять. Но тебе же другое нужно?

MVK>По идее, если строк много и они не очень длинные, то можно построить индекс типа trigram, ну или взять уже готовое решение типа lucene.
MVK>Если строки по которым ищешь длинные, то можно посмотреть в сторону суффиксных деревьев.

да, я уже понял что мне нужно не семантичское, а расстояние Левенштейна
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: Векторизация слов для быстрого поиска похожих
От: MaximVK Россия  
Дата: 28.03.25 11:14
Оценка:
Здравствуйте, Barbar1an, Вы писали:

B>да, я уже понял что мне нужно не семантичское, а расстояние Левенштейна


Хм, а вот тут я не понял
Тебе же нужно подстроку найти?
А расстояние Левенштейна — это синтаксическая близость слов, считается как количество замен/вставок/удалений букв которые надо сделать в одном слове, чтобы получить другое.
Re: Векторизация слов для быстрого поиска похожих
От: pilgrim_ Россия  
Дата: 29.03.25 20:58
Оценка:
Здравствуйте, Barbar1an, Вы писали:

B>нужно сделать поисковый индекс

B>чтобы можно был найти "cde" в "abcdefgh" без тупого перебора

Подумалось про частный "дешёвый" случай.
Про вариант использовать т.н. n-граммы тебе уже написали.
Если расмотреть пример частного сценария, когда тебе надо искать ТОЛЬКО последовательность фиксированного размеера (3,4,5...) символов, то реализовать это можно малой "кровью":
-создаёшь список n-gram для т.н. слов, т.е. разбиваешь слово на n-граммы (плавающее окно символов, напр разбиение на tri-gram'ы (по три символа) для abcd: abc bcd cd ,)
-и связь many-to-many между словами и n-граммами

Для реализации можно использовать хоть реляционную DB, хоть какую-нибудь key-value базу.
Re[2]: Векторизация слов для быстрого поиска похожих
От: Barbar1an Украина  
Дата: 02.04.25 23:49
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Для такого вводят функцию растояния и разбивают на кластеры и строят kd,vp,r,m деревья.


а какое из этих деревьев лучше если стоится оно последовательно? т.е. вначале у нас только 1 элемент известен, а не какоето множество
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: Векторизация слов для быстрого поиска похожих
От: kov_serg Россия  
Дата: 03.04.25 09:16
Оценка:
Здравствуйте, Barbar1an, Вы писали:

B>а какое из этих деревьев лучше если стоится оно последовательно? т.е. вначале у нас только 1 элемент известен, а не какоето множество

Самое простое r дерево, там всё плоскотями делется, в vp сферам. Но для 1 элемента это слегка бесполезно
А так выбираете направление и в доль него кластеризуете, разбиваете по кластерам. Потом в каждом кластере делаете тоже самое.
Re[4]: Векторизация слов для быстрого поиска похожих
От: Barbar1an Украина  
Дата: 03.04.25 10:25
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, Barbar1an, Вы писали:


B>>а какое из этих деревьев лучше если стоится оно последовательно? т.е. вначале у нас только 1 элемент известен, а не какоето множество

_>Самое простое r дерево, там всё плоскотями делется, в vp сферам. Но для 1 элемента это слегка бесполезно
_>А так выбираете направление и в доль него кластеризуете, разбиваете по кластерам. Потом в каждом кластере делаете тоже самое.

r не годится там есть минимум вершин, оно тоже из 1 элемента не стоится
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Отредактировано 03.04.2025 10:42 Barbar1an . Предыдущая версия .
Re[4]: Векторизация слов для быстрого поиска похожих
От: Barbar1an Украина  
Дата: 03.04.25 11:41
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Самое простое r дерево, там всё плоскотями делется, в vp сферам. Но для 1 элемента это слегка бесполезно

_>А так выбираете направление и в доль него кластеризуете, разбиваете по кластерам. Потом в каждом кластере делаете тоже самое.

Я думаю нужно какой-то алгортм дерева типа следущщего (вроде это M-дерево)

делаем корень
дальше напихиваем все новые точки в его payload
как только точек стало слишком много, делим их на N подпространств по какомуто критерию скучкованности
но тут вопрос:
будем делить так чтобы все остальные новые точки попадали в эти N подпространств, (кароче плоскостями делить)
либо
все полученные подпространства не будут заполнять всё пространство (например орагничиваться своим радиусом) и значит у корня могут быть еще дети

пока не понял как лучше
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Отредактировано 03.04.2025 12:01 Barbar1an . Предыдущая версия . Еще …
Отредактировано 03.04.2025 11:43 Barbar1an . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.