A Neural Probabilistic Language Model

摘要

统计语言建模的一个目标是学习单词序列的联合概率函数。由于维度的诅咒,这在本质上是困难的:我们建议用它自己的武器来对抗它。在提出的方法中,人们同时学习(1)每个单词的分布式表示(词向量)(即单词之间的相似性)以及(2)表示单词序列的概率函数。泛化是由于一个以前从未见过的单词序列,如果它由与一个已经见过的句子相似的单词组成,那么它就有很高的概率。我们报告了使用神经网络进行概率函数的实验,在两个文本语料库上显示,所提出的方法在最先进的3-gram上得到了非常显著的改进。

1 介绍

使语言建模和其他学习问题变得困难的一个基本问题是维度的诅咒。当想要对许多离散随机变量(例如句子中的单词或数据挖掘任务中的离散属性)之间的联合分布进行建模时,这一点尤为明显。例如,如果想要对一种自然语言中10个连续单词的联合分布进行建模,其词汇表V的大小为100,000,则可能存在100000^10 - 1 = 10^50 - 1个自由参数。根据给定的前t−1个词,统计语言模型可以由第t个词的条件概率表示:

Wt是第t个单词,子序列为

在构建自然语言的统计模型时,可以通过利用词序来降低难度,而事实上,在单词序列中时间上更接近的单词在统计上更依赖。因此,n-gram模型为大量上下文中的每一个构建下一个单词的条件概率表,即最后n- 1个单词的组合:只考虑那些在训练语料库中实际出现的连续单词的组合(或经常出现的组合)。当训练语料库中没有出现的n个单词的新组合出现时会发生什么?一个简单的答案是使用较小的上下文大小来查看预测的概率,如后退三元模型[7](回退:如果p(wn|wn-1,wn-2)找不到就找p(wn|wn-1))或平滑(或插值)三元模型[6](插值:p(wn|wn-1,wn-2)= alpha1*p(wn|wn-1,wn-2)+alpha2*p(wn-1|wn,wn-2)+alpha3*p(wn-2))所做的那样。那么,在这样的模型中,如何从训练语料库中看到的单词序列到新的单词序列进行泛化呢?简单地通过查看足够短的上下文,即,通过“粘合”在训练数据中频繁出现的长度为1、2或3的非常短的单词来获得长单词序列的概率。显然,在单词之前的序列中有更多的信息可以预测,而不仅仅是前几个单词的身份。这种方法至少有两个明显的缺陷(但事实证明很难克服):首先,它没有考虑到1或2个单词以外的上下文,其次,它没有考虑到单词之间的“相似性”。例如,在训练语料库中看到“猫在房间里跑”这句话,可以帮助我们进行概括,使“狗在房间里跑”这句话的可能性几乎一样大,因为“狗”和“猫”(见图2)。“the”和“a”,“room”和“bedroom”等等……)具有相似的语义和语法角色。

1.1 用它自己的武器对抗维度灾难

简而言之,建议的方法的思想可以概括如下:

1.与词汇表中的每个单词关联一个分布式“特征向量”(向量属于m维的向量空间),从而创建单词之间的相似性概念。
2.用序列中这些词的特征向量表示词序列的联合概率函数
3.同时学习单词特征向量和联合概率函数的参数

特征向量表示单词的不同方面:每个单词与向量空间中的一个点相关联。特征的数量(例如,实验中的m = 30,60或100)远远小于词汇表的大小。概率函数表示为给定前一个词的下一个词的条件概率的乘积,(例如在实验中使用多层神经网络)。这个函数的参数可以迭代调整,以最大化训练数据的对数似然或正则化标准,例如通过添加权重衰减惩罚。与每个词相关的特征向量被学习,但它们可以使用先验知识初始化。

为什么它会起作用?在前面的例子中,如果我们知道狗和猫扮演着相似的角色(语义和语法上),对于(the,a), (bedroom,room), (is,was),(running,walking),我们可以很自然地从the cat is walking in the room)推广到a dog was running in a room,以及类似的许多其他组合。在提出的模型中,它会如此泛化,因为“相似”的词应该具有相似的特征向量,并且因为概率函数是这些特征值的光滑函数,所以特征的微小变化(以获得相似的词)会导致概率的微小变化:只看到上面一个句子不仅会增加这个句子的概率,而且会增加它在句子中“邻居”的组合数量(用特征向量序列表示)。

1.2 与以往工作的关系

使用神经网络对高维离散分布建模的想法在[3]中已经被发现是有用的,其中Z1到Zn的联合概率被分解为条件概率的乘积:

,其中g(.)是由神经网络的一部分表示的函数,并给出了表示Zi分布的参数。在四个UCI数据集上的实验表明,这种方法相对来说工作得非常好[3,2]。符号的分布式表示的想法可以追溯到联结主义的早期[5]。基于字符的文本压缩使用神经网络[11]。学习单词聚类[10,1]也是发现单词之间相似性的一种方法。在本文提出的模型中,我们不是使用离散的随机或确定性变量(对应于词集的软或硬划分)来表征相似度,而是使用每个词的连续实向量,即分布式特征向量来间接表示词之间的相似度。使用向量空间表示单词的想法已经在信息检索领域得到了很好的利用(例如参见[12]),其中单词的向量特征向量是根据它们在同一文档中共同出现的概率来学习的(潜在语义索引[4])。一个重要的区别是,这里我们寻找的是一种有助于紧凑地表示自然语言文本中单词序列概率分布的单词表示。实验表明,联合学习表征(词特征)和模型在性能上有很大的不同。

2 建议的模型:两个体系结构

训练集是序列W1…wT,wt属于V,其中词汇表V是一个大而有限的集合,目标是学习一个好的模型,因为它给出了很高的样本外似然。我们将报告l/P的几何平均值,也称为困惑度,它也是平均负对数似然的指数。该模型的唯一约束是,对于任意选择。通过这些条件概率的乘积,可以得到任意单词序列的联合概率模型。这里描述了模型的基本形式。下面几节将描述加速和扩展它的改进。我们分解这个函数为两个步骤:

(1)一个映射C从V的任意元素到实向量C属于m维向量空间 。它表示与词汇表中每个单词相关联的“分布式特征向量”。在实践中,C由一个(自由参数的)I V I x m矩阵表示。

(2)单词的概率函数,用c表示。我们考虑了两种可选的公式:
(a)直接架构:函数g将上下文中单词的特征向量序列映射到V中单词的概率分布。它是一个向量函数,其第i个元素估计概率,如图1所示。我们在神经网络的输出层中使用了“softmax”;其中hi是单词i的神经网络输出分数。(由当前单词前n个单词的embedding获得当前单词

(b)循环架构:函数h将一系列特征向量(C(Wt-n),···,C(Wt-i), C(i))(即包括上下文词和候选下一个词i)映射到标量hi,并再次使用softmax;f (Wt、Wt-i···,Wt-n) = g (C (Wt), C (wt-d···C (Wt-n))。我们称这种架构为“循环”,因为一个人反复运行h(例如神经网络),每次输入下一个候选单词i的特征向量C(i)。(由当前单词前n个单词的embedding获得当前单词的embedding

函数f是这两个映射(C和g)的组合,其中C被上下文中的所有单词共享。这两个部分各有一些参数。映射C的参数仅仅是特征向量本身(由IVI x m矩阵C表示,其第i行是单词i的特征向量C(i))(第i个单词的embedding)。函数g可以通过前馈或循环神经网络或另一个参数化函数实现。

训练语料库惩罚对数似然最大化,其中R是一个正则化项(例如权重衰减),它稍微惩罚了参数的范数。 

3 加速和其他技巧

Short list。其主要思想是将神经网络的工作集中在概率最高的单词的“短列表”上。这可以节省大量计算,因为在这两种提出的体系结构中,计算观察到的下一个单词的概率的时间几乎与词汇表中的单词数量成线性关系(因为必须计算词汇表中与每个单词i相关的分数hi,以便使用softmax正确地规范化概率)。加速技巧的思想如下:不是计算下一个单词的实际概率,而是使用神经网络来计算短列表中下一个单词的相对概率。短列表的选择取决于当前上下文(前n个单词)。我们已经使用我们的平滑三元图模型来预先计算一个短列表,其中包含与前两个单词关联的最可能的下一个单词。因此,条件概率P的估计计算如下,其中ht表示Wt之前的历史文本,Lt表示用于预测Wt对应单词的短单词列表。(这个没想明白在推理时怎么判断当前预测词属于short list

Table look-up for recognition。为了加速训练模型的应用,可以在哈希表中预先计算神经网络的输出,至少对于最频繁的输入上下文。在这种情况下,神经网络将很少被调用,并且平均计算时间将非常小。请注意,在语音识别系统中,只需要计算每个上下文中声音不明确的单词的相对概率,这也大大减少了计算量。 

随机梯度下降。由于我们有数百万个示例,因此在数据的几次传递中收敛是很重要的。对于非常大的数据集,随机梯度下降收敛时间似乎随着数据集的大小呈次线性增长(参见下面Brown vs Hansard的实验)。我们发现将语料库分成段落并随机排列是很有用的。通过这种方式,单词流中的一些非平稳性被消除,从而产生更快的收敛速度。

Capacity control.。对于“较小的语料库”,如Brown(120万个样本),我们发现早期停止和权值衰减有助于避免过度拟合。对于更大的语料库,我们的网络仍然不适合。对于较大的语料库,我们发现双精度计算对于获得好的结果是非常重要的。

混合模型。我们发现,通过将神经网络的概率预测与平滑三元图的概率预测相结合,以及以上下文频率为条件的权重(与在平滑三元图中组合三元图、双元图和单元图的过程相同),性能得到了提高。

初始化词特征向量。我们已经尝试了随机初始化(均匀分布,-0.01-0.01),以及一种“更智能”的方法,该方法基于一个非常大的“上下文特征”矩阵的奇异值分解(SVD)。这些上下文特征是通过计算语料库中每个最常见的上下文(词序列)中每个单词的出现频率来形成的。这个想法是“相似”的词应该在相同的上下文中以相似的频率出现。我们使用了大约9000个最常见的上下文,并使用SVD将它们压缩为30个特征。

词汇表之外的词汇(未登录词)。对于一个词汇表外的单词Wt,我们需要想出一个特征向量来预测后面的单词,或者预测它的概率(这只有在循环架构下才有可能)。我们使用短列表中所有单词的加权平均特征向量作为特征向量,权重为这些单词的相对概率:

4 实验结果

在Brown语料库和Hansard语料库上进行了对比实验。布朗语料库包含1181041个单词(来自各种各样的英语文本和书籍)。前80万个单词用于训练,接下来的20万个用于验证(模型选择、权重衰减、提前停止),剩下的181,041个用于测试。不同单词的数量为47,578(包括标点符号,区分大小写,以及用于分隔文本和段落的语法标记)。频次:::;3个被合并成一个标记,将词汇表大小减少到IVI = 16,383。

Hansard语料库(加拿大议会会议记录,法语版本)是一个大约3400万单词的流,其中3200万(集a)用于训练,110万(集B)用于验证,120万(集C)用于样本外测试。原始数据有106,936个不同的单词,频率为:::;10个被合并成一个标记,产生IVI = 30,959个不同的单词。

比较神经网络的基准是插值或平滑的三元模型[6]。令qt = l(Jreq(wt - 1,Wt-2))表示上下文出现的离散频率(wt - 1,Wt-2)(我们使用l(x) = r -log((l x)/T)l,其中x是上下文出现的频率,T是训练语料库的大小)。在验证集上学习到三格、双格、单格和零格的条件混合,混合权值以离散频率为条件。下图是不同模型p的测试集困惑度(几何平均值为1/ p(Wt Iwi-1))。Hansard和Brown分别在大约10次和50次之后得到了明显的收敛性,学习率从大约10-3逐渐下降到10-5。所有实验均采用10-4或10-5的权重衰减(基于在验证集上比较的几个实验)。

主要结果是神经网络的性能比平滑trigram网络好得多。在Brown上,根据验证困惑度(在尝试过的不同架构中,见下文),最好的神经网络系统产生了258的困惑度,而平滑的三元组产生了348的困惑度,差了大约35%。这是使用直接架构与三元组(条件混合)混合的网络获得的,其中有30个单词特征用SVD方法初始化,40个隐藏单元和n = 5个上下文单词。在Hansard上,神经网络的对应数据为44.8,平滑三元图的对应数据为54.1,差20.7%。这是通过具有直接架构、100个随机初始化单词特征、120个隐藏单元和n = 8个上下文单词的网络获得的。
更多的背景是有用的。在Brown上使用循环结构进行实验,使用30个单词特征和30个隐藏单元,改变上下文单词的数量:n = 1(如双元图)产生302的测试困惑度,n = 3产生291,n = 5产生281,n = 8产生279(注意,平滑三元图产生348)。
隐藏的单位有帮助。在Brown上使用直接架构进行实验(直接输入输出连接),使用30个单词特征,5个上下文单词,改变隐藏单元的数量:0表示测试困惑度为275,10表示267,20表示266,40表示265,80表示265。
共同学习单词特征是很重要的。在Brown(40个隐藏单元,5个上下文词)上的直接结构实验中,在训练过程中保持SVD方法初始化的词特征固定不变,得到的测试困惑度为345.8,而如果将词特征与其他参数联合训练,则得到的测试困惑度为265。
初始化不是很有用。两种体系结构在Brown上的实验表明,相对于随机初始化,单词特征的SVD初始化并没有带来太大的改进:它加速了初始收敛(节省了大约2个epoch),并且产生了小于0.3%的困惑度改进。
直接架构工作得更好一些。结果发现,直接式结构比循环式结构好2%左右。条件混合有帮助,但即使没有它,神经网络也更好。在Brown上,没有混合的最佳神经网络的测试困惑度为265,平滑三元组的测试困惑度为348,而它们的条件混合的测试困惑度为258(即比两者都好)。在Hansard上,改进较少:一个神经网络的困惑度为46.7,与三元组合(54.1)混合,得到的困惑度为45.1。

5 讨论

在两个语料库上的实验,一个中等语料库(120万单词)和一个大型语料库(3400万单词)表明,所提出的方法比最先进的方法平滑三格表(smooth triram)产生更好的困惑度,差异在20%到35%之间。

 我们认为,这些改进的主要原因是所提出的方法允许利用学习到的分布式表示来用自己的武器来对抗维度的诅咒:每个训练句子告诉模型关于其他句子的组合数量。请注意,如果我们对每个“上下文”(短单词序列)都有一个单独的特征向量,那么模型将具有更大的容量(可以像n-grams那样增长),但它不会自然地在许多不同的使用单词的方式之间进行推广。一个更合理的选择是探索单词以外的语言单位(例如一些短单词序列,或者一些子单词语素单位)。

在架构、计算效率和利用先验知识的层面上,改进模型可能还有很多工作要做。未来研究的一个重要优先事项应该是评估和改进这里提出的加速技巧,并找到在不增加太多训练时间的情况下增加容量的方法(处理数以亿计单词的语料库)。利用时间结构并扩展输入窗口的大小以包括可能的整个段落,而不增加太多参数数量的一个简单想法是使用时间延迟和可能的循环神经网络。在这样的多层网络中,当网络输入窗口被移动时,已经为小组连续单词执行的计算不需要重做。类似地,人们可以使用循环网络来捕获关于文本主题的潜在更长期的信息。

所提出的模型可以改进的一个非常重要的领域是使用先前的语言知识:语义(例如Word Net),句法(例如标记器)和形态学(基数和语素)。查看模型学习到的单词特征应该有助于理解和改进它。最后,未来的研究应该确定所提出的方法在语音识别、语言翻译和信息检索中的应用。
 

n-gram:自然语言处理NLP中的N-gram模型_nlp ngam-CSDN博客
综述 词向量与分布式表示:综述 词向量与分布式表示_分布式词向量-CSDN博客
论文阅读:论文阅读:A Neural Probabilistic Language Model 一种神经概率语言模型-CSDN博客
谷歌学术:https://scholar.dosf.top/

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

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

相关文章

在进行网站链接时,‌加上http或https的重要性不言而喻

这一简单的操作背后,‌蕴含着对搜索引擎优化(‌SEO)‌的深刻理解,‌以及对网站权重提升的精准把握。‌以下,‌我们将深入探讨这一话题,‌以期为您的网站优化提供有价值的参考。‌优化(‌SEO&…

C/C++控制台贪吃蛇游戏的实现

🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主,后期持续更新系列文章 🚀如果有错误感谢请大家批评指出,及时修改 🚀感谢大家点赞👍收藏⭐评论✍ 一、…

数据可视化大屏模板-美化图表

Axure作为一款强大的原型设计软件,不仅擅长构建交互式界面,更在数据可视化方面展现出了非凡的创意与实用性。今天,就让我们一起探索Axure设计的几款精美数据可视化大屏模板,感受数据之美。 立体图表的视觉冲击力 Axure的数据可视…

银河麒麟桌面操作系统V10:如何设置应用开机自启动?

银河麒麟桌面操作系统V10:如何设置应用开机自启动? 1、图形界面设置2、命令行设置3、注意 💖The Begin💖点点关注,收藏不迷路💖 1、图形界面设置 打开“设置”->“系统”->“开机启动”。点击“添加…

5000套精美PPT免费分享

目录 部分展示目录 几乎包含各种应用场景的PPT模板 这里只展示部分目录 部分展示目录 ##PPT下载 链接:https://pan.baidu.com/s/1ckvN9xeMR82hL30lHXfJ0g 提取码:ZYNB 点击下载,记得点个赞哦

ELK进阶-安全认证设置流程介绍

目录 一、前言 二、ElasticSearch的安全认证配置 设置ElasticSearch的安全认证功能(最低) 启用TLS/SSL加密通信 (1)生成CA证书 (2)生成transport证书 (3)生成http证书 &#…

docker镜像,ip,端口映射,持久化

docker 镜像的迁移:导出和导入镜像 查看镜像: [rootdocker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5d0da3dc9764 2 years ago 231MB 打包 将镜像打包,找到save,可以将…

【非常困难】 猿人学web第一届 第10题 js 混淆 - 重放攻击对抗

文章目录 调试干扰第一个 debuggerHook 代码 第二个 debuggerHook 代码 第三个 Function.constructor.prototype 检测Hook 代码 完整的 Hook 代码 接口分析加密参数 m 生成位置加密参数还原加密点扣代码提示_yrxyA\$()var _yrxmEu _yrxWKg(_yrxyHJ...._yrxWKg() let result _…

半枚玄月照见人间空荡荡

半枚玄月照见人间空荡荡 昨夜玄月昨夜风,轻吹往事落心中。 众里寻他为何事?鸡鸣月落一场空。玄月 沙发上刷短视频笑得不经意抬头,忽而瞥见窗口防盗网挂着半枚月亮,玄黄色的,温润而冷冽,引人注目。 手机里…

国货之光|暴雨机推出面向大模型训练的AI服务器

当前,“百模大战”带来了算力需求的爆发,尤其是以ChatGPT为代表的多模态AI大模型,‌其参数规模和训练数据量均达到了前所未有的规模。‌GPT-3.5、‌GPT-4等模型的参数规模突破了万亿级别,‌训练数据量达到了TB级别,‌这…

zdppy+vue3+onlyoffice文档管理系统实战 20240823上课笔记 zdppy_cache框架的低代码实现

遗留问题 1、封装API2、有账号密码3、查询所有有效的具体数据,也就是缓存的所有字段 封装查询所有有效具体数据的方法 基本封装 def get_all(self, is_activeTrue, limit100000):"""遍历数据库中所有的key,默认查询所有没过期的:para…

51单片机——LED灯控制

1、LED介绍 中文名:发光二极管 外文名:Light Emitting Diode 简称:LED 用途:照明、广告灯、指引灯、屏幕 2、LED原理图 电阻在原理图上标注为1k,表示这是1千欧的电阻,实际在电路板上的表示是102 102解…

Godot《躲避小兵》实战之创建游戏主场景

游戏主场景 现在是时候将我们所做的一切整合到一个可玩的游戏场景中了。 创建新场景并添加一个 Node节点,命名为 Main。(我们之所以使用 Node 而不是 Node2D,是因为这个节点会作为处理游戏逻辑的容器使用。本身是不需要 2D 功能的。&#x…

C\C++ Sqlite3使用详解

C\C++ Sqlite3使用详解 一、源码下载二、sqlite3接口说明C++2.1 项目创建以及sqlite3使用2.1 连接数据库2.2 sqlite创建表2.2.1 示例代码2.2.2 注意事项2.3 sqlite插入数据2.3.1 示例代码2.3.2 注意事项2.4 sqlite数据删除2.5 sqlite数据查询一、源码下载 下载地址: https://…

oneapi 获取通义千问模型密钥

1、打开 阿里云百炼大模型平台,点击开通,登录账号 2、获取密钥 3、查看模型名称,可以添加到 oneapi 的渠道中 别忘了添加向量模型

python库(21):

1 TextBlob简介 TextBlob 是一个基于 Python 的文本处理库,能够让基础的自然语言处理任务变得异常简单。 它提供了一个简单直观的 API,让你能够轻松执行词性标注、名词短语提取、情感分析、文本分类和关键词提取等功能。 值得一提的是,Tex…

[Linux]如何在虚拟机安装Ubuntu?(小白向)

一、我们为什么要在虚拟机中安装Ubuntu? 在虚拟机中安装系统主要是为了让一个系统与我们原本的系统隔离,不管是想运行一些不安全的软件,或者是想运行一些独特的操作系统,我们都可以选择使用虚拟机来安装和隔离这些操作系统。如果你是一位Lin…

跨越语言障碍:2024四款实用在线翻译工具评测!

随着技术的不断进步,各种在线翻译工具层出不穷,帮助我们轻松跨越语言的鸿沟。今天,让我们一起探索几款非常实用的在线翻译工具! 福昕在线翻译 直达链接: https://fanyi.pdf365.cn/ 福昕在线翻译是一款专注于文档翻…

【C++】函数模板特化:深度解析与应用场景

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

dubbo:dubbo+nacos整合springcloud gateway实现网关(三)

文章目录 0. 引言1. 集成gateway网关1.1 实操步骤1.2 dubbo提供者注册到nacos出现两个实例的问题 2. 源码3. 总结 0. 引言 上次我们讲到使用zookeeper作为注册中心搭建dubbo微服务框架,但是我们还缺少一个服务总入口,也就是我们的网关服务。所以今天我们…