1.词性标注任务的基本分析

2.训练集所需要构筑的数据

A:词—词性统计库
B:bigram模型下wi—wi−1w_i—w_{i-1}wi​—wi−1​统计库
pi:句首词词性统计库

#给每个单词和词性一个标号,并留下标号和词性转换的字典
def generate_id_dict():word2id,id2word = {},{} #word2id:{apple:0,banana:2...} id2word:{0:apple,1:banana}tag2id,id2tag = {},{} #tag2id:{NNP:0,VB:1...} id2tag:{0:NNP,1:VB}with open("traindata.txt") as file:for line in file:line = line.split('/')word,tag = line[0],line[1].rstrip()#如果字典中没有出现过该单词或者tag,则新开一个,id正好为当前字典长度if word not in word2id:word2id[word] = len(word2id)id2word[len(word2id)] = wordif tag not in tag2id:tag2id[tag] = len(tag2id)id2tag[len(tag2id)] = tagreturn [word2id,id2word,tag2id,id2tag]word2id,id2word,tag2id,id2tag = generate_id_dict()def generate_parameter():#词性个数N = len(tag2id)#单词个数M = len(word2id)#初始化A、B、piA = np.zeros((N,M))B = np.zeros((M,M))pi = np.zeros(N)#统计计算A、B、piwith open("traindata.txt") as file:prev_tag = ""for line in file:line = line.split('/')wordId,tagId = word2id[line[0]],tag2id[line[1].rstrip()]#根据是否是首单词进行更新参数A[tagId][wordId] += 1if prev_tag == "":pi[tagId] += 1else:B[tag2id[prev_tag]][tagId] += 1#更新prev_tagif line[0] == '.':prev_tag = ""else:prev_tag = line[1].rstrip()pi /= sum(pi)for i in range(N):A[i] /= sum(A[i])B[i] /= sum(B[i])return [N,M,A,B,pi]

3维特比算法求最优路径

def veterbi(x):#把英文句子变成单词id列表x = [word2id[word] for word in x.split(" ")]T = len(x)#dp(i,j)表示从一开始到第i个单词选第j个词性的最高分数dp = np.zeros((T,N))#ptr用来标注选择#ptr(i,j)代表第i个单词选j,则上一个单词选ptr(i,j)ptr = np.zeros((T,N),dtype=int)#base casefor j in range(N):dp[0][j] = np.log(pi[j]) + np.log(A[j][x[0]])for i in range(1,T):#每个单词for j in range(N):#每个词性dp[i][j] = -999999999for k in range(N):#遍历i-1,i之间每一个路径score = dp[i-1][k] + np.log(B[k][j]) + np.log(A[j][x[i]])if score > dp[i][j]:dp[i][j] = scoreptr[i][j] = kbest_seq = [0 for i in range(T)]#找出最后一个单词的词性best_seq[T-1] = np.argmax(dp[T-1])#从后往前找每个词的词性for i in range(T-2,-1,-1):best_seq[i] = ptr[i+1][best_seq[i+1]]#返回序列for i,value in enumerate(best_seq):best_seq[i] = id2tag[value+1]return best_seq

输入句子测试

x = "Social Security number , passport number and details about the services provided for the payment"
viterbi(x)

测试效果:

游离态GLZ的NLP任务2——用维特比算法实现词性标注相关推荐

  1. 采用维特比算法完成词性标注(含python代码)

    本文所用训练集: 链接:https://pan.baidu.com/s/1fK--_PrEhckKUSrajHGkEw 提取码:aehg 文章目录 "词性标注"的国内外研究现状: ...

  2. 维特比算法的java实现_原创:维特比算法

    看了宗成庆博士的<统计自然语言处理(中文信息处理)>的第六章,对维特比算法有着非常精辟的讲解.把其中的讲解上传上来,个人感觉比较正统. 今天用Java实现了这个算法,也可以转换为C代码: ...

  3. 隐马尔可夫模型HMM+维特比算法(Viterbi Algorithm)进行词性标注代码实现(自然语言处理课程第二次作业)

    文章目录 一.理论描述 二.算法描述 三.详例描述 具体过程 分析题目 数据预处理 转移概率矩阵: 发射概率矩阵: HMM+维特比算法进行词性标注 开始进行词性标注: The: bear: is: o ...

  4. 维特比算法 python_HMM-维特比算法理解与实现(python)

    解码问题 给定观测序列 \(O=O_1O_2...O_T\),模型 \(\lambda (A,B,\pi)\),找到最可能的状态序列 \(I^∗=\{i^∗_1,i^∗_2,...i^∗_T\}\) ...

  5. 【深度】从朴素贝叶斯到维特比算法:详解隐马尔科夫模型

    详解隐马尔科夫模型 作者:David S. Batista 选自:机器之心 本文首先简要介绍朴素贝叶斯,再将其扩展到隐马尔科夫模型.我们不仅会讨论隐马尔科夫模型的基本原理,同时还从朴素贝叶斯的角度讨论 ...

  6. 维特比算法 python_维特比算法 实现中文分词 python实现

    最近我在学习自然语言处理,相信大家都知道NLP的第一步就是学分词,但分词≠自然语言处理.现如今分词工具及如何使用网上一大堆.我想和大家分享的是结巴分词核心内容,一起探究分词的本质. (1).基于前缀词 ...

  7. viterbi-algorithm 维特比算法的例子解析

    维特比算法的目的: 寻找最可能的隐藏状态序列(Finding most probable sequence of hidden states) 关于原理的讲解可以参考下面两篇文章,讲的比较清楚 小白给 ...

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

    NLP作业01:请利用HMM实现词性标注 目录 NLP作业01:请利用HMM实现词性标注 一.作业头 二.对HMM模型进行介绍 三. 估计HMM的模型参数 四.基于维特比算法进行解码 五. 词性标注结 ...

  9. 条件随机场(CRF) - 4 - 学习方法和预测算法(维特比算法)

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了 ...

最新文章

  1. Blanket PO(总括订单)
  2. 剑指offer-二叉搜索树的后序遍历序列
  3. linux中mysql与eclipse_Linux下eclipse CDT及mysql安装,c++访问mysql数据库
  4. HDFS HA与QJM(Quorum Journal Manager)介绍及官网内容整理
  5. 从内置函数看 Python 的设计思想:len(x) 是否击败 x.len(),
  6. mysql 字段类似字段值6_MySQL面试题
  7. 数据库每日一题(易错)
  8. Python之Django之views中视图代码重复查询的优化
  9. 关于STM32库中 __IO 修饰符(volatile修饰符,反复无常的意思)
  10. Java 关键字super和this的使用及区别
  11. 第二部分 python基础 day10\11\12 运算符与基本数据类型
  12. 二广高速公路4标段道路设计--武汉理工大学本科生毕业设计
  13. 电机与拖动综合控制实验matlab,电机与拖动基础及MATLAB仿真
  14. aes key iv从mysql_OpenSSL AES 算法中 Key 和 IV 是如何生成的?
  15. 大厂技术实现 | 爱奇艺短视频推荐业务中的多目标优化实践 @推荐与计算广告系列
  16. 部门来了一位前阿里的大神…
  17. 通过webSocket实现app运动数据在网页实时显示
  18. ibm p740做虚拟服务器,POWER740 主机板的拆除与安装图文说明
  19. ICRA 2021| SLAM方向论文汇总
  20. 从《西游》《魔界》看东西方的团队与项目管理

热门文章

  1. 如何体现业务流程的执行力、效率和效益?
  2. Android 面试题总结2018(一)
  3. Java实现文字横向转竖向
  4. LeetCode 297. 二叉树的序列化与反序列化 | Python
  5. 30岁改行还来得及吗?
  6. Python ThreadPoolExecutor线程池
  7. rs232接口_充分利用M.2接口:乐扩M.2转2口RS232串口卡
  8. IGS钟差数据文件格式
  9. QT 手写识别功能的实现
  10. 防干烧定时省心 康巴赫304不锈钢蒸锅评测