CoderCastrov logo
CoderCastrov
Парсер

GPT3 против Leetcode, действительно ли вам нужен ваш аналитик данных?

GPT3 против Leetcode, действительно ли вам нужен ваш аналитик данных?
просмотров
3 мин чтение
#Парсер

Бросаем вызов самой мощной текстовой модели в решении базовых задач SQL для меня

Definitely a good offer

Аннотация

Leetcode - одно из самых опасных мест для любого программиста. Вы точно начинаете задумываться о себе как о специалисте, когда впервые застреваете на "легкой" задаче на 40 минут своей жизни.

Конечно, я не лучший Литкодер в мире, но что насчет самой мощной (спорная) языковой модели от OpenAI? Может ли нейронная сеть решать задачи SQL хотя бы так же хорошо, как я?

Чтобы проверить это, я решил спарсить все задачи SQL с Leetcode, получить ответы от OpenAI SQL Request API и визуализировать статистику.

Парсинг всех задач баз данных

Для этого нам понадобится:

  • 35 долларов за премиум-подписку
  • набор библиотек Python для парсинга веб-страниц

После того, как мы реализовали функцию для парсинга всех ссылок с помощью BeautifulSoup, мы можем получить html-страницу из нашего драйвера (используя атрибут page_source) и извлечь все ссылки в датафрейм (мы также сохраняем информацию о сложности задачи - это будет полезно для оценки производительности OpenAI в конце).

Вот как выглядит получившийся датафрейм:

Получение описания из задач

Вам нужно быть авторизованным (я сделал это вручную, потому что рано или поздно Leetcode начинает запрашивать капчу) и иметь премиум-подписку, чтобы этот код работал (в противном случае у вас будет совершенно другой макет html)

Leetcode task example

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

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

Получение ответа от OpenAI

Теперь у нас есть описание, которое мы можем отправить в OpenAI API.

Это просто визуальное объяснение того, как можно получить решение, используя описание задачи вручную.

Не забудьте добавить SELECT в конце, чтобы дать нейронной сети подсказку о том, о чем это все

OpenAI solving basic task

Вы также можете сделать это через Python с помощью простой функции. Мы не будем обсуждать значение параметров, которые можно передать модели, давайте оставим это полем для эксперимента.

Отправка задачи и автоматическая проверка статуса

Отлично, мы научились получать описания задач из Leetcode, общаться с OpenAI и получать решения для наших задач.

Следующий шаг - попытаться отправить полученный ответ на платформу Leetcode.

Я абсолютно сдался, пытаясь сделать это с помощью JavaScript и обычного Selenium (send_keys в форму и прочие штуки).

Однако я заметил, что нажатие кнопки "Submit" вызывает POST-запрос к конечной точке <task_link>/submit, все, что нам нужно сделать, это просто изменить параметр typed_code и снова отправить решение.

Gotcha

Поэтому я решил использовать Selenium Wire, чтобы получить запросы от драйвера.

Я извлеку краткое описание из документации библиотеки:

Selenium Wire расширяет Python-привязки Selenium, чтобы дать вам доступ к основным запросам, сделанным браузером. Вы пишете свой код так же, как делаете это с Selenium, но получаете дополнительные API для проверки запросов и ответов и внесения изменений в них на лету.

Давайте проверим, правда ли это, написав следующую функцию.

Наш последний шаг - проверить результат нашей отправки, ничего интересного, кстати.

Бизнес становится реальным

Wake up, samurai, we have tasks to solve

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

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

Хорошо, и теперь у нас есть 216 вопросов, потрачено 35 долларов (без сожалений) и примерно 3 часа на наслаждение тонкостями парсинга веб-страниц.

Давайте посмотрим на данные, можно ли уже скинуть часть работы на могучие плечи искусственного атласа?

Короче говоря: не думаю, что это возможно

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

График интерактивный, не стесняйтесь кликать и играть

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