从统计语言模型到预训练语言模型---统计语言模型

news2024/11/18 23:33:38

语言模型

从历史上来看, 自然语言处理的研究范式变化是从规则到统计, 从统计机器学习到基于神经网络的深度学习,这同时也是语言模型发展的历史。要了解语言模型的发展历史,首先我们需要认识什么是语言模型。语言模型的目标是建模自然语言的概率分布, 即确定语言中任意词序列的概率, 它提供了从概率统计角度 建模语言文字的独特视角。语言模型在自然语言处理中用广泛的应用, 在语音识别、语法纠错、机器翻译、语言生成等任务中均发挥着重要的作用。

自然语言处理的研究范式

简单来说,语言模型就是一串词序列的概率分布,语言模型的作用是为一个长度为 i 的文本确定一个概率分布P,表示这段文本存在的可能性,即:

P(w_1,w_2,...,w_i)

语言模型的基本任务是在给定上下文 C = w1 , w2 , ..., wi-1 的情况下, 预测下一个词 wi 的条件概率 P (wi |C)。

问题在于,联合概率 P 的参数量十分巨大,如 i 代表句子的长度,N 代表单词的数量,那么词序列w1 , w2 , ..., wi 将具有以下的可能:N^i ,而这会带来巨大的模型参数量,以《牛津高阶英汉双解词典》为例子,其中收录了 185000 个单词,以每句平均长度15个单词,模型参数量将有: 185000^{15},约为 10^{79}

与之相比, 宇宙中的原子数量大概在这个量级, 这实在是一个不可想象的天文数字, 以目前的计算手段无 法进行存储和运算。因此, 如何减少模型的参数量, 成为一个迫切需要解决的问题。其中的一种简化思路是,利用句子序列从左至右的生成过程来分解联合概率:

P(w_1,w_2,...,w_i) = P(w_i|w_1,w_2,...,w_{i−1})

也就是说, 将词序列 w_1,w_2,...,w_i 的生成过程看成单词的逐个生成, 假设第 i 个单词的概率取决于前 i- 1 个单词。 需要指出的是, 这种将联合概率 P 转换为多个条件概率的乘积本身并未降低模型所需的参数量, 但是这种转换为接下来的简化提供了一种途径。

上面公式看到, 词 wi 出现的概率取决于它前面所有的词, 即使用链式法则, 即当前第 i 个词用哪一个, 完全取决于前 i- 1 个词, 我们在实际工作中会经常碰到文本长度较长情况, P(w_i|w_1,w_2,...,w_{i−1})的估算会非常困 难。因此, 为了实现对该数值的估算, 先后出现了 n-gram 统计语言模型, nnlm 前馈神经语言模型, 循环神经语 言模型,并最终形成当前大火的 Bert 预训练语言模型。

统计语言模型

统计语言模型语言模型, 是当前非规则自然语言处理的根基, 也是自然语言处理学科的精髓所在, 当我们在 判定一句话是否合适的时候, 可以通过计算概率的方式来判断该句子是否成立, 如果一个句子成立的概率很大, 那么这个句子是一个成立的句子概率就越大。1975 年,Frederick Jelinek 等人在论文《Continuous Speech Recognition by Statistical Methods》中提出并应用 n-gram 模型于语音识别任务, 也即所谓的元文法模型。根据上述假设, 词 的概率受前面 i- 1 个词的影响, 称为历史影响, 而估算这种概率最简单的方法是根据语料库, 计算词序列在语料库中出现的频次。

P(w_i|w_1,w_2,...,w_{i−1}) = \frac{C(w_1,w_2,...,w_i)}{C(w_1,w_2,...,w_{i−1})}

问题在于, 随着历史单词数量的增加, 这种建模方式所需的数据量会指数增长, 这就是维度灾难。此外, 当历史 单词序列越来越长,绝大多数的历史并不会在训练数据中出现,造成概率估计丢失。

为了解决上述问题,进一步假设任意单词的出现概率只和过去 n- 1 个词相关,即:

P(w_i|w_1,w_2,...,w_{i−1}) = P(w_i|w_{i-(n-1)},w_{i - (n - 2)},...,w_{i−1})

当 n 越大,历史信息也越完整,但是参数量也会增大。实际应用中, n 通常不大于 3

  • n=1 时,每个词的概率独立于历史,称为一元语法(Unigram)

  • n=2 时,词的概率只依赖前一个词,称为二元语法(Bigram)或一阶马尔可夫链

  • n=3 时,称为三元语法(Trigram)或者二阶马尔科夫链。

实际运用中, 由于语言具备无穷多可能性, 再庞大的训练语料也无法覆盖所有的 n 元语法, 而语料中的零 频次并不等于零概率, 因此还需要使用平滑技术来解决这一问题, 产生更合理的概率, 对所有可能出现的字符 串都分配一个非零概率值, 从而避免零概率问题。平滑是指为了产生更合理的概率, 对最大似然估计进行调整 的一类方法, 也称为数据平滑(Data Smoothing)。平滑处理的基本思想是提高低概率, 降低高概率, 使整体的概 率分布趋于均匀。

不过, 高阶 n 元语言模型面临严重的数据稀疏问题, 即存在一些明显的缺点:(1) 无法建模长度超过 n 的 上下文;(2) 依赖人工设计规则的平滑技术;(3) 当 n 增大时, 数据的稀疏性随之增大, 模型的参数量更是指 数级增加, 并且模型受到数据稀疏问题的影响, 其参数难以被准确的学习。此外, n 元文法中单词的离散表示也 忽略了单词之间的相似性。因此, 自神经网络发展以来, 神经语言模型逐渐成为新的研究热点, 所采用的技术 包括前馈神经网络、循环神经网络、长短期记忆循环神经网络语言模型等等。​

PS:欢迎扫码关注微信公众号^-^.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RT-Thread I/O设备模型框架

I/O 设备模型框架 RT-Thread提供了一套简单的I/O设备模型框架,如图所示,它位于硬件和应用程序之间,共分成三层,从上到下分别是I/O设备管理层、设备驱动框架层、设备驱动层。 应用程序通过I/O设备管理接口获得正确的设备驱动&…

【AI视野·今日CV 计算机视觉论文速览 第249期】Tue, 19 Sep 202

AI视野今日CS.CV 计算机视觉论文速览 Tue, 19 Sep 2023 (showing first 100 of 152 entries) Totally 152 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers GEDepth: Ground Embedding for Monocular Depth Estimation Authors Xiaodong Yang…

【vue3页面展示代码】展示代码codemirror插件

技术版本: vue 3.2.40、codemirror 6.0.1、less 4.1.3、vue-codemirror 6.1.1、 codemirror/lang-vue 0.1.2、codemirror/theme-one-dark 6.1.2 效果图: 1.安装插件 yarn add codemirror vue-codemirror codemirror/lang-vue codemirror/theme-one-dar…

ChatGpt介绍和国产ChatGpt对比

1.ChatGPT是美国OpenAI研发的聊天机器人程序,2022年11月30日发布。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话。 2.ChatGPT是一种基于自然语言处理的聊天机器人程序。它使用深度学习技术,通过对…

A+CLUB管理人支持计划第八期 | 量创投资

免责声明 本文内容仅对合格投资者开放! 私募基金的合格投资者是指具备相应风险识别能力和风险承担能力,投资于单只私募基金的金额不低于100 万元且符合下列相关标准的单位和个人: (一)净资产不低于1000 万元的单位&…

抖 X-Bongus 参数逆向 python案例实战

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 知识点: 动态数据抓包 requests发送请求 X-Bogus 参数逆向 开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 requests pip ins…

python从入门到精通(一)

自己也有三四年的码龄了,目前,重拾起自己的博客,记录自己的学习笔记,为大家提供优质内容,也来巩固自己的学习内容。 很开心也成功成为了一名研究生,张张的研究方向是图像处理和计算机视觉这一块&#xff0c…

k8s手动下载镜像、通过容器创建镜像方法

手动下载镜像 1、首先pull镜像到本地 docker pull <镜像名称>:<标签>2、转储镜像 docker save -o /path/to/save/image.tar 3、解压 tar -xvf /path/to/save/image.tar补充 1、如果要将tar还原成镜像 docker load -i /path/to/save/image.tar或者用输入重定向…

Win10专业版开启远程桌面

Win10专业版开启远程桌面 方法一&#xff1a; 一、按“Win R”键&#xff0c;然后输入“sysdm.cpl”并按下回车键打开系统属性。 二、选择“远程”选项卡&#xff0c;在远程桌面中勾选“允许远程连接到此计算机”就可以开启远程桌面&#xff1b; 方法二&#xff1a; 一、打…

融云受邀参加 Web3.0 顶级峰会「Meta Era Summit 2023」

本周四 19:00-20:00&#xff0c;融云直播课 社交泛娱乐出海最短变现路径如何快速实现一款 1V1 视频应用&#xff1f; 欢迎点击上方小程序报名~ 9 月 12 日&#xff0c;由中国香港 Web3.0 媒体 Meta Era 主办的“Meta Era Summit 2023”在新加坡收官&#xff0c;融云作为战略合作…

Window11专业版安装Java环境

目录 一、首先准备好一个Java的环境包 二、在Windows11上双击运行此环境包 三、根据提示安装完成后&#xff0c;在此电脑上属性中搜索环境变量 四、配置环境变量、并验证 一、首先准备好一个Java的环境包 二、在Windows11上双击运行此环境包 按着要求进行下一步操作&#…

数据丢失防护工具

什么是数据丢失防护 数据丢失防护 &#xff08;DLP&#xff09; 涉及系统地识别、定位和评估具有内容和上下文感知的数据和用户活动&#xff0c;以应用策略或主动响应来防止数据丢失。静态、使用和动态数据必须受到持续监控&#xff0c;以发现企业数据存储、使用或共享方式的偏…

Docker-如何获取docker官网x86、ARM、AMD等不同架构下的镜像资源

文章目录 一、概要二、资源准备三、环境准备1、环境安装2、服务器设置代理3、注册docker账号4、配置docker源 四、查找资源1、服务器设置代理2、配置拉取账号3、查找对应的镜像4、查找不同版本镜像拉取 小结 一、概要 开发过程中经常会使用到一些开源的资源&#xff0c;比如经…

股票量化系统QTYX开启全自动实盘之路——第一弹easytrader库搭建本地自动交易环境...

搭建全自动化量化系统 股票量化交易系统QTYX最终形态是一款全自动化的量化交易系统。 接下来我们通过一个系列逐步把QTYX升级为全自动的系统。当前为第一篇&#xff1a;使用easytrader库搭建本地自动交易环境 股票的自动化交易接口在2015年之后就被管制了&#xff0c;于是对于普…

黑马JVM总结(十七)

&#xff08;1&#xff09;G1_简介 下面介绍一种Grabage one的垃圾回收器&#xff0c;在jdk9的时候称为默认的回收器&#xff0c;废除了之前的CMS垃圾回收器&#xff0c;它的内部也是并发的垃圾回收器 我们可以想到堆内存过大&#xff0c;肯定会导致回收速度变慢&#xff0c;因…

游戏开发玩法设计的重要性

玩法设计在游戏开发中非常重要&#xff0c;因为它直接影响着玩家的游戏体验和游戏的吸引力。一个精心设计的玩法可以使游戏更具趣味性、挑战性和可玩性&#xff0c;从而吸引更多的玩家并提高游戏的成功度。以下是玩法设计的重要性&#xff1a; 吸引力和沉浸感&#xff1a; 精心…

2023_Spark_实验九:Scala函数式编程部分演示

需求&#xff1a; 1、做某个文件的词频统计//某个单词在这个文件出现次数 步骤&#xff1a; 1、文件单词规律&#xff08;空格分开&#xff09; 2、单词切分 3、单词的统计 &#xff08;k,v&#xff09;->(k:单词&#xff0c;V&#xff1a;数量&#xff09; 4、打印 框…

手游模拟器长时间运行后,游戏掉帧且不恢复

1&#xff09;手游模拟器长时间运行后&#xff0c;游戏掉帧且不恢复 2&#xff09;FrameBuffer Fetch无论哪种模式在确定支持的手机上显示全紫 3&#xff09;协程中yield return CoFunction()和yield return StartCoroutine(CoFunction())的区别 这是第353篇UWA技术知识分享的推…

山石网科国产化入侵防御系统,打造全生命周期的安全防护

随着互联网的普及和网络安全的威胁日益增加&#xff0c;botnet感染成为了企业面临的重要问题之一。botnet是一种由分散的客户端&#xff08;或肉鸡&#xff09;组成的网络&#xff0c;这些客户端被植入了bot程序&#xff0c;受控于攻击者。攻击者通过这些客户端的bot程序&#…

win10 查看已连接过的wifi的密码

1 打开管理员模式的CMD 2 输入命令查看WIFI名称 netsh wlan show profiles 上面的列表右边&#xff0c;就是wifi名称 3 输入指令&#xff0c;查看wifi密码 netsh wlan show profile name"WIFI名称" keyclear