HMM & NER

发布于 24 天前  2 次阅读


https://blog.csdn.net/gary101818/article/details/121864598

"BIO"的实体标签:

自(B-LOC)贸(I-LOC)区(1I-LOC),这三个字都对应一个"地名"的标签,但是第一个字属于实体开头的字,所以使用"B"开头的标签,后面两个字的标签都是"I"开头。

隐马尔可夫模型

HMM模型描述的就是由这些隐状态序列(实体标记)生成可观测结果(可读文本)的过程

假设观测序列是汉字组成的集合,v表示单个字,M表示句子的字数

$$ V_{obs}=\{v_1,v_2,...,v_M\} $$

假设所有隐藏状态集合为$Q_{hidden}$,有N种隐藏状态,name命名实体数据里面有如下表示:

$$ Q_{hidden}=\{q_1,q_2,...,q_N\} $$

接下来,有一串序列文本O,有T个字(引入时刻t,T个时刻),其对应的实体标记隐状态I:

$$ O = \{o_1,o_2,...,o_T\} $$

$$ I=\{i_1,i_2,...,i_T\} $$

HMM 的定义建立在两个基本假设的前提上:

1)齐次马尔科夫假设 齐次马尔科夫假设,通俗地说就是 HMM 的任一时刻 t 的某一状态只依赖于其前一时刻的状态(单向),与其它时刻的状态及观测无关,也与时刻 t 无关。 2)观测独立假设 观测独立性假设,是任一时刻的观测只依赖于该时刻的马尔科夫链的状态,与其他观测及状态无关。 以上这两个假设是 HMM 的核心,之后的公式推导都是依赖这两个假设成立的基础上进行的。

参数

状态转移概率

转移概率(基于齐次马尔科夫假设)$P(i_t|i_{t-1})$指隐状态从t-1时刻转向t时刻的概率,假设此时N=7(即实体标签种类有7个,7个隐藏状态),那么就有NxN种转换路径

(存疑问,这里的状态为什么同一刻表示7种,这个隐状态指开始时单字的概率吗?看了代码发现后确实)

发射概率

基于观测独立假设,任意时刻观测Ot,只依赖于当前时刻的隐状态I_t,也就是$P(O_t|i_t)$,V观测序列有m个字,每种实体标签(隐状态)可以生成m种不同的汉字。这一过程可以用一个发射概率矩阵来表示,他的维度是N*M。

初始隐状态概率

Π的计算可以理解为qi在第一个字的次数/总次数

Coding

https://blog.csdn.net/qq_41496421/article/details/127623738

tag2idx字典

可以看出tag2idx时用来存储实体类别的,0标识为无用时刻(?)

通过将文本序列切分,将其与隐状态形成对应关系

状态转移矩阵的大小为 实体标签状态数量x实体标签状态数量

发射矩阵大小为 实体标签状态数量x字典大小

运算过程忽略

进入到predict实现

使用维特比算法进行序列预测

进入到valid验证

同样适用维特比算法

# 打印详细分数报告,包括precision(精确率),recall(召回率),f1-score(f1分数),support(个数),digits=3代表保留3位小数
print(metrics.classification_report(
    y_true, y_pred, labels=sort_labels[1:]
))

这是直接调函数计算指标的,

提到的微指标和宏指标都可以计算


间桐桜のお菓子屋さん