A Neural Probabilistic Language Model

news2024/9/24 11:26:20

摘要

统计语言建模的一个目标是学习单词序列的联合概率函数。由于维度的诅咒,这在本质上是困难的:我们建议用它自己的武器来对抗它。在提出的方法中,人们同时学习(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.coloradmin.cn/o/2074125.html

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

相关文章

TypeScript 类型注解(二)

一、TypeScript类型约束--对象 对象其实和数组类似,不是限制对象本身的类型,而是对对象属性类型进行限制 结构简化: 对对象做类型限制的好处: 大家都学习过一段时间编程了,会发现咱们经常操作的类型就是对象&#xf…

使用miniconda构建数据科学环境

背景 数据科学中,不同时期项目代码往往是由不同的版本的python和第三方数据科学包构建,这些不同版本往往会存在兼容性问题,要运行这些代码,需要管理不同的版本的安装包。Conda是一个开源的包管理和环境管理系统,环境管…

Linux | 编译和使用自定义动静态库的全面解析

新竹高于旧竹枝,全凭老干为扶持。 - 《新竹》(郑燮) 2024.8.25 目录 1、静态库和动态库简介 静态库(.a): 动态库(.so): 动态库和静态库的比较: 2、静态库的生成和使用&#xff…

GCB | 首次揭示!气候变化对常绿和落叶植物物候差异化影响的机制

气候变化引起的植物物候改变已对全球范围内生物多样性和生态系统产生重大影响(Nature高引文章 | 北京大学朴世龙院士等:全球变暖对植被物候的影响及其机制;Nature Ecology & Evolution | 南京大学张永光教授团队揭示延长的植被物候期受CO…

set容器的所有操作

1.基本概念 2.构造和赋值 3.大小和交换 4.插入和删除 5.查找和统计 6.set和multiset的区别 7.pair对组创建 用p.first和p.second调用前后两个属性。 8.仿函数实现降序排列 自定义数据类型也一样用仿函数:

【领域驱动设计 打通DDD最小闭环】领域建模

本篇BLOG为DDD流程的第二步,在模型的建立阶段,领域专家与技术人员通过领域建模来完成更为细致的模型建立讨论 领域建模的目的 领域建模主要有两个目的: 将知识可视化,准确、深刻地反映领域知识,并且在业务和技术人…

Python优化算法14——海鸥优化算法(SOA)

科研里面优化算法都用的多,尤其是各种动物园里面的智能仿生优化算法,但是目前都是MATLAB的代码多,python几乎没有什么包,这次把优化算法系列的代码都从底层手写开始。 需要看以前的优化算法文章可以参考:Python优化算…

【图文并茂】ant design pro 如何给后端发送 json web token - 请求拦截器的使用

上一节有讲过 【图文并茂】ant design pro 如何对接后端个人信息接口 还差一个东西,去获取个人信息的时候,是要发送 token 的,不然会报 403. 就是说在你登录之后才去获得个人信息。这样后端才能知道是谁的信息。 token 就代码了某个人。 …

工作实战-项目压测记录

1-1-1每分钟的单量 1-1-2第二版测试 2022年5月16日 17:43:11 成功 失败 其它(nginx) 真实入库单量 总单量 52 1 447 500 2022年5月16日 19:42:18 成功 失败 其它(nginx) 真实入库单量 总单量 311 689 306 1000 2-0-1. 20线程-2000单执行结果 2-1-0. 40线…

金融科技 API 接口:提升金融服务效率的关键

金融科技是应用技术手段和创新理念来提升金融服务效率的重要途径。而其中的API接口则是实现金融科技的关键。API接口的简单定义是提供计算机程序之间通信的规范和工具,提供一种方法和数据的交互形式,以便开发人员能够利用现有的软件来创建新的应用和服务…

前端网格布局display: grid;

display: grid; 块级网格 (常用) display: inline-grid; 行内块级网格 (一般不用) HTML 元素将 display 属性设置为 grid 或 inline-grid 后,它就变成了一个网格容器,这个元素的所有直系子元素将…

Mobile-Agent项目部署与学习总结(DataWhale AI夏令营)

前言 你好,我是GISer Liu,一名热爱AI技术的GIS开发者,本文是DataWhale 2024 AI夏令营的最后一期——Mobile-Agent赛道,这是作者的学习文档,这里总结一下,和作者一起学习这个多模态大模型新项目吧&#x1f6…

开放式耳机对耳朵的伤害会减小吗?亲测好用的四款蓝牙耳机

开放式耳机对耳朵的伤害相对较小。 首先,开放式耳机不入耳,不会直接堵塞耳道,减少了对耳道的挤压和摩擦,降低了因长期佩戴入耳式耳机可能导致的耳道发炎、疼痛等问题。 其次,由于耳朵没有被完全封闭,耳部能…

【C/C++】结构体指针赋值的方法

在C语言中,结构体指针赋值有两种方法: 1.使用"->"操作符:通过结构体指针访问结构体成员并赋值。例如: struct Student {int id;char name[20]; };int main() {struct Student s1;struct Student *ptr_s1 &s1;…

设计模式学习[4]---依赖倒置原则+里氏代换原则

文章目录 前言1. 依赖倒置原则1.1 原理阐述1.2 举例 2.里氏代换原则2.1 原理阐述2.2 举例说明 总结 前言 在给发新功能模块之前,都先要画UML类图进行需求分析。对每一个类的作用,类与类之间的关系做一个详细的阐述。确定好基本的框架之后,才…

Lumos学习王佩丰Excel第十四讲:日期函数

一、认识时间和日期 1、回顾日期格式 日期可以由数字表示。 2、时间格式 时间由小数表示。 3、基本的时间与日期运算 二、日期函数 1、Year、Month、Day函数 2、Date函数 DATE(year,month,day):year为必需参数,可以包含1到4个数字。Day函…

LeetCode 热题 100 回顾

目录 一、哈希部分 1.两数之和 (简单) 2.字母异位词分组 (中等) 3.最长连续序列 (中等) 二、双指针部分 4.移动零 (简单) 5.盛最多水的容器 (中等) 6…

文心一言 VS 讯飞星火 VS chatgpt (332)-- 算法导论23.1 1题

一、设(u,v)是连通图G中的一条权重最小的边,证明:边(u,v)为图G的某棵最小生成树中的一条边。如果要写代码,请用go语言。 文心一言: 为了证明边(u,v)是图G的某棵最小生成树中的一条边,我们可以使用反证法结合最小生成…

09 复合查询

前面的查询都是对一张表进行查询,但这远远不够 基本查询回顾 查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J select * from EMP where (sal>500 or job‘MANAGER’) and ename like ‘J%’; 按照部门号升序而雇员的…

免费用的写作神器:一键自动生成文章,提升内容创作效率!

传统的写作过程往往耗时耗力,从构思、调研到撰写、修改,每一步都需要创作者亲力亲为。免费写作神器的出现,犹如一场及时雨,为创作者提供了强大的支持。它利用先进的算法和自然语言处理技术,能够在短时间内生成高质量的…