Введение
В этом уроке мы построим приложение 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 ({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”