【NLP】词性标注

词是自然语言处理的基本单位,自动词法分析就是利用计算机对词的形态进行分析,判断词的结构和类别。
词性(Part of Speech)是词汇最重要的特性,链接词汇和句法

词的分类

屈折语:形态分析
分析语:分词
黏着语:分词+形态分析

基本任务

单词识别&形态还原
考虑特殊的单词:prof. 缩写 不规则变形
形态还原:时态 年代 序数词 货币符号 百分号
合成词还原 seven-year-old

形态分析的一般方法

  1. 查词典
  2. 根据不同的情况查找相对应的规则对单词进行处理,如果在字典找得到该单词的原型,则结束,如果找不到,就按照未登录词处理
  3. 完全陌生的词,按照未登录词处理

汉语自动分词

汉语分词问题

单字词与词素的区分
词与短语的区分

切分歧义

交集型歧义

中国人/为了/胜利
中国/人为/了/胜利
交集串的集合称为叫交集串链,交集串个数称为链长
e.g. 中国产品质量:中国/国产/产品/品质/质量 交集串为:国,产,品,质 ,交集串链为{国,产,品,质},链长为 4

组合型歧义

门/把/手/弄/坏/了
门/把手/弄/坏/了

未登录词的识别

  1. 人名,地名,组织名
  2. 新出现的词汇

汉语分词的基本规则:合并

成语:马马虎虎
定量结构:十三区
定名组合:六点
副词片语:或多或少
重叠结构:高高低低
不可拆分词:进出口

辅助规则:切分

  1. 有明显间隔符或语义分隔的
  2. 太过复杂,正反问句,动词带双音节补语:石油/化工/业,讨论/清楚,喜欢/不/喜欢
  3. 专有名词带普通名词:京沪/铁路

分词,标注的评价方法

测试:封闭测试/开放测试
评价指标:
正确率:测试结果中正确的切分占系统总输出的比例: P = n N × 100 % P= \frac{n}{N}\times100\% P=Nn×100%
召回率:系统输出的答案里面正确的个数 5 占总正确的个数,与文本分类里的 Recall 一样: R = n N × 100 R= \frac{n}{N}\times 100% R=Nn×100
F 测度:同上一章

汉语分词的基本算法

有词典切分/无词典切分
基于规则/基于统计

最大匹配法

-有词典切分,机械切分
正向最大匹配/逆向最大匹配/双向最大匹配
e.g.他是研究生物的一位科学家,假设词典当中的最长词汇长度为 7

正向最大匹配:

先进行最大长度的切分:他是研究生物的/一位化学家
随后逐渐缩小确定第一个切分词:他/是研究生物的一位化学家
然后接着上一个切分的词继续:他/是/研究生物的一位化学家
不断循环,可以得到:他/是/研究生/物/的/一/位/化学家

逆向最大匹配:

他/是/研究/生物/的/一/位/化学家
可以看出来正向匹配和逆向匹配之间存在着差别

优缺点

程序简单,但歧义的消解能力弱,切分准确率在 95% 左右。

最少分词法(最短路径法)

记待切分词串为 S = c 1 c 2 . . . c n S=c_1c_2...c_n S=c1c2...cn,其中 c 均为单个的字,n 为串的长度且大于等于 1,建立一个节点数为 n+1 的切分有向无环图:
1

在相邻节点间创建有向边,边对应词,如果 w = c i . . . c j w = c_i...c_j w=ci...cj为一个单词,则建立有向边(Vi-1,Vj),重复建立并查看是否新词,最后直到考虑单词的长度上限停止,从所有路径中选覆盖了所有节点的尽可能长的路径作为分词结果
e.g. 他说的确实对 可以分为
他/说的/确实/对
他/说/的确/实/对
seg=4<seg=5,选择第一个分词

优缺点

简单方便,需要的资源少,但是对于多条最短路径和长句子时的复杂度表现并不好

基于语言模型的分词方式

对于一个待切分的句子 S,W 是一种可能的切分: W ∗ = arg ⁡ w max ⁡ p ( W ∣ S ) = arg ⁡ w max ⁡ p ( W ) P ( S ∣ W ) W^* = \arg\limits_w \max p(W|S) = \arg\limits_w \max p(W)P(S|W) W=wargmaxp(WS)=wargmaxp(W)P(SW),其中 pW 为语言模型,另一个则为生成模型,用了朴素贝叶斯的理论

基于 HMM 的分词方式

基于字标注的分词方式

将分词过程看成是字的分类问题,每个字具有自己固定的词位:如词首(B)词中(M)词尾(E)或单独成词(S),使得处理未登录词也可以按照字的方向去看待

生成式与判别式

总的来说,通过大量数据构建样本的概率密度模型,并以此推理,就是生成式,建立在贝叶斯与统计基础上;如果直接使用观测值判断模型,而不考虑样本如何,那么就属于对后验概率建模的判别式

未登录词的识别

困难

未登录词的识别与描述规则太多;新出现的词速度太快

对于姓名的识别

  1. 名字用字范围广,分布松散,规律不明显
  2. 姓氏和名字可以拆开使用
  3. 许多名字中的字可以与其他字关联形成交集串
  4. 缺少文义分隔
    e.g. 祝/贺老板/生意/兴隆 or 祝贺/老板/生意/兴隆
    主要采用姓名库进行识别,并在一句中对可能出现姓名的概率估值进行计算,完成对姓名存在性的判断
计算概率估值

Cname = Xmn
F ( X ) = X 作为姓氏 X 出现的总次数 F(X) = \frac{X 作为姓氏}{X 出现的总次数} F(X)=X出现的总次数X作为姓氏
F ( m ) = m 作为名字中的第二个字 m 出现的总次数 F(m) = \frac{m 作为名字中的第二个字}{m 出现的总次数} F(m)=m出现的总次数m作为名字中的第二个字
F ( n ) = n 作为名字中的第三个字 n 出现的总次数 F(n) = \frac{n 作为名字中的第三个字}{n 出现的总次数} F(n)=n出现的总次数n作为名字中的第三个字
P ( C n a m e ) = F ( X ) F ( m ) F ( n ) P(Cname) = F(X)F(m)F(n) P(Cname)=F(X)F(m)F(n)
f = ln ⁡ P ( C n a m e ) f = \ln P(Cname) f=lnP(Cname)
确定阈值:
姓氏 X 构成名字的最小阈值:
T m i n ( X ) = F ( X ) × M i n ( F ( m ) × F ( n ) ) T_{min}(X) = F(X)\times Min(F(m)\times F(n)) Tmin(X)=F(X)×Min(F(m)×F(n))
通过训练得到 X 的该阈值 T,当 f>T 时,则当前识别的汉字串为中文姓名

使用其他修饰规则

如对于维吾尔族中会出现的点符,可以通过该符号来进一步判断

对于地名机构名识别——建立对应库(略)

基于神经网络的实体识别方法

主要为 RNN(LSTM),此处不展开,详细请在 RNN 相关章节查看

词性标注

主要目的:消除词性兼类的问题
在英文中:flies(动词三单,名次复数)
在中文中:好(形容词,副词,动词),教育(名次,动词)

词性标注的一般原则

标准性:使用普遍认可的分类标准与符号集
兼容性:与已有资源尽量一致
可扩展性:方便扩充与修改

词性标注的方法

  1. 基于规则的词性标注方法
  2. 基于统计模型(学习)的词性标注方法:HMM,CRF,NN
  3. 规则和统计方法相结合的词性标注方法:TBL

HMM 隐马尔可夫模型

学习过程

给定训练数据: ( O i , Q i ) (O_i,Q_i) (Oi,Qi),O 为词序列,Q 为词性序列
训练出函数 f(O),从 O 映射到 Q,即为词序列 O 找到最优的 Q
arg ⁡ max ⁡ Q P ( Q ∣ O ) = arg ⁡ max ⁡ Q P ( O ∣ Q ) P ( Q ) \arg \max\limits_Q P(Q|O) = \arg \max\limits_Q P(O|Q)P(Q) argQmaxP(QO)=argQmaxP(OQ)P(Q)
其中 P ( O ∣ Q ) = P ( o 1 , . . . , o n ∣ q 1 , . . . q n ) = ∏ i = 1 n P i ( o i ∣ q i ) P(O|Q) = P(o_1,...,o_n|q_1,...q_n)=\prod\limits_{i=1}^nP_i(o_i|q_i) P(OQ)=P(o1,...,onq1,...qn)=i=1nPi(oiqi)
P(Q)则为语言模型,可以使用我们先前提到的 n-gram 计算:
P ( Q ) = P ( q 1 , . . . , q n ) = P ( q 1 ) P ( q 2 ∣ q 1 ) . . . P ( q n ∣ q n − 1 ) P(Q)=P(q_1,...,q_n)=P(q_1)P(q_2|q_1)...P(q_n|q_{n-1}) P(Q)=P(q1,...,qn)=P(q1)P(q2q1)...P(qnqn1)
这就是隐马尔可夫模型的原型
词性的马尔可夫链:
3

状态:t 时刻的状态为 q t q_t qt
转移概率: a i j a_{ij} aij表示从状态 i 转移到 j 的转移概率
a i j = P ( q i = j ∣ q t − 1 = i ) a_{ij} = P(q_i=j|q_{t-1} = i) aij=P(qi=jqt1=i)
∑ j = 1 N a i j = 1 \sum\limits_{j=1}^Na_{ij}=1 j=1Naij=1
起始状态:初始状态的概率向量 π = ( π 1 , . . . , π n ) \pi = (\pi_1,...,\pi_n) π=(π1,...,πn),表示各状态作为初始状态的概率
之所以使用隐马尔可夫,是因为马尔可夫只能处理表层的词序列,但是没法处理隐层的词性序列,因此拓展出了隐马尔可夫
4
在这里插入图片描述

隐马尔可夫的三个基本问题:
估算问题(计算产生观测序列的概率),解码问题(计算最优的状态序列),参数学习

观测的似然

e.g.已知每天吃冰淇淋的个数与天气的冷热程度挂钩
求解观测到 ICE CREAM 个数在 3 天里分别为 3-1-3 的概率有多大
P ( O ) = ∑ P ( O ∣ Q ) P ( Q ) P(O) = \sum P(O|Q)P(Q) P(O)=P(OQ)P(Q)
对于某个给定状态时观测的似然 P(O|Q)
如给出天气序列 H-H-C,即计算 P ( 313 ∣ H H C ) P(313|HHC) P(313∣HHC)
P ( O ∣ Q ) = P ( o 1 , . . . , o n ∣ q 1 , . . . q n ) = ∏ i = 1 n P i ( o i ∣ q i ) P(O|Q) = P(o_1,...,o_n|q_1,...q_n)=\prod\limits_{i=1}^nP_i(o_i|q_i) P(OQ)=P(o1,...,onq1,...qn)=i=1nPi(oiqi)
可得 P ( 313 ∣ H H C ) = P ( 3 ∣ H ) × P ( 1 ∣ H ) × P ( 3 ∣ C ) P(313|HHC) = P(3|H)\times P(1|H)\times P(3|C) P(313∣HHC)=P(3∣H)×P(1∣H)×P(3∣C)
再计算语言模型 P(Q)
P ( H H C ) = P ( H ∣ S T A R T ) × P ( H ∣ H ) × P ( C ∣ H ) P(HHC)=P(H|START)\times P(H|H)\times P(C|H) P(HHC)=P(HSTART)×P(HH)×P(CH)
然后综合到一起:
P ( 313 , H H C ) = P ( 3 ∣ H ) × P ( 1 ∣ H ) × P ( 3 ∣ C ) × P ( H ∣ S T A R T ) × P ( H ∣ H ) × P ( C ∣ H ) P(313,HHC) = P(3|H)\times P(1|H)\times P(3|C)\times P(H|START)\times P(H|H)\times P(C|H) P(313,HHC)=P(3∣H)×P(1∣H)×P(3∣C)×P(HSTART)×P(HH)×P(CH)
最后对所有天气状态序列求和
但是我们可以看到这样效率非常低,所以我们引入前向算法和后向算法

前向算法:格栅

111

在这里插入图片描述.
在这里插入图片描述

后向算法

β t ( i ) = P ( o t , . . . , o T ∣ q t = i , λ ) \beta_t(i) = P(o_t,...,o_T|q_t = i,\lambda) βt(i)=P(ot,...,oTqt=i,λ)
与前向算法不同之处在于 q t = j q_t = j qt=j是推导对象还是已知数据,后向算法往前推导
初始化: β T + 1 = 1 , 1 ≤ i ≤ N \beta_{T+1}=1,1\le i\le N βT+1=1,1iN
最终得到: P ( O ∣ λ ) = ∑ i = 1 N π i β 1 ( i ) P(O|\lambda) = \sum\limits_{i=1}^N\pi_i\beta_1(i) P(Oλ)=i=1Nπiβ1(i)
前向算法与后向算法结合可以得到: P ( O ∣ λ ) = ∑ i = 1 N α t ( i ) β t ( i ) , 1 ≤ t ≤ T + 1 P(O|\lambda) = \sum\limits_{i=1}^N\alpha_t(i)\beta_t(i),1 \le t \le T+1 P(Oλ)=i=1Nαt(i)βt(i),1tT+1

解码

已知 Ice Cream 观测序列为 313,且拥有 HMM 的参数 A(状态转移矩阵)B(概率发射矩阵),找到 313 最可能对应的天气状态序列(隐层序列)
一种方法:对于一个观测序列 O 计算 P(Q|O),选取概率最大值对应的状态序列

Viterbi Algorithm

1111

在这里插入图片描述
meaning

参数学习

如何找到 HMM 中最好的 A和 B: arg ⁡ max ⁡ λ P ( O t r a i n i n g ∣ λ ) \arg \max\limits_\lambda P(O_{training}|\lambda) argλmaxP(Otrainingλ)
可以分为有监督和无监督两种

有监督

基于已知的正确答案,统计状态的转移,与状态到观测的发射

无监督

基于不完全的数据来进行估计,很难得到解析解,但是可以通过 Baum-Welch (Forward-Backward) 局部最大化算法来逼近

前向-后向算法

随机取一个 lambda,可以计算出似然概率 P(O|lambda)
通过计算,可以看到哪些转移与发射的使用率最高,相对应的提高他们的概率,可以获得新的 lambda,就可以得到新的似然概率,不断逼近局部最优解
(没看明白)

两类概率

TAG 之间的转移概率

e.g.冠词后面即可以接形容词,也可以接名词
极大似然估计法,通过有标记预料估计 P(NN|OT)

词的似然概率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s 1.24.x之后如果rest 访问apiserver

1.由于 在 1.24 &#xff08;还是 1.20 不清楚了&#xff09;之后&#xff0c;下面这两个apiserver的配置已经被弃用 了&#xff0c;简单的说就是想不安全的访问k8s是不可能了&#xff0c;所以只能走安全的访问方式也就是 https://xx:6443了&#xff0c;所以需要证书。 - --ins…

Git系列:git rm 的高级使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【go项目01_学习记录15】

重构MVC 1 Article 模型1.1 首先创建 Article 模型文件1.2 接下来创建获取文章的方法1.3 新增 types.StringToUint64()函数1.4 修改控制器的调用1.5 重构 route 包1.6 通过 SetRoute 来传参对象变量1.7 新增方法&#xff1a;1.8 控制器将 Int64ToString 改为 Uint64ToString1.9…

【数据结构】栈和队列的相互实现

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持&#xff01; 1.用栈实现队列 当队列中进入这些元素时&#xff0c;相应的栈1中元素出栈顺序与出队列相反&#xff0c;因此我们可以使用两个栈来使元素的出栈顺序相同&#xff1b; 通过将栈1元素出栈&#xff0c;再…

Databend 倒排索引的设计与实现

倒排索引是一种用于全文搜索的数据结构。它的主要功能是将文档中的单词作为索引项&#xff0c;映射到包含该单词的文档列表。通过倒排索引&#xff0c;可以快速准确地定位到与查询词相匹配的文档列表&#xff0c;从而大幅提高查询性能。倒排索引在搜索引擎、数据库和信息检索系…

前端 CSS 经典:3D 渐变轮播图

前言&#xff1a;无论什么样式的轮播图&#xff0c;核心 JS 实现原理都差不多。所以小伙伴们&#xff0c;还是需要了解一下核心 JS 实验原理的。 效果图&#xff1a; 实现代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta chars…

MySQL —— 复合查询

一、基本的查询回顾练习 前面两章节整理了许多关于查询用到的语句和关键字&#xff0c;以及MySQL的内置函数&#xff0c;我们先用一些简单的查询练习去回顾之前的知识 1. 前提准备 同样是前面用到的用于测试的表格和数据&#xff0c;一张学生表和三张关于雇员信息表 雇员信息…

优化数据查询性能:StarRocks 与 Apache Iceberg 的强强联合

Apache Iceberg 是一种开源的表格格式&#xff0c;专为在数据湖中存储大规模分析数据而设计。它与多种大数据生态系统组件高度兼容&#xff0c;相较于传统的 Hive 表格格式&#xff0c;Iceberg 在设计上提供了更高的性能和更好的可扩展性。它支持 ACID 事务、Schema 演化、数据…

leetcode-设计LRU缓存结构-112

题目要求 思路 双链表哈希表 代码实现 struct Node{int key, val;Node* next;Node* pre;Node(int _key, int _val): key(_key), val(_val), next(nullptr), pre(nullptr){} };class Solution { public: unordered_map<int, Node*> hash; Node* head; Node* tail; int …

普源DHO924示波器OFFSET设置

一、简介 示波器是电子工程师常用的测量工具之一&#xff0c;能够直观地显示电路信号的波形和参数。普源DHO924是一款优秀的数字示波器&#xff0c;具有优异的性能和易用性。其中OFFSET功能可以帮助用户调整信号的垂直位置&#xff0c;使波形更清晰易读。本文将详细介绍DHO924…

声音转文本(免费工具)

声音转文本&#xff1a;解锁语音技术的无限可能 在当今这个数字化时代&#xff0c;信息的传递方式正以前所未有的速度进化。从手动输入到触控操作&#xff0c;再到如今的语音交互&#xff0c;技术的发展让沟通变得更加自然与高效。声音转文本&#xff08;Speech-to-Text, STT&…

爬虫学习--12.MySQL数据库的基本操作(下)

MySQL查询数据 MySQL 数据库使用SQL SELECT语句来查询数据。 语法&#xff1a;在MySQL数据库中查询数据通用的 SELECT 语法 SELECT 字段1&#xff0c;字段2&#xff0c;……&#xff0c;字段n FROM table_name [WHERE 条件] [LIMIT N] 查询语句中你可以使用一个或者多个表&…

vue3使用mitt.js进行各种组件间通信

我们在vue工程中&#xff0c;除开vue自带的什么父子间&#xff0c;祖孙间通信&#xff0c;还有一个非常方便的通信方式&#xff0c;类似Vue2.x 使用 EventBus 进行组件通信&#xff0c;而 Vue3.x 推荐使用 mitt.js。可以实现各个组件间的通信 优点&#xff1a;首先它足够小&…

【云原生】Kubeadm部署k8s

目录 一、部署步骤 二、部署kubernetes 2.1、所有节点关闭防火墙 核心防护 iptables规则 swap交换 2.2、修改主机名并添加主机映射 2.3、调整内核参数 三、安装Docker 3.1、所有节点安装docker 3.2、所有接点添加镜像加速器 3.3、开启docker、并设置开机自启、查看状态…

ESP32学习笔记:WS2812B驱动

WS2812B是一款贴片RGB灯。由于采用了单总线通讯&#xff0c;所以需要特别关注下它的通讯时序。 调试细节&#xff1a; 本来以为会是一个比较简单的调试&#xff0c;结果还是花了很长时间才调试完成。 首先是关于ESP32的纳秒级延时确定&#xff0c;当时按照空指令始终调试不出来…

Linux中的计划任务(crontab)详解

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Linux的起源与发展 2、什么是计划任务&#xf…

超详细的前后端实战项目(Spring系列加上vue3)(一步步实现+源码)前端篇(一)

最近想着一步步搭建一个前后端项目&#xff0c;将每一步详细的做出来。&#xff08;如果有不足或者建议&#xff0c;也希望大佬们指出哦&#xff09; 前端初始化 1.根据vue脚手架创建vue项目 这里可以用很多方法创建vue项目&#xff0c;大家看着创建吧&#xff0c;只要能创建…

机器学习面试问题总结 | 贝叶斯网络

本文给大家带来的百面算法工程师是机器学习中贝叶斯网路面试总结&#xff0c;文章内总结了常见的提问问题&#xff0c;旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中&#xff0c;我们还将介绍一些常见的面试问题&#xff0c;并提供参考的回答及其理论基础&#…

FreeRTOS_事件组_学习笔记

事件组 原文链接 事件组是一个整数&#xff0c;其中的高8位留给内核&#xff0c;只能用其他位来表示时间 每一位代表一个事件&#xff0c;且每个时间的含义由程序员决定 1为发生&#xff0c;0为未发生 一个/多个任务或ISR都能读写这些位 可以等待某一位&#xff0c;也可以等待…

如何理解合约中的引用类型(3)——Mapping

映射&#xff08;mapping&#xff09; 声明形式&#xff1a;mapping(key type > value type)keytype可以是除枚举外的几乎任何基本类型&#xff0c;包括bytes和string&#xff0c;不包括用户自定义的复杂类型-合约&#xff0c;枚举&#xff0c;结构&#xff0c;映射value t…