适合初学者的自然语言处理 (NLP) 综合指南

news2024/11/26 13:29:07

一、简述

        自然语言处理 (NLP) 是人工智能 (AI) 最热门的领域之一,现在主要指大语言模型了。这要归功于人们热衷于能编写故事的文本生成器、欺骗人们的聊天机器人以及产生照片级真实感的文本到图像程序等应用程序。近年来,计算机理解人类语言、编程语言,甚至类似于语言的生物和化学序列(例如 DNA 和蛋白质结构)的能力发生了革命。最新的人工智能模型正在解锁这些领域,以分析输入文本的含义并生成有意义的、富有冲击力(你懂的)的输出。

        自然语言处理 (NLP) 从计算语言学发展而来,计算语言学利用计算机科学来理解语言原理,但 NLP 不是开发理论框架,而是一门工程学科,旨在构建技术来完成有用的任务。 NLP 可以分为两个重叠的子领域:自然语言理解 (NLU),重点是语义分析或确定文本的预期含义;自然语言生成 (NLG),重点是机器生成文本。 NLP 与语音识别分开,但经常结合使用,语音识别旨在将口语解析为单词,将声音转换为文本,反之亦然。

二、任务清单

        NLP 用于各种与语言相关的任务,包括回答问题、以各种方式对文本进行分类以及与用户对话。

        以下是 NLP 可以解决的任务:

情感分析:是对文本的情感意图进行分类的过程。一般来说,情感分类模型的输入是一段文本,输出是所表达的情感是正面、负面或中性的概率。通常,此概率基于手动生成的特征、单词 n-gram、TF-IDF 特征,或使用深度学习模型来捕获连续的长期和短期依赖性。情绪分析用于对各种在线平台上的客户评论进行分类等。

毒性分类:是情感分析的一个分支,其目的不仅是对敌对意图进行分类,而且还对特定类别进行分类,例如威胁、侮辱、淫秽和对某些身份的仇恨。这种模型的输入是文本,输出通常是每类毒性的概率。毒性分类模型可用于通过压制攻击性评论、检测仇恨言论或扫描文档是否存在诽谤来调节和改善在线对话。

机器翻译:可以自动实现不同语言之间的翻译。这种模型的输入是指定源语言的文本,输出是指定目标语言的文本。谷歌翻译可能是最出名的之一,不过总感觉近几年来百度翻译(指英译汉)的准确度要高于谷歌了。

命名实体:用于将一段文本中的实体提取到预定义的类别中,例如人名、组织、位置和数量。这种模型的输入通常是文本,输出是各种命名实体及其开始和结束位置。命名实体识别在总结新闻文章和打击虚假信息等应用中非常有用。

垃圾邮件检测:是 NLP 中常见的二元分类问题,其目的是将电子邮件分类为垃圾邮件或非垃圾邮件。垃圾邮件检测器将电子邮件文本以及标题和发件人姓名等各种其他潜文本作为输入。他们的目的是输出邮件是垃圾邮件的概率。 很多电子邮件提供商使用此类模型,通过检测未经请求和不需要的电子邮件并将其移至指定的垃圾邮件文件夹来提供更好的用户体验。

语法错误纠正:模型对语法规则进行编码以纠正文本中的语法。这主要被视为序列到序列的任务,其中模型以不符合语法的句子作为输入和正确的句子作为输出进行训练。

主题建模:是一种无监督的文本挖掘任务,它获取文档语料库并发现该语料库中的抽象主题。主题模型的输入是文档的集合,输出是主题列表,该列表定义了每个主题的单词以及文档中每个主题的分配比例。潜在狄利克雷分配 (LDA) 是最流行的主题建模技术之一,它尝试将文档视为主题的集合,将主题视为单词的集合。主题建模正在商业上用于帮助律师在法律文件中查找证据。

文本生成:更正式地称为自然语言生成 (NLG),生成与人类编写的文本相似的文本。这些模型可以进行微调,以生成不同类型和格式的文本,包括自媒体文章、博客,甚至计算机代码。文本生成是使用马尔可夫过程、LSTM、BERT、GPT-2、LaMDA......和其他方法执行的。它对于自动完成和聊天机器人特别有用。

自动完成功能:可以预测接下来出现的单词,一些聊天应用程序中使用了不同复杂程度的自动完成系统。搜索引擎使用自动完成来预测搜索查询。 GPT-2 是最著名的自动完成模型之一,它已被用于撰写文章、歌词等。

聊天机器人:它们可以分为以下两类: (1)数据库查询:我们有一个问题和答案的数据库,我们希望用户使用自然语言对其进行查询。(2)对话生成:这些聊天机器人可以模拟与人类伙伴的对话。有些人能够进行广泛的对话。一个引人注目的例子是谷歌的 LaMDA,它对问题提供了类似人类的答案,以至于它的一位开发人员确信它有感情。

信息检索:找到与查询最相关的文档。这是每个搜索和推荐系统都面临的问题。目标不是回答特定的查询,而是从可能数以百万计的文档集合中检索与查询最相关的集合。文档检索系统主要执行两个过程:索引和匹配。在大多数现代系统中,索引是通过两塔网络的向量空间模型完成的,而匹配是使用相似性或距离分数完成的。搜索引擎将其搜索功能与可处理文本、图像和视频数据的多模式信息检索模型集成在一起。

摘要:用来抽取最相关信息的任务。 摘要分为两个方法类: (1)提取式摘要,侧重于从长文本中提取最重要的句子,并将它们组合起来形成摘要。通常,提取摘要对输入文本中的每个句子进行评分,然后选择几个句子来形成摘要。 (2)抽象摘要通过释义产生摘要。这类似于撰写包含原文中不存在的单词和句子的摘要。抽象摘要通常被建模为序列到序列的任务,其中输入是长格式文本,输出是摘要。

问答:涉及用自然语言回答人类提出的问题。一般来说,问答任务有两种类型: (1)多项选择:多项选择题由一个问题和一组可能的答案组成。学习任务是选择正确答案。 (2)开放域:在开放域问答中,模型通常通过查询大量文本,以自然语言提供问题的答案,而不提供任何选项。

三、工作原理

        NLP 模型的工作原理是查找语言组成部分之间的关​​系,例如文本数据集中的字母、单词和句子。 NLP 架构使用各种方法进行数据预处理、特征提取和建模。

        数据预处理:在模型处理特定任务的文本之前,通常需要对文本进行预处理以提高模型性能或将单词和字符转换为模型可以理解的格式。以数据为中心的人工智能是一项不断发展的运动,优先考虑数据预处理。在此数据预处理中可以使用各种技术:

        词干提取和词形还原:词干提取是使用启发式规则将单词转换为其基本形式的非正式过程。例如,“university”、“universities”和“university's”可能全部映射到基础univers。 (这种方法的一个限制是“universe”也可以映射到univers,尽管universe和university没有密切的语义关系。)词形还原是一种更正式的方法,通过使用以下词汇分析单词的形态来查找词根:一本字典。词干提取和词形还原由 spaCy 和 NLTK 等库提供。

        句子分割:将大段文本分解为具有语言意义的句子单元。这在英语等语言中很明显,句子的结尾用句号标记,但这仍然不是微不足道的。句点可用于标记缩写以及终止句子,在这种情况下,句点应该是缩写标记本身的一部分。对于没有标记句子结尾的分隔符的语言(例如古汉语),该过程变得更加复杂。

        停用词删除:旨在删除最常出现的不会为文本添加太多信息的单词。例如,“the”、“a”、“an”等等。

        TOKENIZERS:将文本分割成单独的单词和单词片段。结果通常由单词索引和标记化文本组成,其中单词可以表示为数字标记以用于各种深度学习方法。指示语言模型忽略不重要标记的方法可以提高效率。

        特征提取:大多数传统的机器学习技术都是基于特征(通常是描述文档与包含该文档的语料库相关的数字),这些特征由词袋、TF-IDF 或通用特征工程(例如文档长度)创建、单词极性和元数据(例如,如果文本具有关联的标签或分数)。最近的技术包括 Word2Vec、GLoVE 以及在神经网络训练过程中学习特征。

        Bag-of-Words:Bag-of-Words 计算每个单词或 n-gram(n 个单词的组合)在文档中出现的次数。例如,下面的词袋模型根据 word_index 中每个单词在文档中出现的数量来创建数据集的数字表示。

        TF-IDF:在词袋中,我们计算文档中每个单词或 n-gram 的出现次数。相比之下,使用 TF-IDF,我们根据每个单词的重要性对其进行加权。

        Word2Vec 于 2013 年推出,使用普通神经网络从原始文本中学习高维词嵌入。它有两种变体:Skip-Gram(在给定目标单词的情况下尝试预测周围单词)和 Continuous Bag-of-Words(CBOW)(尝试从周围单词预测目标单词)。在训练后丢弃最后一层后,这些模型将一个单词作为输入并输出一个单词嵌入,该单词嵌入可以用作许多 NLP 任务的输入。 Word2Vec 的嵌入捕获上下文。如果特定的单词出现在相似的上下文中,它们的嵌入将是相似的。

GLoVE 与 Word2Vec 类似,因为它也学习词嵌入,但它是通过使用矩阵分解技术而不是神经学习来实现的。 GLoVE 模型根据全局单词间共现计数构建一个矩阵。

建模:数据经过预处理后,将被输入到 NLP 架构中,该架构对数据进行建模以完成各种任务。

通过上述技术提取的数字特征可以根据手头的任务输入到各种模型中。例如,对于分类,可以将 TF-IDF 矢量器的输出提供给逻辑回归、朴素贝叶斯、决策树或梯度提升树。或者,对于命名实体识别,我们可以使用隐马尔可夫模型和 n 元语法。

深度神经网络通常在不使用提取特征的情况下工作,尽管我们仍然可以使用 TF-IDF 或词袋特征作为输入。

语言模型:用非常基本的术语来说,语言模型的目标是在给定输入单词流时预测下一个单词。

        深度学习也用于创建此类语言模型。深度学习模型将单词嵌入作为输入,并在每个时间状态返回下一个单词的概率分布作为字典中每个单词的概率。预训练的语言模型通过处理大型语料库(例如维基百科)来学习特定语言的结构。然后可以针对特定任务对它们进行微调。例如,BERT 已经针对从事实检查到撰写头条新闻等任务进行了微调。

四、自然语言处理 (NLP) 技术

1、传统机器学习NLP技术

        逻辑回归是一种监督分类算法,旨在根据某些输入预测事件发生的概率。在自然语言处理中,逻辑回归模型可用于解决情感分析、垃圾邮件检测和毒性分类等问题。

        朴素贝叶斯是一种监督分类算法,它使用以下贝叶斯公式查找条件概率分布 P(标签 | 文本):

        P(标签 | 文本) = P(标签) x P(文本|标签) / P(文本)

        并根据哪个联合分布具有最高概率进行预测。朴素贝叶斯模型中的朴素假设是各个单词是独立的。在自然语言处理中,此类统计方法可用于解决垃圾邮件检测或查找软件代码中的错误等问题。

        决策树是一类监督分类模型,它根据不同的特征分割数据集,以最大化这些分割中的信息增益。

        潜在狄利克雷分配(LDA)用于主题建模。 LDA 尝试将文档视为主题的集合,将主题视为单词的集合。 LDA 是一种统计方法。其背后的直觉是,可以仅使用语料库中的一小部分单词来描述任何主题。

        隐马尔可夫模型:马尔可夫模型是根据当前状态决定系统下一个状态的概率模型。例如,在 NLP 中,我们可能会根据前一个单词建议下一个单词。我们可以将其建模为马尔可夫模型,在该模型中我们可能会找到从 word1 到 word2 的转换概率,即 P(word1|word2)。然后我们可以使用这些转移概率的乘积来找到句子的概率。隐马尔可夫模型(HMM)是一种在马尔可夫模型中引入隐藏状态的概率建模技术。隐藏状态是不能直接观察到的数据的属性。 HMM 用于词性 (POS) 标记,其中句子的单词是观察到的状态,POS 标记是隐藏状态。 HMM增加了一个概念,叫发射概率;给定隐藏状态的观察概率。在前面的示例中,这是给定词性标签的单词的概率。 HMM 假设这种概率可以逆转:给定一个句子,我们可以根据一个单词具有特定词性标签的可能性以及特定词性标签的概率来计算每个单词的词性标签。词性标记遵循分配给前一个单词的词性标记。实际上,这是使用维特比算法来解决的。

2、深度学习 NLP 技术

        卷积神经网络(CNN):使用 CNN 进行文本分类的想法最早在Yoon Kim 的论文“用于句子分类的卷积神经网络”中提出。核心直觉是将文档视为图像。然而,输入不是像素,而是表示为单词矩阵的句子或文档。

        循环神经网络 (RNN):许多使用深度学习的文本分类技术,使用 n 元语法或窗口 (CNN) 处理邻近的单词。他们可以将“纽约”视为一个实例。但是,它们无法捕获特定文本序列提供的上下文。他们不学习数据的顺序结构,其中每个单词都依赖于前一个单词或前一个句子中的单词。 RNN 使用隐藏状态记住先前的信息并将其连接到当前任务。称为门控循环单元 (GRU) 和长短期记忆 (LSTM) 的架构是 RNN 的类型,旨在长时间记住信息。此外,双向 LSTM/GRU 保留了两个方向的上下文信息,这有助于文本分类。 RNN 还被用来生成数学证明并将人类思想转化为文字。

        自动编码器:是深度学习编码器-解码器,近似从 X 到 X 的映射,即输入=输出。他们首先将输入特征压缩为低维表示(有时称为潜在代码、潜在向量或潜在表示)并学习重建输入。表示向量可以用作单独模型的输入,因此该技术可用于降维。在许多其他领域的专家中,遗传学家已经应用自动编码器来发现与氨基酸序列疾病相关的突变。

        编码器-解码器序列到序列:编码器-解码器 seq2seq 架构是对专门用于翻译、摘要和类似任务的自动编码器的适应。编码器将文本中的信息封装成编码向量。与自动编码器不同,解码器的任务不是从编码向量重建输入,而是生成不同的所需输出,例如翻译或摘要。

        Transformers:Transformer 是一种模型架构,首次在 2017 年的论文《Attention Is All You Need》(Vaswani、Shazeer、Parmar 等人)中描述,它放弃了递归,而是完全依赖自注意力机制来绘制之间的全局依赖关系输入和输出。由于这种机制一次处理所有单词(而不是一次一个),与 RNN 相比,它降低了训练速度和推理成本,特别是因为它是可并行的。近年来,Transformer 架构彻底改变了 NLP,产生了BLOOM、Jurassic-X和Turing-NLG等模型。它还已成功应用于各种不同的视觉任务,包括制作3D 图像。

五、六个重要的NLP模型

        Eliza 于 20 世纪 60 年代中期开发,试图解决图灵测试;也就是说,欺骗人们认为他们正在与另一个人而不是机器交谈。 Eliza 使用模式匹配和一系列规则,但没有对语言上下文进行编码。

        Tay 是微软于 2016 年推出的一款聊天机器人。它像青少年一样发推文,并从 Twitter 上与真实用户的对话中学习。该机器人采用了发布性别歧视和种族主义言论的用户的短语,微软不久后就将其停用。Tay 证实了《随机鹦鹉》论文中提出的一些观点,特别是不消除数据偏差的危险。

        BERT系列:NLP 的许多深度学习模型都是以布偶角色命名的,包括ELMo、BERT、Big BIRD、ERNIE、Kermit、Grover、RoBERTa和Rosita。这些模型大多数都擅长提供上下文嵌入和增强的知识表示。

        生成式预训练 Transformer 3 (GPT-3) 是一个 1750 亿个参数的模型,可以根据输入提示编写出与人类相当的流利程度的原创散文。该模型基于变压器架构。之前的版本 GPT-2 是开源的。微软从其开发商 OpenAI 那里获得了访问 GPT-3 底层模型的独家许可,但其他用户可以通过应用程序编程接口 (API) 与其进行交互。包括 EleutherAI 和 Meta 在内的多个组织已经发布了 GPT-3 的开源解释。

        对话应用程序语言模型(LaMDA)是由 Google 开发的对话聊天机器人。 LaMDA 是一种基于 Transformer 的模型,通过对话而不是通常的网络文本进行训练。该系统旨在为对话提供明智且具体的响应。谷歌开发者 Blake Lemoine 开始相信 LaMDA 是有感知能力的。 Lemoine 与 AI 就他的权利和人格进行了详细的对话。在其中一次对话中,人工智能改变了勒莫万对艾萨克·阿西莫夫机器人第三定律的看法。勒莫因声称 LaMDA 是有感知能力的,但这一想法遭到了许多观察家和评论员的质疑。随后,谷歌因传播专有信息而对勒莫万进行行政休假,并最终解雇了他。

        专家混合(MoE):虽然大多数深度学习模型使用相同的参数集来处理每个输入,但 MoE 模型的目标是基于高效的路由算法为不同的输入提供不同的参数,以实现更高的性能。Switch Transformer是 MoE 方法的一个示例,旨在降低通信和计算成本。

六、NLP 的编程语言、库和框架

        Natural Language Toolkit (NLTK)是最早用 Python 编写的 NLP 库之一。它为语料库和词汇资源(例如WordNet)提供易于使用的接口。它还提供了一套用于分类、标记、词干、解析和语义推理的文本处理库。

        spaCy是最通用的开源 NLP 库之一。它支持超过 66 种语言。 spaCy 还提供预训练的词向量并实现许多流行的模型,例如 BERT。 spaCy 可用于构建用于命名实体识别、词性标注、依存句法分析、句子分割、文本分类、词形还原、形态分析、实体链接等的生产就绪系统。

        Hugging Face提供超过 135 个最先进模型的开源实现和权重。该存储库可以轻松定制和训练模型。

        Gensim提供向量空间建模和主题建模算法。

        R:许多早期的 NLP 模型都是用 R 编写的,并且 R 仍然被数据科学家和统计学家广泛使用。 R 中用于 NLP 的库包括TidyText、Weka、Word2Vec、SpaCyR、TensorFlow和PyTorch。

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

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

相关文章

从零到一,打造高效团队!项目经理必备的5大核心能力

快速晋升项目经理的绝密成功法则,你掌握了吗? 项目经理通常具备一系列关键的能力和素质,并付诸实践。以下是项目经理快速晋升需要掌握的技能: 一、精通核心技能,奠定项目基础 1、专业知识技能:项目经理…

Linux-进程和计划任务管理⭐

目录 一、程序和进程 1.程序 2.进程 3.线程与进程 二、ps查看静态进程信息 1.ps aux 命令 2.ps-静态查看系统进程 3.ps -elf 三、top-查看进程动态信息 四、pgrep查看进程信息 五、pstree-查看进程树 六、控制进程 1.进程启动方式 2.调度启动 3.进程的前后台调…

电商ERP是什么,电商ERP有什么用?||电商API接口

目录 一. 电商ERP是什么? 二. 电商ERP的常见功能 三. 小结 电商ERP接口接入 01 一. 电商ERP是什么? 随着电商经济的快速发展,电商企业面临着机遇和挑战。企业都希望快速拓展市场,通过多个渠道增加销售额。电商ERP系统是一种先进的应用系统&#…

EaseUS RecExperts for Mac/Win:你的专属屏幕录像专家

在信息爆炸的时代,屏幕录像软件已经成为我们工作和生活中的得力助手。无论是教学演示、产品介绍,还是游戏录制、会议记录,一款功能强大的屏幕录像软件都能轻松应对。而EaseUS RecExperts,正是这样一款值得你信赖的屏幕录像专家。 …

网络安全之弱口令与命令爆破(上篇)(技术进阶)

目录 一,什么是弱口令? 二,为什么会产生弱口令呢? 三,字典的生成 四,使用Burpsuite工具弱口令爆破 总结 一,什么是弱口令? 弱口令就是容易被人们所能猜到的密码呗,…

springboot+thymeleaf实现一个简单的监听在线人数功能

功能步骤: 1. 当用户访问登录页面时,Logincontroller的showLoginForm方法被调用,返回登录页面的视图名字。 2. 用户提交表单,调用LoginController的login方法。 3.login方法 4.登录验证通过,home方法会被调用&#xf…

JavaEE >> Spring Boot(1)

Spring Boot 前面已经介绍了 Spring ,是为了简化 Java 程序开发的,而在前面创建的过程中就会发现其实 Spring 还是有点复杂,此时 Spring Boot 就诞生了, Spring Boot 是为了简化 Spring 程序开发的。 Spring Boot 即 Spring 脚手…

transformer 最简单学习3, 训练文本数据输入的形式

1、输入数据中,源数据和目标数据的定义 def get_batch(source,i):用于获取每个批数据合理大小的源数据和目标数据参数source 是通过batchfy 得到的划分batch个 ,的所有数据,并且转置列表示i第几个batchbptt 15 #超参数,一次输入多少个ba…

【opencv 加速推理】如何安装 支持cuda的opencv 包 用于截帧加速

要在支持CUDA的系统上安装OpenCV,您可以使用pip来安装支持CUDA的OpenCV版本。OpenCV支持CUDA加速,但需要安装额外的库,如cuDNN和NVIDIA CUDA Toolkit。以下是一般步骤: 安装NVIDIA CUDA Toolkit: 首先,您需要安装NVID…

Golang:文件读写操作WriteFile、ReadFile和0644权限

方法签名 // 文件打开、写入、关闭 func OpenFile(name string, flag int, perm FileMode) (*File, error)func (f *File) WriteString(s string) (n int, err error) func (f *File) Write(b []byte) (n int, err error)func (f *File) Close() error// 写入文件 func WriteFi…

机器视觉系统-工业光源什么是低角度打光方式

光路描述&#xff1a;光线与水平面角度 <45称为低角度光。 效果分析&#xff1a;低角度照射&#xff0c;被侧物表面平整部分的反射光无法进入入镜头&#xff0c;图像效果表现为灰度值较低&#xff1b;不平整部分的反射光进入镜头&#xff0c;图像效果表现为灰度值较高。 主要…

充电器进阶,原边恒流,单片机控制小电流(预充电)的方案

前言 很多充电器&#xff0c;为了能控制电流输出&#xff0c;也就是充电时需要有小电流、大电流的情况&#xff0c;都会用副边及单片机进行控制&#xff0c;但因为是副边控制&#xff0c;需要一个比较器、一个二极管、若干电阻、若干电容&#xff0c;整体BOM成本可能多了三毛钱…

virtio-wayland

CrosVM是Chrome操作系统中&#xff0c;用于创建虚拟机的应用。是一个Rust编写的轻量级的虚拟机。借助于CrosVM 用户可以很容易的在ChromeOS中运行Linux、Android以及Windows应用程序 概述 目前crosvm实现了virtio wayland协议&#xff0c;实现了对linux虚拟机wayland协议支持 …

债务泥潭、童婚和被摘除的子宫:糖的残酷真相

今天看到《纽约时报》的一篇深度报道&#xff0c;对于女性来说&#xff0c;看完不寒而栗&#xff0c;事情发生在印度。 在那种环境下&#xff0c;女性是多么的无助&#xff0c;无望&#xff0c;迷茫&#xff0c;只能同那个地区的成千上万女性一样&#xff0c;走着同样的命运。 …

python与pycharm如何设置文件夹为源代码根目录

相信大家遇到过下面这种情况 当我们在当前项目下引入了其它项目的代码&#xff0c;这是其它项目的包的导入路径是不用于当前项目的&#xff0c;这样导致项目无法正常起来&#xff0c;但是我们又不可能一个个文件去处理&#xff0c;这时可以用下面的方式解决 pycharm直接设置 …

区块链技术与应用学习笔记(5-7节)——北大肖臻课程

​ 目录 ​BTC实现 基于交易的账本模式&#xff1a; UTXO集合&#xff1a; 交易费用&#xff1a; BTC网络 1.应用层&#xff1a; 2.网络层&#xff1a; 3传播层&#xff1a; 什么是鲁棒&#xff1f; BTC挖矿&#xff1a; 出块奖励&#xff1a; 挖矿难度调整&#…

Typescript 练习

1. 类型谓词 格式&#xff1a;类型谓词采用parameterName is Type格式&#xff0c;其中parameterName必须是当前函数的参数 interface Iuser {type: username: stringage: numberoccupation: string }interface Iadmin {type: adminname: stringage: numberrole: string }expor…

安卓备份:守护你的数据安全与记忆珍藏

手机中的数据也承载着我们的记忆和情感&#xff0c;成为我们生活中不可或缺的一部分。为了守护这些宝贵的数据&#xff0c;备份成为了我们必须要面对的问题。本文将为你详细介绍安卓备份的方法&#xff0c;以及备份的重要性&#xff0c;帮助你更好地守护自己的数据安全与记忆珍…

Python 中的递归排列

在 Python 中使用递归计算排列,适合绝对初学者 介绍 有些人发现很难理解递归算法。 这个技巧向绝对初学者展示了如何使用递归查找排列。Python 背景 这个技巧的想法来自一个问答问题:可怜的 OP 花了三天时间“翻头”,试图弄清楚一小段代码如何能够生成输入列表项的所有排列。…

从零开始利用MATLAB进行FPGA设计(五)详解双口RAM

创作于谱仪算法设计过程中的数字能谱生成模块设计。 往期回顾&#xff1a; 从零开始利用MATLAB进行FPGA设计&#xff08;四&#xff09;生成优化HDL代码 从零开始利用MATLAB进行FPGA设计&#xff08;三&#xff09;将Simulink模型转化为定点数据类型 目录 1.关于双口RAM …