:blobcatscience: Пощупал немножко sentence-embedding'овые модели. если я правильно всё понял[oe], это по сути попытка (и очень неплохая) создать семантический перцепционный хэш:

- из текста произвольной длины получается числовой вектор фиксированной размерности (разные модели разной)
- для равных текстов векторы одинаковые (что и для традиционного хэша верно), для похожих по смыслу (семантике) текстов получаются близкие векторы (а это уже семантико-перцепционная часть)

Воткнул в Obsidian плагин Smart Connections[sc], который с помощью локальной модели вычисляет такие векторы для заметок и с помощью этих векторов ищет похожие для текущей заметки или произвольного текстового запроса. Результаты на удивление неплохи даже на крошечной модели с 35 Мб весов (bge-micro-v2), но считаются, конечно, медленно.

Применить это мне пока что негде, но что такое *существует*, знать полезно.

[oe]: ollama.com/blog/embedding-mode
[sc]: github.com/brianpetro/obsidian

@dside чем они лучше редакторского расстояния и прочих триграмм с соседями?

@3draven Левенштейн и триграммы сугубо про слова. *Семантический* поиск про, ну, *семантику*. Может улавливать сходство между синонимичными терминами и формулировками, например. В меньшей степени, но в ту же сторону, смежные тематики.

Follow

@dside вопрос состоял не в том, что такое семантический, а конкретно, чем лучше? Построить хэш на редакторском расстоянии, который словит сходство слов в произвольном порядке будет сильно хуже?

@dside нейронка слишком мелкая что бы хорошо понимать сходство семантики.

@3draven она его и не понимает. Ни хорошо, ни плохо, никак, совсем. И регулярно выдаёт фигню. Всё как с LLMками. Но среди фигни находит и то, что анализ исключительно слов, без оглядки на язык, не находит.

@dside судя по всему бенчмарков не видел с полнотекстовыми поисками и подобным или их нет вовсе. Не зная ответа строить гипотезу на своем понимании вопроса мне не надо, спасибо :) Я ведь конкретную штуку спросил. Нейронка может быть намного хуже обычного подхода. Ладно, разведение бури в стакане не входило в мой вопрос, закроем тему.

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

Но как я уже сказал в соседней ветке, бенчмаркать их друг против друга а нахожу дурацкой затеей. Примерно как бенчмаркать условный Redis против SQLite. Слишком разные штуки.

@dside банальное редакторское расстояние и словарь синонимов, скачанный с сети вполне вероятно будут быстрее и намного проще. Но находишь и находишь.

@3draven они 100%-но будут быстрее и намного проще, но заберут кратно больше времени лично у меня, а словарь синонимов непременно упустит не особо устоявшиеся слова, коих у меня в заметках хватает, и что можно закрыть подредактировав словарь руками или потратив больше времени на поиск словаря поновее… и что-то эта затея уже перестаёт казаться такой уж радужной.

@dside эти штуки не надо писать, они написаны давно и неплохо работают. Надо просто погуглить чуть. В моих областях, например, апач люцена есть и еще вагон. Там от мелкого до слонов все есть. И они очень, очень быстрые. Словарь засовываешь в мозг этой штуки и все. Блин, ладно, пойду.

@3draven а кто-то говорил про "писать"? Да, хватит, продуктивной дискуссии что-то не получается.

@3draven он не уловит синонимы. Совсем. Для задачи, где пользователь может задать вопрос не с тем термином, к которому компания привыкла, пользователь рискует не получить наиболее релевантный ответ. Это можно закрыть костылями типа добавления в текст ответа всех известных синонимов, чтобы точно попало или как-то ещё, но это уже техники поверх.

@3draven а, и обратный случай, одни и те же термины, отсутствующие в списке стоп-слов, могут легко "затуманить" обзор техникам типа сравнения поисковых векторов (убрать стоп-слова, мапнуть стеммером, отсортировать) и дать ненужные совпадения.

Этим, впрочем, эмбеддинговый поиск страдает даже в большем масштабе, но немного другим образом – его ложные совпадения проще узнать, потому что они вообще на искомое не похожи, тогда как поисковые векторы ищут как минимум те же слова с поправкой на формы, и будут и на человеческий глаз выглядеть похоже.

Но вопрос "чем лучше" тут бессмысленен, это не конкурирующие в моём понимании техники.

Sign in to participate in the conversation
MustUdon

I like Twitter, but, Mastodon it is so excited! Feel free to register it is server just for fun! Usefull links https://instances.social https://www.reddit.com/r/Mastodon/comments/yugh2o/some_useful_mastodon_lists/?utm_source=share&utm_medium=web2x&context=3