Все чаще мы слышим, что нейронные сети на основе больших языковых моделей заменят разработчиков и будут писать код вместо них. Но чтобы сеть заменила разработчика, языковая модель должна сначала… пройти собеседование! Надо проверить, сможет ли?

Такая несерьезная мысль возникла у меня после прочтения нескольких постов о том, что ChatGPT успешно решал задачи типичные с собеседований. Однако известно, что ChatGPT имеет несколько особенностей:

  • ответ содержит элемент случайности. На один и тот же вопрос могут быть получены как правильные, так и неправильные ответы

  • ChatGPT обучен на информации из интернета, опубликованной до сентября 2021 года. Если условие задачи и ее решение стало доступно до этой даты, то задача, вероятно, упрощается

Мне стало любопытно, насколько результаты ChatGPT были именно "способностью решать алгоритмические задачи", а насколько — случайностью или "запоминанием решения".

План моего эксперимента (кратко)

Я решил отобрать несколько десятков задач с leetcode по двум независимым критериям: легкие/сложные и опубликованные до/после сентября 2021 года. Я случайно выбрал по 13 задач в каждой из категорий, всего получилось 52 задачи. Условие каждой задачи было дано на вход ChatGPT-4 с пояснениями, соответствующими ситуации "алгоритмическое собеседование". От сети я ожидал код на языке Python, который проходит автоматические тесты к задаче. Если код не проходил тесты, я давал одну единственную попытку для внесения исправлений в код.

Результаты

В моем эксперименте получился следующий ACeptance rate (то есть процент верных решений), с учетом одной дополнительной попытки:

Легкие

Сложные

До сентября 2021

50%

23%

После сентября 2021

36%

0%

За все время

42%

12%

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

Интерпретация результатов

Результаты можно было бы назвать ожидаемыми, если бы мы говорили о человеке: легкие задачи решать проще, чем сложные (ауф); а ранее виденные даются легче, чем новые. Интуитивно кажется, что это объяснение должно быть верным и для результатов работы языковой модели.

Полученный результат выглядит достаточно скромным для прохождения настоящего лайвкодинга. Представим, что на собеседовании в воображаемую компанию даются две легкие задачи, что может соответствовать джуниорским или стажерским вакансиям. Шанс ChatGPT-4 успешно пройти собеседование в таком случае порядка 18%. Если собеседование состоит из одной легкой и одной сложной задачи, то шансы падают до 5%.

С другой стороны этот результат кажется невероятно крутым для языковой модели общего назначения, которая никогда не обучалась специально писать код. Вероятно в очень скором будущем мы увидим различные специальный модели, которые существенно превосходят ChatGPT-4 в прохождении лайвкодинга.

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

Ссылки

Сводная таблица с результатами моего эксперимента

Текстовые результаты и более подробно про план эксперимента

Комментарии (4)


  1. GospodinKolhoznik
    15.06.2023 21:36
    +3

    Статью тоже ЧатЖПТ писал? Это не статья, а заголовок + введение + несколько ссылок (читайте интернет, там есть все ответы на ваши вопросы)


    1. whisk Автор
      15.06.2023 21:36

      Все результаты прямо в статье. По ссылкам только необязательные сырые данные.

      Кстати, вы ошибочно полагаете, что раз статья короткая, то это chatgpt писал. Ему как раз несложно писать много, а мне лень :)


  1. Str5Uts
    15.06.2023 21:36
    +1

    Попробуйте методику промпта «chain of thought», существенно улучшает результаты.


  1. palyaros02
    15.06.2023 21:36
    +1

    У меня вопрос, вы зачем LLM на работу собесите? Никто не считает, что LLM "отберут работу" занимая места путем прохождения формального отбора в виде собеседований. Речь идет о том, что эффективность одной человеко-единицы повышается настолько, что человек может работать за десятерых, причем иногда даже не по своей профильной специальности.

    Чтобы понимать, почему указание на ошибку улучшает ответ, гуглите подход CoT, волшебная фраза "рассуждай по шагам" иногда резко повышает качество ответов. Если бы вы не просто говорили, что в решении ошибка, а указывали хотя бы строчку или сообщение интерпретатора/тестов, это тоже могло сильно улучшить ситуацию. Вы же не требуете от кандидата на собеседовании сходу выдать решение сложной задачи с литкод на бумажке, не запустив и не протестировав, а после нахождения вами в его рукописном тексте ошибки, которую он не исправляет сходу, отказываете? Если уж хотите по-настоящему устроить собес для gpt, создавайте равные условия. Установите AutoGPT, дайте задачу и доступ к интерпретатору и дайте ему волю рассуждать и тестировать свое решение минут 10, затем, если ответ содержит ошибку, скажите об этом и запустите второй круг. Мне кажется, что результаты точно будут не такими однозначными)