NLP项目工作流程

文章目录

    • 1. 谷歌Colab设置
    • 2. 编写代码
    • 3. flask 微服务
    • 4. 打包到容器
    • 5. 容器托管

参考 基于深度学习的自然语言处理

使用这篇文章的数据(情感分类)进行学习。

1. 谷歌Colab设置

Colab 地址

  • 新建笔记本

  • 设置

  • 选择 GPU/TPU 加速计算

  • 测试 GPU 是否分配

import tensorflow as tf
tf.test.gpu_device_name()

输出:

/device:GPU:0
  • 上传数据至谷歌云硬盘,并在Colab中加载


  • 解压数据

2. 编写代码

import numpy as np
import pandas as pddata = pd.read_csv("yelp_labelled.txt", sep='\t', names=['sentence', 'label'])data.head() # 1000条数据# 数据 X 和 标签 y
sentence = data['sentence'].values
label = data['label'].values# 训练集 测试集拆分
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(sentence, label, test_size=0.2, random_state=1)#%%max_features = 2000# 文本向量化
from keras.preprocessing.text import Tokenizer
tokenizer = Tokenizer(num_words=max_features)
tokenizer.fit_on_texts(X_train) # 训练tokenizer
X_train = tokenizer.texts_to_sequences(X_train) # 转成 [[ids...],[ids...],...]
X_test = tokenizer.texts_to_sequences(X_test)
vocab_size = len(tokenizer.word_index)+1 # +1 是因为index 0, 0 不对应任何词,用来padmaxlen = 50
# pad 保证每个句子的长度相等
from keras.preprocessing.sequence import pad_sequences
X_train = pad_sequences(X_train, maxlen=maxlen, padding='post')
# post 尾部补0,pre 前部补0
X_test = pad_sequences(X_test, maxlen=maxlen, padding='post')#%%embed_dim = 256
hidden_units = 64from keras.models import Model, Sequential
from keras.layers import Dense, LSTM, Embedding, Bidirectional, Dropout
model = Sequential()
model.add(Embedding(input_dim=max_features,output_dim=embed_dim,input_length=maxlen))
model.add(Bidirectional(LSTM(hidden_units)))
model.add(Dropout(0.3))
model.add(Dense(1, activation='sigmoid')) # 二分类sigmoid, 多分类 softmaxmodel.compile(optimizer='adam', loss='binary_crossentropy',metrics=['accuracy'])
model.summary()
from keras.utils import plot_model
plot_model(model, show_shapes=True, to_file='model.jpg') # 绘制模型结构到文件#%%history = model.fit(X_train,y_train,batch_size=64,epochs=100,verbose=2,validation_split=0.1)
# verbose 是否显示日志信息,0不显示,1显示进度条,2不显示进度条
loss, accuracy = model.evaluate(X_train, y_train, verbose=1)
print("训练集:loss {0:.3f}, 准确率:{1:.3f}".format(loss, accuracy))
loss, accuracy = model.evaluate(X_test, y_test, verbose=1)
print("测试集:loss {0:.3f}, 准确率:{1:.3f}".format(loss, accuracy))# 绘制训练曲线
from matplotlib import pyplot as plt
import pandas as pd
his = pd.DataFrame(history.history)
loss = history.history['loss']
val_loss = history.history['val_loss']
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']plt.plot(loss, label='train Loss')
plt.plot(val_loss, label='valid Loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.grid()
plt.show()plt.plot(acc, label='train Acc')
plt.plot(val_acc, label='valid Acc')
plt.title('Training and Validation Acc')
plt.legend()
plt.grid()
plt.show()#%%model.save('trained_model.h5')import pickle
with open('trained_tokenizer.pkl','wb') as f:pickle.dump(tokenizer, f)# 下载到本地
from google.colab import files
files.download('trained_model.h5')
files.download('trained_tokenizer.pkl')

3. flask 微服务

  • 以下内容不懂,抄一遍

编写 app.py

# Flask
import pickle
import numpy as np
from keras.preprocessing.sequence import pad_sequences
from keras.models import load_model
def load_var():global model, tokenizermodel = load_model('trained_model.h5')model.make_predict_function()with open('trained_tokenizer.pkl','rb') as f:tokenizer = pickle.load(f)maxlen = 50
def process_txt(text):x = tokenizer.texts_to_sequences(text)x = pad_sequences(x, maxlen=maxlen, padding='post')return x#%%from flask import Flask, request, jsonify
app = Flask(__name__)@app.route('/')
def home_routine():return "hello NLP!"#%%@app.route("/prediction",methods=['POST'])
def get_prediction():if request.method == 'POST':data = request.get_json()x = process_txt(data)prob = model.predict(x)pred = np.argmax(prob, axis=-1)return str(pred)#%%if __name__ == "__main__":load_var()app.run(debug=True)# 上线阶段应该为 app.run(host=0.0.0.0, port=80)
  • 运行 python app.py
  • windows cmd 输入:
    Invoke-WebRequest -Uri 127.0.0.1:5000/prediction -ContentType 'application/json' -Body '["The book was very poor", "Very nice", "bad, oh no", "i love you"]' -Method 'POST'

返回预测结果:

4. 打包到容器

  • 后序需要用 Docker 将 应用程序包装到容器中

5. 容器托管

  • 容器托管到网络服务,如 AWS EC2 实例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

判断 Python 对象是否包含某个属性的方法

先创建两个类,判断类的属性是否存在: class Foo(object):def __init__(self):super(Foo, self).__init__()self.is_whole 1class Doo(object):def __init__(self):super(Doo, self).__init__()f Foo() d Doo() 方法一:通过异常捕捉来实…

牛客 牛牛浇树(差分)

文章目录1. 题目2. 解题1. 题目 链接:https://ac.nowcoder.com/acm/contest/10323/A 来源:牛客网 牛牛现在在花园养了n棵树,按顺序从第1棵到第n棵排列着。 牛牛每天会按照心情给其中某一个区间的树浇水。 例如如果某一天浇水的区间为[2,4]&…

再议 语法高亮插件的选择

之前一篇《为博客园选择一个小巧霸气的语法高亮插件》介绍了语法高亮插件的选择,当时只注重速度了。这些天在做深度定制的时候发现一个严重的问题,匹配精度不够。 什么是匹配精度呢?简单说就是没有把代码分块,是否分的足够细&…

Python自定义时间间隔访问网页

方法一:利用webbrowser import time import webbrowserwhile True: # 死循环time.sleep(60 * 1) # 程序等待时间,这里等待1min,参数的基本单位是秒print("正在访问:请稍等。。。")webbrowser.open("https://blo…

Arch Linux下打不开gnome-shell

可能与未正确设置语言环境有关。 检查语言设置:locale -a 检查当前环境下设置:echo $LANG 检查/etc/locale.conf是否存在,是否正确设置。如果不存在:echo en_US.UTF-8 > /etc/locale.conf转载于:https://www.cnblogs.com/vanit…

牛客 挑选方案问题(排列组合)

文章目录1. 题目2. 解题1. 题目 链接:https://ac.nowcoder.com/acm/contest/10323/B 来源:牛客网 自助餐厅里有5个盘子,里面装的都是面包。 第1个盘子里有无限个面包; 第2个盘子里只有1个面包; 第3个盘子里只有4个面…

微信定时每天给女友发送甜言蜜语(附代码教程)

准备工作: 微信(扫码登陆网页版)pip install wxpypip install requests 代码教程: from __future__ import unicode_literals from threading import Timer from wxpy import * import requests import randombot Bot()# linu…

【Github教程】史上最全github用法:github入门到精通

原文 http://www.eoeandroid.com/thread-274556-1-1.html 【初识Github】 首先让我们大家一起喊一句“Hello Github”。YEAH!就是这样。Git是一个分布式的版本号控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。在推出后,Git在其…

牛客 统计好元组

文章目录1. 题目2. 解题1. 题目 链接&#xff1a;https://ac.nowcoder.com/acm/contest/10325/A 来源&#xff1a;牛客网 现在给定一个数组arr&#xff0c;和a,b两个数字&#xff0c;你要做的就是找到&#xff08;i&#xff0c;j&#xff0c;k&#xff09;。且满足 1. 0 <…

从内置函数看 Python 的设计思想:len(x) 是否击败 x.len(),

内置函数是 Python 的一大特色&#xff0c;用极简的语法实现很多常用的操作。 它们预先定义在内置命名空间中&#xff0c;开箱即用&#xff0c;所见即所得。Python 被公认是一种新手友好型的语言&#xff0c;这种说法能够成立&#xff0c;内置函数在其中起到了极关键的作用。 …

解密Redis持久化

本文内容来源于 Redis 作者博文&#xff0c;Redis 作者说&#xff0c;他看到的所有针对 Redis 的讨论中&#xff0c;对 Redis持久化的误解是最大的&#xff0c;于是他写了一篇长文来对 Redis 的持久化进行了系统性的论述。文章非常长&#xff0c;也很值得一看&#xff0c;NoSQL…

牛客 共鸣问题(思维难题)

文章目录1. 题目2. 解题1. 题目 链接&#xff1a;https://ac.nowcoder.com/acm/contest/10325/B 来源&#xff1a;牛客网 现在有n个音符和m对共鸣关系&#xff0c;编号为1~n&#xff0c; 每个音符自己有一个奏响时的优美程度&#xff0c; 共鸣关系(x,y,z)表示音符x和y同时奏响…

GitHub标星2.6万!Python算法新手入门大全

今天推荐一个Python学习的干货。 几个印度小哥&#xff0c;在GitHub上建了一个各种Python算法的新手入门大全&#xff0c;现在标星已经超过2.6万。这个项目主要包括两部分内容&#xff1a;一是各种算法的基本原理讲解&#xff0c;二是各种算法的代码实现。 传送门在此&#x…

Notepad++的json 格式化

一、在线安装&#xff1a; 1. 打开nodepad 2. 找到JSON Viewer 点击右上角"安装", 会有提示框安装重启notepad, 点击ok 3. 自动重启后, 就可以看到插件这栏有JSON Viewer了, 至于用哪个选项可以格式化, 就来动手试试吧~~~ 二、下载复制到指定位置 1、下载对应版本的…

Pytorch 张量tensor

文章目录1. tensor 张量2. 运算3. 切片、形状size()、改变形状view()4. item() 只能读取一个元素参考 http://pytorch123.com/1. tensor 张量 empty 不初始化 import torch x torch.empty(5,3) # 不初始化 print(x)tensor([[1.0010e-38, 4.2246e-39, 1.0286e-38],[1.0653e-3…

移动硬盘无法弹出的问题

1.运行任务资源管理器 2.结束explorer.exe 3.新建任务explorer.exe 4.弹出移动硬盘 转载于:https://www.cnblogs.com/wbbice/p/3800907.html

python中的有序字典及其使用方法

有序字典和通常字典类似&#xff0c;只是它可以记录元素插入其中的顺序&#xff0c;而一般字典是会以任意的顺序迭代的。 1、普通字典&#xff1a; d1{} d1[a]A d1[b]B d1[c]C d1[d]D #此时的d1 {a:A,b:B,c:C,d:D} for k,v in d1.items():print k,v 输出结果为&#xff1a;…

Pytorch 自动微分

参考 http://pytorch123.com/ Tensor.requires_grad True 记录对Tensor的所有操作&#xff0c;后序.backward() 自动计算所有梯度到 .grad 属性 import torch x torch.ones(2,2, requires_gradTrue) # 默认是False print(x)tensor([[1., 1.],[1., 1.]], requires_gradTrue)…

写了 10 年代码之后,我学到的 7 个绝对真理

明年就是我的开发者生涯的第十个年头。整整十年&#xff01;我有三分之二的时间都用在了 Web 开发上。在孩童时代&#xff0c;当其他小孩还在学习乐器或芭蕾舞的时候&#xff0c;我在自己的卧室里用代码编织了一个神奇的世界。为了给这十年来一个总结&#xff0c;我想分享一下我…

1502: [NOI2005]月下柠檬树 - BZOJ

Description Input文件的第1行包含一个整数n和一个实数alpha&#xff0c;表示柠檬树的层数和月亮的光线与地面夹角(单位为弧度)。第2行包含n1个实数h0,h1,h2,…,hn&#xff0c;表示树离地的高度和每层的高度。第3行包含n个实数r1,r2,…,rn&#xff0c;表示柠檬树每层下底面的圆…