当前位置: 首页 > 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;或者分为类属性和实例属性。成员…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...