Если вы здесь, то, вероятно, уже читали Пост НЛП, который мы опубликовали ранее. В этом посте я покажу вам следующие шаги после создания обученной модели машинного обучения: развертывание с помощью приложения Flask. Мы сделаем еще один шаг и покажем вам, как подключиться и сделать запрос к API, а также опубликовать прогнозы модели.
Что такое фляговое приложение и зачем оно нам?
Проще говоря, приложение Flask - это мост между наличием модели машинного обучения и ее использованием. Какой прок в обученной модели, если мы не можем реализовать то, для чего мы ее обучили, верно?
Используя эту штуку, называемую приложением-флягой, мы можем загрузить нашу обученную модель (в нашем случае наш файл .pkl) и использовать ее для составления прогнозов. Приложение Flask, файл с именем app.py, содержит нашу модель и имеет 2 маршрута: прогнозирование и оплата.
Прогнозируемый маршрут будет связываться с клиентом Gmail и получать запрос POST, содержащий текст электронной почты. Строка электронной почты попадет в нашу модель, и она вернет прогноз модели. Маршрут платежа будет передаваться через расширение браузера Gmail, которое будет передавать данные платежа в API. API, который мы будем использовать сегодня, называется FusionFabric.cloud Payment Initiation API. Для дальнейшего использования мы будем сокращать до FFDC Payment API.
Мы запускаем файл app.py с нашего импорта:
# imports from flask import Flask, request, jsonify import traceback import requests from flask_cors import CORS from NER import CRF_NER import authenticate import payments_api
Затем мы создаем экземпляр приложения:
# API definition app = Flask(__name__) CORS(app)
Определим наш первый маршрут:
@app.route('/predict', methods=['POST', 'GET'])
Создайте наши функции прогнозирования:
def predict(): if request.method == 'POST': if crf: try: json_ = request.json sentence = json_["email"] result = c.query(sentence) response = jsonify(result) response.headers.add('Access-Control-Allow-Origin', '*') response.headers.add('Access-Control-Allow-Headers', 'origin') return response except: return jsonify({'trace': traceback.format_exc()}) else: return jsonify({'error':'no model found'}) else: return jsonify({'error': 'no get request handler'})
Теперь мы определяем наш второй маршрут и функцию:
@app.route('/payment', methods=['POST']) def payment(): try: json_ = request.json a = authenticate.authenticate('config.csv') response,token = a.get_token() p = payments_api.payments_api(token,'POST') payload = p.sample_post payload['debtorAccountId']['name'] = json_['accountB'] payload['creditor']['name'] = json_['accountA'] payload['instructedAmount']['amount'] = json_['amount'] response = p.connect_endpoint(payload) returnResponse = jsonify(response.text) return returnResponse except: return jsonify({'error': 'there was an error'})
Теперь в конце app.py мы добавляем некоторые последние детали:
if __name__ == '__main__': port = 5000 model_filepath = 'crf_model_with_currency.pkl' c = CRF_NER(model_filepath) crf = c.load_model() app.run(port=port, debug=True, ssl_context='adhoc')
Когда выполняется app.py, мы видим, что он загружает нашу модель, поэтому мы можем использовать ее для прогнозирования.
Одним из способов, которым мы решили использовать прогнозы, было создание расширения для браузера, и мы создали его для Gmail (щелкните здесь, чтобы просмотреть учебное пособие, которое мы использовали!). Расширение браузера использует прогнозы модели для предварительного заполнения веб-формы путем анализа текста в черновике электронного письма и возвращает помеченные объекты (сумма, валюта, accountA, accountB).
Мы не автоматизировали этот процесс полностью - у пользователя есть возможность редактировать форму после того, как она была предварительно заполнена. Это связано с тем, что модель не всегда может делать правильный прогноз, в электронном письме могла быть опечатка и т. Д. Итак, после проверки правильности информации, после нажатия кнопки отправки расширение браузера клиента Gmail делает HTTP-запрос. к API инициирования платежа FFDC. Это то, что мы определили во втором маршруте и функции.
Во второй функции у нас есть строка кода:
p = payments_api.payments_api(token,'POST')
А в нашем импорте вы, возможно, заметили:
import payments_api
Это класс, который мы создали, чтобы помочь нам обработать запрос к конечной точке передачи кредита API. Здесь мы берем токен аутентификации и имеем функцию под названием connect_endpoint (), которая принимает полезную нагрузку, наши данные, которые мы хотим отправить в конечную точку.
class payments_api: def __init__(self,token,method,additional_headers={},params = None): self.token = token self.endpoint_type = method self.base_url = 'https://api.fusionfabric.cloud/payment/payment-initiation/v1/credit-transfer/international/initiate' self.additional_headers = additional_headers self.params = params self.sample_post = {}
Последний словарь мы оставили пустым для краткости, но вы можете найти образец содержимого этого словаря здесь внизу страницы, где написано Запросить образцы. А теперь вернемся к коду ..
У нас есть еще одна функция внутри этого класса:
def connect_endpoint(self, payload): self.url = self.base_url headers = { 'Authorization': 'Bearer ' + self.token, 'Content-Type' : 'application/json' } for key in self.additional_headers.keys(): headers[key] = self.additional_headers[key] stringified_payload = json.dumps(payload) response = requests.request(self.endpoint_type, self.url, params=self.params, data=stringified_payload,headers=headers) return response
Эта функция возвращает ответ HTTP вместе с кодом состояния, например 200 OK.
Этот Payments API - один из 11 API, доступных Finastra для платежей (полный список смотрите здесь!). Помимо платежей, мы также предлагаем API-интерфейсы для других областей финансов: розничного банкинга, корпоративного банкинга, кредитования, а также казначейства и рынков капитала.
FusionFabric.cloud (сокращенно FFDC) - открытая платформа Finastra для разработчиков финансовых решений. Используя эту платформу, разработчики могут создавать приложения, сотрудничать, использовать ресурсы и монетизировать приложения. Всего за несколько недель я и мои товарищи по команде смогли использовать эту платформу, чтобы полностью продемонстрировать доказательство концепции, которая помогает финансовым услугам - только представьте, насколько это может быть полезно для бизнес-решений производственного уровня. ! Ходят слухи, что новая волна открытого банковского дела и децентрализации произведет революцию в финансовой отрасли - я думаю, нам придется просто подождать и посмотреть.
В заключение я хотел бы познакомить вас с моими товарищами по команде! Мы втроем воплотили предложенную идею в экспериментальную концепцию и постепенно продвигались вверх - у нас даже есть версии, в которых мы размещаемся в Microsoft Azure вместо использования флеш-приложения.
Адам Либерман получил степень магистра математики и машинного обучения в Технологическом институте Джорджии. Он возглавляет группу по анализу данных в Finastra и с энтузиазмом относится к тому, чтобы проверять концептуальные проекты и превращать их в реальные производственные решения.
Джош Абельман - инженер-программист в инновационной лаборатории Finastra. Он работает с командой специалистов по анализу данных, чтобы помочь воплотить модели в жизнь. Его основные интересы - комплексная разработка и глубокое обучение.
Спасибо за чтение, пока пока!