用Python开发一个自然言语处理模型,并用Flask停止部署

图灵汇官网

开发自然语言处理模型并用Flask部署

到目前为止,我们已经开发了许多机器学习模型,对测试数据进行了数值预测,并测试了结果。实际上,生成预测只是机器学习项目的一部分,但对我来说,这是最重要的一部分。今天,我们将创建一个用于文档分类和垃圾短信过滤的自然语言处理模型,利用机器学习技术识别垃圾短信。

我们的机器学习系统工作流程如下:离线训练 -> 将模型作为服务提供 -> 在线预测。

  1. 通过垃圾邮件和非垃圾邮件数据训练分类器。
  2. 训练好的模型被部署为可供用户使用的在线服务。

构建机器学习模型

数据集包括标记为垃圾邮件或正常邮件的短信集合。我们将使用该数据集构建预测模型,以准确分类哪些短信是垃圾邮件。朴素贝叶斯分类器是一种常用的统计技术,通常使用词袋模型来识别垃圾邮件。因此,我们将使用朴素贝叶斯定理构建一个简单的短信分类器。

```python import pandas as pd import numpy as np from sklearn.featureextraction.text import CountVectorizer from sklearn.modelselection import traintestsplit from sklearn.naivebayes import MultinomialNB from sklearn.metrics import classificationreport

df = pd.read_csv('spam.csv', encoding="latin-1") df.drop(['Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4'], axis=1, inplace=True) df['label'] = df['class'].map({'ham': 0, 'spam': 1}) X = df['message'] y = df['label']

cv = CountVectorizer() X = cv.fit_transform(X)

Xtrain, Xtest, ytrain, ytest = traintestsplit(X, y, testsize=0.33, randomstate=42)

clf = MultinomialNB() clf.fit(Xtrain, ytrain) clf.score(Xtest, ytest)

ypred = clf.predict(Xtest) print(classificationreport(ytest, y_pred)) ```

训练完成后,我们需要一种方法来保存模型,以便在未来使用而无需重新训练。为此,我们使用joblib库保存模型为.pkl文件。

```python from sklearn.externals import joblib

joblib.dump(clf, 'NBspammodel.pkl') ```

加载并使用保存的模型:

python NB_spam_model = open('NB_spam_model.pkl', 'rb') clf = joblib.load(NB_spam_model)

将垃圾邮件分类器转换为Web应用

在上一部分中,我们已经准备好了一个用于分类短信的代码。现在,我们将开发一个Web应用,该应用由一个简单的网页组成,包含一个允许用户输入短信的表单。提交短信后,该应用会在新页面上显示短信,并给出是否为垃圾短信的结果。

首先,我们创建一个名为SMS-Message-Spam-Detector的文件夹。该文件夹结构如下:

  • spam.csv
  • app.py
  • templates/
    • home.html
    • result.html
  • static/
    • style.css

app.py 文件

app.py 文件包含了运行Flask Web应用的主代码,以及用于分类短信的机器学习代码。

```python from flask import Flask, rendertemplate, urlfor, request import pandas as pd import pickle from sklearn.featureextraction.text import CountVectorizer from sklearn.naivebayes import MultinomialNB

app = Flask(name)

@app.route('/') def home(): return render_template('home.html')

@app.route('/predict', methods=['POST']) def predict(): df = pd.read_csv("spam.csv", encoding="latin-1") df.drop(['Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4'], axis=1, inplace=True) df['label'] = df['class'].map({'ham': 0, 'spam': 1}) X = df['message'] y = df['label']

cv = CountVectorizer()
X = cv.fit_transform(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

clf = MultinomialNB()
clf.fit(X_train, y_train)

if request.method == 'POST':
    message = request.form['message']
    data = [message]
    vect = cv.transform(data).toarray()
    my_prediction = clf.predict(vect)

return render_template('result.html', prediction=my_prediction)

if name == 'main': app.run(debug=True) ```

home.html 文件

home.html 文件包含一个表单,用户可以在其中输入短信。

```html

Home
Machine Learning App with Flask

Spam Detector For SMS Messages

Enter Your Message Here


```

style.css 文件

style.css 文件定义了网页的样式。

```css body { font: 15px/1.5 Arial, Helvetica, sans-serif; padding: 0px; background-color: #f4f3f3; }

.container { width: 100%; margin: auto; overflow: hidden; }

header { background: #03A9F4; border-bottom: #448AFF 3px solid; height: 120px; width: 100%; padding-top: 30px; }

.main-header { text-align: center; background-color: blue; height: 100px; width: 100%; margin: 0px; }

brandname {

float: left;
font-size: 30px;
color: #fff;
margin: 10px;

}

header h2 { text-align: center; color: #fff; }

.btn-info { background-color: #2196F3; height: 40px; width: 100px; }

.btn-info:hover { background: #0b7dda; } ```

result.html 文件

result.html 文件显示用户提交短信的分类结果。

```html

ML App

Spam Detector For SMS Messages

Results for Comment

{% if prediction == 1 %}

Spam

{% elif prediction == 0 %}

Not a Spam (It is a Ham)

{% endif %}

```

通过上述步骤,我们成功创建了一个完整的端到端机器学习应用。你可以通过双击app.py或在终端中运行python app.py启动API。打开浏览器并导航到http://127.0.0.1:5000/,即可看到一个简单的网站,用于检测短信是否为垃圾短信。

本文由阿里云云栖社区组织翻译。

文章原标题《开发一个NLP模型并在Flask中部署——分步指南》

作者:Susan Li,加拿大数据科学家

本文来源: 图灵汇 文章作者: 石娜娜