Введение
Функция поиска на GitHub иногда может испытывать трудности, особенно когда вы пытаетесь выполнить поиск, задавая прямой вопрос. Этот подход часто приводит к нерелевантным результатам, что может быть неприятно. Эта проблема более заметна при поиске по проблемам или пулл-реквестам, где детали действительно важны.
Давайте посмотрим на пример:
Поиск на GitHub имеет некоторые ограничения, но мир технологий поиска быстро развивается. Семантический поиск, который понимает контекст и смысл слов, а не просто сами слова, становится все более популярным. Хотя GitHub еще не добавил эту функцию, она действительно может помочь сделать поиски лучше и более релевантными.
С учетом этого мы создали проект , который использует семантический поиск, чтобы помочь разработчикам проще находить информацию в их репозиториях. Мы используем Manticore Search , который поддерживает векторный поиск, чтобы предложить настраиваемую семантическую поисковую опцию, соответствующую различным потребностям. Это показывает, насколько полезной и мощной может быть эта новая технология.
Для справки, Manticore Search — это мощная поисковая система с открытым исходным кодом, которая выдержала испытание временем, имея корни, восходящие к 2001 году. Изначально известная как Sphinx, она служила решением для полнотекстового поиска для баз данных MySQL и PostgreSQL. Проект обрел новую жизнь, когда в 2017 году он был раздвоен и переродился как Manticore Search, продолжая развиваться как независимая полностью открытая поисковая система.
Что такое семантический поиск?
Семантический поиск — это техника поиска, которая выходит за рамки простого сопоставления ключевых слов. Он пытается понять смысл и контекст слов, чтобы улучшить точность поиска, учитывая как намерения пользователя, так и контекстуальное значение терминов.
Преимущества
- Понимание контекста: Он интерпретирует контекст запросов, чтобы предоставить точные результаты.
- Улучшенная точность: Он снижает количество нерелевантных результатов, понимая намерения пользователя.
- Улучшенный пользовательский опыт: Он экономит время и усилия, быстро предоставляя релевантную информацию.
Проблема традиционного поиска на GitHub
Когда вы ищете, используя простые ключевые слова на GitHub, вы часто не получаете то, что действительно ищете. Скажем, вы вводите “исправление ошибок”, чтобы найти помощь. Поиск может показать страницы, которые точно упоминают “исправление ошибок”, но могут пропустить связанные темы, такие как “разрешение ошибок” или “решение проблем”.
Этот тип поиска может привести к множеству нерелевантных результатов. Поскольку эти поиски не учитывают тонкости нашего общения, вы можете почувствовать серьезное разочарование. Разработчики тратят слишком много времени на просмотр этих нерелевантных результатов, что может замедлить их проекты и сократить количество выполненной работы.
Тем не менее, поиски по ключевым словам все еще имеют свое место. Для быстрых, специфических поисков, когда точно знаете, что вам нужно, например, для нахождения конкретного кода ошибки, они могут быть очень быстрыми и эффективными.
Здесь мы ищем “исправление интеграции” на GitHub и не нашли ничего в том же репозитории:
А тот же самый поиск “исправление интеграции” на семантическом поиске Manticore дает результат, с которым мы гораздо более вероятно будем довольны:
Мы сделали прототип того, как мог бы выглядеть семантический поиск на GitHub. Ознакомьтесь с нашим демо поиска по проблемам GitHub , работающим на Manticore Vector Search. Он позволяет вам искать по проблемам GitHub, PR и комментариям таким образом, чтобы понимать контекст. Это особенно полезно, когда вы не можете вспомнить точные слова проблемы, но знаете ее контекст. Вы также можете добавить свой собственный репозиторий здесь и запустить проект локально, следуя инструкциям на GitHub .
Давайте посмотрим, как этот подход может улучшить релевантность и точность ваших результатов поиска.
История успеха: добавление векторного поиска в демонстрацию Manticore GitHub
Когда мы интегрировали векторный поиск в нашу демонстрацию поиска по проблемам GitHub , которая демонстрирует возможности Manticore Search, результаты были впечатляющими. Традиционные поиски по ключевым словам очень эффективны для запросов, где известны конкретные термины и важна точность сопоставления этих терминов. Тем не менее, добавление семантического поиска дополняет это, позволяя нам точно определить, что ищут пользователи, с большей точностью, особенно в тех контекстах, где намерение или смысл запроса важны так же, как и конкретные слова, используемые в запросе.
Используя предварительно обученные модели от Hugging Face , мы преобразовали текст в высокоразмерные векторы. Эти векторы понимают смысл за словами, позволяя нам выполнять более точные поиски.
Вот несколько примеров того, как это может улучшить качество поиска в репозитории Manticore Search :
Пример: Более легкий поиск открытых ошибок
Представьте, что вы разработчик, ищущий проблемы, связанные с конкретным багом. Традиционный поиск по выражению “утечка памяти” может не охватить проблемы с заголовками “ограничить использование памяти” или “исключение памяти”. С помощью векторного поиска система понимает, что эти термины схожи. Это означает, что вы получаете все соответствующие результаты без необходимости угадывать все возможные ключевые слова.
Пример: Проверка существования запроса на функциональность перед созданием нового
Подумайте о пользователях, ищущих запросы на функциональность, связанные с “аутентификацией пользователя”. Поиск по ключевым словам может показать только те проблемы, которые содержат точную фразу, но семантический поиск понимает связанные термины, такие как “система логина”, “Доступ запрещен” и “Переменные пользователя на уровне сеанса”. Таким образом, не ускользает ни один ценное отклик.
Пример: Проще сотрудничать
Участники, работающие над разными частями проекта, могут действительно извлечь выгоду из семантического поиска. Например, поиск по “ограничениям по количеству запросов API” показывает соответствующие обсуждения о “троттлинге”, “ограничении в 250 результатов” и “ограничении по количеству запросов”. Это помогает членам команды связать связанные проблемы, даже если они используют разные термины.
Пример: Аудиты безопасности
Аудиты безопасности требуют тщательности, часто требуя поиск различных уязвимостей безопасности. Поиск по “SQL-инъекции” с традиционными методами ключевых слов может пропустить проблемы под “внедрение в базу данных” или “уязвимость SQL”. Семантический поиск гарантирует, что все связанные проблемы безопасности будут обнаружены, что помогает более полным аудитам безопасности.
Как начать работу с семантическим поиском на GitHub с использованием Manticore Search
Чтобы реализовать семантический поиск в нашем демонстрационном проекте GitHub, мы следовали следующим шагам:
Настройка Manticore: Мы интегрировали Manticore Search с нашим проектом, установив Manticore Search вместе с библиотекой Columnar , реализующей функцию векторного поиска.
Создание структуры базы данных: Мы настроили таблицу в реальном времени в Manticore Search для хранения проблем GitHub и их семантических представлений. Эти представления, также известные как встраивания, хранятся в виде массивов чисел (также известных как векторы). Таблица включает поля для текста проблемы, уникального идентификатора и вектора, который захватывает семантическое значение текста.
Вот пример схемы, которую мы использовали:
CREATE TABLE issues ( id BIGINT, body TEXT, vector FLOAT_VECTOR knn_type='hnsw' knn_dims='4' hnsw_similarity='l2' );
В этой настройке
body
содержит текст проблемы,id
является уникальным идентификатором, аvector
представляет собой встраивание текста дляbody
.Вы, возможно, спрашиваете: Что такое встраивания текста?
Встраивания текста — это способ преобразования слов или фраз в числа, которые показывают их смысл и то, как они соотносятся друг с другом. Подумайте об этом как о методе преобразования текста в формат, который может понять компьютер. Эти числовые представления помогают машинам лучше анализировать текст, упрощая сравнение различных текстов и нахождение сходств.
В нашем примере вектор представляет собой серию чисел, которые захватывают основную идею текста в поле body. Это позволяет нам выполнять такие операции, как поиск схожих проблем или группировка связанных тем, даже если они используют разные слова для описания одной и той же идеи.
Мы использовали ИИ-модель от Sentence Transformers . Если вы хотите простой способ начать, мы рекомендуем ознакомиться с HuggingFace сервисом API встраивания текста . Он позволяет вам запустить собственный API и создать встраивания, адаптированные под ваши нужды.
Вставка данных: Заполните вашу таблицу векторными данными.
Давайте посмотрим, как будет работать оператор вставки с той схемой, о которой мы только что говорили. Это даст нам ясное представление о том, как данные добавляются в нашу структуру базы данных.
INSERT INTO issues VALUES ( 1, 'Привет, мир', (0.653448, 0.192478, 0.017971, 0.339821) ), ( 2, 'Это ошибка', (-0.148894, 0.748278, 0.091892, -0.095406) );
Запрос данных: Извлекайте контекстно релевантную информацию, используя запросы на основе векторов.
Чтобы извлечь документы с помощью векторных запросов, мы следуем следующим шагам:
- Получить поисковый запрос.
- Сгенерировать встраивание текста для запроса.
- Использовать полученный вектор в запросе, подобном этому:
SELECT id, body FROM issues WHERE knn ( vector, 10, (0.286569, -0.031816, 0.066684, 0.032926) );
Обратите внимание, что
10
— это параметр K, который представляет собой количество ближайших соседей (ближайших векторов), которые нужно оставить в результирующем наборе. По умолчанию результаты сортируются по расстоянию вектора, при этом ближайшие размещаются первыми.
Вот и все! Всего за несколько шагов мы построили семантический поиск с использованием встраиваний текста и функции векторного поиска Manticore Search. Это так просто! 🙌
Поиск по ключевым словам против семантического поиска
Когда речь заходит о повышении качества поиска кода на GitHub, семантический поиск предлагает некоторые явные преимущества:
- Лучшие результаты поиска: Семантический поиск понимает смысл ваших запросов, позволяя вам находить релевантный код, даже если он не соответствует точным ключевым словам, которые вы используете.
- Контекстное исследование кода: Он может более интеллигентно навигировать в больших базах кода, помогая вам понять, как различные части кода соотносятся друг с другом.
- Эффективное устранение неисправностей: Понимая контекст, семантический поиск может быстро выявлять соответствующие проблемы, решения и фрагменты кода, которые помогают быстрее решать проблемы.
- Упрощенное обнаружение релевантных реализаций и идей: Он может выявлять похожие реализации или предлагать альтернативные подходы, основываясь на намерении кода, а не только на его формулировке.
Однако важно учитывать ограничения семантического поиска по сравнению с традиционным поиском по ключевым словам:
- Вычислительная сложность: Проведение семантических поисков может требовать значительных вычислительных ресурсов и может занять больше времени, чем поиск по ключевым словам, особенно в крупных репозиториях.
- Потенциал для неправильной интерпретации: ИИ может не всегда правильно понимать контекст или намерение запроса, что приводит к менее релевантным результатам.
- Отсутствие точного контроля: Разработчикам может быть труднее находить точные фразы или конкретные фрагменты кода, когда поисковая система интерпретирует значение, а не сопоставляет ключевые слова.
- Зависимость от обучающих данных: Качество результатов семантического поиска напрямую связано с обучающими данными модели ИИ, что означает, что он не всегда может идеально соответствовать последним паттернам кода или терминологии.
Учитывая эти соображения, будущее поиска на GitHub, вероятно, лежит в гибридном подходе. Объединив сильные стороны как семантического, так и поисков по ключевым словам, GitHub может предложить более мощный инструмент для разработчиков:
- Опции пользовательского интерфейса: Позволяя пользователям переключаться между семантическим и поиском по ключевым словам в зависимости от их непосредственных потребностей.
- Гибридные алгоритмы поиска: Объединяя глубокое понимание семантического поиска с точностью сопоставления ключевых слов, чтобы предоставить наиболее релевантные результаты.
- Контекстуальное переключение: Автоматически выбирая лучший метод поиска в зависимости от типа запроса и поведения пользователя, обеспечивая наилучшие возможные результаты.
Интеграция обоих методов в поисковые возможности GitHub поможет разработчикам находить нужный код быстрее и эффективнее, сочетая нюансированное понимание семантического поиска с надежностью и скоростью поиска по ключевым словам.
Будущее поиска на GitHub: Умнее с семантическим поиском
Традиционный поиск на GitHub, основанный на ключевых словах, будет эволюционировать в более умный, интуитивный подход: семантический поиск. Эта революционная технология призвана изменить способ взаимодействия разработчиков с репозиториями, повышая продуктивность и делая процесс разработки более плавным, особенно при поиске по запросам на внедрение, проблемам и комментариям.
Семантический поиск для запросов на внедрение, проблем и комментариев предлагает несколько ключевых преимуществ:
- Контекстуально осознанные результаты: В отличие от традиционного поиска, который полагается на точные совпадения ключевых слов, семантический поиск понимает контекст и намерение за вашим запросом. Это означает, что вы скорее найдете релевантные запросы на внедрение, проблемы и комментарии, даже если они не используют точные слова, которые вы искали.
- Обработка естественного языка: Вы можете искать, используя повседневный язык, не запоминая конкретный синтаксис или ключевые слова. Это облегчает поиск нужной информации.
- Улучшенная релевантность ранжирования: Семантический поиск может приоритизировать результаты на основе того, насколько близко они соответствуют смыслу вашего запроса, экономя время при навигации по многочисленным запросам на внедрение, проблемам или комментариям.
- Понимание синонимов и связанных концепций: Поисковая система может распознавать связанные термины и концепции, расширяя круг релевантных результатов без необходимости в множественных поисках.
- Улучшенное сотрудничество: Упрощая поиск связанных обсуждений и вкладов, семантический поиск может улучшить командное сотрудничество и обмен знаниями внутри проектов.
- Исторический контекст: Семантический поиск имеет потенциал понимать эволюцию обсуждений в проблемах и запросах на внедрение, предлагая более полные результаты, которые включают релевантный исторический контекст.
- Кросс-репозиторные инсайты: Продвинутый семантический поиск потенциально может предоставлять инсайты по нескольким репозиториям, помогая разработчикам обнаруживать связанные обсуждения или решения в других проектах.
Реализация семантического поиска становится все более достижимой благодаря современным базам данных, таким как Manticore Search. С его встроенными возможностями векторного поиска Manticore Search прокладывает путь для таких платформ, как GitHub, чтобы принять эту передовую технологию.
Хотя GitHub еще не полностью интегрировал семантический поиск, разработчики могут ощутить его мощь через наш демо проект . Эта открытая инициатива демонстрирует потенциал семантического поиска в среде, похожей на GitHub.