【Transformers】第 1 章 :Hello Transformers

news2024/11/26 22:31:15

 🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟👋

文章目录

编码器-解码器框架

注意力机制

NLP 中的迁移学习

Hugging Face Transformers: Bridging the Gap

Transformer应用之旅

文本分类

命名实体识别

问答

总结

翻译

文本生成

拥抱脸生态系统

The Hugging Face Hub

拥抱面部标记器

拥抱人脸数据集

拥抱脸加速

Transformers的主要挑战

结论


2017 年,谷歌的研究人员发表了一篇论文,提出了一种用于序列建模的新型神经网络架构。1 被称为Transformer,这种架构在机器翻译任务上的表现优于循环神经网络 (RNN),无论是在翻译质量还是培训成本方面。

同时,一种称为 ULMFiT 的有效迁移学习方法表明,在非常大且多样化的语料库上训练长短期记忆 (LSTM) 网络可以产生最先进的文本分类器,而标记数据很少。2

这些进步是当今最著名的两个变压器的催化剂:生成式预训练变压器 (GPT) 3和变压器的双向编码器表示 (BERT)。4通过将 Transformer 架构与无监督学习相结合,这些模型消除了从头开始训练特定任务架构的需要,并大大打破了 NLP 中的几乎所有基准。自 GPT 和 BERT 发布以来,出现了一个变压器模型动物园;图 1-1显示了最突出的条目的时间线 。

图 1-1。 transformers时间线

但我们正在超越自己。要了解变压器的新颖之处,我们首先需要解释一下:

  • 编码器-解码器框架

  • 注意力机制

  • 迁移学习

在本章中,我们将介绍 Transformer 普遍存在的核心概念,了解他们擅长的一些任务,并以 Hugging Face 工具和库生态系统作为结束。

让我们从探索编码器-解码器框架和变压器兴起之前的架构开始。

编码器-解码器框架

在 Transformer 之前,循环架构(如 LSTM)是 NLP 中的最新技术。这些架构在网络连接中包含一个反馈循环,允许信息从一个步骤传播到另一个步骤,使其非常适合对文本等顺序数据进行建模。如图 1-2左侧所示,RNN 接收一些输入(可能是单词或字符),将其输入到网络中,并输出一个称为隐藏状态的向量。同时,模型通过反馈回路将一些信息反馈给自己,然后可以在下一步中使用。如果我们如图 1-2右侧所示“展开”循环,则可以更清楚地看到这一点 :RNN 在每一步将有关其状态的信息传递给序列中的下一个操作。这允许 RNN 跟踪来自先前步骤的信息,并将其用于其输出预测。

图 1-2。及时展开 RNN

这些架构曾(并将继续)广泛用于 NLP 任务、语音处理和时间序列。您可以在 Andrej Karpathy 的博客文章“循环神经网络的不合理有效性”中找到对它们能力的精彩阐述 。

RNN 发挥重要作用的一个领域是机器翻译系统的开发,其目标是将一种语言的单词序列映射到另一种语言。这种任务通常使用编码器-解码器序列到序列 架构来解决,5这非常适合输入和输出都是任意长度的序列的情况。编码器的工作是将输入序列中的信息编码为数字表示,通常称为最后隐藏状态。然后将该状态传递给解码器,解码器生成输出序列。

通常,编码器和解码器组件可以是可以对序列进行建模的任何类型的神经网络架构。图 1-3中的一对 RNN 对此进行了说明,其中英文句子“Transformers are great!” 被编码为隐藏状态向量,然后被解码以产生德语翻译“Transformer sind Grossartig!” 输入字通过编码器顺序输入,输出字从上到下一次生成一个。

图 1-3。具有一对 RNN 的编码器-解码器架构(通常,循环层比这里显示的要多得多)

尽管其简单性很优雅,但这种架构的一个缺点是编码器的最终隐藏状态会产生信息瓶颈:它必须表示整个输入序列的含义,因为这是解码器在生成输出时可以访问的所有内容。这对于长序列尤其具有挑战性,因为在将所有内容压缩为单个固定表示的过程中,序列开头的信息可能会丢失。

幸运的是,通过允许解码器访问编码器的所有隐藏状态,有办法摆脱这个瓶颈。对此的一般机制称为 注意力6,它是许多现代神经网络架构中的关键组件。了解如何为 RNN 开发注意力将使我们能够很好地理解 Transformer 架构的主要构建块之一。让我们更深入地了解一下。

注意力机制

注意背后的主要思想是,编码器不是为输入序列生成单个隐藏状态,而是在解码器可以访问的每个步骤中输出一个隐藏状态。然而,同时使用所有状态会为解码器创建一个巨大的输入,因此需要一些机制来确定使用哪些状态的优先级。这就是注意力的来源:它让解码器在每个解码时间步为每个编码器状态分配不同的权重或“注意力”。这个过程 如图 1-4 所示,其中注意力的作用被展示为预测输出序列中的第三个标记。

图 1-4。具有用于一对 RNN 的注意力机制的编码器-解码器架构

通过关注每个时间步最相关的输入标记,这些基于注意力的模型能够学习生成的翻译中的单词和源句中的单词之间的非平凡对齐。例如,图 1-5可视化了英语到法语翻译模型的注意力权重,其中每个像素表示一个权重。该图显示了解码器如何正确对齐单词“zone”和“Area”,这两种语言的顺序不同。

图 1-5。RNN 编码器-解码器对齐英语单词和生成的法语翻译(由 Dzmitry Bahdanau 提供)

尽管注意力能够产生更好的翻译,但在编码器和解码器中使用循环模型仍然存在一个主要缺点:计算本质上是顺序的,不能跨输入序列并行化。

Transformer 引入了一种新的建模范式:完全不用递归,而是完全依赖一种称为self-attention的特殊形式的注意力。我们将在第 3 章中更详细地介绍 self-attention ,但基本思想是让 attention 作用于 神经网络同一层中的所有状态。如图 1-6所示 ,编码器和解码器都有自己的自注意力机制,其输出被馈送到前馈神经网络 (FF NN)。这种架构可以比循环模型更快地训练,并为最近 NLP 的许多突破铺平了道路。

图 1-6。原始 Transformer 的编码器-解码器架构

在最初的 Transformer 论文中,翻译模型是在各种语言的大量句子对上从头开始训练的。然而,在 NLP 的许多实际应用中,我们无法访问大量标记的文本数据来训练我们的模型。让变压器革命开始的最后一件事情是:迁移学习。

NLP 中的迁移学习

如今,计算机视觉领域的常见做法是使用迁移学习在一项任务上训练像 ResNet 这样的卷积神经网络,然后在一项新任务上对其进行调整或微调。这允许网络利用从原始任务中学到的知识。在架构上,这涉及将模型拆分为bodyhead,其中 head 是特定于任务的网络。在训练期间,身体的权重学习源域的广泛特征,这些权重用于为新任务初始化新模型。7与传统的监督学习相比,这种方法通常会产生高质量的模型,这些模型可以在各种下游任务上更有效地训练,并且标记数据要少得多。两种方法的比较 如图 1-7所示。

图 1-7。传统监督学习(左)与迁移学习(右)的比较

在计算机视觉中,模型首先在包含数百万张图像的ImageNet等大规模数据集上进行训练。这个过程称为预训练,其主要目的是教模型图像的基本特征,例如边缘或颜色。然后可以在下游任务上对这些预训练模型进行微调,例如使用相对较少的标记示例(通常每类几百个)对花卉种类进行分类。与在相同数量的标记数据上从头开始训练的监督模型相比,微调模型通常可以实现更高的准确度。

尽管迁移学习成为计算机视觉的标准方法,但多年来,对于 NLP 来说,类似的预训练过程是什么并不清楚。因此,NLP 应用程序通常需要大量标记数据来实现高性能。即便如此,该性能也无法与视觉领域的成就相提并论。

在 2017 年和 2018 年,几个研究小组提出了新的方法,最终使迁移学习适用于 NLP。它始于 OpenAI 研究人员的见解,他们通过使用从无监督预训练中提取的特征在情感分类任务上获得了强大的性能。8紧随其后的是 ULMFiT,它引入了一个通用框架,以使预训练的 LSTM 模型适应各种任务。9

如图1-8 所示,ULMFiT 涉及三个主要步骤:

预训练

最初的训练目标非常简单:根据前面的单词预测下一个单词。此任务称为语言建模。这种方法的优点在于不需要标记数据,并且可以利用来自维基百科等来源的大量可用文本。10

领域适应

一旦语言模型在大规模语料库上进行了预训练,下一步就是将其适应域内语料库(例如,从维基百科到电影评论的 IMDb 语料库, 如图 1-8 所示)。这个阶段仍然使用语言建模,但现在模型必须预测目标语料库中的下一个单词。

微调

在这一步中,语言模型通过目标任务的分类层进行微调(例如,对图 1-8中的电影评论情绪进行分类)。

图 1-8。ULMFiT 流程(由 Jeremy Howard 提供)

通过在 NLP 中引入一个可行的预训练和迁移学习框架,ULMFiT 提供了使 Transformer 起飞的缺失部分。2018 年,发布了两个将 self-attention 与迁移学习相结合的 Transformer:

GPT

仅使用 Transformer 架构的解码器部分,以及与 ULMFiT 相同的语言建模方法。GPT 在 BookCorpus 11上进行了预训练,其中包括 7,000 本未出版的书籍,这些书籍来自各种类型,包括冒险、奇幻和浪漫。

BERT

使用 Transformer 架构的编码器部分,以及一种称为掩码语言建模的特殊语言建模形式。掩码语言建模的目的是预测文本中随机掩码的单词。例如,给定一个句子,如“我看了看我的 [MASK],发现[MASK]已经晚了”。该模型需要预测由 表示的掩码词的最可能候选者 [MASK]。BERT 在 BookCorpus 和英语 维基百科上进行了预训练。

GPT 和 BERT 在各种 NLP 基准测试中树立了最先进的技术水平,并开启了变形金刚时代。

然而,随着不同的研究实验室在不兼容的框架(PyTorch 或 TensorFlow)中发布他们的模型,NLP 从业者将这些模型移植到他们自己的应用程序中并不总是那么容易。随着 Transformers的发布,一个跨越 50 多个架构的统一 API 逐步构建。这个库促进了对变压器研究的爆炸式增长,并迅速渗透到 NLP 从业者身上,使得将这些模型轻松集成到当今许多现实生活中的应用程序中变得很容易。我们来看一下!

Hugging Face Transformers: Bridging the Gap

将新颖的机器学习架构应用于新任务可能是一项复杂的工作,通常涉及以下步骤:

  1. 在代码中实现模型架构,通常基于 PyTorch 或 TensorFlow。

  2. 从服务器加载预训练的权重(如果可用)。

  3. 预处理输入,将它们传递给模型,并应用一些特定于任务的后处理。

  4. 实现数据加载器并定义损失函数和优化器来训练模型。

这些步骤中的每一个都需要为每个模型和任务定制逻辑。传统上(但并非总是如此!),当研究小组发布新文章时,他们也会发布代码以及模型权重。但是,此代码很少标准化,并且通常需要数天的工程才能适应新的用例。

这就是变形金刚来拯救 NLP 实践者的地方!它为各种变压器模型以及使这些模型适应新用例的代码和工具提供了标准化接口。该库目前支持三种主要的深度学习框架(PyTorch、TensorFlow 和 JAX),并允许您在它们之间轻松切换。此外,它还提供了特定于任务的头,因此您可以轻松地在文本分类、命名实体识别和问答等下游任务上微调转换器。这将从业者训练和测试少数模型所需的时间从一周缩短到一个下午!

您将在下一节中亲自看到这一点,我们将在其中展示只需几行代码, Transformers 就可以用于处理您可能在野外遇到的一些最常见的 NLP 应用程序。

Transformer应用之旅

每个 NLP 任务都以一段文本开头,例如以下关于某个在线订单的虚构客户反馈:

text = """Dear Amazon, last week I ordered an Optimus Prime action figure
from your online store in Germany. Unfortunately, when I opened the package,
I discovered to my horror that I had been sent an action figure of Megatron
instead! As a lifelong enemy of the Decepticons, I hope you can understand my
dilemma. To resolve the issue, I demand an exchange of Megatron for the
Optimus Prime figure I ordered. Enclosed are copies of my records concerning
this purchase. I expect to hear from you soon. Sincerely, Bumblebee."""

根据您的应用程序,您正在使用的文本可能是法律合同、产品描述或其他内容。在客户反馈的情况下,您可能想知道反馈是正面的还是负面的。这项任务称为 情感分析,是我们将在 第 2 章探讨的更广泛的文本分类主题的一部分。现在,让我们看看如何使用Transformers 从我们的一段文本中提取情绪。

文本分类

正如我们将在后面的章节中看到的, Transformers 有一个分层的 API,允许您在不同的抽象级别与库进行交互。在本章中,我们将从管道开始,它抽象出将原始文本转换为来自微调模型的一组预测所需的所有步骤。

在Transformers 中,我们通过调用函数并提供我们感兴趣的任务的名称来实例化管道:pipeline()

from transformers import pipeline
classifier = pipeline("text-classification")

第一次运行此代码时,您会看到一些进度条出现,因为管道会自动从Hugging Face Hub下载模型权重。第二次实例化管道时,库会注意到您已经下载了权重,并将使用缓存的版本。默认情况下,text-classification管道使用专为情感分析而设计的模型,但它也支持多类和多标签分类。

现在我们有了管道,让我们生成一些预测!每个管道都将一个文本字符串(或一个字符串列表)作为输入,并返回一个预测列表。每个预测都是一个 Python 字典,因此我们可以使用 Pandas 将它们很好地显示为 Data⁠Frame

import pandas as pd

outputs = classifier(text)
pd.DataFrame(outputs)
labelscore
0NEGATIVE0.901546

在这种情况下,模型非常确信文本具有负面情绪,考虑到我们正在处理来自愤怒客户的投诉,这是有道理的!请注意,对于情绪分析任务,管道仅返回一个POSITIVENEGATIVE标签,因为另一个可以通过计算推断1-score

现在让我们看看另一个常见的任务,识别文本中的命名实体。

命名实体识别

预测客户反馈的情绪是很好的第一步,但您通常想知道反馈是否与特定项目或服务有关。在 NLP 中,产品、地点和人等现实世界的对象称为命名实体,从文本中提取它们称为 命名实体识别(NER)。我们可以通过加载相应的管道并将我们的客户评论反馈给它来应用 NER:

ner_tagger = pipeline("ner", aggregation_strategy="simple")
outputs = ner_tagger(text)
pd.DataFrame(outputs)
entity_groupscorewordstartend
0ORG0.879010Amazon511
1MISC0.990859Optimus Prime3649
2LOC0.999755Germany9097
3MISC0.556569Mega208212
4PER0.590256##tron212216
5ORG0.669692Decept253259
6MISC0.498350##icons259264
7MISC0.775361Megatron350358
8MISC0.987854Optimus Prime367380
9PER0.812096Bumblebee502511

您可以看到管道检测到所有实体,并且还为每个实体分配了一个类别,例如ORG(组织)、LOC(位置)或 PER(人员)。在这里,我们使用aggregation_strategy 参数根据模型的预测对单词进行分组。例如,实体“擎天柱”由两个词组成,但被分配了一个类别:(MISC 杂项)。分数告诉我们模型对其识别的实体的信心程度。我们可以看到,它对“霸天虎”和第一次出现的“威震天”最没有信心,这两者都未能归类为一个实体。

提取文本中的所有命名实体很好,但有时我们想提出更有针对性的问题。这是我们可以使用 问答的地方。

翻译

与摘要一样,翻译是一项输出由生成的文本组成的任务。让我们使用翻译管道将英文文本翻译成德文:

translator = pipeline("translation_en_to_de",
                      model="Helsinki-NLP/opus-mt-en-de")
outputs = translator(text, clean_up_tokenization_spaces=True, min_length=100)
print(outputs[0]['translation_text'])
Sehr geehrter Amazon, letzte Woche habe ich eine Optimus Prime Action Figur aus
Ihrem Online-Shop in Deutschland bestellt. Leider, als ich das Paket öffnete,
entdeckte ich zu meinem Entsetzen, dass ich stattdessen eine Action Figur von
Megatron geschickt worden war! Als lebenslanger Feind der Decepticons, Ich
hoffe, Sie können mein Dilemma verstehen. Um das Problem zu lösen, Ich fordere
einen Austausch von Megatron für die Optimus Prime Figur habe ich bestellt.
Anbei sind Kopien meiner Aufzeichnungen über diesen Kauf. Ich erwarte, bald von
Ihnen zu hören. Aufrichtig, Bumblebee.

同样,该模型产生了一个非常好的翻译,正确地使用了德语的正式代词,如“Ihrem”和“Sie”。在这里,我们还展示了如何覆盖管道中的默认模型以选择最适合您的应用程序的模型 - 您可以在 Hugging Face Hub 上找到数千种语言对的模型。在我们退后一步看看整个 Hugging Face 生态系统之前,让我们来看看最后一个应用程序。

文本生成

假设您希望能够通过访问自动完成功能来更快地回复客户反馈。使用文本生成模型,您可以执行以下操作:

generator = pipeline("text-generation")
response = "Dear Bumblebee, I am sorry to hear that your order was mixed up."
prompt = text + "\n\nCustomer service response:\n" + response
outputs = generator(prompt, max_length=200)
print(outputs[0]['generated_text'])
Dear Amazon, last week I ordered an Optimus Prime action figure from your online
store in Germany. Unfortunately, when I opened the package, I discovered to my
horror that I had been sent an action figure of Megatron instead! As a lifelong
enemy of the Decepticons, I hope you can understand my dilemma. To resolve the
issue, I demand an exchange of Megatron for the Optimus Prime figure I ordered.
Enclosed are copies of my records concerning this purchase. I expect to hear
from you soon. Sincerely, Bumblebee.

Customer service response:
Dear Bumblebee, I am sorry to hear that your order was mixed up. The order was
completely mislabeled, which is very common in our online store, but I can
appreciate it because it was my understanding from this site and our customer
service of the previous day that your order was not made correct in our mind and
that we are in a process of resolving this matter. We can assure you that your
order

好吧,也许我们不想用这个补全来让 Bumblebee 平静下来,但你明白了。

现在您已经看到了一些很酷的 Transformer 模型应用程序,您可能想知道训练在哪里进行。我们在本章中使用的所有模型都是公开可用的,并且已经针对手头的任务进行了微调。但是,一般来说,您会希望根据自己的数据微调模型,在接下来的章节中,您将学习如何做到这一点。

但训练模型只是任何 NLP 项目的一小部分——能够有效地处理数据、与同事共享结果以及使您的工作具有可重复性也是关键组成部分。幸运的是, Transformers 被一个庞大的有用工具生态系统所包围,这些工具支持大部分现代机器学习工作流程。让我们来看看。

拥抱脸生态系统

Transformers 开始的东西迅速发展成为一个由许多库和工具组成的完整生态系统,以加速您的 NLP 和机器学习项目。Hugging Face 生态系统主要由库族和 Hub 两部分组成,如图 1-9所示。库提供代码,而 Hub 提供预训练的模型权重、数据集、评估指标的脚本等。在本节中,我们将简要介绍各种组件。我们将跳过变形金刚,因为我们已经讨论过它,我们将在本书的整个过程中看到更多它。

图 1-9。Hugging Face 生态系统概述

Transformers的主要挑战

在本章中,我们已经了解了可以使用 Transformer 模型处理的范围广泛的 NLP 任务。阅读媒体头条,有时听起来他们的能力是无限的。然而,尽管它们很有用,但变形金刚远非灵丹妙药。以下是与它们相关的一些挑战,我们将在整本书中探讨:

NLP 研究以英语为主。其他语言有几种模型,但很难找到用于稀有或低资源语言的预训练模型。在 第 4 章中,我们将探讨多语言转换器及其执行零样本跨语言迁移的能力。

数据可用性

尽管我们可以使用迁移学习来显着减少模型所需的标记训练数据量,但与人类执行任务所需的量相比,它仍然很多。处理几乎没有标记数据的情况是第 9 章的主题。

处理长文档

Self-attention 在段落长的文本上效果非常好,但是当我们转向像整个文档这样的较长文本时,它变得非常昂贵。第 11 章讨论了减轻这种情况的方法。

不透明度

与其他深度学习模型一样,Transformer 在很大程度上是不透明的。很难或不可能解开模型做出某个预测的“原因”。当部署这些模型以做出关键决策时,这是一个特别艰巨的挑战。我们将在第2章和 第4章探索一些方法来探测 Transformer 模型的误差。

偏见

Transformer 模型主要基于来自互联网的文本数据进行预训练。这会将数据中存在的所有偏差都印入模型中。确保这些既不是种族主义、性别歧视或更糟的是一项具有挑战性的任务。我们将在第 10 章更详细地讨论其中一些问题。

尽管令人生畏,但其中许多挑战是可以克服的。除了提到的特定章节,我们将在接下来的几乎每一章中触及这些主题。

结论

希望现在您很高兴学习如何开始训练这些多功能模型并将其集成到您自己的应用程序中!您在本章中已经看到,只需几行代码,您就可以使用最先进的模型进行分类、命名实体识别、问答、翻译和摘要,但这实际上只是“提示冰山。”

在接下来的章节中,您将学习如何使转换器适应广泛的用例,例如构建文本分类器,或用于生产的轻量级模型,甚至从头开始训练语言模型。我们将采用动手实践的方法,这意味着对于涵盖的每个概念,都将附带您可以在 Google Colab 或您自己的 GPU 机器上运行的代码。

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

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

相关文章

Stream流总结

前言 在Java中,涉及到对数组、Collecction等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream流的方式进行处理 例子 从给定句子中返回单词长度大于5的单词列表,按长度倒序输出,最多返…

算法入门 | 分治策略

目录 分治策略 1.分治法可以解决的问题特征 2.分治法解题步骤 3.分治法编程举例 递归求阶乘 求斐波那契数列 小练习:给出一个数n,打印其每一位 分治策略 1.分治法可以解决的问题特征 (1)问题规模缩小到一定程度就可以轻易…

什么是HTML?

关于每篇博文的浪漫主义 【4k】镰仓的灰色与青 | irkyar | sonya74【【4k】镰仓的灰色与青 | irkyar | sonya74】 https://www.bilibili.com/video/BV14G411A7eX/?share_sourcecopy_web&vd_source385ba0043075be7c24c4aeb4aaa73352 网页 1.1什么是网页 网站是指在因特网…

重磅干货:多维度深入总结MySQL锁机制

一. 前言 有过面试经历的小伙伴都知道,现在面试Java开发工作,数据库几乎是你绕不过去的一道坎。就以文哥班上的学员为例,几乎每个学员的每场面试都会被问到数据库的问题。文哥很用心地给大家总结了一下,数据库基本都是从以下几个…

基于变化点 copula 优化算法中的贝叶斯研究(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑…

基础IO(下)——Linux

文章目录1. 理解文件系统1.2 背景知识1.2 inode vs 文件名1.3 软硬链接2. 动态库和静态库2.1 静态库.a2.1.1 如果想写一个库?(编写库的人的角度)2.1.2如果我把库给别人,别人怎么用呢?(使用库的人的角度&…

Nature子刊:用于阿尔茨海默病痴呆评估的多模态深度学习模型

在全球范围内,每年有近1000万新发痴呆病例,其中阿尔茨海默病(AD)最为常见。需要新的措施来改善对各种病因导致认知障碍的个体的诊断。作者报告了一个深度学习框架,该框架以连续方式完成多个诊断步骤,以识别…

随机森林可视化

今天看到别人的文章,说到了随机森林可视化,于是尝试了下。 window安装 windows版本安装: 1.在下面去下载window的exe安装包,安装graphviz。 http://www.graphviz.org/download/ 在路径选项,点击add path to computer&#xff0c…

IDEA类和方法注释模板配置

1、类的注释模板配置 File-->Settings-->Editor-->File and Code Templates-->File --->Class: 模板代码下所示: /*** ClassName: ${NAME}* Author : ${USER}* Date :${DATE} ${TIME}* Description: TODO* Version :1.0*/ 上述${NAME}为类名&…

QT Android环境搭建 及 解决“Platfrom tools installed”等系列配置问题( 附QT、JDK、SDK、NDK网盘链接 )

文章目录一、安装Android相关插件二、添加JDK、SDK、NDK路径三、搭建环境过程常见问题1. “Platfrom tools installed”失败2. 以上操作全部完成且无报错现象,Android编译就是报错3. “SDK manger is not available with the current version of SDK tools. Use nat…

计算机网络概述

既然我们无法逃避接触互联网,那么为何不去了解它并且使用它。 ——因特网“之父” 温顿.瑟夫 因特网概述 1、网络、互联网与因特网的区别与关系 多节点之间通过有线链路连接起来的有线链路简单网络 节点间也可以通过无线链路连接实现无线链路简单网络 网络与网络之…

基于51单片机有害气体浓度检测超限报警Proteus仿真

资料编号:157 下面是相关功能视频演示: 157-基于51单片机有害气体浓度检测超限报警Proteus仿真(源码仿真全套资料)功能介绍: 采用51单片机作为CPU,ADC0832作为AD转换模块,LCD1602显示当前采集的有害气体数值&#xf…

【爬虫系列】Python 爬虫入门(1)

爬虫说明 我们知道,互联网时代,大量的数据信息会以网页作为载体而存在,有些公开而免费的数据比较适合采集,并经过有效处理之后,可用于数据分析、机器学习、科学决策等方面,而从网页中采集数据的利器&#…

<学习笔记>从零开始自学Python-之-web应用框架Django( 八)Django表单

HTML 表单是交互式网站的基本组成部分,用户提交信息、搜索内容、与后台数据交互都要用到表单。 1、从请求对象中获取数据 view视图函数的第一个参数都是 request,这个request就是请求获得的HttpRequest对象。里面包含中有一些关于当前所请求 URL 的信息&#xff0c…

MySQL中SQL命令语句条件查询

一、聚合函数 聚合函数:又叫组函数,用来对表中的数据进行统计和计算,结合group by分组使用,用于统计和计算分组数据 常用聚合函数 count(col):求指定列的总行数max(col):求指定列的最大值min(col)&#…

SnowNLP使用自定义语料进行模型训练(情感分析)

SnowNLP SnowNLP是一个功能强大的中文文本处理库,它囊括了中文分词、词性标注、情感分析、文本分类、关键字/摘要提取、TF/IDF、文本相似度等诸多功能,像隐马尔科夫模型、朴素贝叶斯、TextRank等算法均在这个库中有对应的应用。如果大家仔细观察过博主的…

nodejs的下载安装

1.从官网下载nodejs 官网地址如下 Download | Node.js 选择老版本的node防止出现兼容问题 根据电脑下载64位或者32位的 2.安装node 配置环境变量,nodejs安装完成后,会默认在系统path环境变量中配置node.exe的路径,打开cmd,输入n…

Java实现DFA算法进行敏感词过滤

一、敏感词过滤数据文件 https://github.com/jkiss/sensitive-words 代码图数据文件如下: 二、敏感词实现原理基于二叉树排序 首先:query 日 ---> {本}、query 本 --->{人、鬼子}、query 人 --->{null}、query 鬼 ---> {子}。形如下结构&…

见微知著,从两道有意思的 CSS 面试题,考察你的基础

今天在论坛&#xff0c;有看到这样一道非常有意思的题目&#xff0c;简单的代码如下&#xff1a; <div><p id"a">First Paragraph</p> </div> 样式如下&#xff1a; p#a {color: green; } div::first-line {color: blue; } 试问&#xff0…

手写笔记教会你集成Spring和Mybatis框架(有详细注解)

目录 1. 为什么要将框架进行集成呢&#xff1f; 2. 框架的集成有什么好处&#xff1f; 3. Spring框架与Mybatis框架的集成 3.1 步骤一&#xff1a; 3.2 步骤二 3.3 Spring的配置文件&#xff1a; 3.4 Mybatis的配置文件&#xff1a; 4. 总结 1. 为什么要将框架进行集成…