用Python开发一个自然语言处理模型,并用Flask进行部
截住到目前为止,我们已经开发了许多机器学习模型,对测试数据进行了数值预测,并测试了结果。实际上,生成预测只是机器学习项目的一部分,尽管它是我认为最重要的部分。今天我们来创建一个用于文档分类、垃圾过滤的自然语言处理模型,使用机器学习来检测垃圾短信文本消息。我们的ML系统工作流程如下:离线训练gt;将模型作为服务提供gt;在线预测。
1、通过垃圾邮件和非垃圾邮件训练离线分类器。
2、经过训练的模型被部署为服务用户的服务。
当我们开发机器学习模型时,我们需要考虑如何部署它,即如何使这个模型可供其他用户使用。Kaggle和数据科学训练营非常适合学习如何构建和优化模型,但他们并没有教会工程师如何将它们带给其他用户使用,建立模型与实际为人们提供产品和服务之间存在重大差异。
在本文中,我们将重点关注:构建垃圾短信分类的机器学习模型,然后使用Flask(用于构建Web应用程序的Python微框架)为模型创建API。此API允许用户通过HTTP请求利用预测功能。让我们开始吧!
构建ML模型
数据是标记为垃圾邮件或正常邮件的SMS消息的集合,可在此处找到。首先,我们将使用此数据集构建预测模型,以准确分类哪些文本是垃圾邮件。朴素贝叶斯分类器是一种流行的电子邮件过滤统计技术。他们通常使用词袋功能来识别垃圾邮件。因此,我们将使用NaiveBayes定理构建一个简单的消息分类器。importpandasaspd
importnumpyasnp
fromsklearn。featureextraction。textimportCountVectorizer
fromsklearn。modelselectionimporttraintestsplit
fromsklearn。naivebayesimportMultinomialNB
fromsklearn。metricsimportclassificationreport
dfpd。readcsv(spam。csv,encodinglatin1)
df。drop(〔Unnamed:2,Unnamed:3,Unnamed:4〕,axis1,inplaceTrue)
df〔label〕df〔class〕。map({ham:0,spam:1})
Xdf〔message〕
ydf〔label〕
cvCountVectorizer()
Xcv。fittransform(X)FittheData
Xtrain,Xtest,ytrain,ytesttraintestsplit(X,y,testsize0。33,randomstate42)
NaiveBayesClassifier
clfMultinomialNB()
clf。fit(Xtrain,ytrain)
clf。score(Xtest,ytest)
ypredclf。predict(Xtest)
print(classificationreport(ytest,ypred))
NaiveBayes分类器不仅易于实现,而且提供了非常好的性能。在训练模型之后,我们都希望有一种方法来保持模型以供将来使用而无需重新训练。为实现此目的,我们添加以下行以将我们的模型保存为。pkl文件供以后使用。fromsklearn。externalsimportjoblib
joblib。dump(clf,NBspammodel。pkl)
我们加载并使用保存的模型:NBspammodelopen(NBspammodel。pkl,rb)
clfjoblib。load(NBspammodel)
上述过程称为标准格式的持久模型,即模型以特定的开发语言的特定格式持久存储。下一步就是将模型在一个微服务中提供,该服务的公开端点用来接收来自客户端的请求。
将垃圾邮件分类器转换为Web应用程序
在上一节中准备好用于对SMS消息进行分类的代码之后,我们将开发一个Web应用程序,该应用程序由一个简单的Web页面组成,该页面具有允许我们输入消息的表单字段。在将消息提交给Web应用程序后,它将在新页面上呈现该消息,从而为我们提供是否为垃圾邮件的结果。
首先,我们为这个项目创建一个名为SMSMessageSpamDetector的文件夹,这是该文件夹中的目录树,接下来我们将解释每个文件。spam。csv
app。py
templates
home。html
result。html
static
style。css
子目录templates是Flask在Web浏览器中查找静态HTML文件的目录,在我们的例子中,我们有两个html文件:home。html和result。html。
app。py
app。py文件包含将由Python解释器执行以运行FlaskWeb应用程序的主代码,还包含用于对SMS消息进行分类的ML代码:fromflaskimportFlask,rendertemplate,urlfor,request
importpandasaspd
importpickle
fromsklearn。featureextraction。textimportCountVectorizer
fromsklearn。naivebayesimportMultinomialNB
fromsklearn。externalsimportjoblib
appFlask(name)
app。route()
defhome():
returnrendertemplate(home。html)
app。route(predict,methods〔POST〕)
defpredict():
dfpd。readcsv(spam。csv,encodinglatin1)
df。drop(〔Unnamed:2,Unnamed:3,Unnamed:4〕,axis1,inplaceTrue)
FeaturesandLabels
df〔label〕df〔class〕。map({ham:0,spam:1})
Xdf〔message〕
ydf〔label〕
ExtractFeatureWithCountVectorizer
cvCountVectorizer()
Xcv。fittransform(X)FittheData
fromsklearn。modelselectionimporttraintestsplit
Xtrain,Xtest,ytrain,ytesttraintestsplit(X,y,testsize0。33,randomstate42)
NaiveBayesClassifier
fromsklearn。naivebayesimportMultinomialNB
clfMultinomialNB()
clf。fit(Xtrain,ytrain)
clf。score(Xtest,ytest)
AlternativeUsageofSavedModel
joblib。dump(clf,NBspammodel。pkl)
NBspammodelopen(NBspammodel。pkl,rb)
clfjoblib。load(NBspammodel)
ifrequest。methodPOST:
messagerequest。form〔message〕
data〔message〕
vectcv。transform(data)。toarray()
mypredictionclf。predict(vect)
returnrendertemplate(result。html,predictionmyprediction)
ifnamemain:
app。run(debugTrue)
1、我们将应用程序作为单个模块运行,因此我们使用参数初始化了一个新的Flask实例,name是为了让Flask知道它可以在templates所在的同一目录中找到HTML模板文件夹()。
2、接下来,我们使用routedecorator(app。route())来指定可以触发home函数执行的URL。我们的home函数只是呈现home。htmlHTML文件,该文件位于templates文件夹中。
3、在predict函数内部,我们访问垃圾邮件数据集、预处理文本、进行预测,然后存储模型。我们访问用户输入的新消息,并使用我们的模型对其标签进行预测。
4、我们使用该POST方法将表单数据传输到邮件正文中的服务器。最后,通过debugTrue在app。run方法中设置参数,进一步激活Flask的调试器。
5、最后,我们使用run函数执行在服务器上的脚本文件,我们需要确保使用if语句namemain。
home。html
以下是home。html将呈现文本表单的文件的内容,用户可以在其中输入消息:lt;!DOCTYPEhtmlgt;
lt;htmlgt;
lt;headgt;
lt;titlegt;Homelt;titlegt;
lt;!lt;linkrelstylesheettypetextcsshref。。staticcssstyles。cssgt;gt;
lt;linkrelstylesheettypetextcsshref{{urlfor(static,filenamecssstyles。css)}}gt;
lt;headgt;
lt;bodygt;
lt;headergt;
lt;pclasscontainergt;
lt;pidbrandnamegt;
MachineLearningAppwithFlask
lt;pgt;
lt;h2gt;SpamDetectorForSMSMessageslt;h2gt;
lt;pgt;
lt;headergt;
lt;pclassmlcontainergt;
lt;formaction{{urlfor(predict)}}methodPOSTgt;
lt;pgt;EnterYourMessageHerelt;pgt;
lt;!lt;inputtypetextnamecommentgt;gt;
lt;textareanamemessagerows4cols50gt;lt;textareagt;
lt;inputtypesubmitclassbtninfovaluepredictgt;
lt;formgt;
lt;pgt;
lt;bodygt;
lt;htmlgt;
viewraw
style。css文件
在home。html的head部分,我们将加载styles。css文件,CSS文件是用于确定HTML文档的外观和风格的。styles。css必须保存在一个名为的子目录中static,这是Flask查找静态文件(如CSS)的默认目录。body{
font:15px1。5Arial,Helvetica,sansserif;
padding:0px;
backgroundcolor:f4f3f3;
}
。container{
width:100;
margin:auto;
overflow:hidden;
}
header{
background:03A9F4;35434a;
borderbottom:448AFF3pxsolid;
height:120px;
width:100;
paddingtop:30px;
}
。mainheader{
textalign:center;
backgroundcolor:blue;
height:100px;
width:100;
margin:0px;
}
brandname{
float:left;
fontsize:30px;
color:fff;
margin:10px;
}
headerh2{
textalign:center;
color:fff;
}
。btninfo{backgroundcolor:2196F3;
height:40px;
width:100px;}Blue
。btninfo:hover{background:0b7dda;}
。resultss{
borderradius:15px50px;
background:345fe4;
padding:20px;
width:200px;
height:150px;
}
style。css文件
result。html
我们创建一个result。html文件,该文件将通过函数rendertemplate(result。html,predictionmyprediction)返回呈现predict,我们在app。py脚本中定义该文件以显示用户通过文本字段提交的文本。result。html文件包含以下内容:lt;!DOCTYPEhtmlgt;
lt;htmlgt;
lt;headgt;
lt;titlegt;lt;titlegt;
lt;linkrelstylesheettypetextcsshref{{urlfor(static,filenamecssstyles。css)}}gt;
lt;headgt;
lt;bodygt;
lt;headergt;
lt;pclasscontainergt;
lt;pidbrandnamegt;
MLApp
lt;pgt;
lt;h2gt;SpamDetectorForSMSMessageslt;h2gt;
lt;pgt;
lt;headergt;
lt;pstylecolor:blue;fontsize:20;textalign:center;gt;lt;bgt;ResultsforCommentlt;bgt;lt;pgt;
lt;pclassresultsgt;
{ifprediction1}
lt;h2stylecolor:red;gt;Spamlt;h2gt;
{elifprediction0}
lt;h2stylecolor:blue;gt;NotaSpam(ItisaHam)lt;h2gt;
{endif}
lt;pgt;
lt;bodygt;
lt;htmlgt;
result。html
从result。htm文件我们可以看到一些代码使用通常在HTML文件中找不到的语法例如,{ifprediction1},{elifprediction0},{endif}这是jinja语法,它用于访问从HTML文件中请求返回的预测。
我们就要大功告成了!
完成上述所有操作后,你可以通过双击appy。py或从终端执行命令来开始运行API:cdSMSMessageSpamDetector
pythonapp。py
你应该得到以下输出:
现在你可以打开Web浏览器并导航到http:127。0。0。1:5000,你应该看到一个简单的网站,内容如下:
恭喜!我们现在以零成本的代价创建了端到端机器学习(NLP)应用程序。如果你回顾一下,其实整个过程根本不复杂。有点耐心和渴望学习的动力,任何人都可以做到。所有开源工具都使每件事都成为可能。
更重要的是,我们能够将我们对机器学习理论的知识扩展到有用和实用的Web应用程序!
完整的工作源代码可在此存储库中找到,祝你度过愉快的一周!
本文由阿里云云栖社区组织翻译。
文章原标题《developanlpmodelinpythondeployitwithflaskstepbystep》作者:SusanLi,加拿大数据科学家
作者:【方向】
表示看的远的四字词语词语是词和语的合称,包括单词、词组及整个词汇,文字组成语句文章的最小组词结构形式。下面小编收集了有关看的词语,供大家参考。一、表示看的词语两个字的:白眼、侧目、打量……
为什么有些人看不上vivo和OPPO手机?vivo和oppo手机主要是一些年轻人比较喜欢买的手机,尤其是一些爱美的女性的最爱!因为vivo手机刚开始做广告推广是音乐手机,它播放的音乐的音质做的比较好,音乐听起来效果挺好……
纺织业的跨境电商发展潜力巨大近年来我国外贸新业态新模式快速发展,其中跨境电商规模5年增长近10倍,尤其在疫情冲击下改变了消费者的行为模式和消费习惯,催生出全新的宅经济宅文化。疫情下,消费者长期居家,对家居……
对壁虎着陆过程的新认识可能导致更灵活的机器人的出现据外媒NewAtlas报道,当壁虎一头撞上树干等垂直表面时,它们能够停留在该表面上,而不是被弹开并落到地上。科学家们已经发现使它们具有这种能力的原因,并在一个小型机器人中复制了……
你是我的彼岸花作文有花名彼岸,其色艳如雪,千年自飘零,奈何空落尘。题记在盛世衰败,在衰败处盛放。且看八百里的黄沙里,有一朵花,在莫名开放,不枯不败,只无力绽放,人们称彼岸花。但人们不……
第二季度国内手机销量出炉,华为份额跌至倒数第一,小米仅排第三近日,著名数据分析机构Counterpoint发布了中国国内市场手机销量统计图。从数据图片中我们可以发现今年第二季度国内手机市场销量出现了巨大的变化,从前在国内市场处于遥遥领先……
手机厂商造芯火热,但再难有第二个澎湃S1造芯片不假,但野心并不大。一抄、二研究、三创造、四发明,这是富士康郭台铭所理解的成功途径。如果把这句话套用到手机市场中,那国产厂商们目前的重心已经转移到了创造和发明……
人民财评自动驾驶?辅助驾驶?人工智能不是营销话术来源:人民网观点频道原创稿日前,美一好公司创始人林文钦驾车发生交通事故不幸离世。8月14日,美一好官方微信公众号发布讣告表示,林文钦驾驶汽车时启用了车辆的自动驾驶功能(N……
地球为什么会转?谢谢你的邀请!宇宙的一切星球都是自然运动的,如果它停止了运动就会脱离轨道变成流星。地球为什么会转动?地球在宇宙中相当于一颗尘粒,宇宙万物生死和运动都离不开万有……
助听器功率大小怎么区别?助听器有小功率,中功率,大功率和超大功率几种:助听器耳背机按功率分M(95db),P(100db),SP(120db)。助听器耳内机普通功率分ITE(90db),ITC(85d……
太阳已燃烧46亿年,将来烧尽时,地球的命运会如何?作为一颗恒星,太阳有其寿命,这是许多人都了解的事实。我们的太阳从诞生时起,已经差不多燃烧了45亿年,在这45亿年中,它每分每秒都在挥霍着内部大量的氢气,这些氢原子在太阳内部极大……
中国23岁科学家申怡飞三项专利技术领先欧美,成果足以改变世界今日之责任,不在他人,而全在我少年,少年智则国智,少年富则国富,少年强则国强,少年胜于欧洲则国胜于欧洲,少年雄于地球则国雄于地球梁启超。如今我国经济发展,科技发达,许多尖……
初中作文爱唠叨的奶奶我的奶奶已经有六十三岁了,她个子中等,脸上布满了皱纹,头发短短的。她是个美丽的奶奶,也是个爱唠叨的奶奶,一唠叨起来就会没完没了的,使人总想用棉花把自己的耳朵给堵住,但我还是很喜……
70岁买老年机还是智能机?感谢您的阅读!70岁是买老年机还是买智能机?我觉得70岁的人,可以买老年机,也可以买智能机。主要是看70岁的老年朋友,对于手机的需求度。如果七十岁的老年朋友对于手机……
高中生感恩节作文600字感恩是泓泉水摘要:倘若不是感恩,绛珠仙子就不会用尽一生的眼泪去报答神瑛侍者的仙露,又哪来悲金悼玉的红楼一梦?而感恩,便是潇湘妃子的涟涟之泪hellip;hellip;感恩是泓泉水……
风萧兮,壮士祭品学网专稿未经允许不得转载踌躇满志却被谏,偏执孤行踽踽道。壮士一去兮,风萧萧兮中,繁花落尽,终不返。mdash;mdash;题记古往今来,能人志士皆命远多舛;奸佞当……
我的第一位老师在小时侯的记忆里,爸爸是不疼爱我的。那年,我七岁。在一年级的时候,我总能看到同学们的爸爸天天接送他们。儿子,在学校好好学习了吗?女儿,你一定要给爸爸争口气啊。放学后,总是……
描写我心中最敬佩的人作文600字每个人的心中都会有自己敬佩的人,他们可能做了什么能感动你的事迹。我也不例外,然而,我最敬佩的这个人,他并不是什么伟人,也不是什么如今当红的大明星,他只是一个朴朴素素,已经过了花……
有趣的拍卖会作文400字叮呤呤,叮呤呤随着上课铃的响起,我们期待已久的拍卖会开始了!今年的大富豪那可以说是堆积如山,数不胜数了,有戴文添‘陈亦菲、费荧当然也包括我了。我的拍卖品是一个玩具小熊,十……
接过风筝的手记叙文接过风筝的手,是那样温柔,把我们送去更遥远的天空。题记青春,有的时候觉得它很漫长,却似乎如光阴一般转瞬即逝。初二的我们,正值青春期,总像那高高飞翔的风筝一般,畅游天……
读安徒生童话有感我利用放假五。一时间又看了一遍《安徒生童话》,却得到了与以前不同的感受。也许,有些人会认为童话很幼稚,纯属虚构,但我却觉得童话里面也富有哲理。以前我看这本书,只看故事情节,却忽……
怎么看京东集团刘强东的巨额捐赠2022年2月2日,京东集团发布公告称,董事会主席兼首席执行官刘强东将向第三方慈善机构捐赠约6237万股B类普通股作慈善用途。但是,想看懂刘强东的这一举措,没有专业人士的……
我心中的那盏明灯初中生作文有一盏明灯,总在心头亮起,让我看到前进的方向;有一种情感,总在心头沉淀,让我刻骨铭心。邓老师,您就是我前进的明灯,您的教育与关怀,让我终生难忘与您初识的第一堂课,您挟着一……
私域流量就是资产公域私域,只是相对而言的要讲私域流量是什么,可以先看看与它相对应的公域流量。我们通俗意义上去理解的公域流量,就是在大平台(比如淘宝、京东、微博)上获得的流量。它就好像是公……