CROKAGE, что расшифровывается как Crowd Knowledge Answer Generator, — это молодой инструмент, который находит ответы в потоках вопросов и ответов о переполнении стека, которые имеют как соответствующий код, так и краткие объяснения.
Поиск в обширной коллекции вопросов и ответов Stack Overflow — это то, что мы все делаем, когда попадаем в тупик. Но с более чем 18 миллионами вопросов и 27 миллионами ответов найти полезную информацию сложно. CROKAGE предлагает комплексные решения для повседневных задач программирования, содержащие примеры кода и краткие объяснения. Это не первая попытка улучшить результаты поиска по переполнению стека, но похоже, что он превосходит альтернативы.
Новости об этом инструменте и его происхождении поступают из блога Stack Overflow, который, в свою очередь, берет подробности из статьи, написанной Родриго Фернандесом, Масудом Рахманом, Чанчалом Роем, Кевином А. Шнайдером и Марсело де Алмейда Майя, «Рекомендации комплексных решений для программирования. задачи по добыче знаний толпы », которая была представлена на 27-й Международной конференции по пониманию программ, состоявшейся в Монреале в мае.
Как объясняет Бен Поппер:
Как компьютерные ученые, эта группа ученых знала, что разработчикам, ищущим решения для вопросов по кодированию, мешает лексический разрыв между их запросом (описанием задачи) и информацией (строками фактического кода), связанной с решением, которое они ищут. Учитывая эти препятствия, разработчикам часто приходится просматривать десятки документов, чтобы синтезировать полное решение.
Команда была собрана в Университете Саскачевана, профессор Билдинг на Чанчале К. Рое, и смогла использовать два предыдущих инструмента, разработанных там: RACK и NL2API, а также BIKER, инструмент, который использует технику встраивания слов для расчета оценки сходства между двух текстовое описание Используя миллионы вопросов и ответов из Stack Overflow в качестве учебного корпуса, команда обучила модель встраивания слов с помощью FastText.
Дополнительную информацию о CROCKAGE можно получить на GitHub, где есть пакет репликации для инструмента, который при желании можно клонировать:
CROKAGE получает в качестве входных данных запрос, написанный на естественном языке, и использует современные модели поиска текста в сочетании с тремя современными инструментами рекомендаций API для получения наиболее связанных с переполнением стека ответов на этот запрос, отсортированных по релевантности. Затем CROKAGE использует обработку естественного языка для извлечения кода и соответствующих предложений, чтобы составить сводку, содержащую решение для запроса.
В своей статье исследователи сообщают:
Мы оцениваем наш подход, используя 97 программных запросов, из которых 50% использовались для обучения, а 50% — для тестирования, и показываем, что он превосходит шесть базовых показателей, включая современные, со статистически значимым отрывом. Кроме того, наша оценка с участием 29 разработчиков, использующих 24 задачи (запроса), подтверждает превосходство CROKAGE над современным инструментом с точки зрения релевантности предложенных примеров кода, преимуществ объяснений кода и общего качества решения (код + объяснение ).
Лучший способ понять, что делает CROCKAGE и превосходит ли он другие методы поиска ответов по программированию, — это использовать его. Текущая версия предоставляет решения только для Java, и вас просят оценить ее производительность с помощью 5-звездочного рейтинга. Я попробовал запрос: Как мне создать функцию
вы заметите, что это вопрос с подвохом, поскольку вы не можете создавать автономные функции на Java — если, конечно, вы не думаете о Lambdas.
У вас есть выбор из 1, 5 или 20 ответов. Пытаясь получить 5 ответов, я смог присудить только 3 из 5 звезд, потому что, хотя первый ответ был правильным, заявив, что вы не можете, а затем предложил пару обходных путей, остальные не были актуальны, становясь все больше и больше не по теме.
Он действительно выполнил этот и другие поисковые запросы очень быстро, и после нескольких тестов его основные ответы, как правило, были хорошими.
Найти хорошие ответы в Stack Overflow сложно, потому что понимание естественного языка затруднено, и, как показывает мой демонстрационный вопрос, может оказаться, что даже действительный ответ не является полной историей. Я спросил о функциях, и идеальным ответом было бы что-то, что говорило бы мне, что изначально Java не поддерживала функции, но теперь у нее есть лямбды. Возможно, такого ответа даже не существует в Stack Overflow в качестве единственного ответа. Что действительно нужно, так это кто-то, кто курирует базу данных, которая называется Stack Overflow, отсеивает ее, сокращает ее, объединяет ответы во что-то законченное. Возможно, сейчас это слишком много, чтобы требовать от ИИ.