文章目录
1. 本周学习主要内容
- 主要学习处理时间序列问题的NLP领域
- 一些简单的模型部署
1.1 NLP基础
- 自然语言与单词的分布表示
- word2vec
- RNN
- LSTM
- seq2seq
1.2 机器学习模型部署
- Flask
- Pyqt5
2. 所遇到问题及代办
- 在学习NLP时明显感觉比CV领域的要复杂
- NLP应该专注于学习什么领域、模型?是否需要不停学习sota?因为时间序列模型RNN、LSTM就是属于这一领域的范畴
- flask应该学到什么程度?一些request接口需要学习
- flask使用pickle模块是否能满足工程化的需求?
- NLP的一些数学原理很复杂
- 继续学习时间序列模型与模型部署的方法思路
3.本周重点
由于本周主要在阅读自然语言处理入门相关书籍,主要学习NLP的一些基础理论与算法思想,故实操比较少
3.1 自然语言处理
我们平常使用的语言,如日语或英语,称为自然语言(natural language)。所谓自然语言处理(Natural Language Processing,NLP),顾名思义,就是处理自然语言的科学。简单地说,它是一种能够让计算机理解人类语言的技术。换言之,自然语言处理的目标就是让计算机理解人说的话,进而完成对我们有帮助的事情。
3.1.1 主要应用领域
1、语义文本相似度分析
2、信息检索
3、 信息抽取
4、文本分类
5、文本挖掘
6、文本情感分析
7、问答系统
8、机器翻译
9、自动摘要
3.1.2 word2vec
是一个将单词转换成向量形式的工具,通过上下文来学习语义信息包含两个经典模型 CBOW 和 Skip-gram,此处不进行详细阐述。
3.2 RNN
虽然前馈网络结构简单、易于理解,但是可以应用于许多任务中。不过,这种网络存在一个大问题,就是不能很好地处理时间序列数据(以下简称为“时序数据”)。更确切地说,单纯的前馈网络无法充分学习时序数据的性质(模式)。于是,RNN(Recurrent Neural Network,循环神经网络)便应运而生。
基本结构
RNN循环层展开
基本原理公式
反向传播原理图
- Truncated BPTT
截断式BPTT原理图
TBPTT原理图
引入mini-batch后学习原理图
原书的代码是基于keras,此处省略代码展示
3.2 LSTM
- 目的:解决RNN中可能会出现的梯度消失和梯度爆炸
LSTM接口简单示意图
RNN层与LSTM层的比较
LSTM层基于记忆单元ct计算隐藏状态ht
添加输入门、遗忘门后的原理图
3.4 Attention机制
Attention机制原理尚未清楚明白其原理,故继续学习
Attention解码器结构图
4.一个简单的机器学习模型部署基于web
web界面
- 内容:输入三个特征可预测森林发生火灾的概率
app代码:
from flask import Flask
from flask import request
from flask import url_for
from flask import redirect
from flask import render_template
import pickle
import numpy as np
app = Flask(__name__)
model=pickle.load(open('model.pkl','rb'))
@app.route('/')
def hello_world():
return render_template("forest_fire.html")
@app.route('/predict',methods=['POST','GET'])
def predict():
int_features=[int(x) for x in request.form.values()]
final=[np.array(int_features)]
print(int_features)
print(final)
prediction=model.predict_proba(final)
output='{0:.{1}f}'.format(prediction[0][1], 2)
if output>str(0.5):
return render_template('forest_fire.html',pred='Your Forest is in Danger.\nProbability of fire occuring is {}'.format(output),bhai="kuch karna hain iska ab?")
else:
return render_template('forest_fire.html',pred='Your Forest is safe.\n Probability of fire occuring is {}'.format(output),bhai="Your Forest is Safe for now")
if __name__ == '__main__':
app.run(debug=True)
机器学习模型训练代码
#!C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\python.exe
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
import warnings
import pickle
warnings.filterwarnings("ignore")
data = pd.read_csv("Forest_fire.csv")
data = np.array(data)
X = data[1:, 1:-1]
y = data[1:, -1]
y = y.astype('int')
X = X.astype('int')
# print(X,y)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
inputt=[int(x) for x in "45 32 60".split(' ')]
final=[np.array(inputt)]
b = log_reg.predict_proba(final)
pickle.dump(log_reg,open('model.pkl','wb'))
model=pickle.load(open('model.pkl','rb'))
css和js 省略
- 问题:
- flask接口问题尚未明白
- pickle模块待学习