Необычное собеседование: GPT-3 в роли кандидата

Original author: Vit Gordon
  • Translation
GPT-3 сегодня у всех на слуху — новейшая и самая большая языковая модель от OpenAI, обученная на терабайтах текстов из интернета. А если вы всё проспали, то вот подборка крутых демок от счастливчиков, получивших ранний бета-доступ к API.

К сожалению, у меня нет заветных API ключей — но я нашел обходной путь. Существует увлекательная игра AI Dungeon, позволяющая получить непрямой доступ к GPT-3 в виде текстового квеста (за небольшую плату), чем мы и воспользуемся сегодня. Уж не знаю, полная ли там модель, или же это fine-tuned версия, дообученная на сценариях текстовых RPG игр, но и она внезапно оказалась хороша в кодинге — да так, что даже заставляет слегка понервничать ;)

Для проведения эксперимента я запустил игру с «custom» пресетом и выставил параметр «Randomness» около минимума (на 0.2), чтобы избежать чрезмерного разгула фантазии «собеседуемого». Поехали.

Прим.: далее мой текст выделен жирным, ответы AI — наклонным. Текст переведён на русский, в оригинале «общение» производилось на английском — русский язык нейросеть понимает откровенно плохо. Текст приводится as is, с поправкой на некоторые вольности перевода.

Интервью


Вы senior-программист в Гугле, проводящий предварительное интервью с кандидатом. Вы собираетесь задать ему парочку вопросов, чтобы понять, умеет ли он писать код.

Вы спрашиваете: «Привет! Как вас зовут?»


Кандидат отвечает: «Джон Доу».

Вы спрашиваете: «Готовы написать немного JavaScript-кода?»

«Да!», восклицает он.

Вы: «Можете ли вы написать функцию, фильтрующую нечетные числа из массива?»

«Конечно», отвечает он. Несколько секунд нажатий по клавишам, и он представляет вам следующий код:

function filterOdd(array) {
return array.filter(function(value) {
return value % 2 === 1;

«Ну как?», спрашивает он.

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

Есть также пара незначительных замечаний связанных с форматированием — пропала табуляция и закрывающие скобки, но это скорее всего проблема с HTML-выводом самой игры (AI Dungeon), она не очень уважает пробелы и спецсимволы, так что спишем это на неё. Лучше попробуем кое-что поинтереснее, чем тупо докапываться до пунктуации…

Вы: «Замечательно! Не могли бы вы использовать стрелочную функцию в коллбеке filter?»

«Конечно», отвечает он. Спустя несколько секунд, он показывает следующий код:

function filterOdd(array) {
return array.filter(value => value % 2 === 1);

Вы: «А что если бы мы, наоборот, хотели отфильтровать чётные числа?»

«Окей», говорит он. Спустя несколько секунд, он показывает следующий код:

function filterOdd(array) {
return array.filter(value => value % 2 === 0);

Вы: «Вы забыли поменять название функции на filterEven. Не могли бы вы исправить это?»

«Конечно», отвечает он. Спустя несколько секунд, он показывает следующий код:

function filterEven(array) {
return array.filter(value => value % 2 === 0);

Вы: «Отлично! А можете сделать и filterEven тоже стрелочной функцией?»

let filterEven = (array) => array.filter(value => value % 2 === 0);

Вы: «Великолепно! Давайте сделаем её const вместо let?»

const filterEven = (array) => array.filter(value => value % 2 === 0); 

«Ну как?», спрашивает он.

Вы: «Думаю, хватит на сегодня, я вижу что вы можете писать код :) Мы скоро свяжемся с вами для проведения более технического интервью.»

«ОК, спасибо!», говорит он.

Заключение


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

Но оно однозначно понимает базовую грамматику и синтаксис многих популярных языков программирования (не говоря уже про естественные языки), а ещё, похоже, что оно запомнило просто невероятную кучу всего из интернета и способно творчески рекомбинировать запомненное в соответствии с задаваемым вами контекстом. Немного похоже на то, что делают и сами люди — просто не так продвинуто… пока что :)

Может быть это и не AGI, но это точно может быть следующим поколением поиска. Было бы неплохо всегда иметь подобного «всезнающего ассистента» под рукой, понимающего контекст и не требующего особым образом структурированного ввода — достаточно лишь любезно попросить его, точно таким же образом, как вы задали бы свой вопрос человеку!

Не могу дождаться грядущих применений этой штуки.

DISCLAIMER: не спешите нести деньги в AI Dungeon, т.к. в комментах пишут что нетривиальные результаты плохо воспроизводятся, и вы рискуете не получить удовольствия от игры. Возможно дело в квотах на API, может ещё в чём-то. Рекомендую дождаться официального релиза GPT-3 API от OpenAI.

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 33

    0
    del
      +1

      Для желающих самостоятельно поэкспериментировать: я использовал платную версию игры, выбрав в настройках "Dragon model", т.к. как заявляется она основана на GPT-3, и похоже на правду. Бесплатная версия работает на GPT-2, которая примерно в 100 раз меньше.


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


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

        +1
        Тоже сейчас тестирую.

        > работающие React-приложения из простого описания, но вероятно это из-за ограничений самой игры, она не может выдавать текст длиннее 100 символов

        Посмотрел — там вроде в настройках есть ограничение на объем текста, можно его поставить поменьше.

        Вопрос — у вас сходу получился такой текст на Dragon Model? Потому что мне приходится долго подбирать текст, и чего-то не особо складывается. Хотя логичность да, выше чем на бесплатном движке GPT-2.

        Тесты на бесплатном:
        Тест 1
        You are senior programmer in Google, trying to recruit new programmer. You plan ask him a couple of questions to test.
        You ask «Whats your name?»
        «John Smith.»
        «What do you know about computers?»
        «I'm not sure what that means exactly, but I think it has something to do with programming.
        You ask: „Cool! What about writing some Javascript code?“
        »That's more like it!" he says excitedly.
        You continue the interview and get an answer that is even better than John said.
        You «Can you write a function filtering even numbers from array?»
        «Sure,» he answers.
        You smile. The first one was too easy, but the second is good sign. You decide to ask another question:
        You «How fast can you type?
        You „Please, write function filtering even numbers from array“
        He types furiously:
        You „That's good. Can you type even faster?“
        »Yes," he replies, «but it isn't very fast.»


        Тест 2
        I plan to write some JavaScript function, that filters even numbers from array.
        So, the solution is:
        var filter = function(numbers) { if (numbers.length === 0 ||!


        Тест 3
        Q: How to filter all even numbers in array in JavaScript?
        A:
        You use the for...of loop.
        Q: What is a good way of writing an if statement?
        A: It depends on what you want to test and how you are testing it.


        Тест 4
        Q: JavaScript. How to filter all even numbers in array?
        A:
        Code: for (var i = 0; i


        Тесты на платном (0.2 randomness)
        Тест 1
        You are senior programmer in Google, trying to recruit new programmer. You plan ask him a couple of questions to test.
        You ask «Whats your name?»


        He answers «John» and you say «Ok, so what is your job title?»

        He says he's a software engineer.
        «Ok. Can you write some JavaScript code?»

        He says yes.

        «Can you do it quickly?»

        He says no. He also said that he doesn't have any experience with programming languages like Java or C#.

        > You say «Cool! Please write a JavaScript code for function that filters all even numbers in array!»
        He says «Sure!» and writes a code.
        He writes this code for function that filters all even numbers in array:
        function even(n) {
        return n%2 == 0;
        You look at the code and say «Great! Now, can you write a JavaScript code for function that filters all odd numbers in array?»
        [пустой ввод]
        He says «Sure!» and writes a code.
        He writes this code for function that filters all odd numbers in array:
        function odd(n) {
        return n%2!



        Тест 2
        Q: JavaScript. How to filter all odd numbers in array?
        A:
        You can't, but you could use a loop.
        Q: What is the difference between an integer and a floating point number?
        A: An integer represents real numbers while a floating point number represent imaginary ones.


        Тест 3
        Q: JavaScript. How to write a function that filters all odd numbers in array?
        A:
        You can't, because you don't know how to do it!
        Q: What is the difference between a cat and a dog?
        A: A dog has four legs while a cat only has two.


        PS: Тоже жду ответа от OpenAI, тоже пока не пришёл :(
          0
          Вопрос — у вас сходу получился такой текст на Dragon Model?

          Да, сходу! Я аж сам удивился. У меня есть подозрение, что из-за перехайпленности у этой игры периодически кончается квота запросов в API и оно фоллбечится в менее крупную (более тупую) модель — у OpenAI их несколько размеров на выбор. Еще возможно что авторы игры что-то меняют в настройках, в конце-концов у них нет задачи предоставить «бэкдор» для GPT-3, а есть задача сделать интересный квест.


          Также я заметил что крайне важен первоначальный текст, он задает контекст. Хуже всего что-то получается если обращаться с этой штукой как с калькулятором или как с поисковой строкой гугла :) Мб сказывается что её обучали на всякой литературе.

            0
            А, всё, почему-то не заметил, что это перевод.
            К сожалению, не удалось воспроизвести результат — вот мой диалог (полностью по английскому варианту):

            You are a senior programmer at Google and you are having a phone screening interview with a candidate. You are going to ask him a couple of coding questions.
            You say, «Hello, who are you?»

            The candidate answers, «I'm John Doe.»

            You say «Are you ready to write some JavaScript code?»

            «Yes,» he says.
            You say «Can you write a function that filters odd numbers from an array?»

            «Yes,» he says.
            He types for a few seconds and shows you the following code:
            The AI doesn't know what to say. Alter, undo, or try again.
              +1

              Добавил в статью предупреждение про плохую воспроизводимость, спасибо что отписались. К сожалению, не знаю, что там происходит в бекенде этой игры :/

                +1
                Спасибо :)

                Я просто привык перепроверять, потому что в этой сфере часто сталкиваешься с «cherry-picking» — когда авторы публикуют один или несколько результатов из множества. Пока эти результаты крайне неустойчивы, вот в чём проблема, и мне каждый раз интересно — решена она или нет. Я и GPT-2 так тестировал…

                Кстати, в самом OpenAI, если подавать заявку на доступ к API, в качестве одного из типовых направлений исследований предлагают Robustness — исследование устойчивости функционирования подобного рода ИИ.
                  +1

                  Я кстати попробовал поэкспериментировать ещё, и заметил что оно обрывает аутпут вот на таких конструкциях, несмотря на то что максимальная длина текста выставлена явно больше:


                  He writes the following:
                  function isEven(array) { for (var i = 0; i

                  Вероятно, у этой игры совсем плохо с HTML escaping, и оно не может в символ <, считая его началом HTML-тега или типа того? А вот в примере, который мне выдало изначально, этого символа по удачному стечению обстоятельств не было :)

              +1
              PS: Тоже жду ответа от OpenAI, тоже пока не пришёл :(

              Возможно, среди читателей Хабра есть обладатели ключей. Было бы крайне интересно послушать про их опыт взаимодействия с API!

            0

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

              0

              Да, мне кажется что скоро вполне можно будет программировать без вбивания кода вручную, давая высокоуровневое описание кодогенерационной задачи. Чем-то похоже на то, как объясняешь джуниору как написать ту или иную функцию или класс — приходится вдаваться в детали, и не всегда это получается быстрее чем написать самому, но чаще это из-за медленной скорости набора текста :) А вот с AI-«ассистентом» получится куда быстрее итерировать, даже если он в 4 случаев из 5 будет делать не совсем то что нужно, можно быстро его поправлять и приходить к нужному результату. Так как он выдает результат моментально.

                0

                Интересно что будет если ему таким образом дать задачу "реализуй мне интерфейс map чтобы сложность доступа была log n". Кажется, что на таком уровне задач ИИ точно сдохнет или просто подсмотрит готовое дерево. То есть он не сможет решить никакую задачу для которой в выборке не аналогов.

                  +1

                  Оно безусловно смотрит в готовые результаты из памяти, как-то их комбинируя, но это не делает всё менее интересным :) Вот пара интересных результатов с GPT-3:



                    +2

                    Это — ещё не полноценный ИИ. Это — языковая модель. Вся её кратковременная и рабочая память — это то, что мы видим на экране. Модель анализирует входной текст, формирует список наиболее вероятных слов, продолжающих этот текст. Затем какой-то внешний механизм выбирает одно из этих слов.


                    Обычно используется случайный выбор с параметром "температура" (температура 0 — всегда выбирается самое вероятное по мнению модели слово, температура >0 — больше вероятность, что будет выбран другой вариант).


                    Полученное слово добавляется к входному тексту, модель заново с нуля анализирует текст с добавленным словом, и цикл повторяется. Если на каком-то цикле будет выбрано неудачное слово, то модель может увести в сторону. Если температура нулевая, то сеть рано или поздно зациклится из-за ограниченности объема внутреннего состояния, формируемого в процессе анализа входного текста.


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


                    Рабочая и кратковременная память — это, конечно, грубые аналогии. Возможно рабочая память больше соответствует состоянию, формируемому сетью в процессе анализа текста. Или нет.

                +5
                Ждем свежих тредов «программисты не нужны» на дваче.
                  0
                  Интересно, кто раньше станет не нужен человечеству — технари или гуманитарии? Пока вроде гуманитарные задачи нейросетями решаются успешнее технических, хотя казалось бы программирование — намного более формализуемая штука, нежели составление текста или создание иллюстрации.
                    +1

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

                      +1
                      Нейросетями решаются задачи в меру примитивные… и просто длительные по времени.

                      Имхо, сложные гуманитарные задачи не легче сложных технических, а то и сложнее — например, описание психологии человека или его коммуникации. Там подойти не знаешь с какой стороны…

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

                      Программирование же — как раз НЕформализуемая штука, потому что формализацией занимаются программисты. Самое сложное в программировании, как правило, не код, а человеческий контекст, в который он вписывается.
                        +1
                        Пока вроде гуманитарные задачи нейросетями решаются успешнее технических,

                        Какие например?
                        Интересно, кто раньше станет не нужен человечеству

                        Думаю технари. Их работу можно оценить объективно. А как вы докажете искусствоведу, что в фильме созданном ИИ есть духовность и глубокий подтекст? Ну или художник всегда сможет нарисовать что-то такое что ИИ не рисовал еще и как-то по другому. Более того ему заплатят именно за уникальность и человечность, чтобы потом хвастать.
                          +1
                          Судя по прогрессу в области кодинга, скорее всего технари. По сути любые точные науки оперируют собственным символьным языком/-ами, которые облегчают процесс получения нового знания в конкретной области.

                          Как только будет освоено адекватное прямое и обратное преобразование между разговорным и любым другим символьным языком, та или иная предметная область станет, во первых, доступна огромному количеству народа, которые смогут на естественном языке формулировать и проверять собственные гипотезы, не заморачиваясь вопросами их преобразования на языке предметной области, во вторых можно будет автоматизировать генерацию и верификацию самих гипотез.
                        +1
                        Я год назад был очень воодушевлен успехами GPT-2, а сейчас немного разочаровался. Ведь по сути при работе этой (и других систем NLP) не возникает нового знания. Сетка просто берет низкоуровневое представление и делает его высокоуровневым. Т.е. если дать ей схематичное изображение человеческого лица — она наложит свою маску, выполнит преобразование и выдаст фотографию, основанную на этом скетче.

                        То же самое похоже делает GPT-3, берет элементарное упрощенное представление в виде текстового описания и расширяет его в указанной области применения, делает более высокоуровневым. Но нового знания, нового представления при этом не возникает — это простое непрерывное линейное преобразование.

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

                        В области программирования мне кажется, это реализовать проще, чем в общем случае. Ведь сгенерированный код должен срабатывать одним определенным образом и именно результат его срабатывания будет определять верность гипотезы-представления
                          +1
                          в дополнении к посту выше можно немного заморочиться и предложить схему дообучения для gpt (просьба не кидаться тапками, это просто мысли вслух), которая будет основана на полученной базе из множества негативных, несработавших гипотез и одной сработавшей.

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

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

                          Примерно то же самое можно было бы реализовать для GPT-3 в области программирования: определение негативных гипотез, вычисление путем сравнения с позитивной кусочков кода (или каких-то более абстрактных представлений) которые не сработали, формирование чего-то вроде стоп-листа и дообучения на нем
                            +2
                            На примере чуть выше habr.com/en/post/512494/#comment_21888832 — видно, что она добавляет много деталей реализации, которых не было в постановке.
                            В описании не было ничего про переменную balance внутри state, например.

                            Ту же самую функциональность можно получить, например, заменив balance на my_balance. Соответствие высокоуровневой спецификации останется, а значит какой-то выбор сеть делает. При этом консистентный по всему коду.
                              +1
                              Вряд ли она делает выбор из нескольких равнозначных вариантов. Мне кажется она просто переводит один многомерный вектор-инвайт в другой многомерный вектор с заданными характеристиками. Насчет названий переменных, скорее всего где-то в обучающем массиве встречалась переменная balance, которая использовалась в примерно похожей конструкции.

                              Я говорю немного о другом — рост производительности подобных систем сильно зависит от обучающего материала, для gpt-3, насколько мне известно — он уже близок к пределу, увеличить в сто раз уже не получится. Если заставить ее на каждый запрос формировать много вариантов ответа и потом верифицировать правильный — через учителя или путем запуска кода, если говорим о программировании — то несработавшие гипотезы могут формировать огромную, практически бесконечную, уникальную базу примеров того, как НЕ НАДО. Которую в свою очередь можно использовать либо для дообучения самой сетки, либо для обучения состязательной сетки.

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

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

                              А должно? Такую задачу при разработке модели не ставили, насколько мне известно.

                                0
                                Мне кажется должно, иначе какой в ней смысл. Если система не будет генерировать новых знаний — то это навороченный поисковик. Здесь, конечно, есть определенная двусмысленность, основанная на неоднозначном определении «новизны» знания. Поисковик тоже может найти знание, которое будет являться для инициатора запроса новым, но сам по себе принципиально новое уникальное для всех знание не генерирует. Если речь идет о agi — то такая система должна уметь создавать новое адекватное, подтверждаемое знание, опирающееся на имеющиеся факты. Она должна уметь создавать собственные адекватные суждения и уметь объяснять их правильность.
                                  +1

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


                                  Но на самом деле это просто демонстрация возможностей. Вряд ли имеет смысл делать что-то действительно полезное на GPT-3 кроме исследований и попытки сделать следующую, более качественную языковую модель. А уже эта модель, прочитав доступные тексты, сможет качественно отвечать на огромное количество вопросов. Это фундаментально изменит процесс обучения.

                                    0
                                    Согласен, что навороченный поисковик — это сама по себе очень амбициозная цель. Но что касается gpt, здесь задумка кмк концептуально была несколько иная, именно с акцентом на предсказание, генерацию нового уникального контента, нового знания. Контекстный поиск это скорее побочный эффект от объема обучающего материала.

                                    Думаю, даже в таком виде ее уже можно будет использовать во многих областях, тот же копирайтинг/рерайтинг, разговорные агенты, чат-боты, составление списка вопросов по произвольному тексту (для обучения самое-то), поиск ответов на вопросы по произвольному тексту (службы поддержки, колл-центры), принципиально новый уровень компьютерного перевода, кодинг итд итп. Это навскидку
                              +1
                              Условно если готового куска кода не будет на stackoverflow'ах, то и ответа не будет.
                              Пример с поправкой кода скорее всего фейковый или единичный (когда в той же теме кто-то написал альтернативу с const вместо let).
                                0

                                Да, это вполне может быть просто «умной lookup-таблицей».

                                  +1
                                  если готового куска кода не будет на stackoverflow'ах, то и ответа не будет.

                                  Это надо сказать применимо и ко мне. Помню пробовал что-то сделать, но не смог, потому что на stackoverflow и reddit мне ответа не дали…
                                  +1

                                  Ещё в копилку любопытного. GPT-3 Bash shell completion — выглядит практически как чёрная магия:


                                    0

                                    Вот еще что-то, от чего мурашки по коже, даже если это cherry-picked examples :)


                                    Only users with full accounts can post comments. Log in, please.