TensorFlow文本与序列的深度模型

TensorFlow深度学习笔记 文本与序列的深度模型

Deep Models for Text and Sequence

转载请注明作者:梦里风林
Github工程地址:https://github.com/ahangchen/GDLnotes
欢迎star,有问题可以到Issue区讨论
官方教程地址
视频/字幕下载

Rare Event

与其他机器学习不同,在文本分析里,陌生的东西(rare event)往往是最重要的,而最常见的东西往往是最不重要的。

语法多义性

  • 一个东西可能有多个名字,对这种related文本能够做参数共享是最好的
  • 需要识别单词,还要识别其关系,就需要过量label数据

无监督学习

  • 不用label进行训练,训练文本是非常多的,关键是要找到训练的内容
  • 遵循这样一个思想:相似的词汇出现在相似的场景中
  • 不需要知道一个词真实的含义,词的含义由它所处的历史环境决定

Embeddings

  • 将单词映射到一个向量(Word2Vec),越相似的单词的向量会越接近
  • 新的词可以由语境得到共享参数

Word2Vec

  • 将每个词映射到一个Vector列表(就是一个Embeddings)里,一开始随机,用这个Embedding进行预测
  • Context即Vector列表里的邻居
  • 目标是让Window里相近的词放在相邻的位置,即预测一个词的邻居
  • 用来预测这些相邻位置单词的模型只是一个Logistics Regression, just a simple Linear model

    Comparing embeddings

  • 比较两个vector之间的夹角大小来判断接近程度,用cos值而非L2计算,因为vector的长度和分类是不相关的:

  • 最好将要计算的vector都归一化

Predict Words

  • 单词经过embedding变成一个vector
  • 然后输入一个WX+b,做一个线性模型
  • 输出的label概率为输入文本中的词汇
  • 问题在于WX+b输出时,label太多了,计算这种softmax很低效
  • 解决方法是,筛掉不可能是目标的label,只计算某个label在某个局部的概率,sample softmax

t-SNE

  • 查看某个词在embedding里的最近邻居可以看到单词间的语义接近关系
  • 将vector构成的空间降维,可以更高效地查找最近单词,但降维过程中要保持邻居关系(原来接近的降维后还要接近)
  • t-SNE就是这样一种有效的方法

类比

  • 实际上我们能得到的不仅是单词的邻接关系,由于将单词向量化,可以对单词进行计算
  • 可以通过计算进行语义加减,语法加减

Sequence

文本(Text)是单词(word)的序列,一个关键特点是长度可变,就不能直接变为vector

CNN and RNN

CNN 在空间上共享参数,RNN在时间上(顺序上)共享参数

  • 在每轮训练中,需要判断至今为之发生了什么,过去输入的所有数据都对当下的分类造成影响
  • 一种思路是记忆之前的分类器的状态,在这个基础上训练新的分类器,从而结合历史影响
  • 这样需要大量历史分类器
  • 重用分类器,只用一个分类器总结状态,其他分类器接受对应时间的训练,然后传递状态

RNN Derivatives

  • BackPropagation Through time
  • 对同一个weight参数,会有许多求导操作同时更新之
  • 对SGD不友好,因为SGD是用许多不相关的求导更新参数,以保证训练的稳定性
  • 由于梯度之间的相关性,导致梯度爆炸或者梯度消失

  • 使得训练时找不到优化方向,训练失败

Clip Gradient

计算到梯度爆炸的时候,使用一个比值来代替△W(梯度是回流计算的,横坐标从右往左看)

  • Hack but cheap and effective

LSTM(Long Short-Term Memory)

梯度消失会导致分类器只对最近的消息的变化有反应,淡化以前训练的参数,也不能用比值的方法来解决

  • 一个RNN的model包含两个输入,一个是过去状态,一个是新的数据,两个输出,一个是预测,一个是将来状态

  • 中间是一个简单的神经网络
  • 将中间的部分换成LSTM-cell就能解决梯度消失问题
  • 我们的目的是提高RNN的记忆能力
  • Memory Cell

三个门,决定是否写/读/遗忘/写回

  • 在每个门上,不单纯做yes/no的判断,而是使用一个权重,决定对输入的接收程度
  • 这个权重是一个连续的函数,可以求导,也就可以进行训练,这是LSTM的核心

  • 用一个逻辑回归训练这些门,在输出进行归一化

  • 这样的模型能让整个cell更好地记忆与遗忘
  • 由于整个模型都是线性的,所以可以方便地求导和训练

LSTM Regularization

  • L2, works
  • Dropout on the input or output of data, works

Beam Search

有了上面的模型之后,我们可以根据上文来推测下文,甚至创造下文,预测,筛选最大概率的词,喂回,继续预测……

  • 我们可以每次只预测一个字母,but this is greedy,每次都挑最好的那个
  • 也可以每次多预测几步,然后挑整体概率较高的那个,以减少偶然因素的影响
  • 但这样需要生成的sequence会指数增长
  • 因此我们在多预测几步的时候,只为概率比较高的几个候选项做预测,that‘s beam search.

翻译与识图

  • RNN将variable length sequence问题变成了fixed length vector问题,同时因为实际上我们能利用vector进行预测,我们也可以将vector变成sequence
  • 我们可以利用这一点,输入一个序列,到一个RNN里,将输出输入到另一个逆RNN序列,形成另一种序列,比如,语言翻译
  • 如果我们将CNN的输出接到一个RNN,就可以做一种识图系统

循环神经网络实践

时间: 2024-12-11 15:39:07

TensorFlow文本与序列的深度模型的相关文章

Google深度学习笔记 文本与序列的深度模型

Deep Models for Text and Sequence 转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 Rare Event 与其他机器学习不同,在文本分析里,陌生的东西(rare event)往往是最重要的,而最常见的东西往往是最不重要的. 语法多义性 一个东西可能有多个名字,对这种related文本能够做参数共享是最好的 需要识别单

TensorFlow文本摘要生成 - 基于注意力的序列到序列模型

1 相关背景 维基百科对自动摘要生成的定义是, "使用计算机程序对一段文本进行处理, 生成一段长度被压缩的摘要, 并且这个摘要能保留原始文本的大部分重要信息". 摘要生成算法主要分为抽取型(Extraction-based)和概括型(Abstraction-based)两类. 传统的摘要生成系统大部分都是抽取型的, 这类方法从给定的文章中, 抽取关键的句子或者短语, 并重新拼接成一小段摘要, 而不对原本的内容做创造性的修改. 这类抽取型算法工程上已经有很多开源的解决办法了, 例如Git

机器学习入门-文本特征-word2vec词向量模型 1.word2vec(进行word2vec映射编码)2.model.wv['sky']输出这个词的向量映射 3.model.wv.index2vec(输出经过映射的词名称)

函数说明: 1. from gensim.model import word2vec  构建模型 word2vec(corpus_token, size=feature_size, min_count=min_count, window=window, sample=sample) 参数说明:corpus_token已经进行切分的列表数据,数据格式是list of list , size表示的是特征向量的维度,即映射的维度, min_count表示最小的计数词,如果小于这个数的词,将不进行统计,

使用Tensorflow搭建回归预测模型之八:模型与外部接口对接

前一篇中,我们讨论了模型的压缩,将标准tensorflow格式的模型文件转换成tflite格式,极大的缩小了模型的大小. 本篇我们将介绍如何使用标准C/C++来调用tflite格式的模型. 接下来依次介绍下: 一.BUILD文件修改: # Description: # TensorFlow Lite A/C of Traffic Assist. package(default_visibility = ["//visibility:public"]) licenses(["n

文本情感分类:传统模型(1)

基于情感词典的文本情感分类 传统的基于情感词典的文本情感分类,是对人的记忆和判断思维的最简单的模拟,如上图.我们首先通过学习来记忆一些基本词汇,如否定词语有"不",积极词语有"喜欢"."爱",消极词语有"讨厌"."恨"等,从而在大脑中形成一个基本的语料库.然后,我们再对输入的句子进行最直接的拆分,看看我们所记忆的词汇表中是否存在相应的词语,然后根据这个词语的类别来判断情感,比如"我喜欢数学&quo

TensorFlow教程05:MNIST深度学习初探

TensorFlow是一个非常强大的用来做大规模数值计算的库.其所擅长的任务之一就是实现以及训练深度神经网络. 在本教程中,我们将学到构建一个TensorFlow模型的基本步骤,并将通过这些步骤为MNIST构建一个深度卷积神经网络. 这个教程假设你已经熟悉神经网络和MNIST数据集.如果你尚未了解,请查看新手指南. 安装 在创建模型之前,我们会先加载MNIST数据集,然后启动一个TensorFlow的session. 加载MNIST数据 为了方便起见,我们已经准备了一个脚本来自动下载和导入MNI

牛逼哥TensorFlow资源分享:白话深度学习与TensorFlow

今天,给大家分享一本关于TensorFlow的书籍-白话深度学习与TensorFlow. 最近在看这个深度学习框架,门外汉,为了快速入门,找的都是中文教材,可能准确度译文不如原文精确,但毕竟容易理解,上手快. 买了四本原版书,但有几本最近更新的书籍由于错过了双十一,感觉价格略贵,京东薅羊毛习惯了,一般三折以上的书我都不考虑买了. 所以想办法找到了电子书,也是通过各种途径吧,淘宝,闲鱼,论坛,大部分都是买的,网上下来的免费的好多都没有书签,而且质量不是很好. 在这里免费分享给大家,试了下,不知道为

[Pytorch]深度模型的显存计算以及优化

原文链接:https://oldpan.me/archives/how-to-calculate-gpu-memory 前言 亲,显存炸了,你的显卡快冒烟了! torch.FatalError: cuda runtime error (2) : out of memory at /opt/conda/conda-bld/pytorch_1524590031827/work/aten/src/THC/generic/THCStorage.cu:58 想必这是所有炼丹师们最不想看到的错误,没有之一.

ubuntu16.04 使用tensorflow object detection训练自己的模型

一.构建自己的数据集 1.格式必须为jpg.jpeg或png. 2.在models/research/object_detection文件夹下创建images文件夹,在images文件夹下创建train和val两个文件夹,分别存放训练集图片和测试集图片. 3.下载labelImg目标检测标注工具 (1)下载地址:https://github.com/tzutalin/labelImg (2)由于LabelImg是用Python编写的,并使用Qt作为其图形界面. 因此,python2安装qt4: