建立& 部署 a Spam Classifier 应用程式 on Heroku Cloud in 10 minutes!

垃圾邮件还是不垃圾邮件?

Building a Spam Message Classifier 和 making an 应用程式lication of it deployed on Heroku

今天,我们将构建一个整洁的垃圾邮件分类器,这是一种基于自然语言处理的模型。然后,我们将构建一个flask应用程序,该应用程序将呈现基于HTML的主页和预测页。用户将在主页中输入文本,应用程序将在预测页面上预测它是垃圾邮件还是非垃圾邮件。该Flask API将部署在Heroku上的公共主机中。 Heroku在这里是显而易见的选择’超级快捷,简单。我是否提到了它是免费的?是的!首先点击下面的按钮,签出并亲自使用该应用程序,以了解您的需求’ll be building.

所以现在你’ve seen it, let’s dive right in!


该模型

第一步将是建立我们的NLP模型,该模型吸收用户的自然文本并预测它是垃圾邮件还是非垃圾邮件(不是垃圾邮件)。我们将在几段python代码中做到这一点。完整的代码和数据集可在我的 Github。首先,让’s导入所需的所有库。

import pandas as pd  #Pandas for data pre-processing

import pickle #Pickle for pickling (saving) the model 

from sklearn.feature_extraction.text import CountVectorizer #To Vectorize the textual data 

from sklearn.naive_bayes import MultinomialNB #The algorithm for prediction 

from sklearn.externals import joblib #Alternative Usage of Saved Model 

from sklearn.model_selection import train_test_split #Validation split 

接下来,我们需要加载数据并将其拆分为文本数据(X)和标签(y)。

df = pd.read_csv("spam.csv", encoding="latin-1")

df.drop(['Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4'], axis=1, inplace=True) #Some garbage features that need to be removed

# Text 和 Labels

df['label'] = df['class'].map({'ham': 0, 'spam': 1}) 

X = df['message']

y = df['label'] 

现在,我们需要使用Count Vectorizer对文本数据进行矢量化处理(将文本转换为数字形式)。然后只需拆分训练和测试数据。由于我们的目标是快速构建并部署模型,因此无需考虑进一步的文本预处理。您可以自己尝试使用文本清理部分来提高性能。

AI Time Journal资源
您正在学习数据科学吗?

Check out what 图书 帮助20多个成功的数据科学家成长。

# Extract Feature With CountVectorizer 

cv = CountVectorizer() 

X = cv.fit_transform(X) # Fit the Data 

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42) 

Once this is done, we just need to fit the model 和 save it as a pickle file which will later be loaded in the flask 应用程式.

#Naive Bayes Classifier  

clf = MultinomialNB() 
clf.fit(X_train,y_train) 
print(clf.score(X_test,y_test)) 

#Alternative Usage of Saved Model 

joblib.dump(clf, 'NB_spam_model.pkl') 
joblib.dump(cv, 'cv.pkl') 

注意这里我们已经保存了朴素贝叶斯’模型和计数向量化器。这是因为对于您的文本输入(将取自用户),必须使用与训练模型时相同的Count Vectorizer参数进行矢量化。好的,现在我们有了模型和矢量化器。 

Next we need to build the flask 应用程式 which will connect the 自然语言处理 model we just built to our browser 和 later host it on cloud.


烧瓶应用

The flask 应用程式lication will 路线 用户访问该应用程序的URL后,立即将其转到主页。稍后,当用户输入文本并单击“预测”按钮时,它将重定向到预测页面并呈现输出。让’s see how it’s done.

我们需要导入flask和其他一些功能。如果不这样做,则需要通过简单的pip install命令安装flask’t already have it.

from flask import 烧瓶, render_template, 请求 

这里, 烧瓶 will be used to define the 应用程式 which we are using. Then render_template 将呈现主页(home.html)和预测页面(result.html)。和 请求 will be used to retrieve the text input which will be sent to the flask 应用程式 via the 的HTMLPost method from the 的HTMLpage.

Now we need to define the flask 应用程式 和 its default routing to the home page, which is home.html. We will define a function will do nothing but render the home page when the 应用程式lication URL is called.

应用程式 = 烧瓶(__name__) 

@app.route('/') #Routes the 应用程式 to below task when the URL is called 

def home(): 

    return render_template('home.html') 

现在是应用程序的主要部分,即预测。我们需要定义一个函数来打开和加载NLP模型和Count Vectorizer泡菜文件。然后,它检索通过POST方法发送给它的文本输入。然后,使用相同的矢量化程序对检索到的文本输入进行矢量化处理,并转储到我们的模型中以进行预测。那’是的!现在,我们只需要将此预测结果重新呈现在预测页面上,我们’re done.

@app.route('/predict',methods=['POST']) 

def predict_fun(): 

    NB_spam_model = open('NB_spam_model.pkl','rb') 
    clf = joblib.load(NB_spam_model)
	
    cv_model = open('cv.pkl', 'rb')
    cv = joblib.load(cv_model)	
	
    if 请求.method == 'POST': 

        message = 请求.form['message'] 
        data = [message] 
        vect = cv.transform(data).toarray()
        my_prediction = clf.predict(vect) 

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

#Calling the main function 和 running the flask 应用程式 

if __name__ == '__main__':
    应用程式.run(debug=True) 

Our model 和 flask 应用程式s are done. We now just need to deploy these files on Heroku. 


部署ment

To deploy the 应用程式lication on Heroku you need to push all the files on your Github which will be linked to Heroku. You will need to upload following files to your repository :

  1. 自然语言处理模型泡菜
  2. 计数矢量泡菜
  3. 烧瓶 应用程式
  4. 的HTML& CSS files 
  5. 需求文件
  6. 程序文件

好的,所以您可能想知道什么要求和procfile文件。需求是一个文本文件,其中包含所有依赖项(如熊猫,flask等库)以及应用程序按预期运行所需的版本。 Heroku将在部署应用程序之前安装所有这些依赖项。 程序文件是一个配置文件,看起来像:

web: gunicorn 应用程式1:app

这里‘app1’是我的烧瓶文件名‘app1.py’ 和 ‘app’ is the flask 应用程式 we defined earlier in the code above. This just tells Heroku to look for the flask file named 应用程式1 和 in it the flask 应用程式 defined as ‘app’.

一旦您’re done pushing all the files to a new 的github repository, you will need to create an 应用程式 on Heroku 和 connect your 的github repository to it. To do this, just go to Heroku. 如果您已经创建了一个帐户’t already 和 go to ‘create new 应用程式’.

Create new 应用程式

In the newly created 应用程式, you need to connect to the 的github repository which has the code. Search for the 的github repository name in the search box 和 hit the ‘Connect’ button.

连接 Github repository to Heroku
Github已连接

连接后,您只需点击‘Deploy’ button 和 you’重做! Heroku将首先检查需求文件并安装所有依赖项,然后将flask应用程序部署到公共主机。将生成一个URL,它是您的应用程序的URL。只需复制它并在浏览器中打开它,瞧!您’re done.

Hit 部署 !

That was it for this tutorial. Hope you got the 应用程式 running 和 got decent results! 

If you got this far 和 have the 应用程式 ready, give yourself a pat on the back. You deserve it!

所以我们在这里使用了Heroku Cloud’s so quick 和 easy to setup. However I encourage you to try deploying the 应用程式 on other cloud platforms as well –如AWS EC2,Google Cloud Platform和Azure。

随时从我的网站获取源代码 的github 并向我提出任何疑问和建议 领英.

下次再见,干杯! 

Image Credits
Featured Image: Unsplash
In-Post Photos: Photos taken 通过 author, June 2020

编辑助理

茶yan 是一位注重细节的创意数据科学家。他是每天的学习者和博客作者,非常渴望分享知识并支持数据科学社区。与他联系 领英 联系并不要’别忘了检查他的 博客。

数据科学|机器学习|写博客– Author @ 中

关于Chayan Kathuria

茶yan 是一位注重细节的创意数据科学家。他是每天的学习者和博客作者,非常渴望分享知识并支持数据科学社区。与他联系 领英 联系并不要'别忘了检查他的 博客。 数据科学|机器学习|写博客- Author @ 中

查看Chayan Kathuria发表的所有帖子→