当前位置: 首页 > news >正文

语言模型简介和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 &#xff0c;仅适合展示较为简单的内容。如果需要弹出较为复杂的内容&#xff0c;请使用定制的弹窗。基本仿照ElementUI的同名组件。 原生&#xff0c;无依赖项&#xff0c;自适应布局&#xff0c;双端通用&…...

数据结构一排序算法

排序算法总结 冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;也是一种简单直观的排序算法。假设长度为n的数组arr&#xff0c;要按照从小到大排序。则冒泡排序的具体过程可以描述为&#xff1a;首先从数组的第一个元素开始到数组最后一个元素为止&#xff0c;对数组中…...

[Leetcode 215][Medium]-数组中的第K个最大元素-快排/小根堆/堆排序

一、题目描述 原题地址 二、整体思路 &#xff08;1&#xff09;快排 对于SELECT K问题&#xff0c;可以通过三路快排解决&#xff0c;快排可以把一个元素放至按升序排序的数组正确的位置&#xff0c;左边为小于该元素的元素集合&#xff0c;右边为大于该元素的元素集合。 三…...

【栈和队列】常见面试题

文章目录 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.前言 浮点值的存储、运算都可能会带来精度损失&#xff0c;了解精度损失背后的机制原因方便我们更好的了解什么情况下会发生精度损失、什么情况下精度损失较大&#xff0c;以及思考怎么避免或减少精度损失。 2.知识点 &#xff08;1&#xff09;IEEE 754标准 EEE 754标准…...

python爬虫学习记录-请求模块urllib3

&#xff08;文章内容仅作学习交流使用&#xff09; urllib3是一个功能强大、条理清晰&#xff0c;用于HTTP客户端的第三方模块 urllib3-发送网络请求 使用urllib3发送网络请求时&#xff0c;需要先创建PoolManager对象&#xff0c;并使用该对象的request方法发送请求&#…...

谷粒商城实战笔记-133~135-城业务-商品上架-远程上架接口

文章目录 一&#xff0c;谷粒商城实战笔记-133-城业务-商品上架-远程上架接口1&#xff0c;开发目标2&#xff0c;详细设计2.1&#xff0c;提前建立索引2.2&#xff0c;构造批量操作请求参数2.3&#xff0c;使用HighLevelClient调用bulk请求保存数据 二&#xff0c;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)

一&#xff0e;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. 孤岛的总面积 题目地址 本题要求不与矩阵边缘相连的孤岛的总面积。先将与四个边缘相连的岛屿变为海洋&#xff0c;再统计剩余的孤岛的总面积。无需再标识访问过的结点&#xff…...

设计模式 由浅入深(待完结)

一、设计模式是什么&#xff1f; 设计模式是指在软件开发中&#xff0c;经过验证的&#xff0c;用于解决在特定环境下&#xff0c;重复出现的&#xff0c;特定问题的解决方案。 二、设计模式有哪些&#xff1f; 1. 观察者模式 定义对象间的一种一对多&#xff08;变化&#x…...

(第34天)645、最大二叉树

目录 645、最大二叉树题目描述思路代码 645、最大二叉树 题目描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大…...

Python知识点:如何使用Paramiko进行SSH连接与操作

使用Paramiko进行SSH连接与操作可以分为以下几个步骤&#xff1a; 安装Paramiko&#xff1a; 首先需要安装Paramiko库&#xff0c;可以使用pip进行安装&#xff1a; pip install paramiko建立SSH连接&#xff1a; 使用Paramiko连接远程服务器&#xff0c;需要提供服务器的地址、…...

代码随想录算法训练营第六天(一)|242.有效的字母异位词

LeetCode 242 有效的字母异位词 题目&#xff1a; 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram&q…...

数据结构 | 考研代码题之顺序表 | 1 查找L中值为e的数据元素若找到则返回其下标,若找不到则返回-1

文章目录 1 题目2 题解 1 题目 假设有一个顺序表 L&#xff0c;其存储的所有数据元素均为不重复的正数&#xff0c;查找L中值为e的数据元素&#xff0c;若找到则返回其下标&#xff0c;若找不到则返回-1。 2 题解 C语言代码&#xff1a; /*假设有一个顺序表 L&#xff0c;其…...

RLVF:避免过度泛化地从口头反馈中学习

人工智能咨询培训老师叶梓 转载标明出处 大模型在不同行业和个人中的广泛应用要求模型能够根据具体的用户反馈进行调整或定制&#xff0c;以满足细微的要求和偏好。虽然通过高层次的口头反馈来指定模型调整非常方便&#xff0c;例如“在给老板起草电子邮件时不要使用表情符号”…...

设计原则与思想-从项目实战中学习设计模式

文章目录 开源项目通过剖析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中&#xff0c;类中的属性就是定义在类中的变量&#xff0c;简称成员变量&#xff1b;类中的行为就是定义在类中的方法&#xff0c;简称成员方法。成员变量又可分为类变量和实例变量&#xff0c;或者分为类属性和实例属性。成员…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...