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

Модели больших языков

Большие языковые модели или LLM — это предварительно обученные модели машинного обучения, которые обучаются на огромных наборах текстовых данных, чтобы понимать и генерировать ответы, подобные человеческим. В настоящее время доступно множество LLM, таких как GPT-4, LaMDA, BLOOM и другие; и они способны сделать много задач для нас. Здесь я расскажу конкретно о ГПТ-3,5 турбо и текстовой классификации.

Предпосылка

Прежде чем мы начнем, есть несколько вещей, которые мы должны знать и иметь под рукой, в том числе:

  • Знание Python, в том числе знание использования внешних библиотек и IDE.
  • Понимание API и как их использовать в python.
  • Наличие OpenAI API.

Чтобы иметь доступ к API OpenAI, нам необходимо зарегистрироваться на платформе разработчиков OpenAI и создать ключ API, если у нас его нет.

ПРИМЕЧАНИЕ. Сохраните ключ API у себя. OpenAI не показывает вам сгенерированные ключи API. В случае его потери/забывания необходимо сгенерировать новый ключ API.

Сборка

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

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

pip install openai

pip install streamlit

Для этой статьи у нас есть только две зависимости, то есть OpenAI и Streamlit.

Давайте начнем строить наш текстовый резюмёр. Это всего лишь код Python, веб-приложение будет описано позже в этой статье.

import openai
import streamlit as st

openai.api_key = "Your-OPENAI-key"


def generate_summarizer(
    max_tokens,
    temperature,
    top_p,
    frequency_penalty,
    prompt,
    person_type,
):
    res = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        max_tokens=1000,
        temperature=0.7,
        top_p=0.5,
        frequency_penalty=0.5,
        messages=
       [
         {
          "role": "system",
          "content": "You are a helpful assistant for text summarization.",
         },
         {
          "role": "user",
          "content": f"Summarize this for a {person_type}: {prompt}",
         },
        ],
    )
    return res["choices"][0]["message"]["content"]

С помощью приведенного выше кода мы взаимодействуем с турбо-моделью OpenAI GPT-3.5. Кроме того, здесь я использую ChatCompletion API, где мы можем создать беседу и получить ожидаемый результат после прохождения подсказки.

Тем не менее, давайте подробнее рассмотрим приведенный выше блок кода и опишем пару гиперпараметров.

  • openai.ChatCompletion.create: используется для создания ответа на приглашение, которое мы передаем в API.
  • model: Модель, которую мы хотим использовать. Для этой статьи я использовал турбомодель GPT-3.5. Также можно использовать GPT-4.
  • max_tokens: Максимальное количество слов/токенов, сгенерированных моделью. Это помогает ограничить длину генерируемого текста.
  • temperature: Случайность вывода модели с более высокой температурой приводит к более разнообразному и творческому результату/выходу. Диапазон значений составляет от 0 до бесконечности, хотя значения больше 2 встречаются редко.
  • top_p: Выборка Top P или top-k или выборка ядра — это параметр, управляющий пулом выборки из выходного распределения. Например, значение 0,1 означает, что модель выбирает выходные данные только из верхних 10% распределения. Диапазон значений находился между 0 и 1; более высокие значения приводят к более разнообразному результату.
  • frequency_penalty: Штраф за повторение токена из вывода. Диапазон значений от -2 до 2, где положительные значения не позволяют модели повторять токен, а отрицательные значения побуждают модель использовать больше повторяющихся слов. 0 означает, что штраф не применяется.
  • messages: Часть, в которой мы передаем текстовое приглашение для обработки с моделью. Мы передаем список словарей, где ключ — это объект роли («система», «пользователь» или «помощник»), который помогает модели понять контекст и структуру, а значения — это контекст.

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

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

Как я упоминал ранее в этой статье, я использую Streamlit для создания веб-приложения, теперь давайте рассмотрим это подробнее:

#application title
st.title("Text Summarization")

#Provide the input area for text
input_text = st.text_area("Enter the text to summarize:", height=200)

#Initiate three columns for section to be side-by-side
col1, col2, col3 = st.columns(3)

#Slider to control the model hyperparameter
with col1:
    token = st.slider("Token", min_value=0.0, max_value=1000.0, value=50.0, step=1.0)
    temp = st.slider("Temperature", min_value=0.0, max_value=1.0, value=0.0, step=0.01)
    top_p = st.slider("Nucleus Sampling", min_value=0.0, max_value=1.0, value=0.5, step=0.01)
    f_pen = st.slider("Frequency Penalty", min_value=-1.0, max_value=1.0, value=0.0, step=0.01)

#Selection box to select the summarization style
with col2:
    option = st.selectbox(
        "Who are you?",
        (
            "Second-Grader",
            "Professional Data Scientist",
            "Housewives",
            "Retired",
            "University Student",
        ),
    )

#Showing the current parameter used for the model 
with col3:
    with st.expander("Current Parameter"):
        st.write("Current Token :", token)
        st.write("Current Temperature :", temp)
        st.write("Current Nucleus Sampling :", top_p)
        st.write("Current Frequency Penalty :", f_pen)

#Creating button for execute the text summarization
if st.button("Summarize"):
    st.write(generate_summarizer(token, temp, top_p, f_pen, input_text, option))

Сохраните весь код в одном файле Python. Я называю свой файл summarize.py .

Тестирование сборки

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

streamlit run summarize.py

После запуска вышеуказанной команды в командной строке вы сможете увидеть приведенное ниже приложение в веб-браузере по умолчанию.

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

Также было бы интересно поэкспериментировать с гиперпараметрами и посмотреть, как отличаются выходные данные, когда гиперпараметры устанавливаются по умолчанию, и когда они изменяются. Еще один интересный параметр для проверки — who are you?. У него есть такие варианты, как «Второклассник», «Профессиональный специалист по данным», «Помощник по дому», «Пенсионер» и «Студент университета». Ответ от GPT-3.5 будет разным для всех типов, поскольку он попытается заставить вас понять в соответствии с вашим уровнем понимания какой-либо конкретной темы. Например, понимание того, как Земля вращается вокруг Солнца, будет отличаться на секунду- классник по сравнению со студентом университета.

Заключение

С появлением генеративного ИИ у нас появилось много возможностей для более простого решения отраслевых проблем. В этой статье я обсудил, как работает API OpenAI и как мы можем использовать его для создания простого приложения для суммирования текста с использованием пакетов Python и Streamlit.

Чтобы посмотреть готовый код, обратитесь к репозиторию github. Надеюсь, вам понравилась эта статья.

Подпишитесь на меня в LinkedIn