深度学习应用 - 自然语言处理(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 n1 个标记后的第 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,,xn1)t=nτP(xtxtn+1,,xt1) — 公式1 \quad\textbf{---\footnotesize{公式1}} 公式1
    • 这个分解可以由概率的链式法则证明。初始序列 P ( x 1 , … , x n − 1 ) P(x_1,\dots,x_{n-1}) P(x1,,xn1) 的概率分布可以通过带有较小 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(xtxtn+1,,xt1)=Pn1(xtn+1,,xt1)Pn(xtn+1,,xt) — 公式2 \quad\textbf{---\footnotesize{公式2}} 公式2
    • 简单地查找两个存储的概率就能计算。
    • 为了在 P n P_n Pn 中精确地再现推断,我们训练 P n − 1 P_{n−1} Pn1 时必须省略每个序列最后的字符。
  • 举个例子,我们演示三元模型如何计算句子 “ 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(AWAYDOG 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} xtn+1,,xt) 可能出现在测试集中)。

    • 这可能会导致两种不同的灾难性后果。
    • P n − 1 P_{n−1} Pn1 为零时,该比率是未定义的,因此模型甚至不能产生有意义的输出。
    • P n − 1 P_{n−1} Pn1 非零而 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} xtn+k,,xt1 的频率太小而不能使用高阶模型,回退方法 ( 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} xtn+k,,xt1 估计 x t x_t xt 上的分布,并增加 k k k 直到找到足够可靠的估计。
  • 经典的 n -gram n\text{-gram} n-gram模型特别容易引起维数灾难。

    • 因为存在 ∣ V ∣ n |\mathbb{V}|^n Vn 可能的 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从业者通常对嵌入的这个想法更感兴趣。
    • 隐藏层在表示数据的方式上提供了更质变的戏剧性变化。
  • 使用分布式表示来改进自然语言处理模型的基本思想不用局限于神经网络。它还可以用于图模型,其中分布式表示是多个潜变量的形式。

高维输出

使用短列表

  • 第一个神经语言模型( 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} ngram模型处理)。
  • 为了组合这两个预测, 神经网络还必须预测在上下文 C C C 之后出现的词位于尾列表的概率。
  • 我们可以添加额外的 sigmoid \text{sigmoid} sigmoid输出单元估计 P ( i ∈ T ∣ C ) P(i\in\mathbb{T}\mid C) P(iTC) 实现这个预测。
    • 额外输出则可以用来估计 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=iC)=1iLP(y=iC,iL)(1P(iTC))+1iTP(y=iC,iT)P(iTC)公式6
    • 其中 P ( y = i ∣ C , i ∈ L ) P(y=i\mid C,i\in\mathbb{L}) P(y=iC,iL) 由神经语言模型提供 P ( y = i ∣ C , i ∈ T ) P(y=i\mid C,i\in\mathbb{T}) P(y=iC,iT) n − gram n-\text{gram} ngram模型提供。
    • 稍作修改,这种方法也可以在神经语言模型模型的 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}| logV 一样低,而无需与 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}| logV
    • 选择一个词的概率是由路径(从树根到包含该词叶子的路径)上的每个节点通向该词分支概率的乘积给出。
    • 图例2是一个简单的例子。
    • Mnih and Hinton(2009) \text{Mnih and Hinton(2009)} Mnih and Hinton(2009) 也描述了使用多个路径来识别单个词的方法,以便更好地建模具有多个含义的词。
    • 计算词的概率则涉及在导向该词所有路径上的求和。
  • 为了预测树的每个节点所需的条件概率,我们通常在树的每个节点处使用逻辑回归模型,并且为所有这些模型提供与输入相同的上下文 C C C
    • 因为正确的输出编码在训练集中,我们可以使用监督学习训练逻辑回归模型。
    • 我们通常使用标准交叉熵损失,对应于最大化正确判断序列的对数似然。
  • 因为可以高效地计算输出对数似然(低至 log ⁡ ∣ V ∣ \log|\mathbb{V}| logV 而不是 ∣ 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 nblnh,我们可以通过收缩 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倾向于更差的测试结果(相对基于采样的方法),我们将在下文描述。这可能是因为词类选择得不好。

重要采样

噪声对比估计和排名损失

结合 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 sVn 个参数),但是处理输入所需的额外计算量是很小的(因为额外输入非常稀疏)。

神经机器翻译

  • 机器翻译以一种自然语言读取句子并产生等同含义的另一种语言的句子。
    • 机器翻译系统通常涉及许多组件。
    • 在高层次,一个组件通常会提出许多候选翻译。
    • 由于语言之间的差异,这些翻译中的许多翻译是不符合语法的。
    • 例如,许多语言在名词后放置形容词,因此直接翻译成英语时,它们会产生诸如 “ 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,,tks1,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) 。


  • 图例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(logV) 次操作(从根开始的路径上的每个节点一次操作)。
      • 在该示例中,我们乘三次概率就能计算词 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=0b0=1)P(b2=0b0=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 年引入的专用于可视化词嵌入的应用,用于分析语言模型嵌入的二维可视化成为一种流行的工具。

总结

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

往期内容回顾

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

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

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

相关文章

BookStack在线文档管理系统本地Docker部署与远程访问详细教程

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

电池的电-热-寿命模型是什么?

一、背景 电池的电-热-寿命模型在工程领域具有重要意义,它是一种描述电池性能、温度与使用寿命之间相互关系的复杂模型。具体工程意义体现在以下几个方面: 性能预测: 通过电-热-寿命模型,工程师可以预测在不同负载条件下电池的…

基于YOLOv8的PCB缺陷检测算法,加入一种基于内容引导注意力(CGA)的混合融合方案(一)

💡💡💡本文内容:针对基于YOLOv8的PCB缺陷检测算法进行性能提升,加入各个创新点做验证性试验。 1)提出了一种基于内容引导注意力(CGA)的混合融合方案,mAP0.5由原始的0.966提升至0.975 1.PCB缺陷…

【数据结构】排序算法篇二

【数据结构】排序算法篇二 1. 快速排序(hoare版本)(1)基本思想:(2)动态图解:(3)代码实现:(4)特性总结: 2. 快速…

Spring Boot属性注入的多种方式!

Spring Boot的一个问题,证明你是不是真正的 "会用" Spring boot ?Spring Boot的一个问题,直接暴露你是不是真正使用Spring Boothttps://mp.weixin.qq.com/s?__bizMzkzMTY0Mjc0Ng&mid2247484040&idx1&sn64ad15d95e44c874cc890973…

uboot源码分析uboot启动流程,uboot-CMD命令调用关系

uboot的最终目的是引导启动内核加载系统,根据这个线索我们可以首先找到uboot引导内核的main函数,查看系统引导的执行跳转的函数 main_loop。 下面对uboot函数的调用关系和主要调用函数进行分析。 一、uboot函数调用关系梳理 函数调用如下: …

Oracle Linux 8.10安装Oracle19c(19.3.0)完整教程

安装前请仔细将文档通读一遍,安装过程中根据安装命令仔细核对,特别留意一些字体加粗或标红的字样,遇到问题请及时咨询公司 1、基础环境 1.1、操作系统 cat /etc/redhat-release 1.2、主机名 医院默认分配的主机名可能跟其他主机会有重复&a…

Idea配置 阿里云 Spring Initializr URL

Idea默认Strart services url Idea中默认使用为https://start.spring.io/,国内网络如果不稳定创建工程会很慢修改为阿里云地址 https://start.aliyun.com/

局域网文件分发如何实现?掌握这4个秘籍,文件一键分发破次元!

局域网文件分发是许多企业和组织在日常工作中常见的需求, 有效的文件分发可以显著提高工作效率。 以下是四种实现局域网文件一键分发的秘籍: 1.使用终端监控软件的文件分发功能 软件示例:安企神等。 步骤简述: 安装软件&…

IP学习——oneday

1.什么是网络?为什么需要网络? 空间,时间;传统的邮件传输要考虑到距离,网络解决了空间距离(太远)、解决了时间问题(旧音乐等) 云:面向客户的虚拟化服务 运营商公司主营…

麒麟信安重庆渠道伙伴行业研讨会,共探国产化发展机遇

9月5日下午,麒麟信安举办重庆渠道伙伴行业研讨会。研讨会旨在探讨国产化浪潮下操作系统相关产业的发展机遇与挑战,以及如何在各关键领域实现市场拓展与应用,共商合作、共创未来。 会议伊始,麒麟信安详细阐述了公司以国产自主操作系…

攻防世界 unseping

unseping 攻防世界web新手练习 -unseping_攻防世界web新手题unseping-CSDN博客 这道题对我来说还是有点难&#xff0c;什么oct绕过命令执行第一次遇到捏&#xff0c;所以基本是跟着别人的wp写的&#xff0c;一点点记录吧 先对源码进行分析 <?php highlight_file(__FILE…

10款国民级企业文件加密系统介绍,究竟哪一个是你的菜?

A: “你知道为什么文件加密系统对企业至关重要吗&#xff1f;” B: “当然&#xff0c;随着数据泄露风险增加&#xff0c;文件加密成了保护敏感信息的必要手段。” A: “没错&#xff0c;它能确保即使文件被窃取&#xff0c;未授权者也无法轻易访问内容。” B: “而且&#…

解决SRS流媒体服务服务器无法接收客户端ipv6 RTMP推流的思路

这篇短文我不介绍SRS是什么&#xff0c;主要介绍一个场景问题&#xff0c;场景是你使用服务器并且部署了SRS服务配置成一个媒体流转发服务&#xff0c;也就是客户端往SRS流媒体服务器推流&#xff0c;然后SRS把流转推出去&#xff0c;但是会涉及到一个问题是&#xff1a;用户客…

java后端保存的本地图片通过ip+端口直接访问

直接上代码吧 package com.ydx.emms.datapro.controller;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.…

网络基础入门指南(一)

前言 在这个高度互联的世界里&#xff0c;互联网已成为日常生活不可或缺的一部分。然而&#xff0c;对于许多人来说&#xff0c;网络是如何工作的仍然是个谜。本文旨在为那些对网络基础知识感兴趣的朋友提供一个简单的介绍&#xff0c;帮助大家更好地理解互联网的基本原理和技…

AI人工智能如何重塑我们的世界,引领无限可能

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

Simulink:循环计数器 Counter Free-Running

原文&#xff1a;Matlab生成stm32代码_matlab stm32-CSDN博客 使用“Counter Free-Running”模块进行计数&#xff0c;参数配置如下 此配置的意思为每0.5秒计数一次&#xff0c;计数的最大值为2^Nbits – 1&#xff0c;其中Nbits为所填的2&#xff0c;所以这里最大值为3。 示波…

【C语言】使用VSCode编译C语言程序

目录 1. 安装MinGW环境2.添加C/C扩展3. 新建工程文件夹3.1 建立test文件夹3.2 建立.vscode文件夹3.3 建立test.c文件 4. 使用VSCode打开工程文件夹5. 编写JSON文件5.1 手动编写5.1.1 创建tasks.json文件。5.1.2 创建launch.json文件5.1.3.编写单个C语言程序5.1.4. 运行调试 5.2…

29个横幅广告及详细点评,帮您优化广告效果

在过去30年里&#xff0c;横幅广告是为数不多的在每个阶段都得以存活的网络元素之一&#xff0c;至今仍是许多企业展示广告战略的支柱。但随着互联网内容的不断增加&#xff0c;吸引潜在客户的注意力变得越来越困难。这时候&#xff0c;一些智能化的解决方案&#xff0c;例如光…