• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья Обзор и Оценка GPT-3

Введение:
Недавно OpenAI открыла доступ к GPT-3: достаточно зарегистрироваться, получить API-ключ и начать изучать генерацию.
GPT-3 является алгоритмом обработки естественного языка, это так-же самая большая модель в мире.

План статьи:
1. Регистрация
2. Принцип работы GPT-3.
3. Рассматриваем пример и создаем свой.
4. Создадим свое приложение на python и сделаем вывод.

Регистрация:
К сожалению, регистрация недоступна на территории России, но мы можем это обойти. Подключаемся через VPN, переходим по ссылке . Используем Google аккаунт, после чего нас попросят подтвердить номер. Чтобы не делать этого можно скачать программу TempNumber и получить сообщение на один из его номеров. После регистрации у нас появится ключ, который можно скопировать на . Сервис в дальнейшем можно использовать без VPN.

Принцип работы GPT-3:
Важно понять, что GPT-3 не пишет текст, она его генерирует, это важное замечание. При написании текста, человек его осознает и обдумывает, в отличии от GPT-3, которая генерирует текст на основе определенного алгоритма, не понимая смысла. Главная задача GPT-3 - понимать текст.

Рассмотрим мысленный эксперимент "Китайская комната", который проводит аналогию с GPT-3:
В некой комнате есть человек, не понимающий китайских иероглифов. У него есть книга с инструкцией по использованию иероглифов, однако не сказано о их значении. Представим, что другой человек, знающий китайский, задаёт вопрос, составленный из иероглифов. Человек в комнате, согласно инструкции, составляет ответ и отдаёт человеку за стеной. Человек за стеной получит осмысленный, здравый ответ, как-будто он общался с человеком, знающим китайский, хотя это не так. Человек в комнате (GPT-3) не понимает ни единого иероглифа (слова), но использует заранее составленную книгу (алгоритм) для ответа.

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

Например, зайдем на . В Load a Preset загрузим Chat.

картинка2.png


В графе Human зададим обычный вопрос:
Вопрос: Human: Who created you?
Ответ: Elon Musk and Sam Altman.

Все вроде бы отлично, но давайте зададим вопрос про что-то более точное:
Вопрос: How many rubles is one dollar?
Ответ: 25

Ответ, конечно, неверный (хотя, это в каком году посмотреть), но он полностью подходит как ответ на вопрос, не ломая логику.
Можно загрузить пресет Q and A и задать такой вопрос:
Вопрос: How many people are living in Belarus?
И получить честный ответ:
Ответ: Unknown

GPT-3 Обучена на множестве параметров. Чем больше параметров - тем лучше результат. По аналогии с инструкцией в китайской комнате, чем больше вариантов манипуляции с иероглифами в ней рассмотрено, тем точнее человек в комнате может составлять ответы.

Мы рассмотрели генерацию, но как GPT-3 обрабатывает сам текст на входе?
Не словами.
Вместо иероглифов, GPT-3 использует так называемые "Токены". Согласно документации, 1 токен равен примерно 4 символам. Именно их обрабатывает GPT-3, разбивая входной текст. После обработки, согласно алгоритму, на основе изученных параметров GPT-3 создает текст на выход.

Рассматриваем пример и создаем свой:
OpenAI подготовила для нас примеры, которые можно посмотреть на . По сути, всем, чем отличаются эти примеры от пустого PlayGround, так это заданным форматом входных и выходных данных, к примеру Chat:
The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.

Human: Hello, who are you?
AI: I am an AI created by OpenAI. How can I help you today?
Human: I'd like to cancel my subscription.

Уже загруженный здесь текст представляет собой инструкцию с примерами выполнения, который GPT-3 в дальнейшем использует.
Таким образом можно создать свой собственный пример, к примеру, пусть GPT-3 решает по действиям такой вид задач:
Человек имел Y объектов, после чего получил еще Z объектов от другого человека, сколько объектов стало у первого человека?

Создадим примеры:
Вопрос: Karen had 5 apples, then Martin gave her 2 more. How many apples Karen has?
Ответ: 1) 5+2=7

Вопрос: Dmitry had 10 bananas, then Anna gave him 9 more, and after that Mike also gave him 5 more.
Ответ:
1) 10+9=19
2) 19+5=24

И описание задачи бота: I am bot that can solve math problems, write me a problem and I will generate an answer.

Выбираем Q and A, удаляем весь текст и вставляем наше описание + задачи:
I am bot that can solve math problems, write me a problem and I will generate an Answer.
If I am not able to solve the problem, I will response with "Not able to solve"

Вопрос: Karen had 5 apples, then Martin gave her 2 more. How many apples Karen has?
Ответ: 1) 5+2=7
Вопрос: Dmitry had 10 bananas, then Anna gave him 9 more, and after that Mike also gave him 5 more. How many apples Dmitry has?
Ответ:
1) 10+9=19
2) 19+5=24

Попробуем дать такую задачу:
Вопрос: Vasily had 20 apples, Marine gave him 5 more. How many apples Vasily has?
Ответ:
1) 20+5=25
К сожалению бот может решать только такой тип задач и только на английском (Модель на русском гораздо слабее)

Создание приложения на python:
Мы увидели как работает GPT-3 и на что она способна, теперь можем написать свое первое приложение.
Перед началом работы нам понадобится установить модуль openai:
Bash:
pip3 install openai

Теперь, код. Мы возьмем один из примеров OpenAI за основу. К счастью, у них уже есть часть готового кода:
Python:
import openai #Импорт нужного модуля
openai.api_key = "КЛЮЧ" #Определение API ключа

API OpenAI отдает нам запрос в виде JSON, подключим так-же и эту библиотеку:
Python:
import json #Импорт нужного модуля

Скопируем готовый код для запроса с сайта OpenAI.
Python:
response = openai.Completion.create( #Создание запроса
  engine="davinci",
  prompt="The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.\n\nHuman: Hello, who are you?\nAI: I am an AI created by OpenAI. How can I help you today?\nHuman: I'd like to cancel my subscription.\nAI:",
  temperature=0.9,
  max_tokens=150,
  top_p=1,
  frequency_penalty=0.0,
  presence_penalty=0.6,
  stop=["\n", " Human:", " AI:"]
)

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

Python:
while 1: #Цикл который не закончится до окончания программы
    query=input("\nHuman: ") #Получение запроса пользователя
    prompt="The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.\n\nHuman: Hello, who are you?\nAI: I am an AI created by OpenAI. How can I help you today?\nHuman: "+query+"\nAI: " #Определение текста запроса
    response = openai.Completion.create( #Создание запроса
      engine="davinci", #Определяем нужную нам модель
      prompt=prompt, #Текст запроса
      temperature=0.9, #Насколько креативен наш бот
      max_tokens=2000, #Максимальное кол-во токенов
      top_p=1,
      frequency_penalty=0,
      presence_penalty=0.6,
      stop=["\n", " Human:", " AI:"]
    )

Теперь выведем нужные нам данные:
Python:
data=json.loads(str(response)) #С помощью подключенного json обрабатываем данные
  generated="\nAI:"+data["choices"][0]["text"] #Забираем нужные нам параметры
  print(generated) #Выводим ответ

Этот цикл будет повторяться пока пользователь не закроет программу, так мы получаем полностью рабочего чат-бота!

картинка3.png
 
Последнее редактирование модератором:
  • Нравится
Реакции: BlackHundred
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!