深度学习基础——week4

更好的阅读体验!!

序列模型

例子

音乐、语言、文本、视频、股价…

统计方法

方案A:马尔科夫假设

假设当前当前数据只跟 τ \tau τ 个过去数据点相关
p ( x t ∣ x 1 , … x t − 1 ) = p ( x t ∣ x t − τ , … x t − 1 ) = p ( x t ∣ f ( x t − τ , … x t − 1 ) ) p\left(x_{t} \mid x_{1}, \ldots x_{t-1}\right)=p\left(x_{t} \mid x_{t-\tau}, \ldots x_{t-1}\right)=p\left(x_{t} \mid f\left(x_{t-\tau}, \ldots x_{t-1}\right)\right) p(xtx1,xt1)=p(xtxtτ,xt1)=p(xtf(xtτ,xt1))

方案B:潜变量模型

  • 引人潜变量 h t h_{t} ht 来表示过去信息 h t = f ( x 1 , … x t − 1 ) h_{t}=f\left(x_{1}, \ldots x_{t-1}\right) ht=f(x1,xt1)
  • 这样 x t = p ( x t ∣ h t ) x_{t}=p\left(x_{t} \mid h_{t}\right) xt=p(xtht)

文本预处理

  • 序列数据往往存在多种形式,文本是其中常见的形式之一,例如一篇文章可以被简单地看作是一串单词序列,甚至是一串字符序列
  • 将文本当做时序序列,将文本中的字或者字符、词当成样本,样本之间是存在时序信息的,因此文本是一个很长的时序序列
  • 文本预处理的核心思想是如何将文本中的词转化成能够训练的样本

常见的文本预处理步骤

1、读取数据集:将文本作为字符串加载到内存中

  • 将数据集读取到由多条文本行组成的列表中,其中每一条文本行都是一个字符串
  • 将非大小写字符全部变成空格(这虽然是一种有损的操作,但是能够使后续的操作变得更加简单
  • 去掉回车
  • 将所有字母全部变成小写

2、词元化:将字符串拆分为词元(如单词和字符)

  • tokenize 是 NLP 中一个比较常见的操作:将一个句子或者是一段文字转化成 token(字符串、字符或者是词)
  • 将文本行列表( lines )作为输入,列表中的每个元素都是一个文本序列(比如一条文本行)
  • 将每个文本序列拆分成一个词元列表,词元( token,英文中 token 一般有两种表示单元:一种是一个词作为一个基本单元,词相对来说,会让机器学习的模型更简单一点;一种是一个字符串作为一个基本单元,好处是样本数量比较少,坏处是还需要学习字符串的构成,字符串是如何由词构成的)是文本的基本单位
  • 中文的话会有所不同,因为在中文的段落中,词与词之间的间隔不是使用空格来进行间隔的,所以在中文中如果想使用词来表示 token 的话,还需要对其进行分词,分词相对来讲不是很容易
  • 通过拆分,文本序列就被拆分成了许多 token 列表,这些列表要么是空,要么是有许多 token 在其中
  • 最后返回一个由词元列表组成的列表,其中每个词元都是一个字符串( string )

3、建立词表,将拆分的词元映射到数字索引:将文本转换为数字索引序列,方便模型操作

  • 词元的类型是字符串,而模型需要的输入是数字(模型训练使用的都是 tensor ,而 tensor 都是基于下标的),因此这种类型不方便模型使用,所以需要构建一个字典,通常也叫做词汇表(vocabulary),用来将字符串类型的 token (要么是 word ,要么是 char )映射到从 0 开始的数字索引中
  • 首先将训练集中所有的文档合并到一起,然后对它们的唯一词元进行统计,得到最终的统计结果 – 语料( corpus )
    然后根据每个唯一词元的出现频率,为其分配一个数字索引,对于出现次数较少的词元,通常会被移除,以降低复杂性(min_freq:在 NLP 中,有很多词是不出现的,如果使用词的话,这些词可能在文本中就出现了几次,在这种情况下如果要进行训练的话可能比较困难,这里的 min_freq 指的是一个 token 在文本序列中出现的最少次数,如果少于这个数字的话,会将这些出现频率较低的 token 全部视为 “unknown”)
  • 语料库中不存在或者是已删除的任何词元都将映射到一个特定的未知词元 “”
  • 还可以选择增加一个列表,用于保存保留下来的词元,比如填充词元( “” );序列开始词元( “” );序列结束词元( “” )

小结

  1. 将文本作为字符串加载到内存中
  2. 将字符串拆分为词元(如单词和字符)
  3. 建立一个词表,将拆分的词元映射到数字索引
  4. 将文本转换为数字索引序列,方便模型操作

语言模型

定义

给定文本序列 x 1 , … , x T x_{1}, \ldots, x_{T} x1,,xT, 语言模型的目标是估计联合概率 p ( x 1 , … , x T ) p\left(x_{1}, \ldots, x_{T}\right) p(x1,,xT)

应用

  • 做预训练模型 (eg BERT, GPT-3)
  • 生成本文, 给定前面几个词, 不断的使用 x t ∼ p ( x t ∣ x 1 , … , x t − 1 ) x_{t} \sim p\left(x_{t} \mid x_{1}, \ldots, x_{t-1}\right) xtp(xtx1,,xt1) 来 生成后续文本

马尔可夫模型与 n n n元语法

如果 P ( x t + 1 ∣ x t , … , x 1 ) = P ( x t + 1 ∣ x t ) P(x_{t+1} \mid x_t, \ldots, x_1) = P(x_{t+1} \mid x_t) P(xt+1xt,,x1)=P(xt+1xt)

则序列上的分布满足一阶马尔可夫性质。

阶数越高,对应的依赖关系就越长。

这种性质推导出了许多可以应用于序列建模的近似公式:
$$
\begin{aligned}

P(x_1, x_2, x_3, x_4) &= P(x_1) P(x_2) P(x_3) P(x_4),\

P(x_1, x_2, x_3, x_4) &= P(x_1) P(x_2 \mid x_1) P(x_3 \mid x_2) P(x_4 \mid x_3),\

P(x_1, x_2, x_3, x_4) &= P(x_1) P(x_2 \mid x_1) P(x_3 \mid x_1, x_2) P(x_4 \mid x_2, x_3).

\end{aligned}
$$
通常,涉及一个、两个和三个变量的概率公式分别被称为

“一元语法”(unigram)、“二元语法”(bigram)和“三元语法”(trigram)模型。

RNN

LSTM

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于心脏病预测的问题,使用循环神经网络(RNN)是一种常见的方法。RNN适用于处理序列数据,而心电图信号就是一种序列数据。在使用RNN进行心脏病预测时,你可以将心电图信号作为输入序列,然后通过训练RNN模型来预测患者是否患有心脏病。 首先,你需要准备一个合适的数据集,其中包含心电图信号和相应的心脏病标签。可以使用公开的心电图数据集,如PTB数据库或MIT-BIH数据库。然后,你可以对数据进行预处理和特征工程,如数据清洗、滤波、降采样等。 接下来,你可以构建一个RNN模型。RNN模型由一系列循环层组成,每个循环层都会处理一个时间步的输入数据。你可以选择不同类型的RNN单元,如简单循环单元(SimpleRNN)、长短期记忆网络(LSTM)或门控循环单元(GRU)。通过添加适当的全连接层和激活函数,你可以将RNN模型输出映射到二分类问题(有或无心脏病)的结果。 然后,你可以使用训练集对RNN模型进行训练,并使用验证集进行模型调优。在训练过程中,你可以使用适当的损失函数(如交叉熵)和优化算法(如随机梯度下降)来最小化模型的预测误差。 最后,你可以使用测试集对训练好的模型进行评估,并计算模型的性能指标,如准确率、精确率、召回率等。这些指标可以帮助你评估模型的预测能力和泛化能力。 需要注意的是,心脏病预测是一个复杂的医学问题,仅仅使用心电图信号可能不能得到准确的预测结果。通常情况下,还需要结合其他患者的临床信息和医学知识来进行综合评估。因此,在进行心脏病预测时,建议与专业医生合作,并遵循相关的医学准则和规范。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值