Рубрики
Без рубрики

Как использовать GPT-2 Openai с React и Flask

Введение В этом уроке мы построим приложение Flask & React с возможностями GPT-2 … Tagged MachineLearning, Python, React, WebDev.

Введение

В этом уроке мы построим приложение Flask & React с возможностями GPT-2. Мы пойдем шаг за шагом, настраив генератор “интерфейс” , затем мы построим сервер Flask и, наконец, на фронте React.

К концу этого урока, вот как должно выглядеть наше приложение:

Генерирование текста с GPT-2

Спасибо Pytorch-Transformers На самом деле это действительно легко играть с современными моделями NLP. Мы будем использовать рецепт, найденный в Pytorch-Transformers/Примеры/Run_Generation.py как шаблон для нашего приложения.

Во -первых, давайте установим наши зависимости

# Download the transformers package
pip3 install pytorch-transformers

# Get only the text generation file from the repository
wget https://raw.githubusercontent.com/huggingface/pytorch-transformers/master/examples/run_generation.py

Теперь, когда у нас есть сценарий поколения, нам нужно немного его изменить, чтобы он хорошо играл с нашим приложением Flask. Сам сценарий обычно как инструмент CLI с аргументами, подобным образом.

python3 ./run_generation.py \
    --model_type=gpt2 \
    --length=20 \
    --model_name_or_path=gpt2 \
    --promt="Hello world"

Но так как мы хотим вызвать функцию генерации текста из нашего приложения Flask, необходимы некоторые изменения. Сначала давайте переименовать main () к GENERATE_TEXT () и дать ему несколько аргументов. Эти аргументы точно такие же, как и те, которые мы обычно даем, если мы запускаем их непосредственно в оболочке. Вот как это выглядит

def generate_text(
    padding_text=None,
    model_type='gpt2',
    model_name_or_path='gpt2',
    prompt='',
    length=20,
    temperature=1.0,
    top_k=0,
    top_p=0.9,
    no_cuda=True,
    seed=42,
):
    # Set the seed manually
    np.random.seed(seed)
    torch.manual_seed(seed)
    if n_gpu > 0:
        torch.cuda.manual_seed_all(seed)

    # The rest of the old main() code
    # We just need to replace args.* with
    # the corresponding function's arguments
    ...

Вот и все! Теперь мы готовы разоблачить нашу функцию через API REST с колбой.

Создание приложения Flask

Наш сервер будет довольно минималистичным, с одной конечной точкой, которая обрабатывает Пост запрос. В теле мы предоставим Текст который будет служить “Приглашение” для GPT-2, чтобы генерировать вещи. Мы также дадим модель которые могут быть одной из 3 моделей GPT-2, а именно небольшие (117 м), средние (345 м) и большие (774 м).

from flask import Flask, abort, jsonify, request
from flask_cors import CORS, cross_origin

from .run_generation import generate_text

app = Flask(__name__)
cors = CORS(app)
app.config['CORS_HEADERS'] = 'Content-Type'


@app.route("/generate", methods=['POST'])
@cross_origin()
def get_gen():
    data = request.get_json()

    if 'text' not in data or len(data['text']) == 0 or 'model' not in data:
        abort(400)
    else:
        text = data['text']
        model = data['model']

        result = generate_text(
            model_type='gpt2',
            length=100,
            prompt=text,
            model_name_or_path=model
        )

        return jsonify({'result': result})

Фронтальная работа

Теперь, когда мы настроили наш сервер Flask, пришло время построить на фронт. У нас будет простая форма, которая принимает модель и Textarea, которая вводит Текст (быстрый). Я также использовал Материал-UI иметь причудливые элементы управления формой. Хорошо, давайте настроим наше приложение React

# Create the app
create-react-app gpt2-frontend
cd gpt2-frontend

# Add some dependencies
yarn add @material-ui/core node-sass axios

Мы также будем использовать React Hooks справиться с государством. Я беззастенчиво копировал API, связанный с API Cowerplate из Эта очень тщательная статья Анкет Теперь вот что наши App.js похоже

function App() {
  const [text, setText] = useState("");
  const [model, setModel] = useState('gpt2');
  const [generatedText, postGenerateText] = postGenerateTextEndpoint();

  const generateText = () => {
    postGenerateText({ text, model, userId: 1 });
  }

  return (
    

React GPT-2

{generatedText.pending &&
Please wait
} {generatedText.complete && (generatedText.error ?
Bad Request
:
{generatedText.data.result}
)}
); }

Возьмите код из GitHub

https://github.com/molamk/gpt2-react-flask

Оригинал: “https://dev.to/molamk/text-generation-with-openai-s-gpt-2-react-and-flask-27jk”