语音文字表示方法

sequence representation:

用向量来表示:[seq_len,feature_len]第一个是序列长度,第二个是特征长度

对于这样的一个数据,我们每次看一行,然后每一行有28个特征来表示,一共28行特就是可以用维度[28,28]来表示这个图片

文本信息:

先介绍一下语义向量表示的一些相关内容,然后有一个文本分类的案例

独热编码

独热编码:比如英语中一共3500个单词,那我就把每个单词编成一个独热编码,每个位置对应一个单词,这个[5,3500]代表的意思是有5个单词组成的一个句子。

缺点:稀疏编码,占用内存,维度太高。

利用语义相近进行编码

相似度计算:去计算两个单词语义的夹角。

putorch提供现成的语义编码方式:word2vec和glove

词向量模型:–word2vec

举个例子:你要描述一个人,比如Jay,他内向还是外向我用一个数值-1~1来表示,-1表示内向,那他是-0.4说明比较内向,再考虑其他方面用同样的方法就构成了词向量,谷歌给出基本模型是50到300维的

有了向量就可以计算相似度了,用欧氏距离或者余弦距离

如下图所示是一个50维的词向量模型,具体每个数字什么含义我们不管

上图中man和boy是有联系的也就是在词向量空间应该是挨的比较近,从热度图里可以看出来有些地方的颜色是相近的。而water与这两个词就不太一样了。

我们用神经网络去训练一个词向量,我想让模型去得到一个词应该用什么样的向量去表示。

这个网络的输入输出数据分别是什么?

自然语言处理中是有先后顺序的,举个例子比如:"在词向量模型中"这句话,那我两个输入是“在”+“词向量”,输出应该是“模型”,我想让神经网络学到的是前后说话的一个顺序关系

比如下面这个图输入是随便两个前后位置的词,最后的输出实际是接了一个softmax层,在语料库中那个词的可能性最大,图中输出是not

具体他的输入是什么样的数据?

在输入之前每个词都要去查表转化成一个向量。

那我这个语料库的表是怎么来的呢?

一开始就是随机初始化,在反向传播过程中不仅仅更新权重参数,而且把输入也更新了。

具体数据是可以是任何合乎说话逻辑的文本都可以

然后滑动窗口得到下一组输入输出

有两种模型

一种是以上下文为输入,中间的一个词是输出

另一种是以中间的那个词为输入,上下文为输出具体结构如下

整个的训练过程:

前向传播计算损失函数,反向传播更新权重参数和输入,也就是多了一步计算损失函数对输入x的偏导。

存在的问题:
如果语料库太大了,比如有5w个单词那最后的softmax层计算量太大了,如何解决?

如上图,原来我想通过not这个词去预测thou这个词,现在换一下思路,我直接把thou也当作输入去计算一下,输入是not,输出是thou这个词的概率有多大。

但是这样所有的目标结果全都是1,神经网络训练出来效果是不会好的,应该加入负采样模型

就是加入一些其他的错误的对应关系构造输出为0的样本,一般默认负采样个数为5。

整个流程大致如下:

首先我要根据输入输出的内容去找到对应的单词的向量表示

也就是把这个输入not在embedding这个表中找到对应的向量表示,把输出的三个单词也在context这个表中找到对应的向量表示

在神经网络中去计算前向传播和误差再经过反向传播去更新网络参数和输入输出所对用的这两个表。最终想要的是embedding这个表,也就是每个词的向量表示。

**代码方面案例:**基于pytorch的一个文本分类的任务

有一份新闻的数据集,基于新闻数据集对每个新闻中的标题或者关键的句子进行分类,看看这个新闻是属于什么样的类别的。

数据集:

后面每个数字代表的是他的标签,一共18w条数据。

验证集:

有1w条数据

作者还提供了训练好的词向量的训练结果,分类的时候就用训练好的,因为很多文本里面的内容在不同地方含义是不变的

关于RNN:

1.在这个案例中,我们每个时间片段的输入长度是固定的,那我x0到xt的长度应该是一样的(训练的权重参数维度是固定的),所以首先要进行分词,比如我就定义输入数据的长度就是32,也就是每句话你输入进来到xt就是第32个词或者字,那分词的时候如果多了那就把后边的舍弃,如果少了就添0。

2.然后我要把每个时间片段的输入x0到xt里面的词去查表找出对应向量表示,向量表示的维度应该也是一样的,比如都是300维。

RNN输入的维度:(batch,max-l,feature)一次处理多少条数据,max-l是指最大序列的长度就是上面例子中的32,feature代表特征的大小比如300。

双向的LSTM:

只看上面每个词都用一个三维向量表示输入LSTM得到一个三维的隐层特征,同理只看下面相当于从后往前走,最终把这两个方向得到的特征向量拼接

LSTM的层数:

RNN中的输入维度

批训练的时候:

[word num,b,word vec]

b:每个batch的大小

word num:单词的数量

word vec:单词的特征维度

或者[b,word num,word vec]

直接从torchnlp这个包里面调用Glove这个编码方式,会下载一个

g的文件,直接输入单词就可以的到向量特征了。

RNN

每一次都会得到一个语境信息在下一个输入的时候会综合考虑

我们最终想要的是最后的一个输出也就是ht

LSTM:因为RNN记忆能力太强,会把之前所有的信息全部考虑进来,引入LSTM

Loading data...
Vocab size: 4762
180000it [00:03, 57830.00it/s]
10000it [00:00, 42676.96it/s]
10000it [00:00, 64001.76it/s]
Time usage: 0:00:04
<bound method Module.parameters of Model((embedding): Embedding(4762, 300)(lstm): LSTM(300, 128, num_layers=2, batch_first=True, dropout=0.5, bidirectional=True)(fc): Linear(in_features=256, out_features=10, bias=True)
)>
Epoch [1/10]
Iter:      0,  Train Loss:   2.3,  Train Acc: 10.94%,  Val Loss:   2.3,  Val Acc: 11.94%,  Time: 0:00:26 *
Iter:    100,  Train Loss:   1.7,  Train Acc: 41.41%,  Val Loss:   1.6,  Val Acc: 40.40%,  Time: 0:01:36 *
Iter:    200,  Train Loss:   1.4,  Train Acc: 50.00%,  Val Loss:   1.2,  Val Acc: 55.45%,  Time: 0:02:43 *
Iter:    300,  Train Loss:  0.86,  Train Acc: 66.41%,  Val Loss:  0.86,  Val Acc: 70.31%,  Time: 0:03:53 *
Iter:    400,  Train Loss:   0.7,  Train Acc: 78.12%,  Val Loss:   0.7,  Val Acc: 77.16%,  Time: 0:05:01 *
Iter:    500,  Train Loss:  0.55,  Train Acc: 83.59%,  Val Loss:  0.62,  Val Acc: 80.22%,  Time: 0:06:08 *
Iter:    600,  Train Loss:  0.67,  Train Acc: 76.56%,  Val Loss:  0.57,  Val Acc: 81.67%,  Time: 0:07:19 *
Iter:    700,  Train Loss:  0.56,  Train Acc: 83.59%,  Val Loss:  0.52,  Val Acc: 83.49%,  Time: 0:08:26 *
Iter:    800,  Train Loss:   0.5,  Train Acc: 88.28%,  Val Loss:  0.48,  Val Acc: 85.07%,  Time: 0:09:35 *
Iter:    900,  Train Loss:  0.44,  Train Acc: 87.50%,  Val Loss:  0.47,  Val Acc: 85.26%,  Time: 0:10:44 *
Iter:   1000,  Train Loss:  0.34,  Train Acc: 87.50%,  Val Loss:  0.45,  Val Acc: 85.35%,  Time: 0:11:52 *
Iter:   1100,  Train Loss:  0.35,  Train Acc: 91.41%,  Val Loss:  0.45,  Val Acc: 85.82%,  Time: 0:13:00 *
Iter:   1200,  Train Loss:  0.42,  Train Acc: 85.94%,  Val Loss:  0.43,  Val Acc: 86.84%,  Time: 0:14:09 *
Iter:   1300,  Train Loss:  0.43,  Train Acc: 84.38%,  Val Loss:  0.43,  Val Acc: 86.96%,  Time: 0:15:17 *
Iter:   1400,  Train Loss:  0.44,  Train Acc: 87.50%,  Val Loss:  0.41,  Val Acc: 86.73%,  Time: 0:16:28 *
Epoch [2/10]
Iter:   1500,  Train Loss:   0.4,  Train Acc: 85.94%,  Val Loss:  0.39,  Val Acc: 87.75%,  Time: 0:17:41 *
Iter:   1600,  Train Loss:  0.41,  Train Acc: 87.50%,  Val Loss:   0.4,  Val Acc: 87.40%,  Time: 0:18:48
Iter:   1700,  Train Loss:   0.4,  Train Acc: 87.50%,  Val Loss:  0.39,  Val Acc: 87.85%,  Time: 0:19:56
Iter:   1800,  Train Loss:  0.28,  Train Acc: 91.41%,  Val Loss:   0.4,  Val Acc: 87.31%,  Time: 0:21:03
Iter:   1900,  Train Loss:  0.34,  Train Acc: 89.84%,  Val Loss:  0.36,  Val Acc: 88.50%,  Time: 0:22:09 *
Iter:   2000,  Train Loss:  0.37,  Train Acc: 89.84%,  Val Loss:  0.36,  Val Acc: 88.50%,  Time: 0:23:17
Iter:   2100,  Train Loss:  0.39,  Train Acc: 87.50%,  Val Loss:  0.36,  Val Acc: 88.37%,  Time: 0:24:28
Iter:   2200,  Train Loss:  0.24,  Train Acc: 92.19%,  Val Loss:  0.36,  Val Acc: 88.71%,  Time: 0:25:39
Iter:   2300,  Train Loss:  0.27,  Train Acc: 93.75%,  Val Loss:  0.34,  Val Acc: 89.13%,  Time: 0:26:48 *
Iter:   2400,  Train Loss:  0.31,  Train Acc: 88.28%,  Val Loss:  0.37,  Val Acc: 88.31%,  Time: 0:27:58
Iter:   2500,  Train Loss:  0.28,  Train Acc: 90.62%,  Val Loss:  0.36,  Val Acc: 88.88%,  Time: 0:29:04
Iter:   2600,  Train Loss:  0.32,  Train Acc: 89.84%,  Val Loss:  0.35,  Val Acc: 89.20%,  Time: 0:30:10
Iter:   2700,  Train Loss:  0.32,  Train Acc: 92.19%,  Val Loss:  0.35,  Val Acc: 88.93%,  Time: 0:31:16
Iter:   2800,  Train Loss:  0.44,  Train Acc: 85.94%,  Val Loss:  0.34,  Val Acc: 89.55%,  Time: 0:32:21
Epoch [3/10]
Iter:   2900,  Train Loss:  0.34,  Train Acc: 89.84%,  Val Loss:  0.32,  Val Acc: 89.98%,  Time: 0:33:28 *
Iter:   3000,  Train Loss:  0.27,  Train Acc: 91.41%,  Val Loss:  0.33,  Val Acc: 89.45%,  Time: 0:34:34
Iter:   3100,  Train Loss:  0.23,  Train Acc: 91.41%,  Val Loss:  0.35,  Val Acc: 89.10%,  Time: 0:35:40
Iter:   3200,  Train Loss:  0.37,  Train Acc: 92.97%,  Val Loss:  0.34,  Val Acc: 89.32%,  Time: 0:36:46
Iter:   3300,  Train Loss:  0.25,  Train Acc: 92.19%,  Val Loss:  0.31,  Val Acc: 90.16%,  Time: 0:37:52 *
Iter:   3400,  Train Loss:   0.3,  Train Acc: 89.84%,  Val Loss:  0.33,  Val Acc: 89.79%,  Time: 0:38:58
Iter:   3500,  Train Loss:  0.25,  Train Acc: 91.41%,  Val Loss:  0.33,  Val Acc: 89.50%,  Time: 0:40:05
Iter:   3600,  Train Loss:  0.18,  Train Acc: 95.31%,  Val Loss:  0.32,  Val Acc: 89.88%,  Time: 0:41:11
Iter:   3700,  Train Loss:  0.37,  Train Acc: 88.28%,  Val Loss:  0.32,  Val Acc: 89.77%,  Time: 0:42:18
Iter:   3800,  Train Loss:  0.27,  Train Acc: 90.62%,  Val Loss:  0.31,  Val Acc: 89.92%,  Time: 0:43:24
Iter:   3900,  Train Loss:  0.28,  Train Acc: 91.41%,  Val Loss:  0.33,  Val Acc: 89.70%,  Time: 0:44:31
Iter:   4000,  Train Loss:  0.24,  Train Acc: 92.19%,  Val Loss:  0.33,  Val Acc: 89.66%,  Time: 0:45:37
Iter:   4100,  Train Loss:  0.26,  Train Acc: 92.97%,  Val Loss:  0.32,  Val Acc: 89.94%,  Time: 0:46:43
Iter:   4200,  Train Loss:   0.3,  Train Acc: 90.62%,  Val Loss:  0.32,  Val Acc: 89.82%,  Time: 0:47:50
Epoch [4/10]
Iter:   4300,  Train Loss:  0.25,  Train Acc: 89.84%,  Val Loss:  0.32,  Val Acc: 90.03%,  Time: 0:48:56
No optimization for a long time, auto-stopping...
Test Loss:  0.31,  Test Acc: 89.94%
Precision, Recall and F1-Score...precision    recall  f1-score   supportfinance     0.8942    0.8870    0.8906      1000realty     0.9123    0.9050    0.9086      1000stocks     0.8381    0.8180    0.8279      1000education     0.9415    0.9490    0.9452      1000science     0.8045    0.8600    0.8313      1000society     0.8905    0.9190    0.9045      1000politics     0.8809    0.8650    0.8729      1000sports     0.9749    0.9720    0.9735      1000game     0.9494    0.8820    0.9145      1000
entertainment     0.9159    0.9370    0.9263      1000accuracy                         0.8994     10000macro avg     0.9002    0.8994    0.8995     10000weighted avg     0.9002    0.8994    0.8995     10000Confusion Matrix...#混淆矩阵错误情况
[[887  19  50   5  11  11  10   2   0   5][ 14 905  23   0  11  16   9   5   4  13][ 64  26 818   3  50   1  32   1   4   1][  1   2   3 949  12  12   6   2   2  11][  5   8  32   9 860  21  20   1  26  18][  5  11   2  20  10 919  21   0   3   9][ 10   8  29  11  27  38 865   3   2   7][  1   1   2   2   2   2   5 972   1  12][  2   2  13   3  73   8   5   2 882  10][  3  10   4   6  13   4   9   9   5 937]]
Time usage: 0:00:15Process finished with exit code 0

CNN做文本分类思想

改变卷积核的大小,图中分别为4✖5,3✖5,2✖5的,然后根据不同卷积核得到不同的特征图,经过池化层的时候,我则规则不是传统2个选最大或者4个选最大,而是和特征图的大小相等,最后经过全连接层完成二分类。

【lstm做文本分类保存】相关推荐

  1. 使用CNN做文本分类——将图像2维卷积换成1维

    使用CNN做文本分类from __future__ importdivision, print_function, absolute_importimporttensorflow as tfimpor ...

  2. bert使用做文本分类_使用BERT进行深度学习的多类文本分类

    bert使用做文本分类 Most of the researchers submit their research papers to academic conference because its ...

  3. 第十三讲:textcnn做文本分类任务,基于论文:Relation_Classification_via_Convolutional_Deep_Neural_Network的实战代码

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  4. NNDL 实验七 循环神经网络(4)基于双向LSTM的文本分类

    6.4 实践:基于双向LSTM模型完成文本分类任务 电影评论可以蕴含丰富的情感:比如喜欢.讨厌.等等. 情感分析(Sentiment Analysis)是为一个文本分类问题,即使用判定给定的一段文本信 ...

  5. Word Averaging模型做文本分类 稳定效果好模型简单

    利用WORDAVG模型做文本分类   模型简单 效果号 简单思想就是  将每个词向量在 句子维度进行求平均  可以用avgpool来做平均池化 然后用平均后的向量作为句子向量 进行文本分类 后面我们还 ...

  6. tf第十二讲:TextCNN做文本分类的实战代码

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  7. 贝叶斯分类器做文本分类案例

    贝叶斯分类器做文本分类 文本分类是现代机器学习应用中的一大模块,更是自然语言处理的基础之一.我们可以通过将文字数据处理成数字数据,然后使用贝叶斯来帮助我们判断一段话,或者一篇文章中的主题分类,感情倾向 ...

  8. bert模型可以做文本主题识别吗_GitHub - jkszw2014/TextClassify_with_BERT: 使用BERT模型做文本分类;面向工业用途...

    TextClassify_with_BERT 使用BERT模型做文本分类:面向工业用途 自己研究了当前开源的使用BERT做文本分类的许多存储库,各有各的缺点.通病就是面向学术,不考虑实际应用. 使用t ...

  9. transformer做文本分类的keras实现完整版

    背景 目前csdn上搜索到的keras的版本实现,排在前面的是: https://blog.csdn.net/xiaosongshine/article/details/86595847 但是,这个文 ...

  10. java lstm pb_在Tensorflow Serving上部署基于LSTM的文本分类模型

    一些重要的概念 Servables Servables 是客户端请求执行计算的基础对象,大小和粒度是灵活的. Servables 不会管理自己的运行周期. 典型的Servables包括: a Tens ...

最新文章

  1. 线性回归算法原理简介
  2. 用C#对ADO.NET数据库完成简单操作
  3. 深圳餐厅使用iPad点餐(图)
  4. java随机产生100个大小写字母_Java生成固定长度的随机字符串(以大小写字母和数字)...
  5. SAP HUM 使用HU02去Unpack一个HU
  6. cmake find_package 中,include_directories,target_link_libraries 的值怎么知道?
  7. Mysql数据库(1.表的约束,以及数据表相关操作和字段名的相关操作)
  8. boost::reinterpret_pointer_cast相关的测试程序
  9. SAP Cloud SDK for JavaScript 的搭建和使用方法介绍
  10. python词组语义相似度_文本匹配,语义相似度,匹配相似短语/单词python语义wordNet模糊匹配...
  11. 树莓派(Linux)与镜像源
  12. Linux常用命令的缩写含义
  13. Shiro面试题(二十道)
  14. matlab相关系数的显著性检验
  15. 项目报告制作-中型无盘网吧
  16. 经典网页设计:20个优秀的电子商务网站设计案例
  17. IPv6下的DHCP(DHCPv6)
  18. TimeLine 角色播放动画会回到原点的解决
  19. 好用的日历插件(三款常用的日历插件)
  20. 用Python实现地理探测器

热门文章

  1. Loadrunner脚本录制执行
  2. 【数据结构排序算法(五)】二路归并排序
  3. 云台测试软件,三轴云台校准工具
  4. 平板电脑 刷机王 linux,平板刷机王最新下载
  5. Vagrant安装CentOS7镜像
  6. 基于Matlab/Simulink的1/4车辆系统动力学模型的两种建模方法(动力学建模入门知识)
  7. R语言|ggtreeExtra包绘制进化树
  8. Sublime Text 2 代码编辑器使用技巧
  9. mysql与sim900a_sim900a和sim800a的区别是什么
  10. 二阶系统响应指标图_二阶系统瞬态响应和稳定性实验报告