- Основы машинного обучения
- Основы Python
- Основы фляги
- Угловые основы
- Сохранение и загрузка модели машинного обучения — Ссылка
Что такое вывод?
- После обучения модели необходимо использовать обученную модель путем передачи соответствующих входных данных для получения выходных данных. Результатом может быть классификация, прогнозирование, кластеризация и т. д. Этот процесс использования модели для создания выходных данных называется выводом.
- По сути, за кулисами, на основе данных обучения, модель разработала математическое уравнение. Где, когда предоставляются входные данные, это уравнение/алгоритм работает с входными данными на основе параметров, полученных из обучающих данных, для получения выходных данных.
- Другими словами,
Вывод машинного обучения — это процесс ввода точек данных в модель машинного обучения для расчета выходных данных, таких как одна числовая оценка. Этот процесс также называется эксплуатацией модели машинного обучения или запуском модели машинного обучения в производство. — Облачная документация Google
Проблемы при построении логических выводов
- Как вызвать эту обученную модель из другого приложения? Предположим, у нас есть пользовательский интерфейс (Angular, React и т. д.), где мы получаем входные данные от пользователей, и нам нужно передать эти входные данные обученной модели. Как мы можем этого добиться?
- Как мы индустриализируем или производим обученную модель?
Решение
- Чтобы сделать модель доступной для других приложений, мы можем использовать API. В общем, API (интерфейс прикладного программирования) — это метод, с помощью которого два или более приложений могут взаимодействовать друг с другом.
Проще говоря, API — это (гипотетический) контракт между двумя программами, в котором говорится, что если пользовательское программное обеспечение предоставляет входные данные в заранее определенном формате, последнее расширяет свои функциональные возможности и предоставляет результат пользовательскому программному обеспечению. — Аналитика Видья
- Несколько фреймворков могут помочь нам в реализации API, таких как Flask, Django и т. д. Эти фреймворки могут предоставлять API, где открытые API получают входные данные в желаемом формате, обрабатывают входные данные, передавая их обученной модели, и возвращают ответ.
Сквозная реализация — пример
- Давайте создадим простую модель машинного обучения и воспользуемся ею из внешнего интерфейса. Модель машинного обучения будет разработана с использованием Python. Для разработки API мы будем использовать фреймворк Flask.
- Пользовательский интерфейс интерфейса разработан с использованием Angular, где мы будем получать входные данные от пользователя. Входные данные из пользовательского интерфейса будут передаваться во фреймворк Flask через API.
- Платформа Flask будет обрабатывать входные данные, применяя обученную модель и возвращая ответ. Возвращенный ответ будет получен и показан клиенту приложением angular.
Модель машинного обучения
- В этом блоге мы разработаем простую модель определения надежности пароля, которая может определить надежность данного пароля.
- Хотя есть простые проверки, которые могут быть реализованы для определения надежности пароля, такие как наличие буквенно-цифровых символов, специальных символов и т. д. без использования моделей. Мы разработаем модель на основе НЛП, которая будет понимать комбинацию букв, цифр и специальных символов, используемых в пароле.
- Это достигается путем обучения модели с использованием размеченного набора данных, который содержит разные пароли и их надежность. Во время обучения модель изучит и поймет закономерности или комбинации, а затем на их основе классифицирует свою силу.
- Используемый здесь набор данных доступен по этой ссылке. Весь репозиторий кода для этого блога можно найти здесь. Более подробную информацию о моделировании можно найти здесь.
Шаги для обучения
- Импортируйте необходимые пакеты. Модель реализована с помощью методов TfidfVectorizer и RandomForestClassifier из пакета sklearn. Обязательно установите пакет sklearn с помощью команды pip install sklearn.
import pandas as pd import numpy as np from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier import getpass import pickle
- Загрузить и просмотреть данные. Надежность пароля может принимать три значения: 0 — надежность пароля «слабая», 1 — надежность пароля «средняя» и 2 — надежность пароля «сильная».
data = pd.read_csv("../assets/train_data/training.csv", error_bad_lines=False) print(data.head())
- Предварительно обработайте данные. Здесь есть только два шага предварительной обработки: отбрасывание нулевых значений и сопоставление надежности пароля с числом (чтобы сделать его пригодным для моделирования).
data = data.dropna() data["strength"] = data["strength"].map({0: "Weak", 1: "Medium", 2: "Strong"})
- Векторизация и разделение данных. Пароль обучающих данных преобразуется с помощью TfidfVectorizer. Мы можем заметить, что 5% обучающих данных используются для тестирования.
def word(password): character=[] for i in password: character.append(i) return character x = np.array(data["password"]) y = np.array(data["strength"]) tdif = TfidfVectorizer(tokenizer=word) x = tdif.fit_transform(x) xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.05, random_state=42)
- Обучение модели RandomForestClassifier. И после подгонки модели мы можем получить среднюю точность ~ 95% на тестовых данных.
model = RandomForestClassifier() model.fit(xtrain, ytrain) print(model.score(xtest, ytest))
- Сохраните модель как рассол. Подробнее о травлении и рассоле смотрите в этом блоге — Ссылка.
pickle.dump(tdif, open("../assets/pickled/vectorizer.pkl", "wb")) pickle.dump(model, open('../assets/pickled/model.pkl', 'wb'))
Флэш-сервер
Сервер Flask определяется как серверное программное обеспечение, способное выполнять HTTP-запросы в общедоступной всемирной сети, частной локальной сети и частных глобальных сетях и состоящее из одного или нескольких компьютеров, объединенных вместе и специально работающих для запуска программного приложения во всемирной сети. — ЭДУКБА
- Кодовую базу для flask-сервера можно найти здесь — Ссылка
Шаги по настройке сервера Flask
- Установите Flask с помощью команды pip install Flask.
- Создайте файл app.py и следующий код
from flask import Flask, render_template, jsonify, request, json import os app = Flask(__name__) @app.route('/pingServer', methods=['GET']) def pingServer(): resp = { "messId": "S", "messText": "Success" } return jsonify(resp) if __name__ == "__main__": port = int(os.environ.get('PORT', 5011)) app.run(debug=True, host='0.0.0.0', port=port)
- Запустите приложение с помощью команды python app.py. Перейдите по URL-адресу http://localhost:5011/pingServer. Вы должны получить результат, аналогичный показанному ниже.
- Добавьте нашу обученную модель в качестве API, внеся несколько дополнений в код. Первый шаг — загрузить подобранный векторизатор и обученную модель из файла рассола.
if __name__ == "__main__": # Load Pickled Objects pickled_tfidf = pickle.load(open('./assets/pickled/vectorizer.pkl', 'rb')) pickled_model = pickle.load(open('./assets/pickled/model.pkl', 'rb')) port = int(os.environ.get('PORT', 5011)) app.run(debug=True, host='0.0.0.0', port=port)
- Добавьте API, чтобы получать входные данные и обрабатывать их с помощью обученной модели.
@app.route('/validatePass', methods=['POST']) @cross_origin() def validatePass(): body_inp = json.loads(request.data) data = pickled_tfidf.transform([body_inp['password']]).toarray() output = pickled_model.predict(data) resp = { "messId": "S", "messText": "Success", "strength": output[0] } return jsonify(resp) def word(password): character = [] for i in password: character.append(i) return character
- Проверьте этот почтовый запрос в почтальоне, как показано ниже. Входные данные передаются через тело. Ответ о силе для данного пароля можно найти в ключе ответа «сила».
Заключительные комментарии — сервер Flask
- Сервер Flask работает на порту 5011 с двумя конечными точками API. Одной конечной точкой является проверка соединения. Другая конечная точка используется для передачи входных данных для запуска модели и возврата ответа.
Угловой интерфейс
Angular — это JavaScript-фреймворк с открытым исходным кодом, написанный на TypeScript. Google поддерживает его, и его основная цель — разработка одностраничных приложений. Как фреймворк Angular имеет явные преимущества, а также предоставляет стандартную структуру для работы разработчиков. — Просто учиться
- Кодовую базу приложения angular можно найти здесь — Ссылка
Шаги по настройке приложения Angular
- Установите Angular CLI с помощью команды npm install -g @angular/cli
- Создайте новый проект angular с помощью команды ng new client.
- В папке клиента будет создано несколько файлов. Мы обсудим только важные файлы.
- Создайте сервисный слой в Angular с помощью команды ng generate service common-service
- Добавьте код для доступа к Flask API на сервисном уровне angular в созданный файл common.service.ts. Обратите внимание, что мы используем тот же порт, на котором работает Flask. Точно так же мы используем конечные точки, которые мы подготовили в Flask.
import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { HttpClient } from '@angular/common/http'; @Injectable({ providedIn: 'root', }) export class CommonService { constructor(private http: HttpClient) {} pingServer(): Observable<any> { return this.http.get(`http://localhost:5011/pingServer`); } checkPasswordStrenth(body): Observable<any> { return this.http.post(`http://localhost:5011/validatePass`, body) } }
- Перейдите к app.component.html и добавьте код, аналогичный приведенному ниже.
<h1>Password Strength Check Using ML</h1> <br /> <button (click)="pingServer()">Ping Server To Test Connection</button> <br /><br /><br /><br /> <input type="text" [(ngModel)]="password" placeholder="Enter password..." /> <button type="button" (click)="checkPasswordStrength()" style="margin-left: 0.5%" > Check Password Strength </button> <router-outlet></router-outlet>
- Перейдите к app.component.ts и добавьте часть кода контроллера, которая получает входные данные из файла HTML и вызывает API для получения надежности пароля. Как только ответ получен, он отображается пользователю в виде предупреждения.
pingServer() { const pingServerRequest = this.commonService.pingServer(); forkJoin([pingServerRequest]).subscribe((results) => { console.log(results); if (results[0]?.messId === 'S') { window.alert(results[0]['messText']); } else { window.alert('Failure to establish connection to server...'); } }); } checkPasswordStrength() { if (this.password == '') { window.alert('Please enter a password to check.'); } else { let body = { password: this.password, }; const checkPassStrengthRequest = this.commonService.checkPasswordStrenth(body); forkJoin([checkPassStrengthRequest]).subscribe((results) => { console.log(results); if (results[0]?.messId === 'S') { window.alert('Your password strength is ' + results[0]['strength']); } else { window.alert('Failure to establish connection to server...'); } }); } }
- Запустите приложение с помощью команды npm start или ng serve. Перейдите по URL-адресу http://localhost:4200. Вы должны увидеть вывод, аналогичный приведенному ниже.
- Теперь нажмите кнопку Ping Server To Test Connection, и вы сможете получить предупреждение, как показано ниже. Это означает, что приложение Angular может успешно подключиться к внутреннему серверу Flask.
- Чтобы проверить надежность пароля, введите пароль в поле ввода и нажмите «Проверить надежность пароля». Надежность пароля будет показана в окне предупреждения, как показано ниже.
Заключительные комментарии — приложение Angular
- Приложение angular успешно работает на порту 4200. Оно может успешно взаимодействовать с сервером Flask. Мы можем получить надежность пароля из обученной модели с помощью API, и она успешно отображается клиенту в виде предупреждения.
Заключение
- Мы поняли, как мы можем получить выводы из модели машинного обучения. И как его можно индустриализировать для потребления из других приложений.
- Мы также разработали простое комплексное приложение от внешнего интерфейса до внутреннего. Мы использовали Python для разработки модели классификации надежности пароля. Для API мы использовали фреймворк Flask. И для пользовательского интерфейса мы использовали Angular.
- Таким образом, мы успешно реализовали UI, из которого пользователь может отправить запрос с входными данными. Сервер Flask, в свою очередь, может успешно получить запрос и обработать его с использованием модели. Наконец, сервер Flask возвращает ответ, который приложение Angular получает и показывает пользователю.
Рекомендации
- https://cloud.google.com/bigquery-ml/docs/reference/standard-sql/bigqueryml-syntax-inference-overview#:~:text=Machine%20learning%20inference%20is%20the,machine%20learning% 20модель%20в%20производство.%E2%80%9D
- https://en.wikipedia.org/wiki/API
- https://thecleverprogrammer.com/2022/08/22/проверка надежности пароля-с-машинным обучением/
- https://www.educba.com/flask-server/
- https://github.com/PeterSharun/ML_Password_Strength-Flask-Angular-Kubernetes
- https://medium.com/@petersharun97.m/saving-and-loading-a-trained-machine-learning-model-for-inferencing-8c964e118f9a