语言模型学习-统计语言模型 神经语言模型

语音识别

语音识别: 声音-> 文本

声音本质是一种波

将波按时间段切分很多帧,如25ms一段

之后进行声学特征提取,将每一帧转化成一个向量

以声学特征提取后的向量为输入,经过声学模型,预测得到音素

音素与拼音类似,但要考虑声调

音素序列对应多条文本序列,由语言模型挑选出成句概率最高的序列

使用beam search 或维特比的方式解码

手写识别

识别模型将图片中文字转化为候选汉字,再有语言模型挑选出成句概率最高的序列

输入法

输入即为拼音序列,每个拼音自然的有多个候选汉字,根据语言模型挑选高概率序列

输入法是一个细节繁多的任务,在语言模型这一基础算法上,需要考虑常见的打字手误,常见误读,拼音缩略,中英混杂,输出符号,用户习惯等能力

手写输入法,语音输入法同理

语言模型的分类

由简单到复杂

统计语言模型(SLM) ngram语言模型等

神经语言模型(NLM) rnn语言模型等

预训练模型(PLM) Bert,GPT等

大语言模型(LLM) ChatGPT等

N-gram语言模型

用S代表句子,w代表单个字或词

S=w1w2w3w4w5..wn

P(S)=P(w1,w2,w3,w4,w5,...wn)

成句概率 -> 词W1~Wn按顺序出现的概率

P(w1,w2,w3,..wn) = P(w1)P(w2|w1)P(w3|w1,w2)...P(wn|w1,...,wn-1)

N-gram语言模型怎么计算呢

以字为单位

P(今天天气不错) = P(今)*P(天|今)*P(天|今天)*P(气|今天天)*P(不|今天天气)*P(错|今天天气不)

以词为单位

P(今天 天气 不错) = P(今天)* P(天气|今天)*P(不错|今天 天气)

N-gram的困难

句子太多了

对任意一门语言,N-gram数量都非常庞大,无法穷举,需要简化

那么有没有缓解的办法:

有个不太好的解决办法,马尔科夫假设:

P(wn|w1,...,wn-1)≈ P(wn|wn-3,wn-2,wn-1) 一般常见的是3,4,5

假设第n个词出现的概率,仅受其前面有限个词影响

P(今天天气不错) = P(今)*P(天|今)*P(天|今天) * P(气|天天) * P(不|天气) * P(错|气不)

但是马尔科夫假设的缺陷也很明显:

1.影响第n个词的因素可能出现在前面很远的地方

例如: 我读过关于马尔科夫生平的书

2.影响第n个词的因素可能出现在其后面

3.影响第n个词的因素可能并不在文中

但是马尔科夫假设下依然可以得到非常有效的模型

但是有个问题就是 如何给出预料中没有出现过的词或ngram概率

就比如这个预料 ,P(今天 天气 糟糕) = P(今天)*(天气|今天)*P(糟糕|天气)

但是糟糕并没有出现过,那么概率是应该是0,那么问题来了,如果是0合适吗,模型的泛化性太低了,那么模型几乎不合格

那么有什么策略可以解决

平滑策略,这个问题也被称为平滑问题

理论上,任意的词组合成的句子,概率都不应当为零

如何给没见过的词或ngram分配概率即为平滑问题,也称折扣问题

平滑方法

1.回退(backoff)

当三元组a b c 不存在时,退而寻找b c 二元组的概率

P(c|a b) = P(c|b) * Bow(ab)

Bow(ab) 称为二元组a b 的回退概率

回退概率有很多计算方式,甚至可以设定为常数

回退可以迭代进行,如序列 a b c d

P(d|a b c) =P(d | b c) *Bow(abc)

P(d|bc) = P(d|c) * Bow(bc)

P(d|c) = P(d) * Bow(c)

平滑方法迭代的最后会回退到单字或词,但如果没存在怎么办

加1平滑 add - one smooth

对于1gram概率P(word) = Count(word) +1 / Count(totalword) +V

V为词表大小

对于高阶概率同意可以 PAdd-1(wi|wi-1) = C(wi-1,wi) +1 /C(wi-1)+V

还有另一种方法

将低频词替换为<UNK>

预测中遇到的未见过的词,也用<UNK>代替

P(<UNK>|一语成)

这是一种nlp处理为的登陆词(OOV)的常见方法

语言模型的评价指标

困惑度 perplexity

神经语言模型

与n-gram相比,神经网络语言模型优势

向量化表示语义信息优化字符统计,泛化性更好

例如: 猫和狗,两向量相似度极高,但是n-gram只是统计

输入长度不影响模型大小,长距离建模优势

例如 n-gram 计算 今天天气不错 ,P(wn) = P(wn| wn-3,wn-2,wn-1) 根据马尔科夫假设只考虑前 n-3个词,不能考虑太多

softmax带来的自带平滑

对下游任务的适配更加方便

两类语言模型的对比

NN语言模型需要进行矩阵计算,NN语言模型慢

其他上面好像有

相关推荐
一点一木2 小时前
🚀 2026 年 8 月 GitHub 十大热门项目排行榜 🔥
人工智能·github
ssshooter2 小时前
现在网页都能提供 MCP 了?!
前端·人工智能·程序员
京东云开发者2 小时前
Claude Code vs Codex 记忆体系深度对比
人工智能
不加辣椒3 小时前
第 4 章 什么是 Harness Engineering
人工智能
桃西西呀3 小时前
上下文窗口都卷到 100 万了,大模型为什么还在为"位置"发愁?
人工智能·llm·ai编程
阿拉斯攀登3 小时前
SpringBoot整合MQTT:后端订阅设备数据、解析传感器报文
人工智能
然我3 小时前
模型不是 Agent:从零实现一个最小 Agent Loop
前端·人工智能·agent
黄油面包3 小时前
Codex 额度三天见底后,我重新做了一周预算
前端·人工智能
AI效率君4 小时前
Deer‑Flow 2.0 + Go‑MCP‑Server(add加法工具)保姆级完整教程
人工智能·agent
阿拉斯攀登4 小时前
SpringCloud微服务MQTT架构:设备消息统一接入、业务分发设计
人工智能