Python词性标注HMM+viterbi实现

基于HMM的词性标注方法 文章目录1 HMM模型概念2序列标注问题 (Sequence Labeling Problem)3 基于HMM的词性标注方法3.1 HMM词性标记模型3.2 HMM词性标记计算3.3 预测问题(解码问题)4 HMM词性预测的缺点 1 HMM模型概念 首先来理解以下什么是HMM,HMM是隐马尔可夫模型(Hidden Markov Model)的简称,是一种统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析。 为了比较容易上手, 阅读详情

一些理论

概率图模型

利用图来表示与模型有关的变量的联合概率分布

贝叶斯网络

将随机变量作为结点,若两个随机变量相关或者不独立,则将二者连接一条边;若给定若干随机变量,则形成一个有向图,即构成一个网络。

如果该网络是有向无环图,则这个网络称为贝叶斯网络。

A
B
C
D

p ( A , B , C , D ) = P ( A ) P ( B ∣ A ) P ( C ∣ A , B ) P ( D ∣ C ) p(A,B,C,D)=P(A)P(B|A)P(C|A,B)P(D|C) p(A,B,C,D)=P(A)P(B∣A)P(C∣A,B)P(D∣C)

马尔科夫模型

若贝叶斯网络退化成线性链,则得到马尔科夫模型。

 ...... 
X1
X2
X3
Xn

已知 n n n 个有序随机变量,根据贝叶斯定理,其联合分布可写成条件分布的连乘
p ( x 1 , x 2 , . . . x n ) = ∏ i = 1 n p ( x i ∣ x i − 1 , . . . x 1 ) p(x_1,x_2,...x_n) = \prod_{i=1}^n p(x_i|x_{i-1},...x_1) p(x1​,x2​,...xn​)=i=1∏n​p(xi​∣xi−1​,...x1​)

马尔科夫模型是指,假设序列中的任一随机变量只与它的前 1 1 1 个变量有关,与更早的变量条件独立
p ( x i ∣ x i − 1 , . . . x 1 ) = p ( x i ∣ x i − 1 ) p(x_i|x_{i-1},...x_1) = p(x_i|x_{i-1}) p(xi​∣xi−1​,...x1​)=p(xi​∣xi−1​)

在此假设下,其联合分布可简化为
p ( x 1 , x 2 , . . . x n ) = p ( x 1 ) ∏ i = 2 n p ( x i ∣ x i − 1 ) p(x_1,x_2,...x_n) = p(x_1) \prod_{i=2}^n p(x_i|x_{i-1}) p(x1​,x2​,...xn​)=p(x1​)i=2∏n​p(xi​∣xi−1​)

为了表达当前变量与更早的变量之间的关系,可引入高阶马尔科夫性,指当前随机变量与它的前 m m m 个变量有关
p ( x 1 , x 2 , . . . x n ) = ∏ i = 1 n p ( x i ∣ x i − 1 , . . . x i − m ) p(x_1,x_2,...x_n) = \prod_{i=1}^n p(x_i|x_{i-1},...x_{i-m}) p(x1​,x2​,...xn​)=i=1∏n​p(xi​∣xi−1​,...xi−m​)

隐马尔科夫模型

对于离散型随机变量
显性序列: X = x 1 , x 2 , . . . x n X=x_1,x_2,...x_n X=x1​,x2​,...xn​
隐性序列: Z = z 1 , z 2 , . . . z n Z=z_1,z_2,...z_n Z=z1​,z2​,...zn​

显性序列 X X X 已知,求解最大概率的隐性序列 Z Z Z ,即是最大化 p ( Z ∣ X ) p(Z|X) p(Z∣X)

p ( Z ∣ X ) = p ( X ∣ Z ) p ( Z ) = p ( x 1 , x 2 , . . . x n ∣ z 1 , z 2 , . . . z n ) p ( z 1 , z 2 , . . . z n ) p(Z|X)=p(X|Z)p(Z)= p(x_1,x_2,...x_n|z_1,z_2,...z_n) p(z_1,z_2,...z_n) p(Z∣X)=p(X∣Z)p(Z)=p(x1​,x2​,...xn​∣z1​,z2​,...zn​)p(z1​,z2​,...zn​)

根据马尔科夫假设,任一随机变量只与它的前 1 1 1 个变量有关

p ( x 1 , x 2 , . . . x n ∣ z 1 , z 2 , . . . z n ) = ∏ i = 1 n p ( x i ∣ z i ) p(x_1,x_2,...x_n|z_1,z_2,...z_n)=\prod_{i=1}^np(x_i|z_i) p(x1​,x2​,...xn​∣z1​,z2​,...zn​)=i=1∏n​p(xi​∣zi​)

p ( z 1 , z 2 , . . . z n ) = p ( z 1 ) ∏ i = 2 n p ( z i ∣ z i − 1 ) p(z_1,z_2,...z_n) = p(z_1) \prod_{i=2}^n p(z_i|z_{i-1}) p(z1​,z2​,...zn​)=p(z1​)i=2∏n​p(zi​∣zi−1​)

模型简化为3个部分

  1. (隐态→显态)发射概率模型: ∏ i = 1 n p ( x i ∣ z i ) \prod_{i=1}^np(x_i|z_i) ∏i=1n​p(xi​∣zi​)
  2. (隐态)初始概率模型: p ( z 1 ) p(z_1) p(z1​)
  3. (隐态)转移概率模型: ∏ i = 2 n p ( z i ∣ z i − 1 ) \prod_{i=2}^n p(z_i|z_{i-1}) ∏i=2n​p(zi​∣zi−1​)

HMM应用之——隐序列解码(词性标注)

1、基础配置、数据预处理

import numpy as np, pandas as pd

START = 'start'  # 句始tag
END = 'end'  # 句末tag
NOUN = 'subj'  # 名词
ADV = 'adv'  # 副词
ADJ = 'adj'  # 形容词

corpus = np.array([
    ('我', NOUN), ('很', ADV), ('菜', ADJ), ('。', END),
    ('我', NOUN), ('好', ADV), ('菜', ADJ), ('。', END),
    ('我', NOUN), ('很', ADV), ('好', ADJ), ('。', END),
    ('他', NOUN), ('很', ADV), ('菜', ADJ), ('。', END),
    ('他', NOUN), ('好', ADV), ('菜', ADJ), ('。', END),
    ('他', NOUN), ('很', ADV), ('好', ADJ), ('。', END),
    ('菜', NOUN), ('很', ADV), ('好', ADJ), ('。', END),
    ('我', NOUN), ('菜', ADJ), ('。', END),
    ('我', NOUN), ('好', ADJ), ('。', END),
    ('他', NOUN), ('菜', ADJ), ('。', END),
    ('他', NOUN), ('好', ADJ), ('。', END),
    ('菜', NOUN), ('好', ADJ), ('。', END),
    ('我', NOUN), ('好', ADV), ('好', ADJ), ('。', END),
    ('他', NOUN), ('好', ADV), ('好', ADJ), ('。', END),
], dtype=str)

words = sorted(set(corpus[:, 0]))
tags = sorted(set(corpus[:, 1]))

W = len(words)  # 词汇量
T = len(tags)   # 词性种类数

word2id = {words[i]: i for i in range(W)}
tag2id = {tags[i]: i for i in range(T)}
id2tag = {i: tags[i] for i in range(T)}

2、HMM参数训练

SMOOTHNESS = 1e-8  # 平滑参数

emit_p = np.zeros((T, W)) + SMOOTHNESS  # emission_probability
start_p = np.zeros(T) + SMOOTHNESS  # start_probability
trans_p = np.zeros((T, T)) + SMOOTHNESS  # transition_probability

prev_tag = START  # 前一个tag
for word, tag in corpus:
    wid, tid = word2id[word], tag2id[tag]
    emit_p[tid][wid] += 1
    if prev_tag == START:
        start_p[tid] += 1
    else:
        trans_p[tag2id[prev_tag]][tid] += 1
    prev_tag = START if tag == END else tag  # 句尾判断

3、频数 --> 概率对数

取对数,防止下溢,乘法运算转换成更简单的加法运算
∑ i = 1 n ln ⁡ p ( x i ∣ z i ) + ln ⁡ p ( z 1 ) + ∑ i = 2 n ln ⁡ p ( z i ∣ z i − 1 ) \sum_{i=1}^n \ln p(x_i|z_i) + \ln p(z_1) + \sum_{i=2}^n \ln p(z_i|z_{i-1}) i=1∑n​lnp(xi​∣zi​)+lnp(z1​)+i=2∑n​lnp(zi​∣zi−1​)

start_p = np.log(start_p / sum(start_p))
for i in range(T):
    emit_p[i] = np.log(emit_p[i] / sum(emit_p[i]))
    trans_p[i] = np.log(trans_p[i] / sum(trans_p[i]))

隐→显 发射矩阵

pd.DataFrame(emit_p, tags, words)

初始隐态矩阵

pd.DataFrame(start_p.reshape(1, T), ['START'], tags)

隐态转移矩阵

pd.DataFrame(trans_p, tags, tags)

4、维特比算法

sentence = list('菜好好')
obs = [word2id[w] for w in sentence]  # 观测序列
le = len(obs)  # 序列长度

# 动态规划矩阵
dp = np.array([[-1e99] * T] * le)  # 节点最大概率对数
path = np.zeros((le, T), dtype=int)  # 节点转移记录

for j in range(T):
    dp[0][j] = start_p[j] + emit_p[j][obs[0]]
    path[0][j] = -1

for i in range(1, le):
    for j in range(T):
        dp[i][j], path[i][j] = max(
            (dp[i - 1][k] + trans_p[k][j] + emit_p[j][obs[i]], k)
            for k in range(T))

节点最大概率矩阵

pd.DataFrame(dp.T, tags, sentence)

节点转移记录矩阵

pd.DataFrame(path.T, tags, sentence)

隐态序列标号

states = [np.argmax(dp[le - 1])]
# 从后到前的循环来依次求出每个单词的词性
for i in range(le - 2, -1, -1):
    states.insert(0, path[i + 1][states[0]])

5、标注结果打印

for word, tid in zip(sentence, states):
    print(word, id2tag[tid])

菜 subj
好 adv
好 adj
。 end

附录

语料地址:
https://github.com/AryeYellow/PyProjects/blob/master/NLP/Viterbi-词性标注/POS_tagging.ipynb
GitHub地址:
https://github.com/AryeYellow/PyProjects/blob/master/NLP/Viterbi-词性标注/HMM.ipynb

注释

encn
Probabilistic Graphical Model概率图模型
Bayesian Network贝叶斯网络
Directed Acyclic Graph有向无环图
HMMHidden Markov Model
part-of-speech tagging词性标注
observationn. 观察
emissionn. 发射
transitionn. 过渡;转变
dynamic programming动态规划

完整代码

import numpy as np

"""配置"""
SMOOTHNESS = 1e-8
START = 'start'  # 句始tag
END = 'end'  # 句末tag
NOUN = 'subj'  # 名词
ADV = 'adv'  # 副词
ADJ = 'adj'  # 形容词

"""数据预处理"""
corpus = np.array([
    ('我', NOUN), ('很', ADV), ('菜', ADJ), ('。', END),
    ('我', NOUN), ('好', ADV), ('菜', ADJ), ('。', END),
    ('我', NOUN), ('很', ADV), ('好', ADJ), ('。', END),
    ('他', NOUN), ('很', ADV), ('菜', ADJ), ('。', END),
    ('他', NOUN), ('好', ADV), ('菜', ADJ), ('。', END),
    ('他', NOUN), ('很', ADV), ('好', ADJ), ('。', END),
    ('菜', NOUN), ('很', ADV), ('好', ADJ), ('。', END),
    ('我', NOUN), ('菜', ADJ), ('。', END),
    ('我', NOUN), ('好', ADJ), ('。', END),
    ('他', NOUN), ('菜', ADJ), ('。', END),
    ('他', NOUN), ('好', ADJ), ('。', END),
    ('菜', NOUN), ('好', ADJ), ('。', END),
    ('我', NOUN), ('好', ADV), ('好', ADJ), ('。', END),
    ('他', NOUN), ('好', ADV), ('好', ADJ), ('。', END),
], dtype=str)

words = sorted(set(corpus[:, 0]))
tags = sorted(set(corpus[:, 1]))

W = len(words)  # 词汇量
T = len(tags)  # 词性种类数

word2id = {words[i]: i for i in range(W)}
tag2id = {tags[i]: i for i in range(T)}
id2tag = {i: tags[i] for i in range(T)}

"""HMM训练"""
emit_p = np.zeros((T, W)) + SMOOTHNESS  # emission_probability
start_p = np.zeros(T) + SMOOTHNESS  # start_probability
trans_p = np.zeros((T, T)) + SMOOTHNESS  # transition_probability

prev_tag = START  # 前一个tag
for word, tag in corpus:
    wid, tid = word2id[word], tag2id[tag]
    emit_p[tid][wid] += 1
    if prev_tag == START:
        start_p[tid] += 1
    else:
        trans_p[tag2id[prev_tag]][tid] += 1
    prev_tag = START if tag == END else tag  # 句尾判断

# 频数 --> 概率对数
start_p = np.log(start_p / sum(start_p))
for i in range(T):
    emit_p[i] = np.log(emit_p[i] / sum(emit_p[i]))
    trans_p[i] = np.log(trans_p[i] / sum(trans_p[i]))


def viterbi(sentence):
    """维特比算法"""
    obs = [word2id[w] for w in sentence.strip()]  # 观测序列
    le = len(obs)  # 序列长度

    # 动态规划矩阵
    dp = np.zeros((le, T))  # 记录节点最大概率对数
    path = np.zeros((le, T), dtype=int)  # 记录上个转移节点

    for j in range(T):
        dp[0][j] = start_p[j] + emit_p[j][obs[0]]

    for i in range(1, le):
        for j in range(T):
            dp[i][j], path[i][j] = max(
                (dp[i - 1][k] + trans_p[k][j] + emit_p[j][obs[i]], k)
                for k in range(T))

    # 隐序列
    states = [np.argmax(dp[le - 1])]
    # 从后到前的循环来依次求出每个单词的词性
    for i in range(le - 2, -1, -1):
        states.insert(0, path[i + 1][states[0]])

    # 打印
    for word, tid in zip(sentence, states):
        print(word, id2tag[tid])


"""测试"""
x = '菜好好。'
viterbi(x)

补充:马尔科夫网络、马尔科夫模型、马尔科夫过程、贝叶斯网络的区别

  1. 将随机变量作为结点,若两个随机变量相关或者不独立,则将二者连接一条边;若给定若干随机变量,则形成一个有向图,即构成一个网络。
  2. 如果该网络是有向无环图,则这个网络称为贝叶斯网络。
  3. 如果这个图退化成线性链的方式,则得到马尔科夫模型;因为每个结点都是随机变量,将其看成各个时刻(或空间)的相关变化,以随机过程的视角,则可以看成是马尔科夫过程。
  4. 若上述网络是无向的,则是无向图模型,又称马尔科夫随机场。
  5. 如果在给定某些条件的前提下,研究这个马尔科夫随机场,则得到条件随机场。
  6. 如果使用条件随机场解决标注问题,并且进一步将条件随机场中的网络拓扑变成线性的,则得到线性链条件随机场。
【NLP】HMM 词性标注&中文分词 HMM中文分词是一种:字标注法。即将分词任务转化成对每个字进行标注标签问题。 任务介绍 对中文句子进行分词,比如: 原句: 我喜欢机器学习。 分词后: 我\喜欢\机器学习。 问题分析 对每个字赋予一个标签,‘B’代表非词尾,‘E’表示词尾。则上述例子应该被标记为: 标记后: 我E喜B欢E机B器B学B习E。 假设观测序列为O={O1,O2,...,ON}O = \{O_1, O_2, ...... 阅读详情

相关推荐

别再死记硬背了!用Python手把手带你复现Viterbi算法,搞定HMM预测(附完整代码)

本文详细介绍了如何使用Python从零实现Viterbi算法,解决隐马尔可夫模型(HMM)的序列解码问题。通过生动的乡村诊所案例和完整代码示例,帮助读者理解动态规划在HMM中的应用,并掌握算法实现的关键技巧。文章还提供了实战调试建议和扩展应用场景,适合自然语言处理和语音识别等领域的学习者。

weixin_30561425的博客 594

【中文信息处理】实验三四_基于HMM的词性标注

0、问题描述: 实验三:基于HMM的词性标注 任务:将语料分为测试集、训练集(一般比例1:4),训练集上:统计初始概率,发射概率,转移概率,估算所需的参数。 实验四: 任务1:利用Viterbi算法,实现基于HMM的词性标注。 任务2:编写评价程序,计算词性标注的准确率。 ...

许多仙的博客 2722

基于HMM+Viterbi算法的词性标注 Python

1 概述 隐含马尔可夫模型(HMM)被认为是解决大多数自然语言处理问题最快速、有效的方法; 20世纪70年代被应用在语音处理上,后被广泛应用在汉 语自动分词、词性标注、统计机器翻译等方面。 本次文章将介绍基于HMM和Viterbi算法进行词性标注。 2 理论描述 2.1 HMM五元组 HMM是一个五元组(O,Q,O0O_0O0​,A,B): O:{o1o_1o1​…oto_tot​}是状态集合,...

Chase1998的博客 7754

NLP作业01:请利用HMM实现词性标注

4、递推(状态转移方程):d p [ i ] [ j ] = m a x k ∈ { p o s } ⁡ ( d p [ i − 1 ] [ k ] × t r a n s [ k , j ] ) × e m i t [ j , w i ]2、记录路径 path[ i ] [ j ] path[i][j]path[i][j]:表示d p [i][j]dp[i][j]dp[i][j]为最大概率时,第i − 1 i-1i−1个字符的标签。在词性标注中,词串可视为可观察序列,词的词性可视为隐序列。

weixin_55177322的博客 362

基于HMM+维特比算法的词性标注实验 附完整C++实现代码

一、理论描述 1.在特定条件下,系统在时间t的状态只与其在时间t-1的状态相关 。这一随机过程称为马尔可夫过程。 2.一个马尔可夫模型由三个部分组成:若干个状态;初始概率;转移概率矩阵。马尔可夫模型中,每个状态代表了一个可观察到的事件,因此如果知道某一事件的观察序列,可应用马尔可夫模型这一统计模型。 3.当事件是不可直接观测到的,就称事件是隐状态。而可观察事件的状态为可观察状态。隐马尔可夫模型用于估算可观察事件背后的事件的概率,被认为是解决大多数自然语言处理问题最快速、有效的方法; 成功解决了复杂的语音识别

weixin_56336619的博客 2269

中文自动分词 哈工大-中文信息处理实验二 实验报告

中文自动分词 1. 使用任意分词方法实现汉语自动分词; 2. 给出至少1000个句子的分词结果(以附件形式); 3. 计算出分词结果的正确率,并给出计算依据; 4. 用实例说明所用分词方法分别对“交叉歧义”和“组合歧义”的处理能力; 5. 提交实验报告,给出详细实验过程和结果;提交源代码和可执行程序。

python词性标注_Python词性标注HMM+viterbi实现

大纲:1. 任务描述2.一些理论3. 隐马尔科夫模型4. HMM应用之——隐序列解码(词性标注)5. 附录6. 完整代码1. 任务描述标注英文句子中每个单词的词性,属于HMM任务中的预测过问题(已知参数和x,求z)。场景:给定一个英文句子X=’I like …’其中每个单词由 表示, 表示那个单词对应的词性。目标:给定一个句子 .可以得出每个单词对应的词性2.一些理论(1)概率图模型利用图来表示...

weixin_39559333的博客 1271

HMM模型+维特比算法实现分词词性标注.py

HMM模型+维特比算法实现分词词性标注.py

自然语言处理(NLP)- HMM+VITERBI算法实现词性标注(解码问题)(动态规划)(Python实现)

NLP- HMM+维特比算法进行词性标注(Python实现) 维特比算法针对HMM解码问题,即解码或者预测问题(下面的第二个问题),寻找最可能的隐藏状态序列:对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列。也就是说给定了HMM的模型参数和一个观测序列,计算一系列的隐状态。给定观测序列,求最可能的对应的隐状态序列。 Viterbi: ...

bensonrachel的博客 5718

《UE4游戏开发》之 《查cook资源失败,问题记录》

当项目打包时,cook出错,但是从原始引擎提供的信息中,没有提示具体的那个资源出错,要查到出错资源,还是非常麻烦。 下面就材质cook出错,增加一些日志,方便查找问题做简单记录 材质cook的一个阶段,是收集MaterialShaderMap,如果在这个阶段收集的信息出错,将会在FShaderMapContent::GetOutdatedTypes函数中,因为Shaders指针指向的内存有问题而出错,通过断点发现,FShaderMapContent这个类对象指针为null,而这个类对象的来源于AllMat.

qq_21919621的博客 2581

Frida动态Hook实战:逆向美团外卖mtgsig3.0签名算法

在移动应用安全与数据爬取领域,API签名是保障请求合法性与数据完整性的核心机制。其原理是通过特定算法,将请求参数、时间戳等动态要素加密生成唯一字符串,服务器端通过验签防止数据篡改与伪造。这项技术的核心价值在于,它构建了客户端与服务器之间的可信通道,是移动端数据交互安全的基础。在自动化测试、安全审计、市场数据分析等应用场景中,理解并能够获取或绕过签名验证是关键前提。本文聚焦于美团外卖App的核心签名参数mtgsig3.0,针对其复杂的算法逻辑,提供了一套基于Frida的动态Hook解决方案。通过Hook技术,

weixin_33935636的博客 835

别再死记硬背了!用Python手把手实现Viterbi算法,5分钟搞定HMM状态解码

本文通过Python实战详细解析了Viterbi算法在隐马尔可夫模型(HMM)状态解码中的应用,从天气预测到词性标注的完整实现指南。通过动态规划核心逻辑和代码示例,帮助读者快速掌握这一经典算法,并提供了性能优化技巧与前沿发展方向的深入分析。

weixin_30614109的博客 371

基于Hmm模型和Viterbi算法的中文分词和词性标注

使用 python 实现基于Hmm模型和Viterbi算法的中文分词及词性标注;使用 最大概率算法 进行优化。最终效果:人民日报语料:分词(F1:96.189%);词性标注(F1:97.934%)

xuzf 的博客 6063

蛋白质组学实战指南 | (八)从数据到洞见:差异蛋白筛选与功能解析全流程

本文系统阐述了蛋白质组学数据分析中,从原始数据质控到差异蛋白筛选与功能解析的全流程。重点介绍了数据质量评估、差异蛋白筛选的统计方法(包括多重检验校正)、功能注释与富集分析,以及蛋白互作网络构建与关键节点识别。最后,为如何将生物信息学洞见转化为实验验证提供了清晰的规划思路,助力研究者完成从数据到生物学知识的闭环。

weixin_29250573的博客 372

个人量化系统的策略集合与赚钱之道:全栈深度解析 + 与主流开源框架对比

前三篇把系统的"骨架"拆完了——架构、工程化、部署。本篇回答最关键的问题:一句话:别人的系统是"程序员的系统"(写代码才能加策略),daily_stock_analysis 是"股民的 YAML"(写中文就能加策略)。这个差异决定了它能在多大程度上真的帮你赚钱。如果你用过 、、,加一个策略的流程是: 问题在哪?在 daily_stock_analysis 里,“策略” = 一个文件。每个 YAML 是一个自然语言描述的交易策略,包括: 看到没? ——整个策略就是一段中文,零代码。任何会写字的人都能加新策略

shiter编写程序的艺术 162

自然语言处理系列二十三》词性标注》词性标注原理》HMM词性标注

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录自然语言处理系列二十三词性标注HMM词性标注总结 自然语言处理系列二十三 词性标注 词性标注(Part-Of-Speech tagging, POS tagging)也被称为语法标注(grammatical tagging)或词类消疑(word-category disambiguation),是语料库语言学(corpus linguistics)

weixin_52610848的博客 960

【Bug已解决】codex: tool call timeout / Function execution exceeds limit — CodeX CLI 工具调用超时解决方案

CodeX CLI 工具调用超时(Bash/文件/MCP)的解决方案,含增加超时、拆分命令、后台运行、避免交互卡住与限制读取。

博客 4214

白板推导系列Pytorch-隐马尔可夫模型-解码问题

解码问题(Decoding) 解码问题就是求 argmaxI P(I∣O,λ)\underset{I}{argmax}\ P(I|O,\lambda)Iargmax​ P(I∣O,λ)​​ Viterbi算法 Viterbi算法事实上是一个动态规划的算法 这个图来自知乎 我们把概率当成距离 那么只要确定了唯一的终点,到这个终点的最大距离必然等于到前一个时间轴5个点的最大距离分别乘以这5个点到终点的距离 我们也可以用公式严格推导出这一性质 定义距离为 δt(i)=maxi1,i2,...

孤独腹地的博客 1842

工业机器人抓取目标检测与抓取姿态估计系统:基于YOLOv12与Cornell Grasping Dataset

工业机器人抓取是自动化生产中的核心环节,而精确的目标检测和抓取姿态估计是实现高效抓取的关键。本文将详细介绍如何构建一个完整的工业机器人抓取系统,该系统结合了最新的YOLOv12目标检测算法和Cornell Grasping Dataset的抓取姿态估计,并提供了用户友好的UI界面。本文详细介绍了一个完整的工业机器人抓取系统,该系统结合了YOLOv12目标检测和基于Cornell Grasping Dataset的抓取姿态估计。我们将使用PyQt5构建一个用户友好的界面,集成目标检测和抓取姿态估计功能。

YOLO 574

通信算法之283:大疆DJI云哨系统-DJI DroneID物理层协议-解速率匹配及Turbo译码

3. 完整云哨接收机,接收灵敏度。交流: 1279682290 ,2. Turbo译码模块。1. 解速率匹配模块。

leegang12的专栏 868

xmnlp,轻量级中文NLP工具包

为了方便工作学习,于是乎借鉴了一些项目并结合自己想法用 python 写了个 nlp 工具包 — xmnlp 小明NLP目前支持的功能 中文分词,词性标注 文本纠错 情感分析 文本转拼音 主要算法 中文分词,词性标注: DAG HMM + Viterbi新词发现 文本纠错: bi-gram + levenshtein 更多请关注Github项目:xmnlp 转载于:https://...

weixin_33851177的博客 616

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

使用隐马尔科夫模型标记词性

文章目录使用隐马尔科夫模型标记词性一、数据预处理二、主要方法三、代码实现实验结果 使用隐马尔科夫模型标记词性 一、数据预处理 读入数据集后,将语料中的单词,如:中国/ns,中的‘中国’存入矩阵v=[],‘ns’存入矩阵c=[],并输入词性矩阵cx: 二、主要方法 三、代码实现 数据集下载链接:https://wss1.cn/f/73kvwy7bhu6 train.py import pandas as pd cx= ['a', 'aq', 'c', 'd', 'e', 'f', 'g'

weixin_42318554的博客 503

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

02-NLP-05-使用HMM进行词性标注

使用HMM进行词性标注 这里我们用NLTK自带的Brown词库进行学习。 假设我们的单词集: words = w1 ... wN Tag集: tags = t1 ... tN P(tags | words) 正比于 P(ti | t{i-1}) * P(wi | ti) 类似贝叶斯公式(利用中间量) 为了找一个句子的tag, 我们其实就是找的最好的一套tags,让他最能够符...

weixin_34283445的博客 244

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python jieba分词学习

转载自http://www.tuicool.com/articles/QV36ru 特点 1,支持三种分词模式:     a,精确模式,试图将句子最精确地切开,适合文本分析;     b,全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;     c,搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。 2,支持繁

pinellina的博客 3310

基于HMM的词性标注

环境:python2.7 , 数据:人民日报1998年一月标注数据 原文地址:https://blog.youkuaiyun.com/say_c_box/article/details/78550659 ,原文的代码在求发射概率的时候可能有些许错误,现更改代码如下: 举个例子来说:小明和小芳是两个城市的学生,现在小明知道小芳在下雨天时待在家看电视的概率为60%、出去逛街的概率为10%,洗衣服的概率为30%...

qq_18644513的博客 3517
上一篇: Python-编辑距离-拼写检查
下一篇: 统计语言模型Python实现
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值