一、torchcrf(他不是神经网络模型)
0. 应用场景和输入输出
0.1 应用场景
自然语言处理(NLP):
- 词性标注(Part-of-Speech Tagging): 标注文本中的每个单词属于哪一类词性(名词、动词、形容词等)。
- 命名实体识别(Named Entity Recognition, NER): 识别文本中的专有名词,如人名、地点、组织名等。
- 句法分析(Syntactic Parsing): 分析句子结构,确定单词之间的关系,如主谓宾结构。
- 文本分块(Chunking): 将文本分割成有意义的块,如名词短语。
- 语义角色标注(Semantic Role Labeling): 识别句子中谓词和其论元之间的关系。
0.2 输入
特征集合:特征集合是由一系列特征函数组成,每个特征函数用于提取观测序列中特定位置的信息。
观测序列:观测序列是CRF模型需要标注的数据序列。在自然语言处理中,这通常是一个句子,其中的每个词都是一个观测。
0.3 输出
观测序列的对应标签序列,例如:
- 在词性标注中,输出序列可能是每个词的词性标签序列。
- 在命名实体识别中,输出序列可能是每个词的实体类型标签序列,如人名、地点、组织等。
1.导入
1.1 常规范式
pip install pytorch-crf
from torchcrf import CRF
1.2 案例
import torch
import torch.nn as nn
from torchcrf import CRF
2.集成在神经网络模型
2.1 位置与要求
一般是在__init__函数中,需要为函数传入一个参数num_tags.
一般放在函数尾部,作为最后一层输出层,使用
self.crf = CRF()
实例化对象。
2.2 参数
args.num_labels:模型输出的标签种类数,也是CRF层的标签数量。
batch_first = True:决定了数据以什么样的格式输入给CRF层,如果是true,则数据输入形状应该是(batch_size, seq_length, input_size),否则则是( seq_length, batch_size,input_size)
3.实例化对象的属性和方法
方法名 | 作用 | 参数 | 参数解释 |
---|---|---|---|
self.crf() | 计算得到的损失值,这是一个标量,一般取它的负值。 | seq_out,labels | seq_out : 标签的数量。labels : 真实标签,至少要拿这两个参数进行损失函数计算。 |
forward | 前向传播,用于计算损失或进行解码。 | emissions , tags , mask | emissions : 发射分数。tags : 真实标签(可选)。mask : 掩码,指示哪些位置的标签应该被计算。 |
decode | 解码发射分数以预测标签序列。 | emissions , mask | emissions : 发射分数。mask : 掩码。 |
log_likelihood | 计算给定发射分数和真实标签的对数似然。 | emissions , tags , mask | emissions : 发射分数。tags : 真实标签。mask : 掩码。 |
reset_parameters | 重置CRF层的参数。 | 无 | 无 |