语言模型简介和Ngram模型(1)
语言模型介绍一
- 语言模型
- 语言模型概念
- 语言模型应用-语音识别
- 声纹特征提取
- 语言模型挑选成句
- 语言模型应用-手写识别
- 语言模型应用-输入法
- 语言模型分类
- 语言模型评价指标-困惑度PPL
- N-gram语言模型
- 马尔科夫假设
- 平滑问题
- 平滑问题解决一
- 平滑问题解决二
- 插值优化
- 语言模型应用-文本纠错
- 实现方案
语言模型
语言模型概念
概念: 语言模型用于计算文本的成句概率。
示例: P(今天天气不错) > P(今错不天天气)。
释义: 语言模型评价一句话是否“合理”或“是人话”。
语言模型应用-语音识别
流程图:

声纹特征提取
流程:
1.声音本质是一种波,将波按时间段切分很多帧,如25ms一段
2.之后进行声学特征提取,将每一帧转化成一个向量
3.经过经过声学模型,预测得到音素,音素与拼音类似

语言模型挑选成句
音素序列对应多条文本序列,由语言模型挑选出成句概率最高的序列
为了提高效率,会使用beam search或维特比的方式解码

语言模型应用-手写识别

识别模型将图片中文字转化为候选汉字(一般分定位和识别两步),再有语言模型挑选出成句概率最高的序列
比如识别到:
浙 江
淅 冮 (gang)
明显浙江是我们常用的词,下面的词都不知道有没有这个组合,语言模型则会挑选出来
语言模型应用-输入法
释义: 输入即为拼音序列,每个拼音自然的有多个候选汉字,根据语言模型挑选高概率序列
难点: 输入法是一个细节繁多的任务,在语言模型这一基础算法上,需要考虑打字手误,常见误读,拼音缩略,中英混杂,输出符号,用户习惯等能力
语言模型分类
按照复杂程度和发展分类:
1.统计语言模型 (SLM) S = Statistics
ngram语言模型等
2.神经语言模型(NLM) N = Neural
rnn语言模型等
3.预训练语言模型(PLM) P = Pre-train
Bert、GPT等
4.大语言模型(LLM) L = Large
ChatGPT等
预测的方向来分类:
1.自回归(auto regressive)语言模型
在训练时由上文预测下文(或反过来)
单向模型,仅使用单侧序列信息
代表:N-gram,ELMO, GPT
2.自编码(auto encoding)语言模型
在训练时预测序列中任意位置的字符
双向模型,吸收上下文信息
代表:BERT
语言模型评价指标-困惑度PPL
计算方式1:

计算公式2:

释义: 根据上面两种计算公式推导可以知道,PPL与成句概率成反比。
我们怎么通过PPL判断模型好坏呢? 因为我们知道,这是个相对的值;即我们输入一些正常的句子成句概率高,PPL小,输入一些糟糕的句子,成局概率小,PPL大;我们就说能够区别真句子和假句子,这个模型可以。
局限性分析: 我们知道,按照上面的计算方式,PPL的评判是有很大的局限的;
1.好的句子成句概率高,并不能说明模型很好
2.糟糕的句子只有在具体的场景中去验证,因为如果只是随机拼接的糟糕句子,实际在场景中也基本不会出现,验证没有价值;只有具体场景的具体情况进行分析和验证才行。
N-gram语言模型
计算成句概率:
用S代表句子,w代表单个字或词
S = w1w2w3w4w5…wn
P(S) = P(w1,w2,w3,w4,w5…wn)
即:S的概率为,组成其所有的词按照顺序出现的概率;词W1~Wn按顺序出现的概率
公式: P(w1,w2,w3,…,wn) = P(w1)P(w2|w1)P(w3|w1,w2)…P(wn|w1,…,wn-1)
理解: 就是首先在一个大的语料中,统计出w1出现的概率;然后统计在w1出现的次数中,后面出现w2的概率.…一直往下,就可以得到整个句子各个字或者词出现的概率,相乘的到成句概率。
举例:
P(今天) = Count(今天) / Count_total 语料总词数
P(天气|今天) = Count(今天 天气) / Count(今天)
P(不错|今天 天气) = Count(今天 天气 不错) / Count(今天 天气)
P(今天天气不错) = P(今天) P(天气|今天) P(不错|今天 天气)
n-gram
如果是统计两个词的成句概率,就叫2-gram;三个词就叫3-gram
二元组:今天 天气 2 gram
三元组:今天 天气 不错 3 gram
马尔科夫假设
起因: 上面Ngram我们可以看出,如果是10多个词甚至几十个词;我们要计算的数据就太大了,因为词的组合在每个语言中都太多了。那么超出所有的句子,并且计算出每一个词的条件概率,比较困难,无法枚举。
所以提出了马尔科夫假设,是为了简化计算。
假设: 假设第n个词出现的概率,只和它前面的有限个词有关,那么公式就可以简化为:
P(wn|w1,…,wn-1) ≈ P(wn|wn-3,wn-2,wn-1)
举例:
P(今天天气不错) = P(今)*P(天|今) *P(天|今天) *P(气|天天) *P(不|天气) *P(错|气不)
缺陷:
1.影响第n个词的因素可能出现在
前面很远的地方
2.影响第n个词的因素可能出现在其后面(动作的目标,比如我 * 球 ==》打)
3.影响第n个词的因素可能并不在文中(和地点有关)
但是基于马尔科夫假设下依然可以得到非常有效的模型
平滑问题
引子:
问题: 如何给出语料中没出现过的词概率?
举例: P(今天 天气 糟糕) = P(今天)*P(天气|今天) *P(糟糕|天气)
释义:
如果语料中没有出现过糟糕在天气后面出现的情况,那么这句话的概率就为0;语言模型的目的是计算成句的概率;两句话如果都出现语料中的结构,那概率都为零,没法比较;并且不论出现什么情况,我们都不希望一句话的成句概率为零;第一次出现也只能说明它的概率为零
上述就是我们说的语言模型中出现的平滑问题
1.理论上说,任意的词组合成的句子,概率都不应当为零
2.如何给没见过的词或ngram分配概率即为平滑问题
3.也称折扣问题(discounting)
平滑问题解决一
解决办法:1.回退(backoff)
当三元组a b c不存在时,退而寻找b c二元组的概率
P(c | a b) = P(c | b) * Bow(ab)
Bow(ab)称为二元组a b的回退概率;和ab同时出现概率有关,如果ab同时出现的概率高,则说明是固定词的情况越大,后面跟C的概率越小
回退概率有很多计算方式,甚至可以设定为常数
回退可以迭代进行,如序列 a b c d
1.P(d | a b c) = P(d | b c) * Bow(abc)
2.P(d | bc) = P(d | c) * Bow(bc)
3.P(d | c ) = P(d) * Bow©
上述还是有个问题,即最后回退到单个字出现的概率P(d);如果都没有怎么处理呢?
解决办法:2.1加1平滑
问题: 即P(word)不存在如何处理。
两种情况:这个字或者词在我们的语料里面没有;它属于生僻字,在字典上可以找到;或者这个字或者词就从来没有出现过、
那么对这个没有出现的词的概率,我们可以用下面公式表示:

释义:
1.V代表我们词表的大小;既然之前没有出现过这个词,那我们就假设本次出现了这一次。但是原来是没有的,我们就假设所有的词表次都出现了一次
2.所以分母需要加上词表大小V
解决办法:2.2平滑

释义: c代表统计语料中出现的次数即count,Wi-1,Wi是一个词;Wi-1是词中的一个字。比如我们和我。
平滑问题解决二
1.将低频词替换为< UNK >
2.预测中遇到的未见过的词,也用< UNK >代替
3.一语成谶 -> 一语成< UNK >
4.P( < UNK > |一 语 成)
这是一种nlp处理未登录词(OOV)的常见方法;< UNK >是ngram模型中的一种特殊字符;这样就可以避免概率为零的情况出现
插值优化
释义: 受到回退平滑的启发,在计算高阶ngram概率是同时考虑低阶的ngram概率值,以插值给出最终结果
公式如下:


结论:
实践证明,这种方式效果有提升
λ 可以在验证集上调参确定
语言模型应用-文本纠错
举例:
我今天去了天暗门看人民英雄记念碑
我今天去了天安门看人民英雄纪念碑
错误可能是同音字或形近字等
实现方案
步骤
1.对每一个字建立一个混淆字集合
2.计算整句话成句概率
3.用混淆字集合中的词替代原句中的字,重新计算概率
4.选取得分最高的一个候选句子,如果这个句子比原句的得分增长超过一定的阈值
5.对下一个字重复步骤3-4,直到句子末尾
如下:

缺陷:
1.无法解决多字少字问题
2.阈值的设置非常难把握,如果设置过大,达不到纠错效果;如果设置过小,造成大量替换,有可能改变句子的原意
3.混淆字字表难以完备
4.语言模型的领域性会影响修改结果
5.连续的错字会大幅提升纠错难度
例如:今天上午要过来办事 -> 今天商务要过来办事
解决办法:
限定一个修改白名单,只判断特定的字词是否要修改
如限定只对所有发音为shang wu的片段,计算是否修改为“商务”,其余一概不做处理
对于深度学习模型而言,错别字是可以容忍的,所以纠错本身的重要性在下降,一般只针对展示类任务
相关文章:
语言模型简介和Ngram模型(1)
语言模型介绍一 语言模型语言模型概念语言模型应用-语音识别声纹特征提取语言模型挑选成句 语言模型应用-手写识别语言模型应用-输入法语言模型分类语言模型评价指标-困惑度PPL N-gram语言模型马尔科夫假设平滑问题平滑问题解决一平滑问题解决二 插值优化语言模型应用-文本纠错…...
MessageBox弹框替代系统自带的alert、confirm -- 高仿ElementUI MessageBox
MessageBox 弹框 MessageBox 的作用是替代系统自带的 alert、confirm ,仅适合展示较为简单的内容。如果需要弹出较为复杂的内容,请使用定制的弹窗。基本仿照ElementUI的同名组件。 原生,无依赖项,自适应布局,双端通用&…...
数据结构一排序算法
排序算法总结 冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。假设长度为n的数组arr,要按照从小到大排序。则冒泡排序的具体过程可以描述为:首先从数组的第一个元素开始到数组最后一个元素为止,对数组中…...
[Leetcode 215][Medium]-数组中的第K个最大元素-快排/小根堆/堆排序
一、题目描述 原题地址 二、整体思路 (1)快排 对于SELECT K问题,可以通过三路快排解决,快排可以把一个元素放至按升序排序的数组正确的位置,左边为小于该元素的元素集合,右边为大于该元素的元素集合。 三…...
【栈和队列】常见面试题
文章目录 1.[有效的括号](https://leetcode.cn/problems/valid-parentheses/description/)1.1 题目要求1.2 利用栈解决 2. [用队列实现栈](https://leetcode.cn/problems/implement-stack-using-queues/description/)2.1 题目要求2.2 用队列实现栈 3.[用栈实现队列](https://le…...
关于float浮点值二进制存储和运算精度损失的话题
1.前言 浮点值的存储、运算都可能会带来精度损失,了解精度损失背后的机制原因方便我们更好的了解什么情况下会发生精度损失、什么情况下精度损失较大,以及思考怎么避免或减少精度损失。 2.知识点 (1)IEEE 754标准 EEE 754标准…...
python爬虫学习记录-请求模块urllib3
(文章内容仅作学习交流使用) urllib3是一个功能强大、条理清晰,用于HTTP客户端的第三方模块 urllib3-发送网络请求 使用urllib3发送网络请求时,需要先创建PoolManager对象,并使用该对象的request方法发送请求&#…...
谷粒商城实战笔记-133~135-城业务-商品上架-远程上架接口
文章目录 一,谷粒商城实战笔记-133-城业务-商品上架-远程上架接口1,开发目标2,详细设计2.1,提前建立索引2.2,构造批量操作请求参数2.3,使用HighLevelClient调用bulk请求保存数据 二,134-商城业务…...
【React】详解 App.js 文件
文章目录 一、App.js文件的基本结构1. 引入必要的模块2. 定义根组件3. 导出根组件 二、App.js文件的详细解析1. 函数组件与类组件函数组件类组件 2. 使用CSS模块3. 组织子组件4. 管理组件状态使用useState钩子使用state对象 三、App.js文件的最佳实践1. 保持组件的简洁和模块化…...
【ML】self-supervised Learning for speech and Image
【ML】self-supervised Learning for speech and Image 1. self-supervised Learning for speech and Image1.1 自监督学习在语音处理领域的方法及其特点1.2 自监督学习在图像处理领域的方法及其特点 2. Predictive Approach2.1 特点2.2 适用场景 3. contrastive Learning4. 语…...
青岛实训day24(8/8)
一.Python环境准备 1.查看有没有python3 yum list installed |grep python yum list |grep python3 最新安装3.12可以使用源码安装 2.下载安装python3 yum -y install python3 3.查看版本 [rootpython ~]# python3 --version Python 3.6.8 4.进入编辑 [r…...
*算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
刷题记录 101. 孤岛的总面积DFSBFS 102. 沉没孤岛DFSBFS *103. 水流问题*104. 建造最大岛屿 101. 孤岛的总面积 题目地址 本题要求不与矩阵边缘相连的孤岛的总面积。先将与四个边缘相连的岛屿变为海洋,再统计剩余的孤岛的总面积。无需再标识访问过的结点ÿ…...
设计模式 由浅入深(待完结)
一、设计模式是什么? 设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。 二、设计模式有哪些? 1. 观察者模式 定义对象间的一种一对多(变化&#x…...
(第34天)645、最大二叉树
目录 645、最大二叉树题目描述思路代码 645、最大二叉树 题目描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大…...
Python知识点:如何使用Paramiko进行SSH连接与操作
使用Paramiko进行SSH连接与操作可以分为以下几个步骤: 安装Paramiko: 首先需要安装Paramiko库,可以使用pip进行安装: pip install paramiko建立SSH连接: 使用Paramiko连接远程服务器,需要提供服务器的地址、…...
代码随想录算法训练营第六天(一)|242.有效的字母异位词
LeetCode 242 有效的字母异位词 题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram&q…...
数据结构 | 考研代码题之顺序表 | 1 查找L中值为e的数据元素若找到则返回其下标,若找不到则返回-1
文章目录 1 题目2 题解 1 题目 假设有一个顺序表 L,其存储的所有数据元素均为不重复的正数,查找L中值为e的数据元素,若找到则返回其下标,若找不到则返回-1。 2 题解 C语言代码: /*假设有一个顺序表 L,其…...
RLVF:避免过度泛化地从口头反馈中学习
人工智能咨询培训老师叶梓 转载标明出处 大模型在不同行业和个人中的广泛应用要求模型能够根据具体的用户反馈进行调整或定制,以满足细微的要求和偏好。虽然通过高层次的口头反馈来指定模型调整非常方便,例如“在给老板起草电子邮件时不要使用表情符号”…...
设计原则与思想-从项目实战中学习设计模式
文章目录 开源项目通过剖析Java JDK源码学习灵活应用设计模式1. 单例模式(Singleton Pattern)示例:`java.lang.Runtime`2. 工厂模式(Factory Pattern)示例:`java.util.Date`3. 观察者模式(Observer Pattern)示例:`java.util.Observable` 和 `java.util.Observer`4. 适…...
python中的类属性、实例属性、类方法、实例方法和静态方法
1. 类属性(类变量)和实例属性(实例变量) 在python中,类中的属性就是定义在类中的变量,简称成员变量;类中的行为就是定义在类中的方法,简称成员方法。成员变量又可分为类变量和实例变量,或者分为类属性和实例属性。成员…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...
