深度学习应用 - 自然语言处理(NLP)篇

序言

在信息技术的浩瀚星空中,深度学习犹如一颗璀璨的新星,正引领着人工智能领域的深刻变革。作为这一领域的核心分支,自然语言处理( NLP \text{NLP} NLP)更是借助深度学习的力量,实现了前所未有的飞跃。自然语言处理,顾名思义,是计算机理解、解释和生成人类语言的过程,它不仅是人工智能皇冠上的明珠,也是连接人机沟通、推动智能社会发展的重要桥梁。随着大数据时代的到来和计算能力的显著提升,深度学习技术以其强大的特征提取和模式识别能力,为自然语言处理注入了新的活力,开启了智能语言理解的新纪元。

自然语言处理

  • 自然语言处理 ( Natural Language Processing, NLP \text{Natural Language Processing, NLP} Natural Language Processing, NLP) 让计算机使用人类语言,例如英语或法语。
    • 让简单的程序能够高效明确地解析,计算机程序通常读取和发出特殊化的语言。
    • 而自然的语言通常是模糊的,并且会违背形式的描述。
    • 自然语言处理中的应用如机器翻译,学习者必须用一种人类语言读取句子并用另一种人类语言发出等同的句子。
    • 许多 NLP \text{NLP} NLP应用程序基于语言模型, 语言模型定义了关于自然语言中的字,字符或字节序列的概率分布。
  • 与本篇讨论的其他应用一样,++非常通用的神经网络技术++ 可以成功地应用于自然语言处理。
    • 然而,为了实现卓越的性能并扩展到大型应用程序,一些领域特定的策略也很重要。
    • 为了构建自然语言的有效模型,通常必须使用专门处理序列数据的技术。
    • 在很多情况下,我们将自然语言视为一系列词,而不是单个字符或字节序列。
    • 因为可能的词总数非常大,++基于词的语言模型++ 必须在++极高维度++ 和++稀疏的离散空间++上操作。
    • 为使这种空间上的模型在计算和统计意义上都高效,研究者已经开发了几种策略。

n n n-gram

  • 语言模型 ( language model \text{language model} language model) 定义了自然语言中标记序列的概率分布。

    • 根据模型的设计,标记可以是词、字符、甚至是字节。
    • 标记总是离散的实体。
    • ++最早成功的语言模型基于固定长度序列的标记模型,称为 n -gram ‾ \underline{n\text{-gram}} n-gram。++
    • 一个 n -gram n\text{-gram} n-gram是一个包含 n n n 个标记的序列。
  • 基于 n -gram n\text{-gram} n-gram的模型定义一个条件概率------给定前 n − 1 n − 1 n−1 个标记后的第 n n n 个标

    记的条件概率。

    • 该模型使用这些条件分布的乘积定义较长序列的概率分布:
      P ( x 1 , ... , x τ ) = P ( x 1 , ... , x n − 1 ) ∏ t = n τ P ( x t ∣ x t − n + 1 , ... , x t − 1 ) P(x_1,\dots,x_\tau)=P(x_1,\dots,x_{n-1})\displaystyle\prod_{t=n}^\tau P(x_t\mid x_{t-n+1},\dots,x_{t-1}) P(x1,...,xτ)=P(x1,...,xn−1)t=n∏τP(xt∣xt−n+1,...,xt−1) --- 公式1 \quad\textbf{---\footnotesize{公式1}} ---公式1
    • 这个分解可以由概率的链式法则证明。初始序列 P ( x 1 , ... , x n − 1 ) P(x_1,\dots,x_{n-1}) P(x1,...,xn−1) 的概率分布可以通过带有较小 n n n 值的不同模型建模。
  • 训练 n -gram n\text{-gram} n-gram模型是简单的,因为最大似然估计可以简单地统计每个可能的 n -gram n\text{-gram} n-gram在训练集中出现的次数。几十年来,基于 n -gram n\text{-gram} n-gram的模型都是统计语言模型的核心模块 ( Jelinek and Mercer, 1980; Katz, 1987; Chen and Goodman, 1999 \text{Jelinek and Mercer, 1980; Katz, 1987; Chen and Goodman, 1999} Jelinek and Mercer, 1980; Katz, 1987; Chen and Goodman, 1999)。

  • 对于小的 n n n 值,模型有特定的名称:

    • n = 1 n = 1 n=1 称为一元语法 ( unigram \text{unigram} unigram)
    • n = 2 n = 2 n=2 称为二元语法 ( bigram \text{bigram} bigram)
    • n = 3 n = 3 n=3 称为三元语法 ( trigram \text{trigram} trigram)
    • 这些名称源于相应数字的拉丁前缀和希腊后缀 " -gram \text{-gram} -gram'',分别表示所写之物。
  • 通常我们同时训练 n -gram n\text{-gram} n-gram模型和 n − 1 gram \text{n − 1 gram} n − 1 gram 模型。

    • 这使得它很容易计算概率:
      P ( x t ∣ x t − n + 1 , ... , x t − 1 ) = P n ( x t − n + 1 , ... , x t ) P n − 1 ( x t − n + 1 , ... , x t − 1 ) P(x_t\mid x_{t-n+1},\dots,x_{t-1})=\frac{P_n(x_{t-n+1},\dots,x_{t})}{P_{n-1}(x_{t-n+1},\dots,x_{t-1})} P(xt∣xt−n+1,...,xt−1)=Pn−1(xt−n+1,...,xt−1)Pn(xt−n+1,...,xt) --- 公式2 \quad\textbf{---\footnotesize{公式2}} ---公式2
    • 简单地查找两个存储的概率就能计算。
    • 为了在 P n P_n Pn 中精确地再现推断,我们训练 P n − 1 P_{n−1} Pn−1 时必须省略每个序列最后的字符。
  • 举个例子,我们演示三元模型如何计算句子 " THE DOG RAN AWAY. \text{THE DOG RAN AWAY.} THE DOG RAN AWAY.'' 的概率。

    • 句子的第一个词不能通过上述条件概率的公式计算,因为句子的开头没有上下文。
    • 取而代之,在句子的开头我们必须使用词的边缘概率。
    • 因此我们计算 P 3 ( THE DOG RAN ) P_3(\text{THE DOG RAN}) P3(THE DOG RAN)。
    • 最后,可以使用条件分布 P ( AWAY ∣ DOG RAN ) P(\text{AWAY} \mid \text{DOG RAN}) P(AWAY∣DOG RAN)(典型情况)来预测最后一个词。
    • 将这与公式2放在一起,我们得到:
      P ( THE DOG RAN AWAY ) = P 3 ( THE DOG RAN ) P 3 ( DOG RAN AWAY ) P 2 ( DOG RAN ) P(\text{THE DOG RAN AWAY})=\frac{P_3(\text{THE DOG RAN})P_3(\text{DOG RAN AWAY})}{P_2(\text{DOG RAN})} P(THE DOG RAN AWAY)=P2(DOG RAN)P3(THE DOG RAN)P3(DOG RAN AWAY) --- 公式3 \quad\textbf{---\footnotesize{公式3}} ---公式3
  • n -gram n\text{-gram} n-gram模型最大似然的基本限制是,在许多情况下从训练集计数估计得到的 P n P_n Pn很可能为零(即使元组 ( x t − n + 1 , ... , x t x_{t-n+1},\dots,x_{t} xt−n+1,...,xt) 可能出现在测试集中)。

    • 这可能会导致两种不同的灾难性后果。
    • 当 P n − 1 P_{n−1} Pn−1 为零时,该比率是未定义的,因此模型甚至不能产生有意义的输出。
    • 当 P n − 1 P_{n−1} Pn−1 非零而 P n P_n Pn 为零时,测试样本的对数似然为 − ∞ -\infty −∞。
    • 为避免这种灾难性的后果,大多数 n -gram n\text{-gram} n-gram模型采用某种形式的平滑 ( smoothing \text{smoothing} smoothing)。
    • 平滑技术将概率质量从观察到的元组转移到类似的未观察到的元组。
    • 见 Chen and Goodman (1999) \text{Chen and Goodman (1999)} Chen and Goodman (1999)的综述和实验对比。
    • 其中一种基本技术基于向所有可能的下一个符号值添加非零概率质量。
    • 这个方法可以被证明是,计数参数具有均匀或 Dirichlet \text{Dirichlet} Dirichlet先验的贝叶斯推断。
    • 另一个非常流行的想法是包含高阶和低阶 n -gram n\text{-gram} n-gram模型的混合模型,其中高阶模型提供更多的容量,而低阶模型尽可能地避免零计数。
    • 如果上下文 x t − n + k , ... , x t − 1 x_{t-n+k},\dots,x_{t-1} xt−n+k,...,xt−1 的频率太小而不能使用高阶模型,回退方法 ( back-off methods \text{back-off methods} back-off methods) 就查找低阶 n -gram n\text{-gram} n-gram 。
    • 更正式地说,它们通过上下文 x t − n + k , ... , x t − 1 x_{t-n+k},\dots,x_{t-1} xt−n+k,...,xt−1 估计 x t x_t xt 上的分布,并增加 k k k 直到找到足够可靠的估计。
  • 经典的 n -gram n\text{-gram} n-gram模型特别容易引起维数灾难。

    • 因为存在 ∣ V ∣ n |\mathbb{V}|^n ∣V∣n 可能的 n -gram n\text{-gram} n-gram,而且 ∣ V ∣ |\mathbb{V}| ∣V∣ 通常很大。
    • 即使有大量训练数据和适当的 n n n,大多数 n -gram n\text{-gram} n-gram也不会出现在训练集中。
    • 经典 n -gram n\text{-gram} n-gram模型的一种观点是执行最近邻查询。
    • 换句话说,它可以被视为局部非参数预测器,类似于 k k k-最近邻。
    • 这些极端局部预测器面临的统计问题已经在深度学习的动机与挑战篇 - 局部不变性和平滑正则化中描述过。
    • 语言模型的问题甚至比普通模型更严重,因为任何两个不同的词在 one-hot \text{one-hot} one-hot向量空间中的距离彼此相同。
    • 因此,难以大量利用来自任意 ''邻居'' 的信息------只有重复相同上下文的训练样本对局部泛化有用。
    • 为了克服这些问题,语言模型必须能够在一个词和其他语义相似的词之间共享知识。
    • 为了提高 n -gram n\text{-gram} n-gram模型的统计效率,基于类的语言模型 ( class-based language model \text{class-based language model} class-based language model) ( Brown et al., 1992; Ney and Kneser, 1993; Niesler et al., 1998 \text{Brown et al., 1992; Ney and Kneser, 1993; Niesler et al., 1998} Brown et al., 1992; Ney and Kneser, 1993; Niesler et al., 1998) 引入词类别的概念,然后属于同一类别的词共享词之间的统计强度。
      • 这个想法使用聚类算法,基于它们与其他词同时出现的频率,将该组词分成集群或类。
      • 随后,模型可以在条件竖杠的右侧使用词类 ID \text{ID} ID 而不是单个词 ID \text{ID} ID。
      • 混合(或回退)词模型和类模型的复合模型也是可能的。
      • 尽管词类提供了在序列之间泛化的方式,但其中一些词被相同类的另一个替换,导致该表示丢失了很多信息。

神经语言模型

  • 神经语言模型 ( Neural Language Model, NLM \text{Neural Language Model, NLM} Neural Language Model, NLM) 是一类用来克服维数灾难的语言模型,它使用词的分布式表示对自然语言序列建模 ( Bengio et al., 2001b \text{Bengio et al., 2001b} Bengio et al., 2001b)。
    • 不同于基于类的 n -gram n\text{-gram} n-gram模型, 神经语言模型在识别两个相似的词的基础上,而不丧失将每个词编码为彼此不同的能力。
    • 神经语言模型共享一个词(及其上下文)和其他类似词(和上下文之间)的统计强度。
    • 模型为每个词学习的分布式表示,允许模型处理具有类似共同特征的词来实现这种共享。
    • 例如,如果词 dog \text{dog} dog 和词 cat \text{cat} cat 映射到具有许多属性的表示,则包含词 cat \text{cat} cat 的句子可以告知模型对包含词 dog \text{dog} dog 的句子做出预测,反之亦然。
    • 因为这样的属性很多,所以存在许多泛化的方式,可以将信息从每个训练语句传递到指数数量的语义相关语句。
    • 维数灾难需要模型泛化到相对句子长度是指数多的句子。
    • 该模型通过将每个训练句子与指数数量的类似句子相关联克服这个问题。
  • 我们有时将这些词表示称为词嵌入 ( word embedding \text{word embedding} word embedding)。
    • 在这个解释下,我们将原始符号视为维度等于词表大小的空间中的点。
    • 词表示将这些点嵌入到较低维的特征空间中。
    • 在原始空间中,每个词由一个 one-hot \text{one-hot} one-hot向量表示,因此每对词彼此之间的欧氏距离都是 2 \sqrt{2} 2 。
    • 在嵌入空间中,经常出现在类似上下文(或共享由模型学习的一些 ''特征'' 的任何词对)中的词彼此接近。
    • 这通常导致具有相似含义的词变得邻近。
    • 图例1放大了学到的词嵌入空间的特定区域,我们可以看到语义上相似的词如何映射到彼此接近的表示。
  • 其他领域的神经网络也可以定义嵌入。
    • 例如,卷积网络的隐藏层提供 ''图像嵌入''。
    • 因为自然语言最初不在实值向量空间上,所以 NLP \text{NLP} NLP从业者通常对嵌入的这个想法更感兴趣。
    • 隐藏层在表示数据的方式上提供了更质变的戏剧性变化。
  • 使用++分布式表示++ 来改进++自然语言处理模型++的基本思想不用局限于神经网络。它还可以用于图模型,其中分布式表示是多个潜变量的形式。

高维输出

  • 在许多自然语言应用中,我们通常希望我们的模型产生词(而不是字符)作为输出的基本单位。
    • 对于大词汇表,由于词汇量很大,在词的选择上表示输出分布的计算可能是昂贵的。
    • 在许多应用中, V \mathbb{V} V 包含数十万词。
    • 表示这种分布的朴素方法是应用一个仿射变换,将隐藏表示转换到输出空间,然后应用 softmax \text{softmax} softmax函数。
    • 假设我们的词汇表 V \mathbb{V} V 大小为 ∣ V ∣ |\mathbb{V}| ∣V∣。
    • 因为其输出维数为 ∣ V ∣ |\mathbb{V}| ∣V∣,描述该仿射变换线性分量的权重矩阵非常大。
    • 这增加了表示该矩阵的高存储成本,以及乘以它的高计算成本。
    • 因为 softmax \text{softmax} softmax要在所有 ∣ V ∣ |\mathbb{V}| ∣V∣ 输出之间归一化,所以在训练时以及测试时执行全矩阵乘法是必要的------我们不能仅计算与正确输出的权重向量的点积。
    • 因此,输出层的高计算成本在训练期间(计算似然性及其梯度)和测试期间(计算所有或所选词的概率)同时出现。
    • 对于专门的损失函数,可以有效地计算梯度 ( Vincent et al., 2015 \text{Vincent et al., 2015} Vincent et al., 2015),但是应用于传统 softmax \text{softmax} softmax输出层的标准交叉熵损失时会出现了许多困难。
  • 假设 h \boldsymbol{h} h 是用于预测输出概率 y ^ \hat{\boldsymbol{y}} y^ 的顶部隐藏层。
    • 如果我们使用学到的权重 W \boldsymbol{W} W 和学到的偏置 b \boldsymbol{b} b 参数化从 h \boldsymbol{h} h 到 y ^ \hat{\boldsymbol{y}} y^ 的变换,则仿射 softmax \text{softmax} softmax输出层执行以下计算:
      { a i = b i + ∑ j W i j h j ∀ i ∈ { 1 , ... , ∣ V ∣ } --- 公式4 y ^ i = e a i ∑ i ′ = 1 ∣ V ∣ e a i ′ --- 公式5 \begin{cases} \begin{aligned} a_i&=b_i+\sum\limits_j W_{ij}h_j \quad\forall_i\in\{1,\dots,|\mathbb{V}|\} &\quad\textbf{---\footnotesize{公式4}}\\ \hat{y}i&=\frac{e^{a_i}}{\sum{i^\prime=1}^{|\mathbb{V}|}e^{a_{i^\prime}}} &\quad\textbf{---\footnotesize{公式5}} \end{aligned} \end{cases} ⎩ ⎨ ⎧aiy^i=bi+j∑Wijhj∀i∈{1,...,∣V∣}=∑i′=1∣V∣eai′eai---公式4---公式5 --- 公式4 \quad\textbf{---\footnotesize{公式4}} ---公式4 --- 公式5 \quad\textbf{---\footnotesize{公式5}} ---公式5
    • 如果 h \boldsymbol{h} h 包含 n h n_h nh 个元素,则上述操作复杂度是 O ( ∣ V ∣ n h ) O(|\mathbb{V}|n_h) O(∣V∣nh)。 n h n_h nh 为数千和 V \mathbb{V} V 数十万的情况下,这个操作占据了神经语言模型的大多数计算。

使用短列表

  • 第一个神经语言模型( Bengio et al., 2001b, 2003 \text{Bengio et al., 2001b, 2003} Bengio et al., 2001b, 2003) 通过将词汇量限制为 10 , 000 10,000 10,000或 20 , 000 20,000 20,000 来减轻大词汇表上 softmax \text{softmax} softmax的高成本。
  • Schwenk and Gauvain (2002) \text{Schwenk and Gauvain (2002)} Schwenk and Gauvain (2002) 和 Schwenk (2007) \text{Schwenk (2007)} Schwenk (2007) 在这种方法的基础上建立新的方式,将词汇表 V \mathbb{V} V 分为最常见词汇(由神经网络处理)的短列表 ( shortlist \text{shortlist} shortlist) L \mathbb{L} L 和较稀有词汇的尾列表 T = V \ L \mathbb{T}=\mathbb{V}\backslash\mathbb{L} T=V\L(由 n − gram n-\text{gram} n−gram模型处理)。
  • 为了组合这两个预测, 神经网络还必须预测在上下文 C C C 之后出现的词位于尾列表的概率。
  • 我们可以添加额外的 sigmoid \text{sigmoid} sigmoid输出单元估计 P ( i ∈ T ∣ C ) P(i\in\mathbb{T}\mid C) P(i∈T∣C) 实现这个预测。
    • 额外输出则可以用来估计 V \mathbb{V} V 中所有词的概率分布,如下:
      { P ( y = i ∣ C ) = 1 i ∈ L P ( y = i ∣ C , i ∈ L ) ( 1 − P ( i ∈ T ∣ C ) ) + 1 i ∈ T P ( y = i ∣ C , i ∈ T ) P ( i ∈ T ∣ C ) --- 公式6 \begin{cases} \begin{aligned} P(y=i\mid C)=&1_{i\in\mathbb{L}} P(y=i\mid C,i\in\mathbb{L})(1-P(i\in\mathbb{T}\mid C)) \\ &+1_{i\in\mathbb{T}} P(y=i\mid C,i\in\mathbb{T})P(i\in\mathbb{T}\mid C) \quad\textbf{---\footnotesize{公式6}} \end{aligned} \end{cases} {P(y=i∣C)=1i∈LP(y=i∣C,i∈L)(1−P(i∈T∣C))+1i∈TP(y=i∣C,i∈T)P(i∈T∣C)---公式6
    • 其中 P ( y = i ∣ C , i ∈ L ) P(y=i\mid C,i\in\mathbb{L}) P(y=i∣C,i∈L) 由神经语言模型提供 P ( y = i ∣ C , i ∈ T ) P(y=i\mid C,i\in\mathbb{T}) P(y=i∣C,i∈T) 由 n − gram n-\text{gram} n−gram模型提供。
    • 稍作修改,这种方法也可以在神经语言模型模型的 softmax \text{softmax} softmax层中使用额外的输出值,而不是单独的 sigmoid \text{sigmoid} sigmoid单元。
  • 短列表方法的一个明显缺点是,神经语言模型模型的潜在泛化优势仅限于最常用的词,这大概是最没用的。这个缺点激发了处理高维输出替代方法的探索,如下所述。

分层Softmax

  • 减少大词汇表 V \mathbb{V} V 上高维输出层计算负担的经典方法 ( Goodman, 2001 \text{Goodman, 2001} Goodman, 2001) 是分层地分解概率。 ∣ V ∣ |\mathbb{V}| ∣V∣ 因子可以降低到 log ⁡ ∣ V ∣ \log|\mathbb{V}| log∣V∣ 一样低,而无需与 V \mathbb{V} V 成比例数量(并且也与隐藏单元数量 n h n_h nh 成比例)的计算。 Bengio (2002) \text{Bengio (2002)} Bengio (2002) 和 Morin and Bengio (2005) \text{Morin and Bengio (2005)} Morin and Bengio (2005) 将这种因子分解方法引入神经语言模型中。
  • 我们可以认为这种层次结构是先建立词的类别,然后是词类别的类别,然后是词类别的类别的类别等等这些嵌套类别构成一棵树,其叶子为词。
    • 在平衡树中,树的深度为 log ⁡ ∣ V ∣ \log|\mathbb{V}| log∣V∣。
    • 选择一个词的概率是由路径(从树根到包含该词叶子的路径)上的每个节点通向该词分支概率的乘积给出。
    • 图例2是一个简单的例子。
    • Mnih and Hinton(2009) \text{Mnih and Hinton(2009)} Mnih and Hinton(2009) 也描述了使用多个路径来识别单个词的方法,以便更好地建模具有多个含义的词。
    • 计算词的概率则涉及在导向该词所有路径上的求和。
  • 为了预测树的每个节点所需的条件概率,我们通常在树的每个节点处使用逻辑回归模型,并且为所有这些模型提供与输入相同的上下文 C C C。
    • 因为正确的输出编码在训练集中,我们可以使用监督学习训练逻辑回归模型。
    • 我们通常使用标准交叉熵损失,对应于最大化正确判断序列的对数似然。
  • 因为可以高效地计算输出对数似然(低至 log ⁡ ∣ V ∣ \log|\mathbb{V}| log∣V∣ 而不是 ∣ V ∣ |\mathbb{V}| ∣V∣),所以也可以高效地计算梯度。这不仅包括关于输出参数的梯度,而且还包括关于隐藏层激活的梯度。
  • 优化树结构最小化期望的计算数量是可能的,但通常不切实际。
    • 给定词的相对频率,信息理论的工具可以指定如何选择最佳的二进制编码。
    • 为此,我们可以构造树,使得与词相关联的位数量近似等于该词频率的对数。
    • 然而在实践中,节省计算通常不值得努力,因为输出概率的计算仅是神经语言模型中总计算的一部分。
    • 例如,假设有 l l l 个全连接的宽度为 n h n_h nh 的隐藏层。
    • 令 n b n_b nb 是识别一个词所需比特数的加权平均值,其加权由这些词的频率给出。
    • 在这个例子中,计算隐藏激活所需的操作数增长为 O ( l n h 2 ) O(ln_h^2) O(lnh2),而输出计算增长为 O ( n h n b ) O(n_hn_b) O(nhnb)。
    • 只要 n b ≤ l n h n_b \le ln_h nb≤lnh,我们可以通过收缩 n h n_h nh 比收缩 n b n_b nb 减少更多的计算量。
    • 事实上, n b n_b nb 通常很小。
    • 因为词汇表的大小很少超过一百万而 log ⁡ 2 ( 1 0 6 ) ≈ 20 \log_2(10^6) \approx 20 log2(106)≈20,所以可以将 n b n_b nb 减小到大约 20 20 20,但 n h n_h nh 通常大得多,大约为 103 103 103 或更大。
    • 我们可以定义深度为 2 2 2 和分支因子为 ∣ T ∣ \sqrt{|\mathbb{T}|} ∣T∣ 的树,而不用仔细优化分支因子为 2 2 2 的树。
    • 这样的树对应于简单定义一组互斥的词类。
    • 基于深度为 2 2 2 的树的简单方法可以获得层级策略大部分的计算益处。
  • 一个仍然有点开放的问题是如何最好地定义这些词类,或者如何定义一般的词层次结构。
    • 早期工作使用现有的层次结构 ( Morin and Bengio, 2005 \text{Morin and Bengio, 2005} Morin and Bengio, 2005),但也可以理想地与神经语言模型联合学习层次结构。
    • 学习层次结构很困难。对数似然的精确优化似乎难以解决,因为词层次的选择是离散的,不适于基于梯度的优化。
    • 然而,我们可以使用离散优化来近似地最优化词类的分割。
  • 分层 softmax \text{softmax} softmax的一个重要优点是,它在训练期间和测试期间(如果在测试时我们想计算特定词的概率)都带来了计算上的好处。
  • 当然即使使用分层 softmax \text{softmax} softmax,计算所有 ∣ T ∣ |\mathbb{T}| ∣T∣个词的概率仍将是昂贵的。另一个重要的操作是在给定上下文中选择最可能的词。不幸的是,树结构不能为这个问题提供高效精确的解决方案。
  • 缺点是在实践中,分层 softmax \text{softmax} softmax倾向于更差的测试结果(相对基于采样的方法),我们将在下文描述。这可能是因为词类选择得不好。

重要采样

  • 加速神经语言模型训练的一种方式是避免明确计算所有词(未出现在下一位置)对梯度的贡献。
    • 每个不正确的词在此模型下应该具有低概率。
    • 枚举所有这些词的计算成本可能会很高。
    • 相反,我们可以仅采样词的子集。
    • 使用公式4中引入的符号,梯度可以写成如下形式:
      { ∂ log ⁡ P ( y ∣ C ) ∂ θ = ∂ log ⁡ softmax y ( a ) ∂ θ --- 公式7 = ∂ ∂ θ log ⁡ e a y ∑ i e a i --- 公式8 = ∂ ∂ θ ( a y − log ⁡ ∑ i e a i ) --- 公式9 = ∂ a y ∂ θ − ∑ i P ( y = i ∣ C ) ∂ a i ∂ θ --- 公式10 \begin{cases} \begin{aligned} \frac{\partial \log P(y\mid C)}{\partial \theta} &= \frac{\partial \log \text{softmax}_y (\boldsymbol{a}) }{\partial \theta} &\quad\textbf{---\footnotesize{公式7}}\\ &=\frac{\partial}{\partial \theta} \log \frac{ e^{a_y} }{\sum\limits_i e^{a_i}} &\quad\textbf{---\footnotesize{公式8}}\\ &=\frac{\partial}{\partial \theta} (a_y-\log \sum\limits_i e^{a_i}) &\quad\textbf{---\footnotesize{公式9}}\\ &=\frac{\partial a_y}{\partial \theta} - \sum\limits_i P(y=i\mid C) \frac{\partial a_i}{\partial \theta} &\quad\textbf{---\footnotesize{公式10}} \end{aligned} \end{cases} ⎩ ⎨ ⎧∂θ∂logP(y∣C)=∂θ∂logsoftmaxy(a)=∂θ∂logi∑eaieay=∂θ∂(ay−logi∑eai)=∂θ∂ay−i∑P(y=i∣C)∂θ∂ai---公式7---公式8---公式9---公式10
    • 说明:
      • 其中 a \boldsymbol{a} a 是 presoftmax \text{presoftmax} presoftmax激活(或得分)向量,每个词对应一个元素。
      • 第一项是正相 ( positive phase \text{positive phase} positive phase) 项推动 a y a_y ay 向上,而第二项是负相 ( negative phase \text{negative phase} negative phase) 项,对于所有 i i i以权重 P ( i ∣ C ) P(i\mid C) P(i∣C) 推动 a i a_i ai 向下。
      • 由于负相项是期望值,我们可以通过蒙特卡罗采样估计。
      • 然而,这将需要从模型本身采样。
      • 从模型中采样需要对词汇表中所有的 i i i 计算 P ( i ∣ C ) P(i\mid C) P(i∣C),这正是我们试图避免的。
  • 我们可以从另一个分布中采样,而不是从模型中采样,这个分布称为提议分布 ( proposal distribution \text{proposal distribution} proposal distribution)(记为 q q q),并通过适当的权重校正从错误分布采样引入的偏差 ( Bengio and S e ˊ n e ˊ cal, 2003; Bengio and S e ˊ n e ˊ cal, 2008 \text{Bengio and Sénécal, 2003; Bengio and Sénécal, 2008} Bengio and Seˊneˊcal, 2003; Bengio and Seˊneˊcal, 2008)。
    • 这是一种称为重要采样 ( Importance Sampling \text{Importance Sampling} Importance Sampling) 的更通用技术的应用,我们将在后续[蒙特卡洛方法 - 重要采样篇](#蒙特卡洛方法 - 重要采样篇)中更详细地描述。
    • 不幸的是,即使精确重要采样也不一定有效,因为我们需要计算权重 p i / q i p_i/q_i pi/qi,其中的 p i = P ( i ∣ C ) p_i=P(i\mid C) pi=P(i∣C) 只能在计算所有得分 a i a_i ai 后才能计算。
    • 这个应用采取的解决方案称为有偏重要采样,其中重要性权重被归一化加和为 1 1 1。
    • 当对负词 n i n_i ni 进行采样时,相关联的梯度被加权为:
      w i = p n i / q n i ∑ j = 1 N p n j / q n j w_i=\frac{p_{n_i}/q_{n_i}}{\sum_{j=1}^N} p_{n_j}/q_{n_j} wi=∑j=1Npni/qnipnj/qnj --- 公式11 \quad\textbf{---\footnotesize{公式11}} ---公式11
    • 这些权重用于对来自 q q q的 m m m个负样本给出适当的重要性,以形成负相估计对梯度的贡献:
      ∑ i = 1 ∣ V ∣ P ( i ∣ C ) ∂ a i ∂ θ ≈ 1 m ∑ i = 1 m w i ∂ a n i ∂ θ \sum\limits_{i=1}^{|\mathbb{V}|}P(i\mid C) \frac{\partial a_i}{\partial \theta} \approx \frac{1}{m} \sum\limits_{i=1}^m w_i \frac{\partial a_{n_i}}{\partial \theta} i=1∑∣V∣P(i∣C)∂θ∂ai≈m1i=1∑mwi∂θ∂ani --- 公式12 \quad\textbf{---\footnotesize{公式12}} ---公式12
    • 一元语法或二元语法分布与提议分布 q q q 工作得一样好。从数据估计这种分布的参数是很容易。在估计参数之后,也可以非常高效地从这样的分布采样。
  • 重要采样 ( Importance Sampling \text{Importance Sampling} Importance Sampling) 不仅可以加速具有较大 softmax \text{softmax} softmax输出的模型。
    • 更一般地,它可以加速具有大稀疏输出层的训练,其中输出是稀疏向量而不是 n n n 选 1 1 1。
    • 其中一个例子是词袋 ( bag of words \text{bag of words} bag of words)。
    • 词袋具有稀疏向量 v \boldsymbol{v} v,其中 v i v_i vi 表示词汇表中的词 i i i 存不存在文档中。或者, v i v_i vi 可以指示词 i i i 出现的次数。
    • 由于各种原因,训练产生这种稀疏向量的机器学习模型可能是昂贵的。
    • 在学习的早期,模型可能不会真的使输出真正稀疏。
    • 此外,将输出的每个元素与目标的每个元素进行比较,可能是描述训练的损失函数最自然的方式。
    • 这意味着稀疏输出并不一定能带来计算上的好处,因为模型可以选择使大多数输出非零,并且所有这些非零值需要与相应的训练目标进行比较(即使训练目标是零)。
    • Dauphin et al. (2011) \text{Dauphin et al. (2011)} Dauphin et al. (2011) 证明可以使用重要采样加速这种模型。高效算法最小化 ''正词''(在目标中非零的那些词)和相等数量的''负词'' 的重构损失。
    • 随机选择负词,如使用启发式采样更可能被误解的词。
    • 该启发式过采样引入的偏差则可以使用重要性权重校正。

噪声对比估计和排名损失

  • 为减少训练大词汇表的神经语言模型的计算成本,研究者也提出了其他基于采样的方法。
    • 早期的例子是 Collobert and Weston (2008a) \text{Collobert and Weston (2008a)} Collobert and Weston (2008a) 提出的排名损失,将神经语言模型每个词的输出视为一个得分,并试图使正确词的得分 a y a_y ay 比其他词 a i a_i ai 排名更高。
    • 提出的排名损失则是: L = ∑ i max ⁡ ( 0 , 1 − a y + a i ) L=\sum\limits_i\max(0,1-a_y+a_i) L=i∑max(0,1−ay+ai) --- 公式13 \quad\textbf{---\footnotesize{公式13}} ---公式13
  • 如果观察到词的得分 a y a_y ay 远超过负词的得分 a i a_i ai(相差大于 1 1 1),则第 i i i 项梯度为零。这个准则的一个问题是它不提供估计的条件概率,条件概率在很多应用中是有用的,包括语音识别和文本生成(包括诸如翻译的条件文本生成任务)。
  • 最近用于神经语言模型的训练目标是噪声对比估计,将在后续[面对配分函数 - 噪扰对比估计篇](#面对配分函数 - 噪扰对比估计篇)中介绍。这种方法已成功应用于神经语言模型( Mnih and Teh, 2012; Mnih and Kavukcuoglu, 2013 \text{Mnih and Teh, 2012; Mnih and Kavukcuoglu, 2013} Mnih and Teh, 2012; Mnih and Kavukcuoglu, 2013)。

结合 n n n-gram和神经语言模型

  • n -gram n\text{-gram} n-gram模型相对神经网络的主要优点是 : n -gram n\text{-gram} n-gram模型具有更高的模型容量(通过存储非常多的元组的频率),并且处理样本只需非常少的计算量(通过查找只匹配当前上下文的几个元组)。
    • 如果我们使用哈希表或树来访问计数,那么用于 n -gram n\text{-gram} n-gram的计算量几乎与容量无关。
    • 相比之下,将神经网络的参数数目加倍通常也大致加倍计算时间。
    • 避免每次计算时使用所有参数的模型是例外。
    • 嵌入层每次只索引单个嵌入,所以我们可以增加词汇量,而不会增加每个样本的计算时间。
    • 一些其他模型,例如平铺卷积网络,可以在减少参数共享程度的同时添加参数以保持相同的计算量。
    • 然而,基于矩阵乘法的典型神经网络层需要与参数数量成比例的计算量。
  • 因此,增加容量的一种简单方法 是将两种方法结合,由神经语言模型和 n -gram n\text{-gram} n-gram语言模型组成集成 ( Bengio et al., 2001b, 2003 \text{Bengio et al., 2001b, 2003} Bengio et al., 2001b, 2003)。
  • 对于任何集成,如果集成成员产生独立的错误,这种技术可以减少测试误差。
    • 集成的领域提供了许多方法来组合集成成员的预测,包括统一加权和在验证集上选择权重。
    • Mikolov et al. (2011a) \text{Mikolov et al. (2011a)} Mikolov et al. (2011a) 扩展了集成,不是仅包括两个模型,而是包括大量模型。
    • 我们也可以将神经网络与最大熵模型配对并联合训练 ( Mikolov et al., 2011b \text{Mikolov et al., 2011b} Mikolov et al., 2011b)。
    • 该方法可以被视为训练具有一组额外输入的神经网络,额外输入直接连接到输出并且不连接到模型的任何其他部分。
    • 额外输入是输入上下文中特定 n -gram n\text{-gram} n-gram是否存在的指示器,因此这些变量是非常高维且非常稀疏的。
  • 模型容量的增加是巨大的(架构的新部分包含高达 ∣ s V ∣ n |sV|^n ∣sV∣n 个参数),但是处理输入所需的额外计算量是很小的(因为额外输入非常稀疏)。

神经机器翻译

  • ++机器翻译以一种自然语言读取句子并产生等同含义的另一种语言的句子。++
    • 机器翻译系统通常涉及许多组件。
    • 在高层次,一个组件通常会提出许多候选翻译。
    • 由于语言之间的差异,这些翻译中的许多翻译是不符合语法的。
    • 例如,许多语言在名词后放置形容词,因此直接翻译成英语时,它们会产生诸如 " apple red \text{apple red} apple red'' 的短语。
    • 提议机制提出建议翻译的许多变体,理想地应包括 " red apple \text{red apple} red apple''。
    • 翻译系统的第二个组成部分( 语言模型)评估提议的翻译,并可以评估 " red apple \text{red apple} red apple'' 比 " apple red \text{apple red} apple red'' 更好。
  • 最早的机器翻译神经网络 探索中已经纳入了++编码器和解码器的想法++ ( Allen 1987; Chrisman 1991; Forcada and N ˜ eco 1997 \text{Allen 1987; Chrisman 1991; Forcada and Ñeco 1997} Allen 1987; Chrisman 1991; Forcada and N˜eco 1997),而翻译中神经网络的第一个大规模有竞争力的用途是通过++神经语言模型++ 升级++翻译系统的语言模型++ ( Schwenk et al., 2006; Schwenk, 2010 \text{Schwenk et al., 2006; Schwenk, 2010} Schwenk et al., 2006; Schwenk, 2010)。
  • 之前,大多数机器翻译系统在该组件使用 n -gram n\text{-gram} n-gram模型。机器翻译中基于 n -gram n\text{-gram} n-gram的模型不仅包括传统的回退n-gram模型,而且包括最大熵语言模型 ( maximum entropy language models \text{maximum entropy language models} maximum entropy language models),其中给定上下文中常见的词, affine-softmax \text{affine-softmax} affine-softmax层预测下一个词。
  • 传统语言模型仅仅报告自然语言句子的概率。
    • 因为机器翻译涉及给定输入句子产生输出句子,所以将自然语言模型扩展为条件的是有意义的。
    • 深度前馈网络之基于梯度的学习篇 - 用最大似然学习条件分布所述可以直接地扩展一个模型,该模型定义某些变量的边缘分布,以便在给定上下文 C C C( C C C 可以是单个变量或变量列表)的情况下定义该变量的条件分布。
    • Devlin et al. (2014) \text{Devlin et al. (2014)} Devlin et al. (2014) 在一些统计机器翻译的基准中击败了最先进的技术,他给定源语言中的短语 s 1 , s 2 , ... , s k s_1,s_2,\dots,s_k s1,s2,...,sk 后使用 MLP \text{MLP} MLP对目标语言的短语 t 1 , t 2 , ... , t k t_1,t_2,\dots,t_k t1,t2,...,tk 进行评分。
    • 这个 MLP \text{MLP} MLP估计 P ( t 1 , t 2 , ... , t k ∣ s 1 , s 2 , ... , s k ) P(t_1,t_2,\dots,t_k \mid s_1,s_2,\dots,s_k) P(t1,t2,...,tk∣s1,s2,...,sk)。
    • 这个 MLP \text{MLP} MLP的估计替代了条件 n -gram n\text{-gram} n-gram模型提供的估计。
  • 基于 MLP \text{MLP} MLP方法的缺点是需要将序列预处理为固定长度。
    • 为了使翻译更加灵活,我们希望模型允许可变的输入长度和输出长度。
    • RNN \text{RNN} RNN具备这种能力。
    • 循环神经网络篇 - 基于上下文的RNN序列建模描述了给定某些输入后,关于序列条件分布 RNN \text{RNN} RNN的几种构造方法,并且在基于编码/解码的序列到序列架构篇中描述了当输入是序列时如何实现这种条件分布。
    • 在所有情况下,一个模型首先读取输入序列并产生概括输入序列的数据结构。
    • 我们称这个概括为 ''上下文" C C C。
    • 上下文 C C C 可以是向量列表,或者向量或张量。
    • 读取输入以产生 C C C 的模型可以是 RNN \text{RNN} RNN ( Choet al., 2014b; Sutskever et al., 2014; Jean et al., 2014 \text{Choet al., 2014b; Sutskever et al., 2014; Jean et al., 2014} Choet al., 2014b; Sutskever et al., 2014; Jean et al., 2014) 或卷积网络( Kalchbrenner and Blunsom, 2013 \text{Kalchbrenner and Blunsom, 2013} Kalchbrenner and Blunsom, 2013)。
    • 另一个模型(通常是 RNN \text{RNN} RNN),则读取上下文 C C C 并且生成目标语言的句子。
    • 图例3中展示了这种用于机器翻译的编码器-解码器框架的总体思想。
  • 为生成以源句为条件的整句,模型必须具有表示整个源句的方式。
    • 早期模型只能表示单个词或短语。
    • 从表示学习的观点来看,具有相同含义的句子具有类似表示是有用的,无论它们是以源语言还是以目标语言书写。
    • 研究者首先使用卷积和 RNN \text{RNN} RNN的组合探索该策略 ( Kalchbrenner and Blunsom, 2013 \text{Kalchbrenner and Blunsom, 2013} Kalchbrenner and Blunsom, 2013)。
    • 后来的工作介绍了使用 RNN \text{RNN} RNN对所提议的翻译进行打分 ( Cho et al., 2014b \text{Cho et al., 2014b} Cho et al., 2014b) 或生成翻译句子 ( Sutskever et al., 2014 \text{Sutskever et al., 2014} Sutskever et al., 2014)。
    • Jean et al. (2014) \text{Jean et al. (2014)} Jean et al. (2014) 将这些模型扩展到更大的词汇表。

使用注意机制并对齐数据片段

  • 使用++固定大小的表示++ 概括非常长的句子(例如 60 60 60 个词)的所有语义细节是非常困难的。
    • 这需要使用足够大的 RNN \text{RNN} RNN,并且用足够长时间训练得很好才能实现,如 Cho et al. (2014b) \text{Cho et al. (2014b)} Cho et al. (2014b) 和 Sutskever et al. (2014) \text{Sutskever et al. (2014)} Sutskever et al. (2014) 所表明的。
    • 然而,更高效的方法是先读取整个句子或段落(以获得正在表达的上下文和焦点),然后一次翻译一个词,每次聚焦于输入句子的不同部分来收集产生下一个输出词所需的语义细节。
    • 这正是 Bahdanau et al. (2015) \text{Bahdanau et al. (2015)} Bahdanau et al. (2015) 第一次引入的想法。
    • 图例4中展示了注意机制,其中每个时间步关注输入序列的特定部分。
  • 我们可以认为基于注意机制 的系统有++三个组件++ :
    • 读取器读取原始数据(例如源语句中的源词)并将其转换为分布式表示,其中一个特征向量与每个词的位置相关联。
    • 存储器存储读取器输出的特征向量列表。这可以被理解为包含事实序列的存储器,而之后不必以相同的顺序从中检索,也不必访问全部。
    • 最后一个程序利用存储器的内容顺序地执行任务,每个时间步聚焦于某个存储器元素的内容(或几个,具有不同权重)。
  • 第三组件可以生成翻译语句。
  • 当用一种语言书写的句子中的词与另一种语言的翻译语句中的相应词对齐时,可以使对应的词嵌入相关联。
    • 早期的工作表明,我们可以学习将一种语言中的词嵌入与另一种语言中的词嵌入相关联的翻译矩阵 ( Ko c ˇ isk y ˊ et al., 2014 \text{Kočiský et al., 2014} Kocˇiskyˊ et al., 2014),与传统的基于短语表中频率计数的方法相比,可以产生较低的对齐错误率。
    • 甚至有更早的工作( Klementiev et al., 2012 \text{Klementiev et al., 2012} Klementiev et al., 2012) 研究跨语言词向量。
    • 这种方法的存在很多扩展。
    • 例如,允许在更大数据集上训练的更高效的跨语言对齐 ( Gouws et al., 2014 \text{Gouws et al., 2014} Gouws et al., 2014) 。

  • 图例1:从神经机器翻译模型获得的词嵌入二维可视化 ( Bahdanau et al., 2015 \text{Bahdanau et al., 2015} Bahdanau et al., 2015)。
    • 从神经机器翻译模型获得的词嵌入二维可视化 ( Bahdanau et al., 2015 \text{Bahdanau et al., 2015} Bahdanau et al., 2015)。

    • 说明:

      • 此图在语义相关词的特定区域放大,它们具有彼此接近的嵌入向量。
      • 国家在左图,数字在右图。
      • 注意,这些嵌入是为了可视化才表示为 2 2 2 维。
      • 在实际应用中,嵌入通常具有更高的维度并且可以同时捕获词之间多种相似性。

  • 图例2:词类别简单层次结构的示意图,其中 8 个词 w 0 , ... , w 7 w_0,\dots,w_7 w0,...,w7 组织成三级层次结构。
    • 词类别简单层次结构的示意图,其中 8 个词 w 0 , ... , w 7 w_0,\dots,w_7 w0,...,w7 组织成三级层次结构。

    • 说明:

      • 树的叶子表示实际特定的词。
      • 内部节点表示词的组别。
      • 任何节点都可以通过二值决策序列( 0 0 0=左, 1 1 1=右)索引,从根到达节点。
      • 超类 ( 0 0 0) 包含类 ( 0 , 0 ) (0,0) (0,0) 和 ( 0 , 1 ) (0,1) (0,1),其中分别包含词 { w 0 , w 1 } \{w_0,w_1\} {w0,w1} 和 { w 2 , w 3 } \{w_2,w_3\} {w2,w3}的集合,类似地超类 ( 1 1 1) 包含类 ( 1 , 0 ) (1,0) (1,0) 和 ( 1 , 1 ) (1,1) (1,1),分别包含词 { w 4 , w 5 } \{w_4,w_5\} {w4,w5} 和 { w 6 , w 7 } \{w_6,w_7\} {w6,w7}。
      • 如果树充分平衡,则最大深度(二值决策的数量)与词数 ∣ V ∣ |\mathbb{V}| ∣V∣ 的对数同阶:从 ∣ V ∣ |\mathbb{V}| ∣V∣ 个词中选一个词只需执行 O ( log ⁡ ∣ V ∣ ) O(\log |\mathbb{V}|) O(log∣V∣) 次操作(从根开始的路径上的每个节点一次操作)。
      • 在该示例中,我们乘三次概率就能计算词 y y y 的概率,这三次概率与从根到节点 y y y 的路径上每个节点向左或向右的二值决策相关联。
      • 令 b i ( y ) b_i(y) bi(y) 为遍历树移向 y y y 时的第 i i i 个二值决策。
      • 对输出 y y y 进行采样的概率可以通过条件概率的链式法则分解为条件概率的乘积,其中每个节点由这些位的前缀索引。
      • 例如,节点 ( 1 , 0 ) (1,0) (1,0) 对应于前缀 ( b 0 ( w 4 ) = 1 , b 1 ( w 4 ) = 0 ) (b_0(w4) = 1, b_1(w4) = 0) (b0(w4)=1,b1(w4)=0),并且 w 4 w_4 w4 的概率可以如下分解:
        { P ( y = w 4 ) = P ( b 0 = 1 , b 1 = 0 , b 2 = 0 ) --- 公式7 = P ( b 0 = 1 ) P ( b 1 = 0 ∣ b 0 = 1 ) P ( b 2 = 0 ∣ b 0 = 1 , b 1 = 0 ) --- 公式8 \begin{cases} \begin{aligned} P(y=w_4)&=P(b_0=1,b1=0,b_2=0) &\quad\textbf{---\footnotesize{公式7}}\\ &=P(b_0=1)P(b_1=0\mid b_0=1)P(b_2=0\mid b_0=1,b_1=0) &\quad\textbf{---\footnotesize{公式8}} \end{aligned} \end{cases} {P(y=w4)=P(b0=1,b1=0,b2=0)=P(b0=1)P(b1=0∣b0=1)P(b2=0∣b0=1,b1=0)---公式7---公式8

  • 图例3:编码器-解码器架构在直观表示(例如词序列或图像)和语义表示之间来回映射。
    • 编码器-解码器架构在直观表示(例如词序列或图像)和语义表示之间来回映射。

    • 说明:

      • 使用来自一种模态数据的编码器输出(例如从法语句子到捕获句子含义的隐藏表示的编码器映射)作为用于另一模态的解码器输入(如解码器将捕获句子含义的隐藏表示映射到英语),我们可以训练将一种模态转换到另一种模态的系统。
      • 这个想法已经成功应用于很多领域,不仅仅是机器翻译,还包括为图像生成标题。

  • 图例4:由 Bahdanau et al. (2015) \text{Bahdanau et al. (2015)} Bahdanau et al. (2015) 引入的现代注意机制,本质上是加权平均。
    • 由 Bahdanau et al. (2015) \text{Bahdanau et al. (2015)} Bahdanau et al. (2015) 引入的现代注意机制,本质上是加权平均。

    • 说明:

      • 注意机制对具有权重 α ( t ) \alpha^{(t)} α(t) 的特征向量 h ( t ) \boldsymbol{h}^{(t)} h(t) 进行加权平均形成上下文向量 c \boldsymbol{c} c。
      • 在一些应用中,特征向量 h \boldsymbol{h} h 是神经网络的隐藏单元,但它们也可以是模型的原始输入。
      • 权重 α ( t ) \alpha^{(t)} α(t) 由模型本身产生。
      • 它们通常是区间 [ 0 , 1 ] [0,1] [0,1] 中的值,并且旨在仅仅集中在单个 h ( t ) \boldsymbol{h}^{(t)} h(t) 周围,使得加权平均精确地读取接近一个特定时间步的特征向量。
      • 权重 α ( t ) \alpha^{(t)} α(t) 通常由模型另一部分发出的相关性得分应用 softmax \text{softmax} softmax 函数后产生。
      • 注意机制在计算上比直接索引期望的 h ( t ) \boldsymbol{h}^{(t)} h(t) 更昂贵,但直接索引不能使用梯度下降训练。
      • 基于加权平均的注意机制是平滑、可微的近似,可以使用现有优化算法训练。

历史观点

  • 在反向传播的第一次探索中, Rumelhart et al. (1986a) \text{Rumelhart et al. (1986a)} Rumelhart et al. (1986a) 等人提出了分布式表示符号的思想,其中符号对应于族成员的身份,而神经网络捕获族成员之间的关系,训练样本形成三元组如( Colin, Mother, Victoria \text{Colin, Mother, Victoria} Colin, Mother, Victoria)。
    • 神经网络的第一层学习每个族成员的表示。
    • 例如, Colin \text{Colin} Colin 的特征可能代表 Colin \text{Colin} Colin 所在的族树,他所在树的分支,他来自哪一代等等。
    • 我们可以将神经网络认为是将这些属性关联在一起的计算学习规则,可以获得期望预测。
    • 模型则可以进行预测,例如推断谁是 Colin \text{Colin} Colin 的母亲。
  • Deerwester et al. (1990) \text{Deerwester et al. (1990)} Deerwester et al. (1990) 将符号嵌入的想法扩展到对词的嵌入。这些嵌入使用 SVD \text{SVD} SVD 学习。之后,嵌入将通过神经网络学习。
  • 自然语言处理的历史是由流行表示(对模型输入不同方式的表示)的变化标志的。
  • 在早期对符号和词建模的工作之后,神经网络在 NLP \text{NLP} NLP上一些最早的应用( Miikkulainen and Dyer, 1991; Schmidhuber, 1996 \text{Miikkulainen and Dyer, 1991; Schmidhuber, 1996} Miikkulainen and Dyer, 1991; Schmidhuber, 1996) 将输入表示为字符序列。
  • Bengio et al. (2001b) \text{Bengio et al. (2001b)} Bengio et al. (2001b) 将焦点重新引到建模词并引入神经语言模型,能产生可解释的词嵌入。
    • 这些神经模型已经从在一小组符号上的定义表示( 20 20 20 世纪 80 80 80 年代)扩展到现代应用中的数百万字(包括专有名词和拼写错误)。
    • 这种计算扩展的努力导致了高维输出中描述的技术发明。
  • 最初,使用词作为语言模型的基本单元可以改进语言建模的性能 ( Bengio et al., 2001b \text{Bengio et al., 2001b} Bengio et al., 2001b)。
  • 而今,新技术不断推动基于字符 ( Sutskever et al., 2011 \text{Sutskever et al., 2011} Sutskever et al., 2011)和基于词的模型向前发展,最近的工作 ( Gillick et al., 2015 \text{Gillick et al., 2015} Gillick et al., 2015) 甚至建模 Unicode \text{ Unicode} Unicode 字符的单个字节。
  • 神经语言模型背后的思想已经扩展到多个自然语言处理应用,如解析 ( Henderson, 2003, 2004; Collobert, 2011 \text{Henderson, 2003, 2004; Collobert, 2011} Henderson, 2003, 2004; Collobert, 2011)、词性标注、语义角色标注、分块等,有时使用共享词嵌入的单一多任务学习架构 ( Collobert and Weston, 2008a; Collobert et al., 2011a \text{Collobert and Weston, 2008a; Collobert et al., 2011a} Collobert and Weston, 2008a; Collobert et al., 2011a)。
  • 随着 t-SNE \text{t-SNE} t-SNE降维算法的发展 ( van der Maaten and Hinton, 2008 \text{van der Maaten and Hinton, 2008} van der Maaten and Hinton, 2008) 以及 Joseph Turian \text{Joseph Turian} Joseph Turian 在 2009 2009 2009 年引入的专用于可视化词嵌入的应用,用于分析语言模型嵌入的二维可视化成为一种流行的工具。

总结

深度学习在自然语言处理领域的应用,极大地拓宽了计算机处理语言任务的边界,从基础的文本分类、情感分析,到复杂的机器翻译、问答系统,乃至对话生成、文本摘要等高级任务,都取得了显著进展。这些技术不仅提升了信息检索的精度和效率,也为教育、医疗、金融、法律等多个行业带来了智能化转型的契机。未来,随着算法的不断优化和计算资源的进一步丰富,深度学习在自然语言处理中的应用将更加深入广泛,持续推动人类社会的智能化进程,让计算机真正成为人类理解和交流的有力伙伴。

往期内容回顾

应用数学与机器学习基础 - 深度学习的动机与挑战篇
深度网络现代实践 - 深度前馈网络之基于梯度的学习篇
序列建模之循环和递归网络 - 循环神经网络篇
序列建模之循环和递归网络 - 基于编码/解码的序列到序列架构篇

相关推荐
leon62525 分钟前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
CV工程师小林25 分钟前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先
Navigator_Z1 小时前
数据结构C //线性表(链表)ADT结构及相关函数
c语言·数据结构·算法·链表
Aic山鱼1 小时前
【如何高效学习数据结构:构建编程的坚实基石】
数据结构·学习·算法
天玑y1 小时前
算法设计与分析(背包问题
c++·经验分享·笔记·学习·算法·leetcode·蓝桥杯
sjsjs112 小时前
【数据结构-一维差分】力扣1893. 检查是否区域内所有整数都被覆盖
数据结构·算法·leetcode
redcocal2 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
码了三年又三年2 小时前
【算法】滑动窗口—找所有字母异位词
算法
artificiali2 小时前
Anaconda配置pytorch的基本操作
人工智能·pytorch·python
山脚ice2 小时前
【Hot100】LeetCode—72. 编辑距离
算法·leetcode