⚠️ Эта страница автоматически переведена, и перевод может быть несовершенным.
blog-post

Vector Search On GitHub

Введение

Функция поиска на GitHub иногда может давать сбои, особенно когда вы пытаетесь искать, задавая прямой вопрос. Такой подход часто приводит к нерелевантным результатам, что может быть раздражающим. Эта проблема более заметна при поиске по задачам или запросам на слияние, где детали действительно важны.

Рассмотрим пример:

Поиск GitHub vs Семантический поиск Manticore на GitHub

Поиск на GitHub имеет некоторые ограничения, но мир технологий поиска быстро развивается. Семантический поиск, который понимает контекст и смысл слов, а не только сами слова, становится все более популярным. Хотя GitHub пока не внедрил эту функцию, она могла бы значительно улучшить качество и релевантность поисков.

Исходя из этого, мы создали проект , который использует семантический поиск для упрощения поиска разработчиками нужных вещей в их репозиториях. Мы используем Manticore Search , поддерживающий векторный поиск, чтобы предложить настраиваемый вариант семантического поиска, подходящий под разные потребности. Это демонстрирует, насколько полезна и мощна эта новая технология.

Для справки, Manticore Search — мощный поисковый движок с открытым исходным кодом, проверенный временем, с корнями, уходящими в 2001 год. Изначально известный как Sphinx, он служил решением полнотекстового поиска для баз данных MySQL и PostgreSQL. Проект получил самостоятельную жизнь в 2017 году, когда был форкнут и возрожден как Manticore Search, продолжая развиваться как независимый полностью открытый поисковый движок.

Что такое семантический поиск?

Семантический поиск — это техника поиска, выходящая за рамки простого совпадения ключевых слов. Он пытается понять смысл и контекст слов, чтобы повысить точность поиска, учитывая как намерения пользователя, так и контекстуальное значение терминов.

Преимущества

  • Понимание контекста: Он интерпретирует контекст запросов, чтобы предоставить точные результаты.
  • Повышенная точность: Он уменьшает количество нерелевантных результатов, понимая намерения пользователя.
  • Улучшенный пользовательский опыт: Он экономит время и усилия, быстро предоставляя релевантную информацию.

Проблема традиционного поиска на GitHub

Когда вы ищете на GitHub, используя простые ключевые слова, часто не получаете того, что действительно ищете. Например, вы вводите «bug fix», чтобы найти помощь. Поиск может показать страницы, где точно упоминается «bug fix», но может пропустить связанные темы, такие как «error resolution» или «problem solving».

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

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

Здесь мы ищем "integration bugfix" на GitHub и не нашли ничего в том же репозитории:

Исправление интеграции на Github

А тот же поиск по integration bugfix в семантическом поиске Manticore дает нам результат, который нам гораздо более приятен:

Исправление интеграции в семантическом поиске Manticore

Мы создали прототип того, как мог бы выглядеть семантический поиск на GitHub. Ознакомьтесь с нашим демо поиском задач GitHub , работающим на основе Manticore Vector Search. Он позволяет искать по задачам, PR и комментариям GitHub так, чтобы понимать контекст. Это особенно полезно, когда вы не помните точные слова задачи, но знаете её контекст. Вы также можете добавить свой собственный репозиторий здесь и запустить проект локально, следуя инструкциям на GitHub .

Посмотрим, как этот подход может улучшить релевантность и точность ваших поисковых результатов.

История успеха: добавление векторного поиска в демо Manticore GitHub

Когда мы интегрировали векторный поиск в наш демо поиск задач GitHub , демонстрирующий возможности Manticore Search, результаты были впечатляющими. Традиционные поиски по ключевым словам очень эффективны для запросов, где известны конкретные термины и важна точность их совпадения. Однако добавление семантического поиска дополняет их, позволяя точно определить, что ищут пользователи, с большей точностью, особенно в контекстах, где намерение или смысл запроса так же важны, как и конкретные слова.

Используя предварительно обученные модели от Hugging Face , мы преобразовали текст в высокоразмерные векторы. Эти векторы понимают смысл слов, позволяя выполнять более точные поиски.

Вот несколько примеров того, как это может улучшить качество поиска в репозитории Manticore Search :

Пример: Более простое нахождение открытых багов

Memory Leak Example

Представьте, что вы разработчик, ищущий проблемы, связанные с конкретным багом. Традиционный поиск по запросу "memory leak" может пропустить задачи с названиями "limit the memory usage" или "index out of memory". С Vector Search движок понимает, что эти термины похожи. Это означает, что вы получаете все релевантные результаты, не угадывая все возможные ключевые слова.

Пример: Проверка наличия запроса на функцию перед созданием нового

User Authentication Example

Подумайте о пользователях, ищущих запросы на функции, связанные с "user authentication". Поиск по ключевым словам может показывать только задачи с точной фразой, но семантический поиск понимает связанные термины, такие как "login system", "Access denied" и "Session-level user variables". Таким образом, никакая ценная обратная связь не будет упущена.

Пример: Упрощённое сотрудничество

API Rate Limits Example

Участники, работающие над разными частями проекта, могут действительно выиграть от семантического поиска. Например, поиск по запросу "API rate limits" выводит релевантные обсуждения о "throttling", ограничении "250 results" и "rate limiting". Это помогает членам команды связывать связанные задачи, даже если они используют разные термины.

Пример: Аудиты безопасности

SQL Injection Example

Аудитам безопасности требуется тщательность, часто требующая поиска различных уязвимостей. Поиск по запросу "SQL injection" традиционными методами может пропустить задачи под "database infiltration" или "SQL vulnerability". Семантический поиск гарантирует, что найдены все связанные вопросы безопасности, помогая проводить более полные аудиты.

Чтобы внедрить семантический поиск в наш демонстрационный проект на GitHub, мы выполнили следующие шаги:

  • Настройка Manticore: Мы интегрировали Manticore Search в наш проект, установив Manticore Search вместе с Columnar library , реализующей функциональность векторного поиска.

  • Создание структуры базы данных: Мы создали таблицу в реальном времени в Manticore Search для хранения задач GitHub и их семантических представлений. Эти представления, также известные как embeddings, хранятся в виде массивов чисел (также известных как векторы). Таблица включает поля для текста задачи, уникального идентификатора и вектора, который фиксирует семантическое значение текста.

    Вот пример схемы, которую мы использовали:

    CREATE TABLE issues (
    	id BIGINT,
    	body TEXT,
    	vector FLOAT_VECTOR knn_type='hnsw' knn_dims='4' hnsw_similarity='l2'
    );
    

    В этой настройке body содержит текст задачи, id — уникальный идентификатор, а vector — текстовое embedding для body.

    Вы можете задаться вопросом: Что такое текстовые embeddings?

    Текстовые embeddings — это способ преобразовать слова или фразы в числа, отражающие их значение и взаимосвязи. Представьте это как метод конвертации текста в формат, понятный компьютерам. Такие числовые представления помогают машинам лучше анализировать текст, упрощая сравнение разных текстов и поиск сходств.

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

    Мы использовали AI‑модель из Sentence Transformers . Если вы ищете простой способ начать, рекомендуем ознакомиться с сервисом HuggingFace Text Embedding API service . Он позволяет запустить собственный API и создавать embeddings, адаптированные под ваши нужды.

  • Вставка данных: Заполните вашу таблицу векторными данными.

    Давайте посмотрим, как будет работать оператор INSERT с только что описанной схемой. Это даст нам чёткое представление о том, как данные добавляются в структуру нашей базы данных.

    INSERT INTO issues VALUES (
      1,
      'Hello World',
      (0.653448, 0.192478, 0.017971, 0.339821)
    ), (
      2,
      'This is a bug',
      (-0.148894, 0.748278, 0.091892, -0.095406)
    );
    
  • Запрос данных: Получайте контекстно релевантную информацию с помощью запросов на основе векторов.

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

    1. Получить поисковый запрос.
    2. Сгенерировать текстовое embedding для запроса.
    3. Использовать полученный вектор в запросе, как показано ниже:
    SELECT id, body
    FROM issues
    WHERE knn ( vector, 10, (0.286569, -0.031816, 0.066684, 0.032926) );
    

    Обратите внимание, что 10 — это параметр K, который обозначает количество ближайших соседей (самых близких векторов), сохраняемых в результирующем наборе. По умолчанию результаты сортируются по расстоянию векторов, при этом самые близкие находятся первыми.

Вот и всё! Всего за несколько шагов мы создали семантический поиск, используя текстовые embeddings и функцию Vector Search в Manticore Search. Всё так просто! 🙌

Поиск по ключевым словам vs Семантический поиск

Когда речь идёт об улучшении поиска кода на GitHub, семантический поиск предоставляет ряд явных преимуществ:

  • Лучшие результаты поиска: Семантический поиск понимает смысл ваших запросов, позволяя находить релевантный код, даже если он не совпадает точно с используемыми ключевыми словами.
  • Контекстно‑ориентированное исследование кода: Он может более интеллектуально перемещаться по большим кодовым базам, помогая понять, как разные части кода связаны друг с другом.
  • Эффективное устранение проблем: Понимая контекст, семантический поиск может быстро выявлять релевантные проблемы, решения и фрагменты кода, способствующие более быстрому исправлению багов.
  • Упрощённый поиск релевантных реализаций и идей: Он может выявлять похожие реализации или предлагать альтернативные подходы, основываясь на намерении кода, а не только на его формулировке.

Однако важно учитывать ограничения семантического поиска по сравнению с традиционным поиском по ключевым словам:

  • Вычислительная сложность: Выполнение семантических поисков может требовать значительных вычислительных ресурсов и занимать больше времени, чем поиск по ключевым словам, особенно в больших репозиториях.
  • Риск неверной интерпретации: ИИ может не всегда правильно понять контекст или намерение запроса, что приводит к менее релевантным результатам.
  • Отсутствие точного контроля: Разработчикам может быть сложнее находить точные фразы или конкретные фрагменты кода, когда поисковый движок интерпретирует смысл, а не сопоставляет ключевые слова.
  • Зависимость от обучающих данных: Качество результатов семантического поиска тесно связано с обучающими данными модели ИИ, что означает, что они могут не всегда полностью соответствовать последним паттернам кода или терминологии.

Учитывая эти соображения, будущее поиска на GitHub, вероятно, будет заключаться в гибридном подходе. Сочетая сильные стороны как семантического, так и keyword‑поиска, GitHub может предложить более мощный инструмент для разработчиков:

  • Варианты пользовательского интерфейса: Позволяют пользователям переключаться между семантическим и keyword‑поиском в зависимости от их текущих потребностей.
  • Гибридные алгоритмы поиска: Сочетание глубокого понимания семантического поиска с точностью сопоставления ключевых слов для предоставления наиболее релевантных результатов.
  • Контекстное переключение: Автоматический выбор оптимального метода поиска в зависимости от типа запроса и поведения пользователя, обеспечивая наилучшие результаты.

Интеграция обоих методов в возможности поиска GitHub поможет разработчикам находить нужный код быстрее и эффективнее, сочетая тонкое понимание семантического поиска с надёжностью и скоростью keyword‑поиска.

Будущее поиска на GitHub: умнее с семантическим поиском

Традиционный keyword‑поиск GitHub будет развиваться в сторону более умного и интуитивного подхода: семантического поиска. Эта революционная технология готова изменить способ взаимодействия разработчиков с репозиториями, повышая продуктивность и упрощая процесс разработки, особенно при поиске по pull‑request'ам, задачам и комментариям.

Семантический поиск для pull‑request'ов, задач и комментариев предлагает несколько ключевых преимуществ:

  1. Результаты, учитывающие контекст: В отличие от традиционного поиска, основанного на точных совпадениях ключевых слов, семантический поиск понимает контекст и намерение вашего запроса. Это означает, что вы с большей вероятностью найдёте релевантные pull‑request'ы, задачи и комментарии, даже если они не используют точные слова вашего запроса.
  2. Обработка естественного языка: Вы можете искать, используя обычный язык, без необходимости помнить специфический синтаксис или ключевые слова. Это упрощает поиск нужного.
  3. Улучшенный рейтинг релевантности: Семантический поиск может отдавать приоритет результатам в зависимости от того, насколько они соответствуют смыслу вашего запроса, экономя ваше время при навигации по множеству pull‑request'ов, задач или комментариев.
  4. Понимание синонимов и связанных концепций: Поисковый движок может распознавать связанные термины и концепции, расширяя диапазон релевантных результатов без необходимости выполнять несколько поисков.
  5. Повышенное сотрудничество: Делая поиск связанных обсуждений и вкладов проще, семантический поиск может улучшить командное взаимодействие и обмен знаниями внутри проектов.
  6. Исторический контекст: Семантический поиск имеет потенциал понимать эволюцию обсуждений в задачах и pull‑request'ах, предоставляя более полные результаты, включающие релевантный исторический контекст.
  7. Инсайты между репозиториями: Продвинутый семантический поиск может потенциально предоставлять инсайты между несколькими репозиториями, помогая разработчикам находить связанные обсуждения или решения в других проектах.

Реализация семантического поиска становится более достижимой благодаря продвинутым базам данных, таким как Manticore Search. Благодаря встроенным возможностям векторного поиска, Manticore Search прокладывает путь для платформ, подобных GitHub, к внедрению этой передовой технологии.

Хотя GitHub ещё полностью не интегрировал семантический поиск, разработчики могут ощутить его мощь через наш демо‑проект . Эта инициатива с открытым исходным кодом демонстрирует потенциал семантического поиска в среде, похожей на GitHub.

Установить Manticore Search

Установить Manticore Search