江阴安泰物流有限公司网站谁做的,网页制作素材怎么分类,北京谷歌seo公司,网页功能设计1. 总体原则
1.1 深度神经网络#xff08;Deep Neural Network#xff09;的训练过程 下图展示了自然语言处理#xff08;NLP#xff09;领域内使用的深度神经网络#xff08;Deep Neural Network#xff09;的训练过程的简化图。 在神经网络的NLP领域#xff1a; 语料…1. 总体原则
1.1 深度神经网络Deep Neural Network的训练过程 下图展示了自然语言处理NLP领域内使用的深度神经网络Deep Neural Network的训练过程的简化图。 在神经网络的NLP领域 语料库Corpora of Human Utterances这是神经网络训练的起点包含了大量的人类语言数据。这些数据可以是文本或者是语音形式用于让机器学习语言的模式。 深度神经网络Deep Neural Network这个框代表了一个或多个层次的神经网络它通过学习语料库中的模式来进行训练。网络的每一层都会提取数据中的不同特征并逐渐形成复杂的表示。 实际输出Actual Outcomes网络在处理输入数据后得到的结果。这些结果是模型当前学习状态的直接产物。 期望输出Desired Outcomes这些是在训练过程中用于指导网络训练方向的标签或结果。通过比较实际输出与期望输出网络可以调整其内部参数。 定量评估、损失函数Quantitative evaluation, loss function损失函数是用来衡量实际输出与期望输出之间差异的一个指标。通过最小化损失函数网络可以优化其参数以更好地进行预测。 在神经NLP哲学中这种方法完全符合经验主义范式。这意味着系统完全基于数据来学习语言而不是基于预设的关于语言如何工作的规则。这是一种归纳的方法系统分析大量的语料库并且知道它需要预测什么但是不被告知如何获得预测结果。初始时网络对自然语言一无所知也没有内置关于语言工作方式的假设——至少在理论上是这样。这种方法使得网络能够学习各种语言现象而不受限于人类语言学家的先入为主的假设。
1.2 激活函数
1.2.1 softmax函数 softmax函数的数学表达式以及他的图它是深度学习模型中常用的激活函数。 softmax函数的作用是将一个实数向量转换为一个概率分布。对于向量中的每个元素通过公式 计算得到相应的输出其中是自然对数的底数是输出概率向量中的第个元素且所有的加起来等于1。 这个函数通常用在多分类任务的输出层它能够给出每个类别的预测概率。 某个变量对应的softmax函数输出值随该变量取值变化的曲线。softmax函数输出是一个S形曲线当输入值较大时输出接近1当输入值较小或者为负数时输出接近0。
1.2.2 归纳方法 归纳方法Inductive Approach在深度学习中的一些含义 神经网络理论上可以支持任何语言只要有足够大量的语料库。 输入数据的质量和数量至关重要为了良好的泛化能力避免过拟合输入的语料库需要大量的数据。 数据的质量决定了输出的质量即“垃圾进垃圾出”。 训练任务即期望的输出对模型的可重用性和泛化能力有很大影响。 需要选择合适的评估方法。 神经AI类似于神谕机它提供了结果但并没有提供验证或理解这些结果的方法这就是可解释性问题。 如同统计方法我们希望以概率形式获得预测结果神经网络的最后一层通常使用softmax激活函数。 2. 神经网络语言处理的历史 神经网络自然语言处理NLP的历史可以追溯到人工神经网络的早期发展。下面是一些关键的历史时刻
2.1 早期的人工神经网络 早在1943年McCulloch和Pitts就提出了感知机的概念这是一种非常初步的神经网络模型。随后Rosenblatt在1957到1960年间实现了第一个感知机模型主要用于图像识别。这些单层感知机网络仅仅是线性分类器其能力有限。
2.2 机器翻译作为AI的主要动机 1954年Georgetown-IBM实验成功地将大约70个精心挑选的句子翻译成俄语。这项实验大部分是一次通信操作使用的是非常简单的词典方法。
2.3 AI冬天 Minsky和Papert在1969年的著作《感知机》中提出了悲观的观点简单的感知机网络过于有限多层密集网络过于复杂无法扩展。 这也是关于支持编程符号化、程序化还是根本性的神经方法设计计算硬件的辩论。 1969年的ALPAC报告自动语言处理咨询委员会指出超越人类的机器翻译在近期内是无法实现的应该专注于为人类提供工具。 这段历史反映了神经NLP的起源和早期发展的挑战以及人工智能研究的起伏变化。当时的科技和理论限制了早期神经网络模型的能力导致了长时间的停滞期。然而随着时间的推移尤其是在近几十年内硬件的进步、大数据的可用性以及深度学习方法的发展使得神经网络模型再次成为NLP研究的前沿。
2.4 1980年代 人工神经网络研究获得新的活力。 Rumelhart、Hinton和Williams在1986年实现了反向传播学习算法并进行了实验研究。 开始对两层和三层网络进行建模和研究。 循环神经网络RNN的研究开始兴起这类网络可以处理任意长度的文本。
2.5 1990年代 基于语料库的统计方法出现并逐渐取得成功。 例如基于案例的机器翻译技术。 分布语义学开始使用单词的统计分布如奇异值分解SVD这是早期的‘词嵌入’方法。 隐藏马尔科夫模型HMM、最大熵模型、条件随机场CRF等开始用于更加健壮地解决经典NLP任务。
2.6 1997年 长短期记忆网络LSTM的发明这是一种RNN变体能更好地处理任意长度的文本。
2.7 2001年神经网络语言模型 神经网络语言模型的发展这些模型基于之前n个单词来预测下一个单词。灵感来自于之前在语音识别中的工作这是一种前馈网络没有循环。 神经语言模型是由Bengio等人在2001年提出的。这个模型通过学习单词的特征向量类似于词嵌入并使用它们来预测序列中下一个单词的概率。这个模型被认为是现代词嵌入和深度学习在NLP中应用的先驱。在这个结构中单词通过查找表lookup table转换为特征向量然后这些向量被送入一个神经网络网络通过softmax层来预测下一个单词。这个模型的核心在于它可以同时学习单词表示和语言模型。 2.8 2008年multitask learning多任务学习 多任务学习的兴起能够利用预训练的词向量在同一个网络中训练多种任务。 下图描述了Collobert和Weston在2008年提出的一种多任务学习的深度神经网络架构这种架构能够在同一个神经网络中同时训练多个NLP任务例如词性标注POS、命名实体识别NER、语义角色标注和困惑度用于判断一个句子是否有意义。这种架构的关键是使用预训练的词向量作为多个任务的共享表示这种方法提高了效率和性能。 2.9 2013年 word2vec的推出它是一种利用神经网络实现分布式语义的工具由于以下原因而具有突破性 高效的训练方法甚至可以在个人电脑上运行。 由于参数调优得当取得了更好的结果。 这是一个实实在在走出实验室的工具。 由于其出色的结果对AI社区产生了重大影响。
2.10 2017年 Transformer模型和注意力机制的出现这在几乎所有语言处理任务中都是一个根本性的突破。
2.11 GPT和大型语言模型LLMs 这些模型仍然基于Transformer架构但有所新颖的是 网络规模更大训练数据以自然语言表达例如提示。 这些发展改变了NLP的研究和应用领域大大提高了语言模型处理各种任务的能力从基本的文本分类到复杂的问答和文本生成等。这种架构也催生了诸如GPT这样的预训练模型它们能够理解和生成自然语言对各种语言处理任务产生了深远的影响。 3. 语言处理网络的流水线Neural NLP Pipeline 下图展示了现代神经网络自然语言处理NLP的典型流程。尽管存在许多变体但这种方法已成为主导。具体步骤包括 3.1 步骤一语料库准备Corpus Preparation 质量和数量充足的训练数据是模型性能的关键。这一步骤包括处理语料库的形式和内容上的异质性。
3.1.1 形式的异质性Heterogeneity in form: a. 从在线文档如PDF、HTML等中提取“原始”文本通常比说起来容易做起来难。这个过程可能需要特殊的解析工具和大量的数据清洗。 b. 字符编码的统一相同的文本可能因为不同的编码方式而呈现为不同的标记这会增加词汇量大小引入噪声等问题。尽管Unicode编码已广泛支持超过30年旧编码仍在使用中。Unicode标准化形式通过规范的和兼容性的构成与分解帮助减少异质性。 c. 各种文本字符的规范化形式在语料库准备阶段是处理文本异质性的重要环节。下图具体列出了如何处理字符编码的不同情况包括合并序列、韩语音节的组合、规范组合/分解、字体变体、换行差异、位置变体形式、圆圈变体、宽度变体、旋转变体、上标/下标以及兼容性替代等。 d.针对任务的简化如小写转换例如bert-base-uncased。然而在大多数情况下保留大写是很重要的比如用于识别专有名词、情感分析等——需要谨慎处理
3.1.2 内容上的异质性Heterogeneity in content 异质性是否有用、无关紧要或有害取决于要解决的任务。对于特定的任务可能需要侦测语言并使用特定语言的语料库。 针对特定领域的任务使用特定领域的语料库。 不平衡的语料库某些类别可能表现为数量过多或过少。 有偏见的语料库不希望出现的内容过于突出。
3.1.3 处理异质性通常要考虑什么 在实际操作中处理异质性通常要考虑以下几点 a. 尽可能降低异质性以提高训练和预测的效率。 b. 如果无法降低可以增加异质性让模型学会处理它。 c. 根据任务需求采取针对性的预处理措施如分词、标准化、去除或替换不需要的字符等。 d. 在数据预处理时要注意保留对任务有用的信息避免过度清洗数据导致信息丢失。 总的来说语料库准备是建立高质量NLP模型的基础需要精心设计和执行以确保最终模型的有效性和准确性。
3.2 步骤二计算词汇表Computing the Vocabulary: Token Splitting 嵌入Embedding将语言空间转换为数值向量空间。这包括计算一个词汇表并将输入语料库分割为标记tokens然后为每个标记计算一个高效且有意义的数值向量表示。 在神经网络自然语言处理NLP中计算词汇表即确定组成语料库的基本词汇。词汇表的计算关键在于如何定义和划分“标记”token。 所谓“标记”实际上可以看作是神经网络NLP的基本单位。通常情况下我们可以简单地将“标记”理解为词、标点符号、表情符号等它们通常由空白字符分隔开。
3.2.1 解决方案 #1
3.2.1.1 标记的定义 将标记定义为{单词, 标点如逗号、表情符号等}的集合这些标记之间由空白符隔开。这种方法在传统词嵌入技术中使用较多比如word2vec、GloVe等。 在西方语言中使用空白和标点来分割单词相对简单。但对于不标记词边界的语言如中文或泰语就需要使用复杂的算法通常是机器学习算法来进行标记化。
3.2.1.2 空白和标点来分割单词的缺点 词级以下的构词能力被隐藏比如单词 house 和 houses 会被视为独立的词汇表条目它们之间没有先验的共同点。网络需要仅通过上下文来学习它们的相似性但不会意识到一个是另一个的复数形式。 同样的对于像“démilitarisons”法语中的一个词意味着“我们停止军事化”这样的单词它的构成信息如时态、语气、数、根本含义、否定含义等都被隐藏了。 对于高度屈折或黏着性的语言世界上大多数语言但不包括英语或汉语这是一个坏消息一个大型语料库可能包含远超10万个不同的单词其中大多数出现频率不高这使得模型的泛化变得更加困难。 因此在不同语言环境下进行标记化时需要考虑到以上这些问题并选择合适的策略以便更好地处理语言的复杂性和多样性。
3.2.2 解决方案 #2标记化可以基于字符集即“字符嵌入” 在自然语言处理中采用基于字符集的标记化策略这里的 字符集 通常指Unicode字符集。这意味着每个字符——无论是字母、数字、标点符号还是其他符号——都作为单独的标记来处理。这样做的好处是词汇量相对较小实现起来比基于单词的分割要简单特别是对于不同语言都适用。 使用字符级别的嵌入意味着每个字符都会被转换成一个数值向量这个向量将被用作神经网络的输入。例如在Google的百亿词语言模型中就使用了这种字符级的嵌入。 采用字符级嵌入的后果包括 训练速度和模型轻量化由于词汇量小模型训练速度会更快模型也相对更轻。 大部分嵌入单元无明确意义字符级嵌入可能不会捕获到像单词那样的明确语义信息。 存在意义相似的例外如数字、标点、大小写字母等这些字符在不同语境中具有一致或相似的用途和意义。 适合中文等语言对于中文这样的语言单个字符往往近似于一个意义单元因此字符嵌入可以很好地捕获语义信息。 形声字的特殊处理大约80%的汉字是形声字包含了声音和意义的信息。例如“晴”字包含了“日”太阳的意思并且读音为“qīng”与“晴朗”或“清晰”相关。 可以用于更细粒度的任务字符级嵌入可用于诸如语音识别/合成等任务它们允许模型处理更细微的语言差异。 通常字符嵌入并不单独使用而是结合到更高级别的嵌入如单词或短语级别中以丰富和改善模型对语言的理解和处理。在处理未知词或罕见词时字符嵌入特别有用因为即使模型之前未见过某个单词它也可以通过字符组合来尝试理解该单词的意义。
3.2.3 解决方案 #3标记可以是单词、子词、标点符号如逗号、表情符号 在神经网络自然语言处理NLP中为了解决单词级标记和字符级标记的局限性人们引入了 子词级subword标记方法。子词是介于单词和字符之间的一种妥协方案相比单词它减少了词汇表的大小相比字符它又保留了更多的意义 子词是语料库中最频繁出现的字符序列。这个定义完全是基于数据压缩的思想并不基于语言学原理。 然而假设在大型语料库中子词能够近似于有意义的语言单位即语素。例如在法语中词尾经常以-ez结尾所以它是一个很好的子词候选。 现在几乎所有的大型语言模型LLM都使用子词包括Transformer模型。
3.2.4 Byte Pair Encoding (BPE) 一种压缩算法
3.2.4.1 算法的步骤 原始算法BPE字节对编码Philip Gage1994年以适应版本使用。 1. 将语料库表示为以空格分隔的标记序列。 2. 最初基础标记词汇表由字符集合及其在语料库中的频率构成。 3. 找到最频繁的两个标记序列“字节对”将它们合并为新符号加入在中减少和的频率并在语料库中将序列替换为。 4. 重复步骤3直到达到词汇表大小限制或增量收益很低。 5. 在词汇表之外的所有标记在语料库中表示为“未知标记”[UNK]。 这个算法是贪心的执行速度快存在线性时间复杂度的实现。它被证明接近最优而真正的最优算法的复杂度是或更高Gallé, EMNLP 2019。这样的算法使得模型在处理单词的变体或新词时具有更好的泛化能力并且可以更有效地处理语料库中的稀有词。 Byte Pair Encoding (BPE) 是一种压缩算法后来被应用到自然语言处理的子词切分subword segmentation中用于处理词汇表外的单词或更高效地表示词汇。在NLP中BPE可以减少处理未知词out-of-vocabulary, OOV的问题因为它将单词分解为更常见的子单位。
3.2.4.2 算法的详细解释 输入一个句子如 ‘the longest and widest pools are the best’。 3.2.4.3 步骤 a.初始标记化首先将句子分割为标记。在这个例子中单词被分解为字母序列并且每个单词末尾加上下划线 _ 以区分单词边界。所以 the 变成 [t h e _]。 b.统计并合并频繁对计算各个字符对在整个语料库中出现的频率。这个例子中th, he, e_, es, st, t_ 是出现频率最高的字符对。 c.合并最频繁的字符对选择最常见的字符对并在所有标记中将这个字符对合并为一个新的标记。例如e 和 s 被合并为 es因为 es 是最常见的字符对之一。 d.重复重复第2步和第3步每次迭代都选择最常见的字符对进行合并。每一轮合并之后标记的表示都会稍微简化。 e.继续合并继续这个过程直到达到预定的词汇表大小或者再合并不会有显著的收益。 在整个过程中BPE算法是贪心的它每次都选择当前最频繁的字符对进行合并。在一个足够大的语料库上应用BPE算法后最终会形成一系列的子词单元这些子词单元能够有效地表示单词的不同形态变化。
3.2.4.4 结果 经过多轮迭代之后通常在更大的语料库上句子中的单词被分解为更基础的、频繁出现的子单位如 the_ long est_ and_ wid est_ pools_ are_ the_ b est_。这样模型就能够处理词汇表中不存在的单词同时还可以更好地捕捉单词的内在结构如词根、词缀等。
3.2.4.5 BPE的局限性 Byte Pair EncodingBPE是一种基于数据压缩的子词切分技术它在自然语言处理中被用于减小词汇表的大小并增强模型对于生僻词的处理能力。然而BPE并不是没有局限性主要包括 a. 非语言学合并BPE算法是贪心的它可能会在非语言学的方式下将频繁出现的字节对合并起来如例子中的后缀“-est”。这可能导致一些非预期的合并比如在单词“rest”中也会应用-est。 b. 改进版的BPE WordPieceGoogle未公开的WordPiece算法使用点互信息pointwise mutual information, PMI而不是像BPE那样仅使用频率。如果两个子词不太可能独立出现它们被合并的可能性就更大。WordPiece通过评分机制来考虑两个子词组合出现的频率与它们各自出现频率的比值。 SentencePiece这种算法不假设存在由空格分隔的单词因此适用于东亚语言例如中文和日文。SentencePiece的优势在于它可以在没有明确单词边界的文本上直接进行子词分割。 c. 近似的形态学分割尽管BPE和它的变种可以在某种程度上近似真实的形态学分割但仍然不够精确。比如在测试WordPiece分词能力时它可能会产生一些意外的切分如将 tokenization 切分为 to ken ization。 d. 形态学丰富的语言问题对于形态学丰富的语言比如阿拉伯语、土耳其语或芬兰语这种基于频率的分割方法可能不太适用因为这些语言的单词变形非常丰富复杂。 e. 研究方向目前的研究正在尝试结合形态学分析或形态学词典与BPE等子词切分技术以期获得更精准的语言模型输入表示。 总的来说BPE及其衍生算法是理解和处理子词级别信息的强大工具但它们在处理复杂语言形态时的限制也激发了对新方法的研究和开发。 3.2.5 分布式语义学Distributional Semantics
3.2.5.1 分布式语义学的基本概念 分布式语义学Distributional Semantics基于一个核心假设一个词的含义可以通过它出现的上下文来定义和捕捉。这一理论认为如果两个词在相似的上下文中出现那么它们的含义也相似。这就是所谓的分布式假设distributional hypothesis。 在神经网络中我们不能直接使用单词或字符串因为神经网络运作的是数字。因此我们需要为词汇表V中的每个标记分配一个数字向量。通过训练过程网络“学习”了每个向量的含义这些含义是根据其他向量的上下文推断出来的。 在分布式语义学的早期方法中最直接的方式是统计词语共现的次数单词 X 和单词 Y 一起出现了多少次。这里的“一起”可以指紧挨着出现也可以是在同一个文档中出现。这通常被形式化为一个大小为n的上下文窗口。 这种方法的结果是一个共现矩阵这是一个对称矩阵在对角线上是零。每个词的分布式表示就是它的共现向量。 共现矩阵和向量往往非常巨大且稀疏。为了解决这个问题线性代数中的奇异值分解SVD技术被用来降维这在自然语言处理中的应用就是潜在语义分析Latent Semantic AnalysisLSA。 简而言之分布式语义学试图利用统计学习方法来捕捉单词的语义认为单词的含义可以通过它与其他单词在大量文本中的共现关系来表示。通过这种方式即使是没有明确定义的词汇也可以根据其在语料库中与其他词汇的关联程度来推断其含义。
3.2.5.2 词共现矩阵 这个表格是一个词共现矩阵的示例它体现了分布式语义的概念。在这个矩阵中我们可以看到两个句子“The cat chased the mouse in the barn.” 和 “A cat chased a rat in the attic.”以及基于这两个句子构建的词共现情况。 分布式语义假设上下文相似的单词意义也相似。在这里上下文是指单词周围的其他单词。为了将单词表示成可以被神经网络处理的数值每个单词都与一个数字向量相关联。 这个共现矩阵是根据上下文窗口大小计算的这里窗口大小是正负2个单词。表中的每个数字表示在上下文窗口中行标题的单词与列标题的单词共同出现的次数。比如the 和 cat 在一定的上下文窗口内共现了2次。矩阵是对称的对角线上的值为0因为它表示单词与其自身的共现这在计算中通常被忽略。 词共现矩阵和向量往往非常大且稀疏一个常用的解决方案是使用代数中的奇异值分解SVD技术它在自然语言处理中被用于潜在语义分析LSA中。通过LSA可以将词共现矩阵降维到更小、更密集的向量空间从而提取出词义的潜在结构。
3.2.6 词嵌入Word Embeddings 这是一种文本表示形式它能将单词转换为一组定长的数值向量。这些向量能够捕捉单词的语义特征使得语义上相近的单词在向量空间中也相互靠近。 词嵌入是通过神经网络从大量文本数据中自动学习得到的是自然语言处理中的一项重要技术。以下是对词嵌入输入输出、训练方式和参数选择的解释
3.2.6.1 输入和输出 输入词嵌入模型的输入是一个大型的、已经分词的训练语料库这个语料库包含了丰富的词汇V。 输出对于词汇表V中的每个词汇词嵌入模型会计算出一个固定维度N的词向量也称为“语义特征”向量。这意味着每个单词都被表示为一个N维的实数向量。
3.2.6.2 词嵌入与其他文本表示方法的关系 词嵌入可以看作是共现矩阵co-occurrence matrices和奇异值分解SVD/潜在语义分析LSA的神经网络等价物。研究表明当其他条件相同时这三种表示方法在预测能力上是相似的。这表明尽管词嵌入是通过神经网络计算得到的但它们与传统的基于统计的文本表示方法有着本质上的联系。
3.2.6.3 如何计算词嵌入 实际上用于生成词嵌入的输入向量是通过另一个神经网络计算得到的。这意味着我们使用一个神经网络来学习如何将文本表示为词嵌入向量。
3.2.6.4 参数选择 V词汇表大小原始的词嵌入模型中词汇表的大小大约在10,000到50,000之间。这是模型的一个超参数需要根据具体的应用场景进行调整。 N向量维度词向量的维度通常设定为300。向量维度是另一个超参数它决定了词向量空间的大小。较大的维度可以捕捉更多的语义信息但也会增加模型的计算复杂度和存储需求。 总的来说词嵌入通过学习语料库中单词的使用模式为每个单词生成一个固定维度的数值向量这些向量能够有效地表示单词的语义信息。词嵌入的计算依赖于神经网络模型且涉及到一些重要的超参数选择如词汇表的大小和词向量的维度。
3.3 步骤三自监督预训练Self-supervised Pre-training 获取关于语言的“通用知识”。这类似于符号和统计方法的上游语言分析和特征提取任务。自监督范式是一种可以容易且稳定自动生成的监督任务。
3.4 步骤四监督训练Supervised Training 将预训练模型适配或称为“微调”到要解决的具体任务。监督是指通过手动或复杂的自动化方法获得的训练数据使用特定于领域的评价指标进行控制。 整个流程从原始语料库开始经过预处理、生成嵌入、自监督学习基础语言模式最终通过监督学习适配到特定的NLP任务。这个流程体现了从广泛语言理解到特定任务应用的过程。