![](https://img-blog.csdnimg.cn/20200415084450139.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
NLP
NLP
baihaisheng
这个作者很懒,什么都没留下…
展开
-
多模型多线程预测
# 安装dockeryum install docker# 开启docker服务 service docker start# 使用docker拉取tensorflow-serving镜像。docker pull tensorflow/servingMODEL_PATH="/data/django-uwsgi/text_labeled/model_train"# 使用docker run命令启动微服务# 启动第一个模型docker run -t --rm -p 8501:8501原创 2023-08-15 07:07:59 · 87 阅读 · 0 评论 -
迁移学习流程
第一步: 下载微调脚本文件# 克隆huggingface的transfomers文件git clone https://github.com/huggingface/transformers.git# 进行transformers文件夹cd transformers# 安装python的transformer工具包, 因为微调脚本是py文件.pip install .# 进入微调脚本所在路径并查看cd examplesls# 其中run_glue.py就是针对GLUE数据集合原创 2023-08-15 07:03:43 · 168 阅读 · 0 评论 -
NLP问题解答
1、bert相关内容?2、fasttext和word2vec的区别?3、残差连接 ? 什么是网络退化?4、注意力计算为什么要除以dk?5、Adaboost和GBDT有啥区别?6、python 是否可以实现多线程?IO任务为什么可以实现多线程?7、lstm的输出是什么?8、传统CRF的损失函数是什么?9、层次softmax?10、LSTM就能缓解梯度消失?11、ner任务怎么推断出得最优解?12、transformer做文本生成效果怎么样?怎么评估生成效果?13、怎么评估语言模型的好坏原创 2020-07-21 09:05:08 · 247 阅读 · 0 评论 -
残差网络(Residual Network)
网络退化问题AlexNet、VGG、GoogleNet结构都是通过加深网络结果,但是网络的深度提升不能通过层与层的简单堆叠来实现。由于梯度消失问题,深层网络很难训练。因为梯度反向传播到前面的层,重复相乘可能使梯度无穷小。结果就是,随着网络的层数更深,其性能趋于饱和,甚至开始迅速下降,ResNets 残差网络2015年何恺明推出的ResNet在ISLVRC和COCO上横扫所有选手,获得冠军。ResNet在网络结构上做了大创新,而不再是简单的堆积层数,ResNet在卷积神经网络的新思路,绝对是深度学习发原创 2020-07-07 22:53:07 · 528 阅读 · 0 评论 -
ImportError: cannot import name ‘glue_compute_metrics‘
>>> from transformers import glue_compute_metricsTraceback (most recent call last): File "<stdin>", line 1, in <module>ImportError: cannot import name 'glue_compute_metrics'原创 2020-07-05 23:04:04 · 937 阅读 · 2 评论 -
模型的动态量化
模型压缩:模型压缩是一种针对大型模型(参数量巨大)在使用过程中进行优化的一种常用措施。它往往能够使模型体积缩小,简化计算,增快推断速度,满足模型在特定场合(如: 移动端)的需求。目前,模型压缩可以从多方面考虑,如剪枝方法(简化模型架构),参数量化方法(简化模型参数),知识蒸馏等模型参数量化:在机器学习(深度学习)领域,模型量化一般是指将模型参数由类型FP32转换为INT8/FP16的过程,如果转换为INT8,转换之后的模型大小被压缩为原来的¼,所需内存和带宽减小4倍,同时,计算量减小约为2-4倍。模型原创 2020-07-03 18:56:25 · 2831 阅读 · 0 评论 -
通过Keras Tuner添加的全连接层层数和节点数
### 某些类别中数据量达到一定程度时如何提升数据指标# 在项目初期,数据量在几千到几万之间时(不同模型之间数据量不同),# 使用fasttext模型会有较好的效果;但随着有些模型的数据样本量增长较快,# 当数据量达到百万级别时,fasttext模型的效果开始出现下降趋势,# 通过我们的实验,原因可能由于fasttext本身的模型过于简单,# 无法对我们当前的数据有较好的拟合和泛化能力,因此,我们开始拓展该模型的结构。# pip install keras-tuner==1.0.1from原创 2020-06-20 22:05:11 · 105 阅读 · 0 评论 -
使用Keras Tuner对fasttext模型进行超参数调优
## 使用Keras Tuner对fasttext模型进行超参数调优# pip install keras-tuner==1.0.1from kerastuner.tuners import RandomSearchfrom kerastuner.tuners import BayesianOptimization### 使用了tf中的keras,和keras tuner的tensorflow版本依然是1.14.0# 导入用于对象保存与加载的joblib# 导入keras中的词汇映射器To原创 2020-06-20 22:04:05 · 223 阅读 · 0 评论 -
Keras Tuner模型自动超参数调优
Keras Tuner安装pip install keras-tunerfrom tensorflow.keras import layersfrom tensorflow import kerasfrom kerastuner.tuners import RandomSearchfrom kerastuner.tuners import BayesianOptimization(x,y),(val_x,val_y)=keras.datasets.mnist.load_data()x = x原创 2020-06-20 19:00:08 · 828 阅读 · 1 评论 -
多线程微服务模型预测
# 导入必备的工具包import jsonimport threadingimport requestsfrom sklearn.externals import joblib# 从任意的模型训练文件中导入add_ngram增加n-gram特征以及padding截断函数from movie_model_train import add_ngramfrom movie_model_train import paddingfrom get_jieba_word import get_jieb原创 2020-06-20 08:25:27 · 232 阅读 · 0 评论 -
No versions of servable movie found under base path /models/movie
使用docker封装部署模型为微服务docker run -t --rm -p 8501:8501 -v “$MODEL_PATH/movie:/models/movie” -e MODEL_NAME=movie tensorflow/serving &报错:原保存文件路径:save_model_path="./movie/"修改为如下保存方式,解决:time_ = str(int(time.time()))save_model_path="./movie/" +time_...原创 2020-06-19 22:37:11 · 604 阅读 · 0 评论 -
tensorflow-keras-fasttext模型构建训练
from data_analysis import get_data_labelfrom tensorflow.keras.preprocessing.text import Tokenizer# from sklearn.externals import joblibimport joblibfrom tensorflow.keras.preprocessing import sequenceimport numpy as npfrom tensorflow.keras.models impo原创 2020-06-19 18:13:11 · 649 阅读 · 0 评论 -
词性
获取相关词性的词import jieba.posseg as psegn_e = ["nr", "n", "ns", "nt", "nz"]r = []for g in pseg.lcut(text): if g.flag in n_e: r.append(g.word)词性对照表jieba词性对照表- a 形容词 - ad 副形词 - ag 形容词性语素 - an 名形词 - b 区别词 - c 连词 - d 副词原创 2020-06-18 21:49:51 · 601 阅读 · 0 评论 -
词汇映射
目的:将分词列表中的每个词映射成数字from data_analysis import get_data_labelfrom tensorflow.keras.preprocessing.text import Tokenizer#from sklearn.externals import joblibimport joblibfrom tensorflow.keras.preprocessing import sequencedef word_map(data_path,tokenizer_原创 2020-06-18 20:50:18 · 492 阅读 · 0 评论 -
BILSTM+CRF
根据标签的数据对数据处理模型选择BILSTM+CRF为什么选择加CRFCRF特征特征提取函数变成了BILSTM化目标变了真实序列最大概率化全局的(真除以所有的可能),并且学习到当前时刻的状态与其他状态的关系分母是真实序列的值 所有可能的隐状态的序列值求和 全局归一化每一时刻最归一化是局部 HMM最终的损失函数是真实序列的分数-指数和再进行对数计算加了CRF优化的目标函数已经变了发射矩阵分数+转移矩阵分数学习了一个转移矩阵,也就是约束条件是真实序列的概率最大化优...原创 2020-06-17 22:41:44 · 34 阅读 · 0 评论 -
命名实体识别(NER)
模型架构选择BiLSTM+CRF为什么选择BILSTM后接一个CRF因为BILSTM输出的一个序列的预测分数概率最大的值,作为输出结果,每一个输出之间是没有任何联系的,这样导致预测的实体名出错的概率增加,例如:实体命名识别识别北京真好,要识别出北京这个城市名,北后边不应该再出现北的,但是只用BILSTM就有可能出现这种情况,BILSTM后接CRF可以解决这样的问题,CRF的的转移概率会增加一个约束,使得北转移到北的概率为0,最终CRF会选择一个概率醉的的作为输出,再通过维特比算法解码输出具体的实体名原创 2020-06-13 17:17:42 · 857 阅读 · 0 评论 -
self-attention
原创 2020-06-10 19:24:02 · 31 阅读 · 0 评论 -
CentOS服务器配置GPU运行环境
cuda的安装一、查询显示服务器cuda可驱动的GPUhttps://developer.nvidia.com/cuda-gpus 查询英伟达CUDA支持的显卡类型有哪些yum install pciutilslspci | grep -i nvidia输出00:07.0 VGA compatible controller: NVIDIA Corporation Device 1bb3 (rev a1)二、确定LINUX系统版本是不是支持cudauname -m &&原创 2020-06-08 19:31:27 · 696 阅读 · 0 评论 -
Seq2Seq--Attention
自然语言处理中的Attention机制原创 2020-06-06 16:03:53 · 192 阅读 · 0 评论 -
模型实践应用
from rnn_model import RNNfrom get_bert_encoder import get_bert_encoderimport torchimport osinput_size=768hidden_size=128output_size=2MODE_PATH='./bert_rnn.pth'rnn=RNN(input_size,hidden_size,output_size)rnn.load_state_dict(torch.load(MODE_PATH))原创 2020-06-03 19:16:19 · 328 阅读 · 0 评论 -
topk(num,dim)
topk(num,dim=1)>>> output=torch.randn(3,4)>>> outputtensor([[-1.9291, 1.4127, -2.2464, 0.8932], [-0.4483, -0.3458, 0.8384, 1.9580], [-0.5633, -2.2806, 0.6278, 1.3552]])在行上取一个最大值>>> topkv,topki=output.to原创 2020-06-03 14:59:37 · 334 阅读 · 0 评论 -
bert微调模型训练优化
import torchtokenizer = torch.hub.load('huggingface/pytorch-transformers', 'tokenizer', 'bert-base-chinese')model = torch.hub.load('huggingface/pytorch-transformers', 'model', 'bert-base-chinese')def get_bert_encoder(text): token_index = tokenize原创 2020-06-03 14:12:23 · 377 阅读 · 0 评论 -
模型训练损失,正确率绘制曲线图
import matplotlib.pyplot as pltfrom matplotlib.pyplot import MultipleLocator# 创建第一张画布plt.figure(0)# 绘制训练损失曲线plt.plot(all_train_losses, label="Train Loss")# 绘制验证损失曲线, 颜色为红色plt.plot(all_valid_losses, color="red", label="Valid Loss")# 定义横坐标刻度间隔对象,.原创 2020-06-02 10:30:32 · 12283 阅读 · 4 评论 -
TypeError: iteration over a 0-d tensor
模型训练报错:TypeError: iteration over a 0-d tensor解决:total_loss+=loss换成如下方式total_loss+=loss.item()原创 2020-06-02 00:45:08 · 17371 阅读 · 1 评论 -
python构造数据批次迭代
csv数据内容1 可以 医生有微信吗1 医生在吗? 好的,谢谢from collections import Counterfrom functools import reduceimport torchimport pandas as pdfrom sklearn.utils import shufflefrom get_bert_encoder import get_bert_encoderdef data_loader(data_path, batch_size, spli原创 2020-06-01 22:52:26 · 240 阅读 · 0 评论 -
torch.cat---dim=num
— dim=0from functools import reducea=torch.randn(1,3,3)tensor([[[-1.3366, -0.7503, 0.8280], [-0.6265, 0.5649, -1.0375], [-1.7299, -0.0394, 0.4885]]])b=torch.randn(1,3,3)tensor([[[ 1.6557, 0.1908, -0.3583], [ 0.2740, 0原创 2020-06-01 16:53:21 · 638 阅读 · 0 评论 -
分类任务模型评价指标
在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵(适用于多分类)TP: True Positives, 表示实际为正例且被分类器判定为正例的样本数FP: False Positives, 表示实际为负例且被分类器判定为正例的样本数FN: False Negatives, 表示实际为正例但被分类器判定为负例的样本数TN: True Negatives, 表示实际为负例且被分类器判定为负例的样本数Posit原创 2020-05-31 11:47:36 · 654 阅读 · 0 评论 -
Transformer Encoder multi-head-Attention的理解
将第一列的所有词表示成[6,9]的词向量,3个batch_size形成一个3维的矩阵向量[batch_size,seq_length,embedding_dim]=[3,6,9]初始化3个[9,9]的权重矩阵,分别是Query_w,Key_W,Value_W,用于模型参数更新Query_w,Key_W,Value_W分别于每一batch_size相乘得到Q,K,V3个矩阵超参数设置head=3,将Q,KV分别除以3,得到3个多头的q1,q2,q3,k1,k2,k3,v1,v2,v3最终Q,K原创 2020-05-30 17:22:55 · 480 阅读 · 0 评论 -
BERT模型
BERT模型是2018年的10月Google发布的论文《Pre-training of Deep Bidirectional Transformers for Language Understanding》,提到的BERT模型刷新了自然语言处理的11项记录模型架构ELMO(Embedding from Language Models),采用的双向的Bi-LSTM实现的,图中左端的前向双层LSTM代表正方向编码器,输入的是从左到右顺序的除了预测单词外的上文Context,右端的逆向双层LSTM代表反方向原创 2020-05-30 14:45:03 · 1020 阅读 · 0 评论 -
CRF和HMM
CRF和HMM比较CRF是生成模型,HMM是判别模型HMM模型中存在两个假设:一是输出观察值之间严格独立(观察独立性假设),二是状态的转移过程中当前状态只与前一状态有关(齐次马尔科夫假设)CRF是在给定需要标记的观察序列的条件下,计算整个标记序列的联合概率分布,而不是在给定当前状态条件下,定义下一个状态的状态分布。缺点:训练代价大、复杂度高条件随机域模型相比较改进的隐马尔可夫模型可以更好更多的利用待识别文本中所提供的上下文信息以得更好的实验结果HMM:隐马尔可夫 模型,它一般以文本序列数据输入,原创 2020-05-29 17:58:53 · 1586 阅读 · 0 评论 -
判别式模型与生成式模型
判别式模型(Discriminative Model)是直接对条件概率p(y|x)建模。常见的判别式模型有线性回归模型、线性判别分析、支持向量机SVM、神经网络、boosting、条件随机场等。示例:判断一张图片是猫还是狗,用判别模型的方法是从历史数据中学习到模型,然后通过提取这张图片的特征来预测出这张图片是猫的概率,是狗的概率。 生成式模型(Generative Model)则会对x和y的联合分布p(x,y)建模,然后通过贝叶斯公式来求得p(yi|x),然后选取使得p(yi|x)最大的yi,即:原创 2020-05-28 23:33:44 · 350 阅读 · 0 评论 -
为什么LSTM能够缓解梯度消失梯度爆炸
ft —遗忘门层,it — gt — 输入门层,ct ----细胞状态更新,ot 输出门*, ht 当前时刻的隐层输出根据BPTT推导得:从上述公司可知三个门的激活函数是sigmoid, 也就是输出要么接近于0 , 要么接近于1。这就使得 当门为1时, 梯度能够很好的在LSTM中传递,很大程度上减轻了梯度消失发生的概率, 当门为0时,说明上一时刻的信息对当前时刻没有影响, 我们也就没有必要传递梯度回去来更新参数了。所以, 这就是为什么通过门机制就能够缓解梯度的原因...原创 2020-05-28 18:30:25 · 1855 阅读 · 0 评论 -
基于CNN文本处理设计思想
1.将每一个词经过映射到维度为5的词向量—>获得词向量2. 卷积层,选择卷积核大小为(2,5),(3,5),(4,5),3. 通过不同的卷积核,得到到单词的语义特征信息(不同长度的张量信息),4. 池化层,对每一个的得到的特征张量进程max_pooling,之后将6个经过max_pooling得到的特征张量进行concat拼接5.接softmax作为输出...原创 2020-05-28 17:25:47 · 244 阅读 · 0 评论 -
为什么RNN会比CNN更容易出现梯度消失或爆炸
公式:输出层ot表示输出值,输出层是一个全连接层与隐藏层的每一个节点连接,V是输出层的权重矩阵,g表示激活函数,循环层st 表示隐藏层的值,U是输入的权重矩阵,xt表示输入的值,W是上一时间步st-1作为当前时间步st的输入权重矩阵,f表示激活函数,从上述公式可知:st的值不仅仅取决于输入的x,还取决于st-1将st带入Ot的计算公式 得:从上式可知循环网络的输出,和xt,xt-1,xt-3有关,这就是循环网络具有记忆的特性...原创 2020-05-26 20:07:32 · 1434 阅读 · 0 评论 -
基于fasttext文本分类酒店评论进行预测
数据预处理#encoding=utf-8import pandas as pdtrain_data=pd.read_csv('/ai_work/hotel_data/train.tsv',header=None,sep='\t').drop([0])with open("/ai_work/train.txt",'w') as fi: for file in train_data.values: if file[1]=='1': file[1]='积极'原创 2020-05-25 00:01:13 · 573 阅读 · 0 评论 -
Huffmam树
在计算机科学中,树是一种很重要的非线性数据机构,它是数据元素按分支关系组织起来的结构,若干个相互不相交的树构成的集合称为森林,下面给出几个与树相关的常用的概念路径和路径长度,在一颗树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径,在通路中分支的数目称为路径长度,若根结点的层号为1,则从根结点到第L层结点的路径长度为L-1结点的权和带权路径的长度,若为树中结点赋予一个具有某种含义的非负数值,则这个数值称为该结点的权,结点的带权路径长度是指从根结点到该节点之间的路径长度与该结点的权的乘积给原创 2020-05-24 12:51:45 · 181 阅读 · 0 评论 -
获取词向量的方法及训练词向量的理解
概述在深度学习中,Embedding技术对于深度学习非常重要,甚至可以说是深度学习的“基本核心操作”。深度学习网络中作为Embedding层,完成从高维稀疏特征向量到低维稠密特征向量的转换。 使用One-hot编码对类别、Id型特征进行编码,导致样本特征向量极度稀疏,而深度学习的结构特点使其不利于稀疏特征向量的处理,因此几乎所有的深度学习都会由Embedding层负责将高维稀疏特征向量转换成稠密低维特征向量常用的获取词向量的方法利用网络embedding层训练词向量,FastText工具快速生原创 2020-05-23 16:44:58 · 4144 阅读 · 0 评论 -
torch.nn.Parameter()
原创 2020-05-22 12:39:48 · 129 阅读 · 0 评论 -
fasttext工作原理
fasttext的安装yum install git -ygit clone https://github.com/facebookresearch/fastText.gitcd fastText# 使用pip安装python中的fasttext工具包pip install .原创 2020-05-20 22:52:06 · 519 阅读 · 1 评论 -
GRU
GRU(Gated Recurrent Unit)门控循环单元结构, 它也是传统RNN的变体, 同LSTM一样能够有效捕捉长序列之间的语义关联, 缓解梯度消失或爆炸现象. 同时它的结构和计算要比LSTM更简单网络结构:将遗忘们和输入门组合为一个“更新门”,它合并了神经元状态和隐层状态,将t时间步的xt与t-1时间步的信息拼进行线性变换(乘以Wt的权重矩阵) 再经过sigmoid输出固定范围0到1之间的数值重置门计算过程与更新门一样,只不过线性变换的参数和用处不一样而已更新门用于控制前一时刻的状态信息原创 2020-05-19 23:49:24 · 3846 阅读 · 0 评论