循环神经网络与自然语言处理

循环神经网络与自然语言处理

1. 序列模型基础

序列模型是理解和预测数据点序列中的关系的工具,特别适用于时间序列数据如文本和语音。这些模型可以捕获时间动态和长期依赖关系。

数学基础
考虑一个简单的自回归模型,模型预测当前状态基于一定数量的先前状态:
x t = ϕ 1 x t − 1 + ϕ 2 x t − 2 + ⋯ + ϕ p x t − p + ϵ t x_t = \phi_1 x_{t-1} + \phi_2 x_{t-2} + \cdots + \phi_p x_{t-p} + \epsilon_t xt=ϕ1xt1+ϕ2xt2++ϕpxtp+ϵt
其中, ϕ 1 , ϕ 2 , … , ϕ p \phi_1, \phi_2, \ldots, \phi_p ϕ1,ϕ2,,ϕp 是模型参数, x t x_t xt 是时间点 t t t的观测值, ϵ t \epsilon_t ϵt 是噪声项。

2. 数据预处理详解

数据预处理的目的是将原始数据转换为适合机器学习模型的格式。

  • 文本清洗实例:例如,在处理bilibili url数据时,我们需要删除URLs、用户标签和特殊符号。
  • 分词实例:对于英语文本,“Don’t be late”可以分词为“Do”, “n’t”, “be”, “late”。
  • 构建词汇表实例:统计所有独特词汇,并赋予每个词汇一个唯一的整数索引。
  • 文本向量化实例:使用One-hot编码将“cat”转换成一个稀疏向量,其中向量长度等于词汇表大小,"cat"所在位置为1,其余为0。
3. 文本处理与词嵌入技术

Word2Vec是理解词嵌入的一个典型例子,其通过上下文预测当前词或通过当前词预测上下文来训练词向量。

  • Skip-gram模型
    P ( w O ∣ w I ) = exp ⁡ ( v w O ⊤ v w I ) ∑ w = 1 W exp ⁡ ( v w ⊤ v w I ) P(w_{O} | w_I) = \frac{\exp({v_{w_O}^\top v_{w_I}})}{\sum_{w=1}^W \exp({v_w^\top v_{w_I}})} P(wOwI)=w=1Wexp(vwvwI)exp(vwOvwI)
    其中 w I w_I wI是输入词, w O w_O wO是输出词, v w v_{w} vw是词 w w w的向量表示, W W W是词汇表的大小。
4. RNN模型深入
RNN核心结构
  • 基础RNN单元
    h t = tanh ⁡ ( W h h h t − 1 + W x h x t + b h ) h_t = \tanh(W_{hh} h_{t-1} + W_{xh} x_t + b_h) ht=tanh(Whhht1+Wxhxt+bh)
    这里, tanh ⁡ \tanh tanh是激活函数,使得输出值被压缩在-1到1之间,有助于处理和传递在时间序列中出现的非线性特征。
LSTM详解
  • LSTM单元结构
    • 遗忘门:决定信息是否从细胞状态中丢弃。
      f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) ft=σ(Wf[ht1,xt]+bf)
    • 输入门:决定哪些新信息被存储在细胞状态中。
      i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) it=σ(Wi[ht1,xt]+bi)
    • 候选层:创建一个候选细胞状态的新版本。
      C ~ t = tanh ⁡ ( W C ⋅ [ h t − 1 , x t ] + b C ) \tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C) C~t=tanh(WC[ht1,xt]+bC)
    • 细胞状态更新:更新细胞状态。
      C t = f t ∗ C t − 1 + i t ∗ C ~ t C_t = f_t * C_{t-1} + i_t * \tilde{C}_t Ct=ftCt1+itC~t
    • 输出门:决定输出值。
      o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) ot=σ(Wo[ht1,xt]+bo)
      h t = o t ∗ tanh ⁡ ( C t ) h_t = o_t * \tanh(C_t) ht=ottanh(Ct)
5. RNN模型实现与应用案例

例如,构建一个用于情感分析的LSTM模型,我们首先定义网络结构,初始化参数,选择合适的损失函数(如交叉熵损失),然后通过实际数据集进行训练。

  • 参数初始化:通常使用Xavier初始化方法来帮助保持输入和输出的方差一致,有助于梯度稳定。
  • 损失函数
    L = − 1 N ∑ i = 1 N [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] L = -\frac{1}{N} \sum_{i=1}^N [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] L=N1i=1N[yilog(y^i)+(1yi)log(1y^i)]
    其中, N N N是批次中样本的数量, y i y_i yi是真实标签, y ^ i \hat{y}_i y^i是预测概率。
6. 训练和误差反传

训练过程中,使用BPTT方法计算梯度,并应用如Adam或SGD的优化算法更新网络权重。

  • BPTT公式
    ∂ L ∂ W = ∑ t = 1 T ∂ L t ∂ W \frac{\partial L}{\partial W} = \sum_{t=1}^T \frac{\partial L_t}{\partial W} WL=t=1TWLt
7. 高级RNN架构

双向RNN利用了未来的信息来改进对当前数据点的理解,特别适用于需要从整个序列动态中学习的应用,如语音识别或实体识别。

  • 双向RNN公式
    h → t = f → ( W x h → x t + W h h → h → t − 1 + b h → ) \overrightarrow{h}_t = \overrightarrow{f}(W_{x\overrightarrow{h}} x_t + W_{h\overrightarrow{h}} \overrightarrow{h}_{t-1} + b_{\overrightarrow{h}}) h t=f (Wxh xt+Whh h t1+bh )
    h ← t = f ← ( W x h ← x t + W h h ← h ← t + 1 + b h ← ) \overleftarrow{h}_t = \overleftarrow{f}(W_{x\overleftarrow{h}} x_t + W_{h\overleftarrow{h}} \overleftarrow{h}_{t+1} + b_{\overleftarrow{h}}) h t=f (Wxh xt+Whh h t+1+bh )
    y t = W h y [ h → t , h ← t ] + b y y_t = W_{hy} [\overrightarrow{h}_t, \overleftarrow{h}_t] + b_y yt=Why[h t,h t]+by
  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值