Ассоциативный поиск, связи и граф в Obsidian
Всё сказанное в этой статье является исключительно личным мнением автора и не претендует на Истину В Последней Инстанции. Тем более такой Истины не существует.
Приложение Obsidian потрясает своими возможностями, и даже не столько функциями и «фишками», которые оно умеет, сколько открытиями для себя, к которым рано или поздно приходишь при активном использовании этой программы и накоплении в ней некоторого объема информации.
Содержание
В этой статье рассматриваются темы:
- Граф Obsidian
- Диалог с картотекой по Н. Луману
- Смысловые связи и MOC карточки
- Поиск в графе Obsidian
- Использование плагина Graph Analysis
- Использование методов анализа:
- Заключение и выводы
Граф Obsidian и умение готовить кошек
Одной из самых сильных сторон Obsidian являются ссылки и граф, который строится на их основании.
С одной стороны, граф Obsidian выглядит очень эффектно, особенно если его раскрасить по произвольным группам. Говорят, в Discord есть специальный канал, где пользователи хвастаются друг перед другом своими графами (я вот сейчас тоже хвастаюсь).
А с другой стороны что? А ничего! Раскрасили граф, ну может быть фильтры поставили и, как правило, на этом всё! Здесь для большинства пользователей граф Obsidian и заканчивается. Вот уже и Федоров пишет: «… в Evernote нет графов (говорят их значение переоценено) …«.
Позволю себе не согласиться, ведь неумение использовать граф не является показателем его бесполезности, точно как в анекдоте про неумение готовить кошек. Для меня граф Obsidian – это мощнейший инструмент для поиска ассоциаций и даже идей, в том числе и для этой статьи.
Диалог с картотекой
Говорят, что при наборе некой критической массы (400-500 заметок) с картотекой в Obsidian можно вести диалог, и она будет подсказывать множество того, что раньше упускалось из вида. И это правда, я сам почувствовал такой момент на собственном опыте, правда на несколько большем количестве заметок. Автор Zettelkasten, Никлас Луман называет это диалогом с картотекой (Kommunikation mit Zettelkästen — Luhmann, Niklas (1981) — это очень тяжелая для чтения и сложная статья, но вот ее хороший перевод).
И граф, а точнее ссылки, лежащие в его основе, играют в таком диалоге первейшую роль. Весь диалог с картотекой строится на ассоциативном поиске информации.
Это очень важно. Ассоциативный поиск (графовый поиск, поиск по связям) ищет ассоциации между элементами вашей картотеки. Он очень отличается от лексического поиска (поиска по словам), и этот факт всегда нужно помнить: ассоциативный поиск не заменяет обычный, это просто другой инструмент.
Ниже на реальных примерах показан такой диалог с картотекой, когда из анализа результатов ассоциативного поиска рождаются совершенно новые и порой неожиданные идеи.
Еще одно важное замечание: предполагается, что в вашей картотеке уже есть некоторое количество связанных по смыслу заметок, возможно, помеченных смысловыми тегами, и эти связи действительно смысловые, а не синтетические.
Смысловые связи и MOC карточки
Связи, с одной стороны, пожалуй, самая простая вещь: пишешь заметку – поставь в ней ссылки на те термины или идеи, которые упоминаются или предполагаются в заметке. А с другой стороны, это самая сложная вещь – на что ставить ссылки, если карточек нет? Или они есть, но они очень общие, типа «Универ», «Дела», «Моя супер-пупер красивая хоумпейдж», и всё.
MOC-карточки! Связные карточки – вот ответ на этот вопрос! Всегда их делайте! Не бойтесь переборщить, это просто невозможно.
MOC с прямыми ссылками
Когда создают MOC-карточку, обычно идут по прямому пути. Задаются неким вопросом (проблематикой), например, «Какие способы поиска я знаю?». Создают карточку «Способы поиска» и в ней просто перечисляют те заметки, которые у вас уже есть на эту тему, или упоминают эту тему. А если нет таких заметок? Так создайте их! Создайте и кратко опишите их назначение, буквально одной фразой. Это пока, потом вы к ним еще вернётесь…
Такой подход прямого создания элемента карты контента (MOC – Map Of Content) очень наглядный, понятный и простой. Главное здесь в том, чтобы не запоминать, зачем и почему вы поставили ту или иную ссылку в своей MOC-карточке. Поэтому постарайтесь кратко описывать это в самой MOC-карточке: «для этого решения мне понадобится то-то и то-то, потому что так и так«.
Но у такого способа прямого создания MOC-карточек есть очень существенный недостаток – их может быть много (и их должно быть много!). И когда вы создаете новую заметку для новой идеи, проекта, доклада, статьи и т.п., которая захватывает десяток тем, вам нужно будет открыть десяток MOC-карточек и каждую из них модифицировать, вписав новую ссылку. На самом деле это делается быстро, но проблема в том, что это пугает, и мы интуитивно, подсознательно отторгаем такую модификацию, игнорируем или максимально упрощаем эту важную часть работы с картотекой. Вот здесь и появляется главная ошибка в полноте связей между заметками. В результате мы получаем так называемый одуванчик (ромашка, ёжик), то есть одну или несколько больших MOC-карточек с большим количеством исходящих ссылок на десятки заметок. На графе она действительно выглядит как одуванчик весной.
Проблема одуванчиков в том, что они слишком общо, слишком грубо концентрируют связи между заметками. Сама идея ассоциаций теряется, очень сложно потом понять, почему между заметками «Обращение клиента N» и «Как крепить потолок» при глубоком анализе вдруг появилась ассоциативная связь. Я покажу это на примере далее.
Рекомендация: старайтесь делать MOC-карточки более мелкими, дробить их на отдельные темы и подтемы по проблематике, следуя принципу «от общего к частному». Например, «Мои статьи → Статьи про Obsidian → Поиск в Obsidian», или «Телеграм → Боты Телеграм → Разработка ботов → Мои боты → Бот синхронизации Obsidian» и т.п. И не забывайте в каждой такой MOC-карточке хотя бы одним предложением описывать, зачем вы ее создали и что она показывает.
MOC с обратными ссылками
Другой, более быстрый способ организации MOC-карточек базируется на обратных ссылках из заметки на MOC-карточку (ссылка на проблематику). Суть метода в том, что здесь не требуется открывать эту карточку и в нее что-то вписывать, это делается намного быстрее и проще. На самом деле графу и ассоциативному поиску всё равно, какой тип связи используется – прямая ссылка или обратная. А чтобы лишний раз не открывать боковую панель «Обратные ссылки» при работе с MOC-карточкой, я просто добавляю в нее вот такой несложный Dataview-запрос:
```dataview
LIST FROM [[]]
WHERE (file.name != this.file.name) AND (!contains(this.file.outlinks, file.link))
SORT file.ctime ASC
```
Этот запрос показывает все входящие (обратные) ссылки на данную заметку при условии, что они явно не указаны в самой заметке. Вот как это выглядит:
Простановка ссылок на MOC
Теперь при написании заметки (создании новой карточки) можно сделать два очень простых действия: сразу проставить ссылки на желаемые карточки (затронутые вопросы или проблематика) и после написания заметки проставить ссылки на упомянутые вопросы в тексте. Это делается буквально в два клика.
Исторически у меня сложилась привычка в каждой заметке указывать ее тематику (родителя) в виде ссылки из свойств заметки (фронтматтер) и основные темы, планируемые в этой заметке в виде ссылок на MOC-карточки. Я для себя называю эти свойства «Тема» и «Ссылки». Свойство «Тема» создается сразу же (оно задано в шаблоне для любых новых заметок), а свойство «Ссылки» добавляется простой горячей клавишей при необходимости.
Не обязательно именно такое разделение или такие названия, у меня просто так сложилось. Главное, что следует понять: это и есть ссылки и связи моей заметки. И неважно, где они проставлены. То есть, как только я начинаю работать с заметкой, я сразу указываю ее связь с родительской темой и вопросы, которые я планирую использовать. И главное! Все возможности ассоциативного поиска мне уже доступны в этой новой, пока полностью пустой заметке. Но эти возможности я покажу чуть позже, пока давайте продолжим ставить ссылки.
Когда я напишу заметку более-менее полно, я обычно делаю еще одну итерацию простановки исходящих ссылок. Здесь здорово помогает панель «Исходящие ссылки» и раздел в ней «Упоминания без ссылки». В этом разделе Obsidian сам предлагает поставить ссылки на другие заметки по тексту. Конечно же, здесь следует подходить вдумчиво, ведь Obsidian выбрал просто все упоминания, а ставить ссылку нужно по смыслу. Например, в этой статье я упомянул Телеграм, и мне тут же предлагается поставить эту ссылку. Но я этого делать не буду, эта статья не про Телеграм, ТГ упоминался только в качестве примера. Мне такая ассоциативная связь в этой заметке не нужна.
Итак, MOC-карточки – это основной способ создания ассоциативных связей в вашей картотеке. Создавайте MOC-карточки на любую тему, большую или маленькую, и не бойтесь переборщить. При создании MOC-карточки старайтесь описывать ту проблематику, тот вопрос, который перед вами стоял, когда вы ее создавали, и очень желательно описывать, почему вы включили в нее ту или иную прямую ссылку. Не следует думать, что MOC-карточка всегда будет такой связной карточкой. У меня не раз было, когда MOC-карточка из одного предложения со временем вырастала в интересную и развитую карточку по определенной теме. Так картотека и растёт.
Поиск в графе
Собственно, предыдущие параграфы были просто подготовкой к использованию графа. Они позволили нам создать сеть связей, то есть сформировать рабочий граф. И сейчас им уже можно пользоваться для решения наших вопросов. Здесь хорошо бы еще упомянуть расположение карточек (папки, которые великолепно могут использоваться для фильтрации в графе) и теги карточки, то есть мягкие связи в графе (терминология автора). Но это тема отдельной статьи, и я к ней вернусь несколько позже. Пока будем использовать просто связи.
Самый простой (и грубый) способ поиска в графе – это поставить фильтр в нём. Например, выбрать всё, что относится к графам в моей картотеке, а потом указывать мышкой на отдельные узлы и смотреть их ассоциации.
Но это не очень удобно, особенно когда заметок много. И тут возникает дилемма: поставишь более конкретный фильтр, получишь меньше заметок, они будут наглядными, но самое интересное, вот то ненаглядное, упустишь. И наоборот, поставишь общий фильтр, граф навалит сотни точек с очень интересными связями, но чтобы их просто просмотреть, даже на самом графе, потребуется и время, и придется елозить мышкой.
Попробуем другой способ. Ведь я не зря же сразу при создании новой заметки указал в свойствах «Тему» и «Ссылки» на планируемые заметки. Открою локальный граф. В фильтрах графа сразу установлю глубину поиска 2, а может даже и 3. Как видно, число заметок резко увеличилось, но связи с ними начинаются от текущей, то есть это те самые ассоциации текущей заметки, которые появляются через связанные темы. Это уже намного интереснее. Но их много, поэтому попробуем вписывать в фильтр ключевые слова или даже их части, чтобы увидеть интересующие нас темы.
Даже на скриншоте видно, что для текущей статьи мне предлагается рассмотреть индекс Адамик — Адар на примере поиска связей в социальных сетях (это следующая тема в этой статье). Еще раз хочу отметить, что для этого предсказания темы (запомним это слово!) текст исходной заметки вообще не использовался. Она может быть вообще пустой, это исключительно анализ связей и поиск в них. Собственно, это и есть ассоциативный поиск.
Обратите внимание, до сих пор мы использовали только встроенные функции Obsidian, а именно граф и локальный граф с фильтрами. Однако применение фильтров может отсечь неочевидные связи и заметки в поиске ассоциаций. Поэтому нам нужен более мощный инструмент.
Плагин Graph Analysis
Как ни странно, но в огромном количестве плагинов Obsidian таких инструментов раз-два и обчёлся. Точнее, раз и обчёлся. Я нашел только один плагин Graph Analysis. Правда, он не обновлялся уже два года, но работает исправно.
Огромным плюсом этого плагина, на мой взгляд, является то, что он показывает результаты в виде простого списка заметок в боковой панели в достаточно компактном виде, что очень удобно при работе с заметкой.
Смысл и назначение этого плагина, как можно понять из названия, в анализе графа Obsidian, причем множеством способов, плотно замешанных на математике. Вообще способов анализа у него 11, но некоторые из них требуют дополнительных компонентов NLP (natural language processing или обработка естественного языка), не очень хорошо документированных в его репозитории, поэтому пока я не стал с ними заниматься и экспериментировать.
Некоторые методы анализа, может быть, и интересные, но сам я не прочувствовал до конца возможности их практического применения, поэтому расскажу про четыре основных метода анализа графа, которые мне очень помогают в повседневной работе с картотекой. Вот эти методы:
- Adamic-Adar – предсказание связей на основе индекса Адамик — Адар
- Jaccard – определение схожести заметок по коэффициенту Жаккара
- Louvain – кластеризация заметок Лувенским методом
- Co-Citations – поиск взаимных упоминаний
В самом плагине порядок этих методов несколько иной, но для их пояснения и применения мне удобнее придерживаться порядка, приведенного выше. В настройках плагина неиспользуемые методы можно просто отключить.
Выше я упомянул, что все методы мощно завязаны на математику, но я постараюсь в этой статье не приводить никаких формул, а расскажу о самих методах несколько упрощенно и своими словами, ограничившись ссылками на их описание. Тем не менее, очень рекомендуется самостоятельно изучить эти теоретические темы более глубоко, чем описано в этой статье, так как понимание метода дает нам возможность правильно его применять и правильно интерпретировать полученные результаты.
Итак, мы работаем с некой заметкой, например новой, только что созданной. Или может быть вы открыли уже существующую заметку и хотите ее дополнить или переработать. В любом случае первое, что необходимо сделать – это связать ее с основными темами так, как было показано выше, а именно:
- Укажите ссылки на основные темы (заметки), с которыми вы собираетесь работать в текущей карточке.
- Если в заметке уже есть текст, проверьте «Упоминания без ссылки» в панели «Исходящие ссылки» и проставьте рекомендуемые ссылки по смыслу.
Это важно! Без ссылок никакой ассоциативный поиск и анализ графа работать не будет! И чем точнее и полнее стоят ссылки на родственные темы, тем более впечатляющие результаты вы получите.
Adamic-Adar – предсказание связей на основе индекса Адамик — Адар
Индекс Адамик — Адар — это метод, разработанный в 2003 году Ладой Адамик и Эйтаном Адаром для прогнозирования связей в социальных сетях. Описание можно найти в статье Википедии Adamic-Adar Index.
Метод позволяет находить новых друзей по связям с уже существующими друзьями в социальной сети. Грубо говоря, если мы дружим с Сашей и Машей, а и Саша, и Маша имеют в друзьях Петю, то вполне возможно нам тоже следует задружиться с Петей. Метод Адамик — Адар анализирует все связи в социальном графе, но только намного детальнее. Алгоритм учитывает влияние каждого пользователя на общую рекомендацию в виде некоего коэффициента важности рекомендации. Предположим, Саша из примера выше дружится со всеми подряд и у него 100500 каких-то левых друзей. Влияние Саши на рекомендацию Пети для нас будет заведомо ниже, чем факт дружбы Пети с Машей.
В графе Obsidian анализируются связи между заметками, и метод Адамик — Адар предлагает новые связи между ними с определенным коэффициентом важности этой рекомендации. Рассмотрим это на двух примерах.
Связи с существующей заметкой
Откроем заметку (карточку), в которой уже есть связи. Например, я открыл эту заметку, здесь немного ссылок (я их проставлю значительно позже, уже после публикации), а именно, сейчас эта заметка ссылается:
- На один из переводов статьи Лумана «Диалог с картотекой»
- На общую MOC-карточку «Статьи по поиску в Obsidian» (родительская тема)
- На заметку «Плагин Graph Analytics»
- На заметку «Граф Obsidian»
- На заметку «Ассоциативный поиск»
У меня более-менее проставлены связи по смыслу в заметках моей картотеки, нельзя сказать, что прямо идеально и всё-всё связано, но смысловые связи есть. Я выше описывал принципы, как я их ставлю.
А теперь посмотрим, что предложит мне анализ графа методом Адамик — Адар:
Очень впечатляет! Смотрите, этот метод мне прямо подсказывает темы, которые нужно упомянуть или связать с этой статьей (я не перечисляю все, их 26 в списке, я выбрал только те, которые меня зацепили):
- Zettelkasten, принципы и связи в нем – да, это верно, без этого граф не будет нормально строить связи.
- Продуктивность в Obsidian – да, это верно. Использование ассоциативного поиска повышает продуктивность. Собственно, сейчас об этом и пишу.
- Индекс Адамик — Адар, Мера Жаккара и Лувенский метод – этих связей сейчас нет, но это темы, которые я буду рассматривать здесь же чуть ниже. И мне нужно будет обязательно проставить ссылки на эти карточки!
- Запоминание, соединение и создание – это цитата и мои заметки к ней из книги Тьяго Форте «Создай свой «второй мозг»». Заметьте, какая интересная идея! Ее можно очень хорошо развить – роль ассоциативного поиска в соединении идей и создании новых. Вот реально надо эту мысль сейчас записать и проработать идею!
- Теги Картотеки – надо бы мне рассказать в этой статье о мягких связях в графе через общие теги. Тоже хорошая рекомендация, расскажу, если не забуду и объем статьи позволит.
Обратите внимание, я на простом примере для этой статьи тут же получил очень интересную идею продолжения статьи и несколько напоминаний, что еще не забыть написать здесь. Ну ведь это здорово, согласитесь!
Связи в новой, пустой заметке
Рассмотрим другой пример. Завтра я, написав об ассоциативном поиске, задумываюсь о других видах поиска (вообще я выделяю минимум три вида поиска в Obsidian). И открываю новую карточку, чтобы набросать мысли и идеи о семантическом поиске (смысловой поиск, это еще один вид, он к графу не имеет практически никакого отношения). Что мне предложит моя картотека?
Создаю новую пустую заметку и сразу ставлю в ней связь с темой, о чем собираюсь писать (свойство «Ссылки») и вторую ссылку на родительскую тему (свойство «Тема»): обратите внимание, заметка пустая, в ней всего две ссылки. Вопрос: а почему не одна (для чистоты эксперимента)? Ответ очевиден – если в заметке будет одна единственная ссылка, алгоритмы анализа графа просто возьмут расчет той страницы, на которую ссылается наша экспериментальная заметка. А вот при наличии двух и более ссылок уже начнется «магия».
Итак, что нам предлагает метод Адамик — Адар для новой статьи?
Результат более чем правильный! Прямо готовый план статьи!
Итак, мне предложено:
- Сделать отсыл на предыдущую статью про ассоциативный поиск (на эту, которую вы сейчас читаете) и отметить, что это продолжение.
- Указать, что семантический поиск (да и любой поиск) повышает продуктивность работы, возможно привести примеры.
- Рассмотреть основные способы реализации – плагины Copilot и Smart Connections и их настройки.
- Упомянуть о важности атомарности и самодостаточности заметок.
- Рассмотреть эмбеддинги и алгоритмы RAG, описать их принципы.
- Рассказать о своих опытах тестирования различных моделей нейросетей для расчета эмбеддингов.
Еще раз хочу отметить: это результат на пустой, только что созданной заметке с двумя тематическими (смысловыми) ссылками. Реально я поставил бы их чуть больше, и возможных идей было бы тоже больше.
Еще раз отмечу: ассоциативный поиск использует только связи и ссылки, он не учитывает текст самой заметки.
Ошибки с не-смысловыми ссылками
Когда я открыл для себя этот инструмент анализа графа, я очень вдохновился и начал активно им пользоваться, попутно «причесывая» свою картотеку и массово расставляя смысловые ссылки в карточках. Но быстро наткнулся на совершенно неожиданные результаты. В разных местах и разными алгоритмами анализа графа мне предлагались абсолютно неадекватные связи. Например, в заметке «Методы сегментации аудитории» предлагалась связь с заметками «Крепление потолка в ванной» или «Рецепт осетинского пирога Фыджын» . Причем эти связи были с высоким значением коэффициента Value. Достаточно быстро я заметил закономерность, что это проявляется тем сильнее, чем более узкая тема рассматривается в заметке.
С помощью взаимного цитирования (рассмотрено ниже) я достаточно быстро нашел «виновника» такого поведения – им оказались ежедневные заметки. Когда я их пишу, я могу указать ссылки на какие-то моменты в этот день или при планировании дня указать ссылки на задачи или материалы, с которыми собираюсь работать. А поскольку в любой ежедневной заметке ссылок немного, то по индексу Адамик — Адар вес этих рекомендаций (этих ссылок) становится высоким. Так и появляются нерелевантные связи в графе.
Таким образом, мы имеем дело с разными типами ссылок в графе: с одной стороны есть семантические (смысловые) ссылки, с другой стороны есть фактографические (дневниковые, фиксация факта) ссылки. Можно еще сюда добавить и служебные ссылки, например, ссылки на операционные, служебные карточки типа «Список задач«, «Накопитель» и т.п.
Понятно, для анализа графа нам нужны только семантические ссылки, а остальные нужно просто исключить из анализа. Благо плагин Graph Analysis это позволяет сделать.
Я поступил так: во-первых, исключил из анализа все ежедневные заметки по имени файла с помощью простого регулярного выражения:
\/\d{4}-\d{2}-\d{2}
Во-вторых, ввел новый тег «nofollow» (как у поисковых машин в интернете) и исключил из анализа все заметки с этим тегом. И далее пометил служебные карточки типа «Накопитель» этим тегом.
Проблема решена. Теперь качество рекомендаций стало высоким.
Jaccard – определение похожести по коэффициенту Жаккара
Еще одним способом поиска связанных заметок является определение сходства на основе коэффициента Жаккара. Этот коэффициент, или мера Жаккара, был предложен в 1901 году профессором ботаники Полем Жаккаром (Paul Jaccard) в Цюрихе. Описание можно найти в статье Википедии Коэффициент Жаккара.
Простое объяснение этого принципа сравнения следующее. Во-первых, коэффициент или мера Жаккара – это всегда бинарное сравнение, то есть поиск сходства между двумя объектами. У каждого объекта есть ряд признаков, и эта мера представляет собой простую дробь: отношение количества совпадающих признаков объектов к общему количеству признаков обоих объектов. Например, Саше нравятся яблоки, клубника и шашлык, а Маше нравятся манго, клубника и Петя. Общее (суммарное) число признаков у обоих объектов – пять, один из них общий (клубника). Таким образом, сходство вкусов Саши и Маши по мере Жаккара – 1/5, то есть 0.2.
Применительно к графу Obsidian объектами являются заметки, а признаками – связи (ссылки) между ними. Важно еще раз подчеркнуть, что направление ссылки (входящая она или исходящая) роли не играет, то есть если две несвязанные между собой заметки ссылаются на некоторый примерно одинаковый набор других заметок, то степень схожести по Жаккару у них будет очень высокая, вне зависимости от их содержания. Вот здесь очень важно еще раз вернуться к утверждению, сформулированному выше: чем более детально и обширно сформированы узкие, конкретные MOC-карточки по различным тематикам и вопросам (проблематике), тем более точно будут работать алгоритмы анализа графа. Если же у вас лишь несколько больших одуванчиков (ромашек) с большим количеством ссылок, то и результаты будут более чем посредственные.
Давайте повторим эксперимент с двумя заметками из предыдущего примера – текущей заметкой (статья, которую я сейчас пишу), у которой пока небольшое количество ссылок, и пустая заметка о семантическом поиске с двумя ссылками. Что нам предложит определение похожести на основе меры Жаккара?
Вот текущая статья, обратите внимание, существующие ссылки отмечены в списке, остальные заметки – это похожие на основе связей в графе (по ссылочным признакам) заметки, отсортированные по мере убывания схожести:
Итак, какие рекомендации я получил (перечислю те, которые меня явно заинтересовали):
- Во-первых, ссылки на описание меры Жаккара и индекса Адамик-Адар, как родственные темы (напомню, сейчас ссылки из этой статьи на эти темы отсутствуют, но алгоритм их предсказывает).
- Далее, общая тема – Поиск в Obsidian.
- Опять рекомендуются ссылки (темы) о связях в Zettelkasten и на цитату Тьяго Форте «Запоминание, соединение и создание». Это интересная идея для развития темы – ассоциативный поиск в графе и методика CODE (Capture, Organize, Distill, Express).
- Далее отсылка на новую статью о семантическом поиске (напомню, я создал просто пустую заметку для нее и сослался на планируемые темы).
- Показалась ссылка на второй перевод статьи Лумана «Диалог с картотекой».
- И опять напоминание про использование тегов как мягких ссылок (по-хорошему бы надо эту тему осветить, но, видимо, уже не в этой статье).
Что ж, результат очень правильный.
Теперь попробуем новую, пустую заметку с планируемой статьей о семантическом поиске с двумя ссылками.
Итак, ассоциативный поиск на основе похожести по мере Жаккара мне предлагает следующие тезисы для новой статьи:
- Поиск в Obsidian – это вам не фунт изюму.
- Правильное использование поиска повышает продуктивность в Obsidian.
- Есть ассоциативный поиск, рассмотрен ранее.
- Есть семантический поиск, который может базироваться на RAG и эмбеддингах.
- Атомарность и самодостаточность заметок играет важную роль в качестве поиска.
- Можно использовать плагины Copilot и Smart Connections, но очень важно их правильно настроить.
- Также важно выбрать правильную модель расчета эмбеддингов, рассказать про свои тесты и эксперименты.
Опять я получил прямо готовый план статьи. Напомню, я просто поставил в пустой заметке две ссылки на общую и планируемую тему. Как вам такой результат?
Louvain – кластеризация заметок Лувенским методом
Еще один очень интересный метод анализа графа – это кластеризация узлов алгоритмом Лувена (Louvain algorithm). Метод был разработан в 2008 году Винсентом Д. Блаувельтом, Жан-Ксавье Кабаном и другими исследователями в университете Лувена (Katholieke Universiteit Leuven) в Бельгии. Собственно своё имя алгоритм получил по названию города Лёвен (по-голландски Leuven, по-французски Louvain, в русском языке укоренилось название Лувен). Это один из университетских центров Бельгии, недалеко от Брюсселя. Описание алгоритма можно найти в статье Википедии Louvain method.
Суть метода базируется на оптимизации модульности (термин modularity в оригинале, часто неверно переводимый как модулярность). В данном случае модульность – это некий показатель меры кластеризации модуля, то есть набора нескольких узлов графа, в диапазоне от -0.5 (узлы не объединены в группу, кластера нет) и до 1 (все узлы плотно собраны в группу, в кластер, и могут рассматриваться как единое целое). Фактически, это метод поиска сообществ в графе (в оригинале community detection). Сам метод итерационный, то есть он выполняет похожие расчеты снова и снова много раз над результатами предыдущего шага, делая сообщества всё более крупными, при этом при добавлении нового узла или модуля в сообщества на каждом шаге проверяется, увеличивает ли это степень модульности или, наоборот, уменьшает ее, и на этом основании принимается решение, следует ли добавлять узел или модуль в существующий кластер.
Алгоритм очень быстрый и вообще идеально может быть отображен в виде графа, например, вот частичный граф интернета по состоянию на 2005 год. Однако плагин Graph Analysis работает более примитивно. Он просто считает модульность для групп (кластеров) заметок за несколько итераций (регулируется) и показывает те заметки, соединение (связь, ссылка) с которыми повышает модульность графа. Фактически он предсказывает ссылки, которые желательно бы поставить.
Давайте повторим наш эксперимент с текущей заметкой и новой заметкой о семантическом поиске.
Текущая заметка, статья, которую вы читаете, дает вот такой результат:
А вот для пустой заметки о семантическом поиске:
Что ж, результаты очень хорошо совпадают с предыдущими методами:
- Плагин Graph Analysis и ассоциативный поиск.
- Методы: Адамик — Адар, Жаккар и Лувен.
- Ссылка на плагин Graph Presets, который упрощает работу с графами.
- Опять же упущенная мною тема мягких ссылок в графе через теги.
- Цепи Маркова. А вот это уже новенькое в наших экспериментах! Цепи Маркова – это, в том числе, граф вероятностей перехода системы из одного состояния в другое. Интересная идея, ассоциативный поиск на базе вероятностных моделей, весьма интересная тема для обдумывания!
Обратите внимание на ползунок сверху – это количество итераций расчета. Передвигая его вправо, вы заставляете алгоритм более жестко кластеризировать заметки в графе. Обычно хватает среднего положения, но можно играть с ним, смещая его влево и вправо. Особенно интересно смещение влево, то есть уменьшение числа итераций. Начинают всплывать слабосвязанные темы, но именно здесь могут появляться неожиданные и интересные ассоциации, хотя зачастую бредовые. Например, в моем графе каким-то образом появилась некая ассоциация текущей статьи с заметкой о размерах ручной клади в авиакомпании S7:
Чушь, конечно же, на первый взгляд, но ведь наша цель в таком исследовании – поймать и продумывать все варианты, или как говорил Витька Корнеев у Стругацких «Экземпляр экземпляру люпус эст!» (Перифраз латинской поговорки «человек человеку – волк»), и почему бы нам не замахнуться на «Ассоциативный поиск вещей для ручной клади в командировку»? А почему бы и нет? Создадим заметки что хотелось бы взять с собой и что нужно взять с собой, добавим им какие-нибудь признаки (вес, габариты, допустимость в ручной клади) и будем их крутить и так и сяк. Интересная идея применения Obsidian! Честно скажу, она пришла мне в голову прямо сейчас, когда разбирал результаты расчета моего графа методом Лувена.
Co-Citations – поиск взаимных упоминаний
Ну и наконец еще один инструмент анализа графа – это поиск взаимных упоминаний. Дословно можно перевести этот режим как «взаимное цитирование», но мне кажется термин «взаимное упоминание» более уместным, ведь никаких цитат в заметках нет, мы работаем исключительно со связями. А связь, ссылка – это больше упоминание, чем цитата.
Что делает этот режим? Он просто показывает ссылки по имени заметок в других заметках, в которых упоминается и текущая, и искомая. Грубо говоря, он отвечает на вопрос: а что еще упоминается для этой темы и через какую связную заметку? Это поиск родственных, сопутствующих тем.
Давайте посмотрим на примере текущей заметки:
Ну результат интересный. Обратите внимание на то, что несвязанные заметки, точнее связанные через третью, можно быстро увидеть по отсутствию иконки связи (ссылки). Например, родственная тема для этой моей статьи – плагин Graph Presets, а с темой Zettelkasten моя статья связана через подтему «Граф Obsidian».
Теперь посмотрим на пустой заметке с двумя ссылками. Пусто! Взаимного упоминания пока нет, результат пустой. Но это понятно. По легенде я только-только собираюсь прорабатывать тему семантического поиска и только-только создал заметку практически без ссылок. Взаимных упоминаний еще просто нет, тема семантического поиска требует проработки на моей стороне. Это чистая правда! Отсутствие результата в этом случае – это самый лучший результат, который говорит мне, как автору собственной картотеки, о явном пробеле и необходимости его проработки. И это круто!
Заключение
Граф Obsidian и связи между заметками – это мощнейший инструмент работы с картотекой. К великому сожалению, этот инструмент очень часто недооценивается и игнорируется пользователями и совершенно напрасно! Ведь он открывает дверь в ассоциативный поиск знаний и идей.
Мы на практических примерах рассмотрели возможности ассоциативного поиска в Obsidian, и я очень надеюсь, что мне удалось показать вам, что граф Obsidian – это фантастический инструмент для работы с собственными знаниями.
Все методы на примерах двух заметок, которые мы рассматривали, давали в целом похожие результаты, но каждый из методов привносил что-то своё, порой очень неожиданное. По крайней мере три идеи, которые родились в процессе написания этой статьи, я себе записал для дальнейшей проработки. Возможно, они вырастут сначала до уровня эссе, а потом и до полноценных статей. Буду ли я их публиковать или оставлю просто лежать себе в моей картотеке, не знаю. Это зависит в том числе и от вас – если вам понравились мои рассуждения, напишите, дайте обратную связь, что именно понравилось и что мне нужно развить в будущем.
Любая перепечатка или цитирование этого материала разрешается, но при условии, что вы укажете явную ссылку на исходный материал. Спасибо, что дочитали до этого места, я восхищён вашим терпением!