Если вы здесь, то, вероятно, уже читали Пост НЛП, который мы опубликовали ранее. В этом посте я покажу вам следующие шаги после создания обученной модели машинного обучения: развертывание с помощью приложения 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. Он работает с командой специалистов по анализу данных, чтобы помочь воплотить модели в жизнь. Его основные интересы - комплексная разработка и глубокое обучение.

Спасибо за чтение, пока пока!