范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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

  截住到目前为止,我们已经开发了许多机器学习模型,对测试数据进行了数值预测,并测试了结果。实际上,生成预测只是机器学习项目的一部分,尽管它是我认为最重要的部分。今天我们来创建一个用于文档分类、垃圾过滤的自然语言处理模型,使用机器学习来检测垃圾短信文本消息。我们的ML系统工作流程如下:离线训练->将模型作为服务提供->在线预测。
  1、通过垃圾邮件和非垃圾邮件训练离线分类器。
  2、经过训练的模型被部署为服务用户的服务。
  当我们开发机器学习模型时,我们需要考虑如何部署它,即如何使这个模型可供其他用户使用。Kaggle和数据科学训练营非常适合学习如何构建和优化模型,但他们并没有教会工程师如何将它们带给其他用户使用,建立模型与实际为人们提供产品和服务之间存在重大差异。
  在本文中,我们将重点关注:构建垃圾短信分类的机器学习模型,然后使用Flask(用于构建Web应用程序的Python微框架)为模型创建API。此API允许用户通过HTTP请求利用预测功能。让我们开始吧!
  构建ML模型
  数据是标记为垃圾邮件或正常邮件的SMS消息的集合,可在此处找到。首先,我们将使用此数据集构建预测模型,以准确分类哪些文本是垃圾邮件。朴素贝叶斯分类器是一种流行的电子邮件过滤统计技术。他们通常使用词袋功能来识别垃圾邮件。因此,我们将使用Naive Bayes定理构建一个简单的消息分类器。import pandas as pd
  import numpy as np
  from sklearn.feature_extraction.text import CountVectorizer
  from sklearn.model_selection import train_test_split
  from sklearn.naive_bayes import MultinomialNB
  from sklearn.metrics import classification_report
  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) # Fit the Data
  X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
  #Naive Bayes Classifier
  clf = MultinomialNB()
  clf.fit(X_train,y_train)
  clf.score(X_test,y_test)
  y_pred = clf.predict(X_test)
  print(classification_report(y_test, y_pred))
  Naive Bayes分类器不仅易于实现,而且提供了非常好的性能。在训练模型之后,我们都希望有一种方法来保持模型以供将来使用而无需重新训练。为实现此目的,我们添加以下行以将我们的模型保存为.pkl文件供以后使用。from sklearn.externals import joblib
  joblib.dump(clf, "NB_spam_model.pkl")
  我们加载并使用保存的模型:NB_spam_model = open("NB_spam_model.pkl","rb")
  clf = joblib.load(NB_spam_model)
  上述过程称为"标准格式的持久模型",即模型以特定的开发语言的特定格式持久存储。下一步就是将模型在一个微服务中提供,该服务的公开端点用来接收来自客户端的请求。
  将垃圾邮件分类器转换为Web应用程序
  在上一节中准备好用于对SMS消息进行分类的代码之后,我们将开发一个Web应用程序,该应用程序由一个简单的Web页面组成,该页面具有允许我们输入消息的表单字段。在将消息提交给Web应用程序后,它将在新页面上呈现该消息,从而为我们提供是否为垃圾邮件的结果。
  首先,我们为这个项目创建一个名为SMS-Message-Spam-Detector 的文件夹,这是该文件夹中的目录树,接下来我们将解释每个文件。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解释器执行以运行Flask Web应用程序的主代码,还包含用于对SMS消息进行分类的ML代码:from flask import Flask,render_template,url_for,request
  import pandas as pd
  import pickle
  from sklearn.feature_extraction.text import CountVectorizer
  from sklearn.naive_bayes import MultinomialNB
  from sklearn.externals import joblib
  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)
  # Features and Labels
  df["label"] = df["class"].map({"ham": 0, "spam": 1})
  X = df["message"]
  y = df["label"]
  # Extract Feature With CountVectorizer
  cv = CountVectorizer()
  X = cv.fit_transform(X) # Fit the Data
  from sklearn.model_selection import train_test_split
  X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
  #Naive Bayes Classifier
  from sklearn.naive_bayes import MultinomialNB
  clf = MultinomialNB()
  clf.fit(X_train,y_train)
  clf.score(X_test,y_test)
  #Alternative Usage of Saved Model
  # joblib.dump(clf, "NB_spam_model.pkl")
  # NB_spam_model = open("NB_spam_model.pkl","rb")
  # clf = joblib.load(NB_spam_model)
  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)
  1、我们将应用程序作为单个模块运行,因此我们使用参数初始化了一个新的Flask实例,__name__是为了让Flask知道它可以在templates所在的同一目录中找到HTML模板文件夹()。
  2、接下来,我们使用route decorator(@app.route("/"))来指定可以触发home 函数执行的URL 。我们的home 函数只是呈现home.htmlHTML文件,该文件位于templates文件夹中。
  3、在predict函数内部,我们访问垃圾邮件数据集、预处理文本、进行预测,然后存储模型。我们访问用户输入的新消息,并使用我们的模型对其标签进行预测。
  4、我们使用该POST方法将表单数据传输到邮件正文中的服务器。最后,通过debug=True在app.run方法中设置参数,进一步激活Flask的调试器。
  5、最后,我们使用run函数执行在服务器上的脚本文件,我们需要确保使用if语句 __name__ == "__main__"。
  home.html
  以下是home.html将呈现文本表单的文件的内容,用户可以在其中输入消息:<!DOCTYPE html>
  <html>
  <head>
  <title>Home</title>
  <!-- <link rel="stylesheet" type="text/css" href="../static/css/styles.css"> -->
  <link rel="stylesheet" type="text/css" href="{{ url_for("static", filename="css/styles.css") }}">
  </head>
  <body>
  <header>
  <p class="container">
  <p id="brandname">
  Machine Learning App with Flask
  </p>
  <h2>Spam Detector For SMS Messages</h2>
  </p>
  </header>
  <p class="ml-container">
  <form action="{{ url_for("predict")}}" method="POST">
  <p>Enter Your Message Here</p>
  <!-- <input type="text" name="comment"/> -->
  <textarea name="message" rows="4" cols="50"></textarea>
  <input type="submit" class="btn-info" value="predict">
  </form>
  </p>
  </body>
  </html>
  view raw
  style.css文件
  在home.html的head部分,我们将加载styles.css文件,CSS文件是用于确定HTML文档的外观和风格的。styles.css必须保存在一个名为的子目录中static,这是Flask查找静态文件(如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;#35434a;
  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;} /* Blue */
  .btn-info:hover {background: #0b7dda;}
  .resultss{
  border-radius: 15px 50px;
  background: #345fe4;
  padding: 20px;
  width: 200px;
  height: 150px;
  }
  style.css文件
  result.html
  我们创建一个result.html文件,该文件将通过函数render_template("result.html", prediction=my_prediction)返回呈现predict,我们在app.py脚本中定义该文件以显示用户通过文本字段提交的文本。result.html文件包含以下内容:<!DOCTYPE html>
  <html>
  <head>
  <title></title>
  <link rel="stylesheet" type="text/css" href="{{ url_for("static", filename="css/styles.css") }}">
  </head>
  <body>
  <header>
  <p class="container">
  <p id="brandname">
  ML App
  </p>
  <h2>Spam Detector For SMS Messages</h2>
  </p>
  </header>
  <p style="color:blue;font-size:20;text-align: center;"><b>Results for Comment</b></p>
  <p class="results">
  {% if prediction == 1%}
  <h2 style="color:red;">Spam</h2>
  {% elif prediction == 0%}
  <h2 style="color:blue;">Not a Spam (It is a Ham)</h2>
  {% endif %}
  </p>
  </body>
  </html>
  result.html
  从result.htm文件我们可以看到一些代码使用通常在HTML文件中找不到的语法例如,{% if prediction ==1%},{% elif prediction == 0%},{% endif %}这是jinja语法,它用于访问从HTML文件中请求返回的预测。
  我们就要大功告成了!
  完成上述所有操作后,你可以通过双击appy.py 或从终端执行命令来开始运行API :cd SMS-Message-Spam-Detector
  python app.py
  你应该得到以下输出:
  现在你可以打开Web浏览器并导航到http://127.0.0.1:5000/,你应该看到一个简单的网站,内容如下:
  恭喜!我们现在以零成本的代价创建了端到端机器学习(NLP)应用程序。如果你回顾一下,其实整个过程根本不复杂。有点耐心和渴望学习的动力,任何人都可以做到。所有开源工具都使每件事都成为可能。
  更重要的是,我们能够将我们对机器学习理论的知识扩展到有用和实用的Web应用程序!
  完整的工作源代码可在此存储库中找到,祝你度过愉快的一周!
  本文由阿里云云栖社区组织翻译。
  文章原标题《develop-a-nlp-model-in-python-deploy-it-with-flask-step-by-step》作者:Susan Li,加拿大数据科学家
  作者:【方向】

刚在魅族商城抢了个魅蓝note6,为什么没人买?说实话,买魅族手机现在是不需要抢的,现在所有的手机购买都不需要抢的,说需要抢都是骗人的。这里并不是为了贬低魅族,所有手机除了刚上市没几天的,正常销售的手机都是足够量的。这里来说一下热线追踪丨老人手机充话费后被开通宽带?运营商已取消并退费杨先生今年10月,我在南宁一联通营业厅帮老人手机充值话费后,老人的手机收到一条短信,称已帮开通宽带月租业务。但我家已有另外的手机捆绑宽带,根本用不上这个所谓的宽带月租业务。我拨打客把手机比喻成什么最恰当?人固有四肢,手机就是第五肢手机是现代人的必需品,只要行动一步一一健康码行程码,这是首当其冲的,要不寸步难行再者,你要出门打车买车票机票,支付宝微信都可以付钱还有,你要出去跟朋友逛街为什么内行人都不推荐买128GB的手机?看完这三点,你就明白了近年来智能手机行业飞速发展,智能机的功能也不断在更新,更方便了我们的生活。现在的各种硬件参数软件服务不要说和十年前比,就算和一两年前相比,进步也是极快的。除了这些,还有些我们不会太口红耳机跑者手表新升级折叠屏手机华为又又又开发布会啦与之前几场发布会不同,余承东并没有在今晚现身。今天晚上,华为又又又开发布会了,带来了7款智慧单品。具体来看,华为先是发布了WATCHGT3系列智能手表,在既有的46mm尺寸上新增4谁能帮忙推荐几款无代码开发软件?哎嘿嘿,这个问题,我可太喜欢啦毛遂自荐,走起!teamcube是一个用户无需深厚的技术功底就可以轻松配置开发出企业协作所需应用的极速无码应用开发平台。它追求扁平化的产品设计,讲究功工信部指导首批网盘企业推出无差别速率产品工信部指导首批网盘企业推出无差别速率产品网盘限速,有解了使用网盘服务,传输速率与宣传速率严重不符网盘上传下载资料被限速,不买会员无法推进随着移动互联网和智能设备的普及,将文件资料照曾经让苹果三星都害怕的华为,怎么突然牛不起来了?大家有没有这样一个感觉,曾经消息铺天盖地的华为突然销声匿迹起来,不仅如此,华为在全球手机出货量市场份额排名跌出Top5,荣耀系列被迫独立,后续还有nova系列可能被转售的消息,现在我想给老妈买个3千的华为,老婆不同意只给买1千的小米,怎么选?既然你已经结婚了,你妈应该是6070后,这代人不图虚面子,实用适用就行。打电话,玩微信,看视频,千元机足够你妈用了。难道只有我觉得1千的小米挺好的吗?作为一个上班已经十几年的人来说vivo顶级旗舰浮出水面,亮点不止天玑2000,相机才是真正卖点文有鱼审核张子扬校正知秋在今年9月份,vivo推出了高端旗舰机X70系列,凭借着优秀的产品力赢得了不少消费者的青睐。但随着时间的流逝,vivoX70系列的热度已经渐渐消退。好在,vLyiew悬浮歌词蓝牙音箱体验既是音箱,又是第二块屏幕一直以来笔者都想打造真正的沉浸式电脑桌面,除了机箱显示器和外设,蓝牙音箱也是一个不可或缺的重要物件。现在蓝牙音箱的发展远远超出了笔者的想象,各种设计的蓝牙音箱让笔者有些目不暇接。在
大屏娱乐新旗舰魅族16T深度体验一前言截至目前为止,没有魅蓝的魅族在魅族16系列上一共发行了7款机型魅族16th魅族16thPlus魅族16X魅族16Xs魅族16s魅族16sPro和魅族16T,这几款机型的每次发专为电竞而生ZOWIEGEARXL2540职业电竞显示器详细评测在此前PUBGCSGO的很多电竞比赛中,ZOWIEGEARXL系列职业电竞显示器成为了专用显示器,同时许多职业电竞玩家在平时训练的时候都将ZOWIE显示器作为训练机来用,由此也可以安全上网又省心360家庭防火墙路由器V5S增强版深度体验路由器作为家中不可缺少的数码产品,其信号稳定性是购买路由器的一个重要指标,但是一般的路由器都忽视了安全防护这一指标。尤其家中有老人的上网用户,有时候很难甄别网络欺诈陷进,在浏览网页洁盟视洁杯JP360超声波清洗机体验站着洗才有范儿对于戴眼镜人士来说,如果长时间不擦拭眼镜,眼镜就会出现发糊现象,如果你经常选择眼镜布来擦拭的话,在眼镜布是干净的情况下,可以把眼镜镜面擦得锃光瓦亮,但是眼镜布长时间没有清洗,擦过眼清仓跑路生变?潘石屹得迈过什么坎?一个多月前确认要卖出SOHO中国后,潘石屹就关闭微博评论,不再更新动态,难道他早就预料到,此番出售不会一帆风顺?本文由无冕财经(wumiancaijing)原创发布作者方斯嘉编辑陈互联网大厂集体焦虑抢人,谁能突围史上最大规模校招?从公司层面来看,结合公司业务,提前布局储备未来可能需要的人才,是公司得以长期发展的关键一环,这也就不难理解美团对校招和内部培养的重视。本文由无冕财经(wumiancaijing)原四大名塔四大名楼四大名塔具体指的是嵩岳寺塔(河南登封嵩岳寺)飞虹塔(山西洪洞广胜寺)释迦塔(山西应县佛宫寺)千寻塔(云南大理崇圣寺)。四大名楼是一种泛称,特指山西永济鹳雀楼,江南三大名楼(湖北武汉十二月花神十二月花神扬眉十二花神次第来,人间月月花儿开,花团锦簇彤彤日,笑逐颜开喜心怀。在百花的传说中,以农历中的十二个月令的代表花,于是十二月令花神的传说最令人神往。十二花神是中国民间传说案例分享鲜花店小程序的搭建与营销策略,拯救你的店铺销量各行各业都已经通过小程序实现线上转型。对于鲜花行业,如何搭建小程序并运营好,接下来,得有店分享一个客户案例,对同行在做小程序过程中,还是有很大的借鉴意义的。花千古,是一家昆明鲜花店你真的知道如何运营私域流量吗?看看这3步你懂不懂近年来,互联网红利逐渐被瓜分,流量的获取也是越来越难,商家开始转向私域流量的运营,但是你真的知道如何运营私域流量吗?如果不理解,就看和我一起学习一下吧!一为什么要做私域流量运营?私商城类小程序怎么做?牢记这四点搭建技巧很重要小程序发展至今,类型也是不断涌现,资讯类游戏类社交类电商类等等,各种商家都希望运用小程序为自己带来流量,特别是商城类小程序,不但可以打通线上线下销售渠道,提升店铺销量,而且可以为店