07.C2W2.Part-of-Speech (POS) Tagging and Hidden Markov Models

往期文章请点这里

目录

  • Overview
  • Part of Speech Tagging
  • Markov Chains
  • Markov Chains and POS Tags
    • POS tags as States
    • Transition probabilities
    • The transition matrix
    • Initial probabilities
  • Hidden Markov Models
    • Emission probabilities
    • Summary
  • Calculating Probabilities
    • Transition probabilities
    • The corpus
    • Populating the Transition Matrix
    • Smoothing
  • Populating the Emission Matrix
  • The Viterbi Algorithm
    • Viterbi algorithm - a graph algorithm
    • Viterbi algorithm Steps
  • Viterbi: Initialization
  • Viterbi: Forward Pass
  • Viterbi: Backward Pass
    • Implementation notes

往期文章请点这里

Overview

●What is part of speech tagging?
●Markov chains
●Hidden Markov models
●Viterbi algorithm
●Example

Part of Speech Tagging

词性标注(Part of Speech Tagging),简称POS Tagging,是自然语言处理(NLP)中的一个任务,它涉及到识别文本中每个单词的词性类别。词性,或称词类,是指一个词在句子中的语法功能,如名词、动词、形容词、副词等。
词性标注对于理解句子结构和语义非常重要,它可以帮助计算机更好地解析语言,从而支持诸如机器翻译、信息检索、文本摘要、情感分析等高级语言处理任务。例如,在句子 “The cat sat on the mat” 中,词性标注可能会标记 “The” 为定冠词(DT),“cat” 为名词(Noun),“sat” 为动词(Verb),“on” 为介词(Preposition),“the” 为定冠词(DT),“mat” 为名词(Noun)。通过这种方式,词性标注为进一步的语言分析提供了基础。
例子:
在这里插入图片描述
关于词性标签缩写可参照:

Lexical TermTagExample Words
NounNNsomething, nothing
VerbVBlearn, study
DeterminerDTthe, a
Wh-adverbWRBwhy, where
AdjectiveJJbig, happy
AdverbRBquickly, very
PronounPRPhe, she, it
PrepositionINon, at, of
ConjunctionCCand, but, or
PossessivePOS's, his, her
ArticleARTthe, a, an
NumeralCDone, two, three
ExclamationUHoh, wow
AuxiliaryVBZis, are, has
ModalMDcan, could, will
ComparativeJJRbigger, faster
SuperlativeJJSbiggest, fastest
GerundVBGrunning, studying
InfinitiveVBNto run, to study
ParticipleVBDran, studied
InterjectionINTJhello, goodbye

请注意,词性标签的命名可能因不同的词性标注系统而有所不同,但上述表格提供了一些常见的词性标签和示例。
词性标签的应用
在这里插入图片描述
命名实体识别(Named Entity Recognition, NER):命名实体识别是识别文本中的特定实体,如人名、地点、组织、日期等。词性标注在此过程中非常有用,因为它可以帮助确定实体的边界。例如,如果一个名词(NN)后面跟着一个特定的词性,如地名(例如“New York”),词性标注可以帮助确定这个名词是一个地点实体。

语音识别(Speech Recognition):语音识别系统将口语转化为文本。词性标注在此过程中有助于提高识别的准确性。由于口语中的语法结构可能不如书面语规范,词性标注可以帮助系统理解句子结构,从而更准确地将口语转化为正确的文本形式。

指代消解(Coreference Resolution):指代消解是确定文本中不同代词或名词短语指向相同实体的过程。词性标注有助于识别和匹配可能的指代关系。例如,如果一个代词(如“he”)出现在句子中,词性标注可以帮助确定这个代词的性别和数量,进而帮助系统找到它所指的名词短语。上面的图中,“埃菲尔铁塔位于巴黎,它高324米”,这里可以用指代消解推断“它”是指什么。

Markov Chains

在这里插入图片描述
上例中,learn是动词,在英语语法中,动词后面会接什么词性的单词呢?大概率是名词。
这个现象也称为:Part of Speech Dependencies

在这里插入图片描述
这里使用可视化的方式来表示单词序列的词性变换,这个也是马尔科夫链
在这里插入图片描述
马尔科夫链可以表示为一个有向图,图中的节点表示模型的状态(state),这里 Q = { q 1 , q 2 , q 3 } Q=\{q_1,q_2,q_3\} Q={q1,q2,q3}

Markov Chains and POS Tags

POS tags as States

将句子看做是带有相关词性标注的词序列,就可以用马尔科夫链来表示这个序列:
在这里插入图片描述

Transition probabilities

将边加上状态转移(过渡)概率,可得到下图:
在这里插入图片描述
马尔科夫链有一个非常重要的假设或者说性质,就是:下一个事件的概率仅仅取决于当前事件。例如在下图中,下一个词的状态只有当前词learn来决定,而与前面的词无关,只需要看绿色圈圈即可。
在这里插入图片描述

The transition matrix

可用矩阵来保存状态转移概率:
在这里插入图片描述
矩阵每一行的和为1,即: ∑ j = 1 N a i j = 1 \sum_{j=1}^N a_{ij}=1 j=1Naij=1

Initial probabilities

对于句子的第一个词,没有前一个状态来决定其状态:
在这里插入图片描述
我们可以引入一个初始概率 π \pi π来表示初始单词词性生成概率:
在这里插入图片描述
将表格写成矩阵的形式为:
A = [ 0.4 0.1 0.5 0.2 0.2 0.6 0.4 0.3 0.3 0.2 0.3 0.5 ] A = \begin{bmatrix} 0.4 & 0.1 &0.5\\ 0.2 & 0.2 &0.6\\ 0.4 & 0.3 &0.3\\ 0.2 & 0.3 &0.5 \end{bmatrix} A= 0.40.20.40.20.10.20.30.30.50.60.30.5

Hidden Markov Models

Hidden表示状态是隐藏的,可将词性标签的状态看做是隐藏状态,因为它们从文本数据中不直接可观察到。机器能观察到的只有句子中的单词。我们用虚线节点表示隐藏状态,则其过渡概率可以用N+1乘N维的矩阵A表示,N是隐藏状态的数量。
在这里插入图片描述

Emission probabilities

发射概率指的是在给定一个特定的状态时,观察到某个具体输出(或观察值)的概率。简单来说,它描述了在某个隐藏状态下,某个可见事件(如单词、声音等)发生的可能性。例如这里在隐藏状态VB的状态下,生成一些词(观测值)的概率如下图所示:
在这里插入图片描述
右边是发射概率的表格形式,发射矩阵表示词性标签代表的每个最终隐藏状态到语料库中的M个单词的转换概率。
同样的,每一行的概率和为1,即: ∑ j = 1 V b i j = 1 \sum_{j=1}^V b_{ij}=1 j=1Vbij=1
注意,图示中三个词在不同隐藏状态下的生成概率都大于0,是因为词在不同上下文中可能会有不同的词性。
He lay on his back.
I’ll be back.
第一句back是名词,第二句是副词。

Summary

States:
Q = { q 1 , ⋯   , q N } Q = \{q_1, \cdots, q_N\} Q={q1,,qN}
Transition matrix:
A = [ a 1 , 1 ⋯ a 1 , N 0 ⋱ ⋮ a N + 1 , 1 ⋯ a N + 1 , N ] A=\begin{bmatrix} a_{1,1} & \cdots & a_{1,N} \\ 0 & \ddots & \vdots \\ a_{N+1,1} & \cdots & a_{N+1,N} \\ \end{bmatrix} A= a1,10aN+1,1a1,NaN+1,N
Emission matrix:
B = [ b 1 , 1 ⋯ b 1 V ⋮ ⋱ ⋮ b N 1 ⋯ a N V ] B=\begin{bmatrix} b_{1,1} & \cdots & b_{1V} \\ \vdots & \ddots & \vdots \\ b_{N1} & \cdots & a_{NV} \\ \end{bmatrix} B= b1,1bN1b1VaNV

Calculating Probabilities

Transition probabilities

根据实例计算转移概率,假设语料库如下:
在这里插入图片描述
我们用颜色来表示不同的词性标签,从词库中可以统计得到,例如蓝色到紫色出现了两次,语料库中以蓝色开头的标签数量是3:
在这里插入图片描述
transition probability:
在这里插入图片描述
要计算马尔科夫模型的所有转移概率,必须统计语料库中所有标签对出现次数。
1.Count occurrences of tag pairs
C ( t i − 1 , t i ) C(t_{i-1},t_i) C(ti1,ti)
2.Calculate probabilities using the counts
P ( t i ∣ t i − 1 ) = C ( t i − 1 , t i ) ∑ j = 1 N C ( t i − 1 , t j ) P(t_i | t_{i-1}) = \frac{C(t_{i-1}, t_i)}{\sum_{j=1}^{N} C(t_{i-1}, t_j)} P(titi1)=j=1NC(ti1,tj)C(ti1,ti)

The corpus

假设有以下语料库:
In a Station of the Metro
The apparition of these faces in the crowd :
Petals on a wet , black bough .
语料库中每一行是一个单独的句子。先在句首添加起始标记,以便计算初始概率:
在这里插入图片描述

然后将所有字母转成小写字母,这里没有去掉标点,因为是一个toy model
在这里插入图片描述

Populating the Transition Matrix

先准备好空表:
在这里插入图片描述
先用与相关标记的计数来填充矩阵的第一列(矩阵的行代表当前状态,列代表下一个状态,值代表从当前状态转移到下一个状态的转移概率),先用不同颜色来标记状态:
在这里插入图片描述
对于第一列,需要计算下面标记组合出现的次数

在这里插入图片描述
得到以下结果:
在这里插入图片描述
按这个方式可以填充其他部分,这里有一个trick,注意到语料库中没有动词VB,所以,矩阵中VB所在的行列均为0:
在这里插入图片描述
最后结果如下(这里O-O,在语料中出现了八次,注意最后一句加上标点,有4次):
在这里插入图片描述
接下来计算转移概率:
在这里插入图片描述
但是VB这行会出现分母为0的情况。

Smoothing

为解决这个问题,需要加上一个很小的值 ϵ \epsilon ϵ,最后公式变成:
P ( t i ∣ t i − 1 ) = C ( t i − 1 , t i ) + ϵ ∑ j = 1 N C ( t i − 1 , t j ) + N × ϵ P(t_i | t_{i-1}) = \frac{C(t_{i-1}, t_i)+\epsilon}{\sum_{j=1}^{N} C(t_{i-1}, t_j)+N\times \epsilon} P(titi1)=j=1NC(ti1,tj)+N×ϵC(ti1,ti)+ϵ
分母加上一项,以保证概率总和为1
在这里插入图片描述
这里如果用 ϵ = 0.001 \epsilon=0.001 ϵ=0.001,这转移矩阵就得到:
在这里插入图片描述
平滑之后没有为0的概率,VB的转移概率是相等的。
实际操作中,第一行不需要加 ϵ \epsilon ϵ,加上会使得标点符号也会有概率出现在句首,这个是不科学的。

Populating the Emission Matrix

上面的转移矩阵只考虑了词性的转化,这里需要将具体的词也考虑进来,例如:
在这里插入图片描述
我们希望计算一个词性标签与特定词语的共现次数,例如:
在这里插入图片描述

在这里插入图片描述
进一步用复杂一点例子:
在这里插入图片描述
以第一列为例,这里不是计算标签对的数量,而是计算一个词与特定标签相关联的次数:
在这里插入图片描述
例如 C ( N N , i n ) = 0 C(NN,in)=0 C(NN,in)=0表示在语料库中in与Noun标签并无关联,同理in与动词也无关系,在其他标签类别中出现了两次:
在这里插入图片描述
最后的概率由以下公式计算:
P ( w i ∣ t i ) = C ( t i , w i ) + ϵ ∑ j = 1 N C ( t i , w j ) + N ⋅ ϵ = C ( t i , w i ) + ϵ C ( t i ) + N ⋅ ϵ P(w_i | t_i) = \frac{C(t_i, w_i) + \epsilon}{\sum_{j=1}^{N} C(t_i, w_j) + N \cdot \epsilon}\\ =\cfrac{C(t_i, w_i) + \epsilon}{C(t_i)+ N \cdot \epsilon} P(witi)=j=1NC(ti,wj)+NϵC(ti,wi)+ϵ=C(ti)+NϵC(ti,wi)+ϵ
其中,大与字母N代表标签数,大写字母V代表我们的词汇表大小。

The Viterbi Algorithm

Viterbi algorithm - a graph algorithm

维特比算法是一个图算法,下面以句子:I love to learn为例,来演示其原理。在这里插入图片描述

这里绿色显示的转移概率是0.3,橙色显示的发射概率为0.5
在这里插入图片描述
那么第一个单词为I的概率实际是联合概率:0.5×0.3=0.15
在这里插入图片描述
接下来观察到love有两种可能,分别是O→NN和O→VB在这里插入图片描述
由于VB对应生成love的发射概率要大,因此选择O→VB:
在这里插入图片描述
这I后面接love的概率为:0.5×0.5=0.25
在这里插入图片描述
由于love后面的to只会在O状态下出现:
在这里插入图片描述
love后面接to的概率为:0.2×0.4=0.08
最后是learn,只会在VB状态出现:
在这里插入图片描述
其出现概率是0.5×0.2=0.1
在这里插入图片描述
最后可得到所有单词序列对应的隐藏状态概率为:
0.15 ∗ 0.25 ∗ 0.08 ∗ 0.1 = 0.0003 0.15*0.25*0.08*0.1=0.0003 0.150.250.080.1=0.0003

Viterbi algorithm Steps

一共三步:
1.Initialization step
2.Forward pass
3.Backward pass

这里要用到两个辅助矩阵:
在这里插入图片描述
矩阵C保存中间的最优概率,矩阵D保存访问过的状态的索引。
下面详细讲解三个步骤。

Viterbi: Initialization

初始化步骤是填充辅助矩阵C和D第一列的:
在这里插入图片描述
填充结果为:
在这里插入图片描述
填充公式为:
c i , 1 = π i ∗ b i , c i n d e x ( w 1 ) = a 1 , i ∗ b i , c i n d e x ( w 1 ) c_{i,1}=\pi_i*b_{i,cindex(w_1)}\\ =a_{1,i}*b_{i,cindex(w_1)} ci,1=πibi,cindex(w1)=a1,ibi,cindex(w1)
C矩阵中的第一列表示从图中的起始状态 π \pi π到第一个标签 t i t_i ti和单词 w 1 w_1 w1的转换概率,示例图中有三个隐藏状态。
从公式中可以看到,第一列单词 w 1 w_1 w1出现的概率是初始化概率乘以状态发射概率,初始化概率从矩阵A中可以得到,发射概率从矩阵B中可以得到。
对于矩阵D:
在这里插入图片描述
第一列直接设置为0即可:
d i , 1 = 0 d_{i,1}=0 di,1=0
因为没有遍历任何之前的词性标签。

Viterbi: Forward Pass

前向传递是填充矩阵C和D的第二步。
在这里插入图片描述
对于矩阵C,使用的公式为:
c i , j = max ⁡ k c k , j − 1 ∗ a k , i ∗ b i , c i n d e x ( w j ) c_{i,j}=\underset{k}{\max}c_{k,j-1}*a_{k,i}*b_{i,cindex(w_j)} ci,j=kmaxck,j1ak,ibi,cindex(wj)
例如要计算 c 1 , 2 c_{1,2} c1,2
在这里插入图片描述

c 1 , 2 = max ⁡ k c k , 1 ∗ a k , 1 ∗ b i , c i n d e x ( w 2 ) c_{1,2}=\underset{k}{\max}c_{k,1}*a_{k,1}*b_{i,cindex(w_2)} c1,2=kmaxck,1ak,1bi,cindex(w2)
b i , c i n d e x ( w 2 ) b_{i,cindex(w_2)} bi,cindex(w2)是状态 t 1 t_1 t1 w 2 w_2 w2的发射概率
a k , 1 a_{k,1} ak,1是状态 t k t_k tk到当前状态 t 1 t_1 t1的转移概率
t k 1 t_{k1} tk1表示已经遍历的前一个路径的概率
这里选择k使得整个公式最大化
在这里插入图片描述
对于矩阵D:
在这里插入图片描述
使用以下公式:
d i , j = arg max ⁡ k c k , 1 ∗ a k , 1 ∗ b i , c i n d e x ( w 2 ) d_{i,j}=\underset{k}{\argmax}c_{k,1}*a_{k,1}*b_{i,cindex(w_2)} di,j=kargmaxck,1ak,1bi,cindex(w2)

Viterbi: Backward Pass

到这一步,C和D已经填充完毕
现在需要从D中提取路径,它代表了最可能生成我们给定的词序列的隐藏状态的序列(从第一个到第K个)
首先,在矩阵C的最后一列中计算具有最高概率的条目 c i , K c_{i,K} ci,K的系引。这个索引处的概率是最可能的隐藏状态序列生成给定词序列的概率。
s = arg max ⁡ i c i , K s=\underset{i}{\argmax}c_{i,K} s=iargmaxci,K
在这里插入图片描述
例如:这里最高概率的条目是第一个,概率为0.01,也就是对应的 c 1 , 5 c_{1,5} c1,5
这个索引表示你观察到单词 w 5 w_5 w5时遍历的最后一个隐藏状态。也就是生成 w 5 w_5 w5最有可能状态是 t 1 t_1 t1词性标签,将 t 1 t_1 t1加到序列的最后:
在这里插入图片描述
然后根据D中的值查找矩阵D中的下一个索引:

在这里插入图片描述

Implementation notes

1.In Python index starts with 0!
2.Use log probabilities,防止概率值太小相乘导致下溢
c i , j = max ⁡ k c k , j − 1 ∗ a k , i ∗ b i , c i n d e x ( w j ) c_{i,j}=\underset{k}{\max}c_{k,j-1}*a_{k,i}*b_{i,cindex(w_j)} ci,j=kmaxck,j1ak,ibi,cindex(wj)
取log后:
log ⁡ c i , j = max ⁡ k log ⁡ ( c k , j − 1 ) + log ⁡ ( a k , i ) + log ⁡ ( b i , c i n d e x ( w j ) ) \log c_{i,j}=\underset{k}{\max}\log( c_{k,j-1})+\log( a_{k,i})+\log (b_{i,cindex(w_j)}) logci,j=kmaxlog(ck,j1)+log(ak,i)+log(bi,cindex(wj))

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

向新求质 智赋广西,2024华为数智转型助力企业高质量发展论坛在南宁举办

7月5日以“向新求质 智赋广西”为主题的2024华为数智转型助力企业高质量发展论坛在南宁成功举办。来自广西区管企业、驻桂央企和国有企业等80余位中高层管理者,与华为业务变革专家、数字化转型专家共同探讨企业数字化转型新路径,为企业创新转型发展献计献…

SSM城镇居民社区再生资源回收系统-计算机毕业设计源码04175

摘 要 本论文介绍了一个基于SSM(Spring Spring MVC MyBatis)技术的城镇居民社区再生资源回收系统的设计与实现。随着社会对环境保护意识的不断提高,再生资源回收成为了一种重要的环保行动。然而,传统的再生资源回收方式存在着信…

哈佛大学 || 概念空间中学习动态的涌现:探索隐藏能力

获取本文论文原文PDF,请在公众号【AI论文解读】留言:论文解读 今天主要看一个问题:在模型中的学习动态是如何涌现的。 在现代生成模型的研究与应用中,不断发现这些模型在处理训练数据时展现出了惊人的能力,这些能力很…

2024年【道路运输企业安全生产管理人员】考试及道路运输企业安全生产管理人员操作证考试

题库来源:安全生产模拟考试一点通公众号小程序 道路运输企业安全生产管理人员考试参考答案及道路运输企业安全生产管理人员考试试题解析是安全生产模拟考试一点通题库老师及道路运输企业安全生产管理人员操作证已考过的学员汇总,相对有效帮助道路运输企…

数字身份管理发展趋势:​​​​​​扩展身份安全能力

身份作为企业各个应用的入口,大量存在于企业的内部业务和外部业务中,身份作为最核心数据对于企业的重要性不言而喻,因此也往往成为攻击者的攻击目标,从2023年国资国企受攻击的情况也不难看出,针对身份的攻击累计超过37…

metersphere链接腾讯邮箱步骤

1、打开腾讯邮箱生成授权码 路径:设置-账户-账户安全 生成的授权码只会展示1次,注意保存 2、在系统设置-系统参数设置-邮件设置填写授权码和SMTP信息 SMTP信息在邮箱的客户端设置中可以获取到对应的信息 3、信息填写完后,可以测试连接&…

golang 项目打包部署环境变量设置

最近将 golang 项目打包部署在不同环境,总结一下自己的心得体会,供大家参考。 1、首先要明确自己目标服务器的系统类型(例如 windows 或者Linux) ,如果是Linux 还需要注意目标服务器的CPU架构(amd或者arm) 目标服务器的CPU架构可执行命令&…

Modbus通信协议学习——调试软件

Modbus通信协议是一种广泛应用于工业自动化领域的串行通信协议,由Modicon公司(现为施耐德电气Schneider Electric)于1979年开发。该协议已成为工业电子设备之间通信的通用标准,支持多种设备和系统之间的数据交换。以下是对Modbus通…

值传递与引用传递:深入理解Java中的变量赋值和参数传递机制

在Java中,理解值传递(值拷贝)与引用传递(地址拷贝)之间的区别对于正确处理数据结构和对象至关重要。本文将通过示例代码深入探讨这两种机制,并解释它们如何影响程序的行为。 值传递(值拷贝&…

第16章 主成分分析:四个案例及课后习题

1.假设 x x x为 m m m 维随机变量,其均值为 μ \mu μ,协方差矩阵为 Σ \Sigma Σ。 考虑由 m m m维随机变量 x x x到 m m m维随机变量 y y y的线性变换 y i α i T x ∑ k 1 m α k i x k , i 1 , 2 , ⋯ , m y _ { i } \alpha _ { i } ^ { T } …

Drools开源业务规则引擎(二)- Drools规则语言(DRL)

文章目录 1.DRL文件的组成:2.package3.import4.function5.query6.declare7.global8.rule8.1.规则属性8.2.LHS8.2.1.语法格式8.2.2.运算符优先级8.2.3.特殊的运算符1.matches, not matches2.contains, not contains3.memberOf, not memberOf4.in, notin5.soundslike6…

7.8作业

一、思维导图 二、 1】按值修改 2】按值查找,返回当前节点的地址 (先不考虑重复,如果有重复,返回第一个) 3】反转 4】销毁链表 //按值修改 int value_change(linklistptr H,datatype e,int value) {if(HNULL||empty(H…

推出PSoC™ 车规级4100S Max系列,(CY8C4147LDE 和 CY8C4147LDS)支持性能更强大的第五代CAPSENSE™技术

推出全新车规级PSoC™ 4100S Max系列。这一微控制器器件系列具有更佳的闪存密度、通用输入输出接口(GPIO)、CAN-FD和硬件安全性,扩展了采用CAPSENSE™技术的汽车车身/暖通空调(HVAC)和方向盘应用人机界面(H…

Unity之Text组件换行\n没有实现+动态中英互换

前因:文本中的换行 \n没有换行而是打印出来了,解决方式 因为unity会默认把\n替换成\\n 面板中使用富文本这个选项啊 没有用 m_text.text = m_text.text.Replace("\\n", "\n"); ###动态中英文互译 using System.Collections; using System.Collections…

什么叫低频晶振?低频晶振最低频率能达到多少?低频晶振封装尺寸有哪些?

低频晶振指的是那些工作在较低频率范围内的晶体振荡器,通常这类振荡器的标称频率低于8MHz。这些晶振在各种电子设备中都有应用,尤其是在那些需要精确但不需要高频振荡的应用场景中,比如实时时钟(RTC)、低速串行通信接口(如UART、IC等)、以及一…

怎么才能选到好的猫咪主食冻干?公认顶尖优秀主食冻干总结

如今,主食冻干市场纷繁多样,质量水平却大相径庭。部分品牌盲目追求高营养值和利润增长,却忽略了猫咪健康饮食的本质需求,导致市场上充斥着以次充好、虚假标注日期等不法行为。更有甚者,部分产品未经权威第三方检测便匆…

提高LabVIEW软件的健壮性

提高LabVIEW软件的健壮性,即增强其在各种操作条件下的可靠性和稳定性,是开发过程中非常重要的一环。健壮的软件能够在面对意外输入、极端环境和系统故障时依然表现出色,确保系统的连续性和可靠性。以下是详细的方法和策略,从多个角…

【活动行】参与上海两场线下活动,教育生态行业赛总决赛活动和WAIC人工智能大会活动 - 上海活动总结

目录 背景决赛最后一公里领域范围 决赛作品AI智教相机辅导老师Copilot辅导老师Copilot雅思写作竞技场 优秀作品总结 背景 决赛 百度发起的千帆杯教育生态行业赛于2024年7月4日进行线下决赛,博主虽然没能进入决赛,但也非常荣幸能够以嘉宾身份到现场给进…

Leaflet【七】加载海量点数据

本文深入探讨了Leaflet在渲染海量点数据时面临的性能挑战,提出了一种创新的解决方案——利用leaflet-marker-canvas插件。传统的循环绘制Marker方式在数据量巨大时会导致明显的性能下降,而通过将点数据加入Canvas进行批量渲染,显著提高了绘图…

vite+vue3拍照上传到nodejs服务器

一:效果展示: 拍照效果 二:Nodejs后端接口代码: 三:前端完整代码: