crf-和softmax的qubie

1. 假设现在 一个输入有 n 帧, 每一帧有 k 个可能 softmax 是 将这个问题看作一个 n 个 k 分类问题

  crf 则将这个问题看作是一个 k**n 问题

从 k**n 条路径中选择一条最佳路径

具体来说 ,在 CRF 序列标注问题中,为了得到从输入到每个预测标签的最大预测概率,为了得到这个概率的估计

CRF 做了两个假设

假设1, 该分布是指数分布

其中 Z 是归一化因子,和 输入 x 有关,f 函数可以看作是一个打分函数,打分函数取指数并归一化后就得到概率分布

假设2,输出之间的关联,仅发生在相邻位置,并且关联是指数加性的

这意味着 f(y1,...,yn;x) 可以进一步简化为:

也就是说,我们只需要对每一个标签和每一个相邻标签进行分别打分,然后将所有打分结果求和得到总分

线性链 CRF 

尽管已经做了大量的简化,但是3 公式,所表示的概率模型还是过于复杂,难于求解,考虑到当前深度学习模型中,RNN 或者 层叠 CNN 等模型已经能够比较充分捕捉各个 y 与 输出 x 的联系,因此,我们不妨考虑函数 g 和 x 无关

### BiLSTM-IDCNN-ATT-CRF 模型概述 BiLSTM-IDCNN-ATT-CRF 是一种用于序列标注任务的强大模型组合,在自然语言处理领域广泛应用。该架构融合了双向长短时记忆网络 (Bidirectional Long Short-Term Memory, BiLSTM)[^1]、改进的卷积神经网络 (Iterated Dilated Convolutional Neural Network, IDCNN)[^2]、注意力机制 (Attention Mechanism)[^3] 条件随机场 (Conditional Random Field, CRF)[^4]。 #### 双向长短时记忆网络 (BiLSTM) BiLSTM 能够捕捉输入序列中的长期依赖关系,通过前向 LSTM 反向 LSTM 的结合来获取上下文信息。这种结构使得模型可以同时利用过去未来的语境特征[^1]。 ```python import torch.nn as nn class BiLSTM(nn.Module): def __init__(self, input_size, hidden_size, num_layers=1): super(BiLSTM, self).__init__() self.lstm = nn.LSTM(input_size, hidden_size, num_layers=num_layers, bidirectional=True, batch_first=True) def forward(self, x): output, _ = self.lstm(x) return output ``` #### 改进的卷积神经网络 (IDCNN) IDCNN 使用膨胀卷积层替代传统 CNN 中的标准卷积操作,从而扩大感受野而不增加参数量。迭代应用这些稀疏连接有助于好地提取局部模式并保持时间分辨率[^2]。 ```python from tensorflow.keras.layers import LayerNormalization, Conv1D def idcnn_block(inputs, filters, kernel_size, dilation_rate): convolved = Conv1D(filters=filters, kernel_size=kernel_size, padding='same', dilation_rate=dilation_rate)(inputs) normalized = LayerNormalization()(convolved) activated = tf.keras.activations.relu(normalized) return activated ``` #### 注意力机制 (Attention) 引入自注意或全局注意模块能够增强模型对于重要位置的关注度,允许灵活地加权不同部分的信息贡献程度。这特别适用于解决长距离依赖问题以及提高预测准确性[^3]。 ```python import numpy as np def attention(query, key, value): scores = np.dot(query, key.T) / np.sqrt(key.shape[-1]) p_attn = softmax(scores, axis=-1) return np.dot(p_attn, value), p_attn ``` #### 条件随机场 (CRF) 最后加入 CRF 层可以在解码阶段考虑标签之间的转移概率,优化整个句子级别的输出分布而非单个标记独立决策。这对于命名实体识别等任务尤为重要[^4]。 ```python from transformers import BertForTokenClassification model = BertForTokenClassification.from_pretrained('bert-base-cased', num_labels=len(label_list)) # Assuming `label_list` contains all possible labels. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值