工作总结:
文献阅读
综述类:
2023年国内大模型发展综述与趋势研判_赵子忠
AIGC大模型测评综述:使能技术、安全隐患和应对_许志伟
AI大模型发展综述_张乾君
深入:
《A Neural Probabilistic Language Model》是Yoshua Bengio等人在2003年发表的一篇重要论文,提出了一种基于神经网络的语言模型方法。这篇论文的主要目标是通过神经网络来改进传统的语言模型。
传统的语言模型的任务是估计一个词序列的概率: P(w1,w2,…,wT) 在这种情况下,模型需要根据上下文词来预测当前词的概率。传统的做法一般是通过统计方法(如n元语法模型)来估计这些概率,但这类方法有一个很大的问题:它们无法处理高维数据,尤其是在词汇量非常大的情况下,计算复杂度极高,且泛化能力有限。
Bengio等人提出了一种新的神经网络语言模型,目的是克服这个问题。这个模型的核心思想是使用一个多层感知器来学习词的分布式表示(即词向量),并基于这些词向量来估计概率。具体过程大致如下:
-
词嵌入:每个词通过一个嵌入矩阵被映射为一个连续向量,这种向量的维度比词汇表要小得多。这一步的目的是将离散的词映射到一个连续的低维空间,减少计算复杂度。
-
神经网络建模:利用一个前馈神经网络(通常是多层感知器),根据前面的若干个词的词向量,来预测下一个词的条件概率。通过这个网络,模型可以学习到词与词之间的相似性和上下文关系。
-
训练:模型通过最大化训练数据的似然估计来进行训练。具体来说,模型会调整嵌入矩阵和网络的参数,使得预测的概率尽可能接近真实的词序列概率。
这篇论文的创新之处在于提出了“词向量”的概念,并展示了使用神经网络来处理语言建模问题的潜力。这为后来的深度学习在自然语言处理(NLP)中的应用奠定了基础。
附录
什么是语言模型
语言模型(Language Model, LM)是自然语言处理中的一个核心概念,其主要任务是对一个词序列的概率分布进行建模。简单来说,语言模型的目标是估计一段文本或句子出现的概率,或者根据前面的词来预测下一个词。
语言模型的定义
给定一个词序列
$$ P( w_1, w_2, \dots, w_T ) $$,语言模型的目标是计算这个序列的联合概率:
$$ P(w_1, w_2, \dots, w_T) $$这通常可以分解为条件概率的乘积:
$$ P(w_1, w_2, \dots, w_T) = P(w_1) \cdot P(w_2 | w_1) \cdot P(w_3 | w_1, w_2) \cdot \dots \cdot P(w_T | w_1, w_2, \dots, w_{T-1}) $$这意味着每个词的概率取决于它前面的词。一个好的语言模型能够通过学习语料库中的模式,准确地捕捉这些条件概率。
语言模型的用途
语言模型有广泛的应用场景,包括但不限于:
-
文本生成:语言模型可以用来自动生成自然语言文本。例如,给定一部分句子,模型可以预测并生成合理的下一个词,从而逐步生成完整的句子或段落。
-
机器翻译:在机器翻译中,语言模型帮助翻译系统生成符合目标语言语法的翻译结果。
-
语音识别:语言模型能够帮助语音识别系统,在可能的识别结果中选择最合适的词序列。
-
拼写纠正:在文本输入或搜索引擎中,语言模型可以用于纠正拼写错误,提供更符合语言习惯的结果。
传统语言模型
在神经网络语言模型之前,最常用的语言模型是n元语法模型(n-gram Model)。n元语法模型通过假设一个词的概率只与它前面的n-1个词有关来简化问题。举个例子,三元语法模型(trigram model)认为:
$$ P(w_T | w_1, w_2, \dots, w_{T-1}) \approx P(w_T | w_{T-2}, w_{T-1}) $$这种简化降低了计算复杂度,但也限制了模型的表达能力,因为它只能捕捉到短距离的上下文信息,无法充分考虑长距离的依赖关系。
神经网络语言模型
传统语言模型的一个主要问题是词汇量增大时,模型的计算复杂度随之增加。为了解决这个问题,Yoshua Bengio等人在《A Neural Probabilistic Language Model》论文中提出了使用神经网络进行语言建模的想法。这种神经网络模型通过将词表示为词向量(word embeddings),并通过深度学习模型来捕捉更复杂的语境和词间关系,从而解决了传统语言模型的许多不足之处。
总之,语言模型的核心任务就是对自然语言的概率进行建模,并通过学习语言中的统计模式来预测文本。
什么是纬度灾难?
维度灾难(Curse of Dimensionality)是指在处理高维数据时,随着数据维度增加,问题的复杂性呈指数级增长,导致很多传统方法在高维空间中变得低效或不可行的现象。
其影响包括:
-
数据稀疏性:在高维空间中,数据点变得非常稀疏,因为数据的总量相对于空间的体积变得极其小,导致模型难以从有限的数据中捕捉到模式和关系。简单来说,随着维度的增加,需要的样本量也随之爆炸性增长,否则模型可能会过拟合或无法泛化。
-
计算复杂度增加:在高维空间中,计算距离、相似性等操作的复杂度大大增加,使得很多算法在高维情况下效率低下。
-
模型的泛化能力下降:由于数据点过于稀疏,模型很难学习到有用的特征,从而可能导致泛化能力下降。
具体来说,维度灾难对机器学习、统计学、最优化等领域带来了极大的挑战,尤其是当模型需要处理很多特征或变量时。为应对这个问题,研究人员提出了许多方法,如降维技术(如主成分分析PCA)和分布式表示(如词嵌入),以减少有效维度或通过分布式方法来表示复杂的数据结构。
有概率为什么要引入似然的概念,他们有什么不同?
概率和似然虽然看起来相似,但在统计学中它们有不同的定义和用途:
概率(Probability)
概率是用来描述随机事件发生的可能性。在给定模型参数的情况下,概率告诉我们某个事件或观测结果发生的机会有多大。
假设我们有一个随机变量 \( X \),它取某个值 \( x \) 的概率可以表示为 \( P(X = x|\theta) \),其中 \( \theta \) 是模型的参数。例如,如果我们有一个硬币掷出的模型,参数 \( \theta \) 可以是硬币正面朝上的概率(比如 \( \theta = 0.5 \))。
- 核心问题:给定模型的参数 \( \theta \),事件 \( X = x \) 发生的概率是多少?
似然(Likelihood)
似然是从反方向来考虑的。它描述的是在已知观测数据的前提下,模型参数的可能性。具体来说,似然是给定观测数据后,模型参数如何使观测数据变得最可能的一个度量。
假设我们已经观察到数据 \( X = x \),现在我们想知道,在不同的模型参数 \( \theta \) 下,这个数据出现的可能性有多大。似然可以表示为 \( L(\theta|X = x) \),或者更直观地写作 \( P(X = x|\theta) \),虽然数学表达式相同,但意义不同——在这里我们关注的是参数 \( \theta \) 的值使观测到的数据最可能。
- 核心问题:给定观测到的数据 \( X = x \),模型参数 \( \theta \) 有多大可能是正确的?
概率和似然的区别
-
概率:我们知道参数 \( \theta \),希望知道某个事件 \( X \) 发生的概率。
- 问题:给定参数,事件的概率是多少?
-
似然:我们知道事件(观测数据),希望推断出最有可能的参数 \( \theta \)。
- 问题:给定观测数据,哪个参数最可能是正确的?
例子
抛硬币的例子
-
概率:假设你有一枚硬币,已知它是公平的,即 \( \theta = 0.5 \),那么掷硬币得到正面的概率是 \( P(\text{正面}) = 0.5 \)。
-
似然:现在,你掷硬币10次,得到8次正面和2次反面。你不知道硬币的公平性(即不知道 \( \theta \) 的值)。你想根据这次实验结果估计硬币正面朝上的概率 \( \theta \)。此时,你需要用似然来衡量在不同 \( \theta \) 值下,观测结果(8次正面,2次反面)出现的可能性有多大,从而找到最有可能的 \( \theta \)。
似然函数 \( L(\theta|X) \) 可能在某个 \( \theta \) 值处达到最大值,这个 \( \theta \) 就是最能解释观测数据的参数值。
总结
- 概率用于给定模型参数时预测事件的发生可能性。
- 似然用于在已知观测数据时,推断哪个参数最能解释这些数据。