Comments 33
Для желающих самостоятельно поэкспериментировать: я использовал платную версию игры, выбрав в настройках "Dragon model", т.к. как заявляется она основана на GPT-3, и похоже на правду. Бесплатная версия работает на GPT-2, которая примерно в 100 раз меньше.
У меня не получилось добиться безумных результатов других людей где генерируются целые сложные и работающие React-приложения из простого описания, но вероятно это из-за ограничений самой игры, она не может выдавать текст длиннее 100 символов, а также там явно есть какая-то текстово-квестовая специфика, мешающая экспериментам. Поэтому лучше всего результаты получаются если взаимодействие оформлять в виде некого сценария с ролями.
Еще можно записаться в waitlist OpenAI, но судя по всему они не очень охотно раздают инвайты, я уже несколько недель жду, и не факт что ответят.
> работающие React-приложения из простого описания, но вероятно это из-за ограничений самой игры, она не может выдавать текст длиннее 100 символов
Посмотрел — там вроде в настройках есть ограничение на объем текста, можно его поставить поменьше.
Вопрос — у вас сходу получился такой текст на Dragon Model? Потому что мне приходится долго подбирать текст, и чего-то не особо складывается. Хотя логичность да, выше чем на бесплатном движке GPT-2.
Тесты на бесплатном:
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.»
So, the solution is:
var filter = function(numbers) { if (numbers.length === 0 ||!
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.
A: Code: for (var i = 0; i
Тесты на платном (0.2 randomness)
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!
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.
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, тоже пока не пришёл :(
Вопрос — у вас сходу получился такой текст на Dragon Model?
Да, сходу! Я аж сам удивился. У меня есть подозрение, что из-за перехайпленности у этой игры периодически кончается квота запросов в API и оно фоллбечится в менее крупную (более тупую) модель — у OpenAI их несколько размеров на выбор. Еще возможно что авторы игры что-то меняют в настройках, в конце-концов у них нет задачи предоставить «бэкдор» для GPT-3, а есть задача сделать интересный квест.
Также я заметил что крайне важен первоначальный текст, он задает контекст. Хуже всего что-то получается если обращаться с этой штукой как с калькулятором или как с поисковой строкой гугла :) Мб сказывается что её обучали на всякой литературе.
К сожалению, не удалось воспроизвести результат — вот мой диалог (полностью по английскому варианту):
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.
Добавил в статью предупреждение про плохую воспроизводимость, спасибо что отписались. К сожалению, не знаю, что там происходит в бекенде этой игры :/
Я просто привык перепроверять, потому что в этой сфере часто сталкиваешься с «cherry-picking» — когда авторы публикуют один или несколько результатов из множества. Пока эти результаты крайне неустойчивы, вот в чём проблема, и мне каждый раз интересно — решена она или нет. Я и GPT-2 так тестировал…
Кстати, в самом OpenAI, если подавать заявку на доступ к API, в качестве одного из типовых направлений исследований предлагают Robustness — исследование устойчивости функционирования подобного рода ИИ.
Я кстати попробовал поэкспериментировать ещё, и заметил что оно обрывает аутпут вот на таких конструкциях, несмотря на то что максимальная длина текста выставлена явно больше:
He writes the following:
function isEven(array) { for (var i = 0; i
Вероятно, у этой игры совсем плохо с HTML escaping, и оно не может в символ <
, считая его началом HTML-тега или типа того? А вот в примере, который мне выдало изначально, этого символа по удачному стечению обстоятельств не было :)
PS: Тоже жду ответа от OpenAI, тоже пока не пришёл :(
Возможно, среди читателей Хабра есть обладатели ключей. Было бы крайне интересно послушать про их опыт взаимодействия с API!
Забавно, но для большинства типовых задач такого уровня "кодогенерации" должно вполне хватать.
Да, мне кажется что скоро вполне можно будет программировать без вбивания кода вручную, давая высокоуровневое описание кодогенерационной задачи. Чем-то похоже на то, как объясняешь джуниору как написать ту или иную функцию или класс — приходится вдаваться в детали, и не всегда это получается быстрее чем написать самому, но чаще это из-за медленной скорости набора текста :) А вот с AI-«ассистентом» получится куда быстрее итерировать, даже если он в 4 случаев из 5 будет делать не совсем то что нужно, можно быстро его поправлять и приходить к нужному результату. Так как он выдает результат моментально.
Интересно что будет если ему таким образом дать задачу "реализуй мне интерфейс map чтобы сложность доступа была log n". Кажется, что на таком уровне задач ИИ точно сдохнет или просто подсмотрит готовое дерево. То есть он не сможет решить никакую задачу для которой в выборке не аналогов.
Оно безусловно смотрит в готовые результаты из памяти, как-то их комбинируя, но это не делает всё менее интересным :) Вот пара интересных результатов с GPT-3:
I just built a *functioning* React app by describing what I wanted to GPT-3.
— Sharif Shameem (@sharifshameem) July 17, 2020
I'm still in awe. pic.twitter.com/UUKSYz2NJO
I built a todo list app simply by describing it to GPT-3.
— Sharif Shameem (@sharifshameem) July 18, 2020
It generated the React code for a fully functioning app within seconds.
I'm becoming more impressed and aware of its capabilities every single day. pic.twitter.com/QGrClar03s
Это — ещё не полноценный ИИ. Это — языковая модель. Вся её кратковременная и рабочая память — это то, что мы видим на экране. Модель анализирует входной текст, формирует список наиболее вероятных слов, продолжающих этот текст. Затем какой-то внешний механизм выбирает одно из этих слов.
Обычно используется случайный выбор с параметром "температура" (температура 0 — всегда выбирается самое вероятное по мнению модели слово, температура >0 — больше вероятность, что будет выбран другой вариант).
Полученное слово добавляется к входному тексту, модель заново с нуля анализирует текст с добавленным словом, и цикл повторяется. Если на каком-то цикле будет выбрано неудачное слово, то модель может увести в сторону. Если температура нулевая, то сеть рано или поздно зациклится из-за ограниченности объема внутреннего состояния, формируемого в процессе анализа входного текста.
В общем, если для решения задачи требуются длинные рассуждения и перебор вариантов, то языковая модель с кратковременной и рабочей памятью в виде текста врядли сможет её решить.
Рабочая и кратковременная память — это, конечно, грубые аналогии. Возможно рабочая память больше соответствует состоянию, формируемому сетью в процессе анализа текста. Или нет.
Может прозвучать нелепо, но, думаю, всякие строительно-отделочные работы, где нужна мелкая моторика и точная координация движений, уйдут последними. Как мне кажется, там и софтово, и аппаратно надо еще много чего решить, чтобы даже приблизиться к замене людей.
Имхо, сложные гуманитарные задачи не легче сложных технических, а то и сложнее — например, описание психологии человека или его коммуникации. Там подойти не знаешь с какой стороны…
А текст и иллюстрации на низком уровне — да, на самом деле, штука подвластная почти любому. Не потому, что они будут хороши, а потому что почти в любом тексте или иллюстрации при желании можно найти смысл.
Программирование же — как раз НЕформализуемая штука, потому что формализацией занимаются программисты. Самое сложное в программировании, как правило, не код, а человеческий контекст, в который он вписывается.
Как только будет освоено адекватное прямое и обратное преобразование между разговорным и любым другим символьным языком, та или иная предметная область станет, во первых, доступна огромному количеству народа, которые смогут на естественном языке формулировать и проверять собственные гипотезы, не заморачиваясь вопросами их преобразования на языке предметной области, во вторых можно будет автоматизировать генерацию и верификацию самих гипотез.
То же самое похоже делает GPT-3, берет элементарное упрощенное представление в виде текстового описания и расширяет его в указанной области применения, делает более высокоуровневым. Но нового знания, нового представления при этом не возникает — это простое непрерывное линейное преобразование.
На мой взгляд дело может сдвинуться с мертвой точки, если заставить GPT-3 генерировать множество высокоуровневых гипотез и оценивать каждую с точки зрения здравого смысла и работоспособности. Пока что это делает оператор, и именно это является основным тормозом повышения ее эффективности. Если она будет сама определять верную гипотезу-представление, опираясь на ее актуальность и работоспособность — она реально станет очень востребованной.
В области программирования мне кажется, это реализовать проще, чем в общем случае. Ведь сгенерированный код должен срабатывать одним определенным образом и именно результат его срабатывания будет определять верность гипотезы-представления
Преобразовав эти гипотезы в состояния самой сетки в виде многомерных векторов и вычтя из негативных позитивную — можно определить вектора-негативы, на которых можно ее дообучить.
Как пример: ребенок взаимодействуя с горячими вещами, обучается ситуациям, в которых это взаимодействие привело к ожогам и дообучается на полученных негативных примерах — этих ситуаций избегать, что делает его более осознанным, сознательным и в итоге более умным.
Примерно то же самое можно было бы реализовать для GPT-3 в области программирования: определение негативных гипотез, вычисление путем сравнения с позитивной кусочков кода (или каких-то более абстрактных представлений) которые не сработали, формирование чего-то вроде стоп-листа и дообучения на нем
В описании не было ничего про переменную balance внутри state, например.
Ту же самую функциональность можно получить, например, заменив balance на my_balance. Соответствие высокоуровневой спецификации останется, а значит какой-то выбор сеть делает. При этом консистентный по всему коду.
Я говорю немного о другом — рост производительности подобных систем сильно зависит от обучающего материала, для gpt-3, насколько мне известно — он уже близок к пределу, увеличить в сто раз уже не получится. Если заставить ее на каждый запрос формировать много вариантов ответа и потом верифицировать правильный — через учителя или путем запуска кода, если говорим о программировании — то несработавшие гипотезы могут формировать огромную, практически бесконечную, уникальную базу примеров того, как НЕ НАДО. Которую в свою очередь можно использовать либо для дообучения самой сетки, либо для обучения состязательной сетки.
Если не ограничивать полет фантазии, можно представить в системе кодер-декодер третий промежуточный элемент, который обучается на основе негативных примеров и сразу отсекает неработающие варианты. Ведь примерно так работает обучение у человека: когда мы хотим сделать какое-либо действие и составляем цепочку промежуточных действий, мы не только придумываем, что за чем должно идти, но и сразу же отсекаем неработающие варианты.
Любое элементарное действие, например вскипятить воду для чая — после десятков вариантов, которые привели к негативным последствиям, научило нас например, наливать воду в чайник, а не в телевизор, и включать чайник в розетку, а не в унитаз итд итп. Мы так и учились, не только на повторении правильных цепочек действий, но и на избегании неправильных.
не возникает нового знания.
А должно? Такую задачу при разработке модели не ставили, насколько мне известно.
Какой смысл в навороченном поисковике? Двадцать лет назад мои родители не понимали, какой смысл в обычном поисковике, есть же книги. Какой смысл в навороченном поисковике, я думаю, всем будет понятно через год.
Но на самом деле это просто демонстрация возможностей. Вряд ли имеет смысл делать что-то действительно полезное на GPT-3 кроме исследований и попытки сделать следующую, более качественную языковую модель. А уже эта модель, прочитав доступные тексты, сможет качественно отвечать на огромное количество вопросов. Это фундаментально изменит процесс обучения.
Думаю, даже в таком виде ее уже можно будет использовать во многих областях, тот же копирайтинг/рерайтинг, разговорные агенты, чат-боты, составление списка вопросов по произвольному тексту (для обучения самое-то), поиск ответов на вопросы по произвольному тексту (службы поддержки, колл-центры), принципиально новый уровень компьютерного перевода, кодинг итд итп. Это навскидку
Пример с поправкой кода скорее всего фейковый или единичный (когда в той же теме кто-то написал альтернативу с const вместо let).
Ещё в копилку любопытного. GPT-3 Bash shell completion — выглядит практически как чёрная магия:
Вот еще что-то, от чего мурашки по коже, даже если это cherry-picked examples :)
#gpt3 has some reasonably impressive ability not only to detect nonsense, but to explain why something is nonsensical: pic.twitter.com/NGd7mluhLP
— Daniel Bigham (@danielbigham) July 30, 2020
Необычное собеседование: GPT-3 в роли кандидата