NLP 课程文档

在论坛上寻求帮助

Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验

开始使用

在论坛上寻求帮助

Ask a Question Open In Colab Open In Studio Lab

Hugging Face 论坛是获得来自开源团队和更广泛的 Hugging Face 社区帮助的绝佳场所。以下是在任何给定日期论坛主页的外观

The Hugging Face forums.

在左侧,您可以看到所有各种主题分组的类别,而在右侧则显示了最新的主题。主题是一个包含标题、类别和描述的帖子;它与我们在 第 5 章 中创建自己的数据集时看到的 GitHub 问题格式非常相似。顾名思义,“初学者”类别主要面向刚开始使用 Hugging Face 库和生态系统的人员。任何关于任何库的问题都可以在那里提出,无论是调试某些代码还是请求有关如何执行某些操作的帮助。(也就是说,如果您的问题特别涉及某个库,您可能应该转到论坛上相应的库类别。)

同样,“中级”和“研究”类别用于更高级的问题,例如关于库或您想讨论的一些很酷的新 NLP 研究。

当然,我们还应该提到“课程”类别,您可以在其中提出与 Hugging Face 课程相关的任何问题!

选择类别后,您就可以准备编写您的第一个主题了。您可以在论坛中找到一些有关如何执行此操作的 指南,在本节中,我们将了解构成良好主题的一些功能。

编写一篇好的论坛帖子

作为一个运行示例,假设我们正在尝试从维基百科文章生成嵌入以创建自定义搜索引擎。像往常一样,我们加载分词器和模型,如下所示

from transformers import AutoTokenizer, AutoModel

model_checkpoint = "distilbert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
model = AutoModel.from_pretrained(model_checkpoint)

现在假设我们尝试嵌入 维基百科文章中关于变形金刚(特许经营权,而不是库!)的一整个部分

text = """
Generation One is a retroactive term for the Transformers characters that
appeared between 1984 and 1993. The Transformers began with the 1980s Japanese
toy lines Micro Change and Diaclone. They presented robots able to transform
into everyday vehicles, electronic items or weapons. Hasbro bought the Micro
Change and Diaclone toys, and partnered with Takara. Marvel Comics was hired by
Hasbro to create the backstory; editor-in-chief Jim Shooter wrote an overall
story, and gave the task of creating the characthers to writer Dennis O'Neil.
Unhappy with O'Neil's work (although O'Neil created the name "Optimus Prime"),
Shooter chose Bob Budiansky to create the characters.

The Transformers mecha were largely designed by Shōji Kawamori, the creator of
the Japanese mecha anime franchise Macross (which was adapted into the Robotech
franchise in North America). Kawamori came up with the idea of transforming
mechs while working on the Diaclone and Macross franchises in the early 1980s
(such as the VF-1 Valkyrie in Macross and Robotech), with his Diaclone mechs
later providing the basis for Transformers.

The primary concept of Generation One is that the heroic Optimus Prime, the
villainous Megatron, and their finest soldiers crash land on pre-historic Earth
in the Ark and the Nemesis before awakening in 1985, Cybertron hurtling through
the Neutral zone as an effect of the war. The Marvel comic was originally part
of the main Marvel Universe, with appearances from Spider-Man and Nick Fury,
plus some cameos, as well as a visit to the Savage Land.

The Transformers TV series began around the same time. Produced by Sunbow
Productions and Marvel Productions, later Hasbro Productions, from the start it
contradicted Budiansky's backstories. The TV series shows the Autobots looking
for new energy sources, and crash landing as the Decepticons attack. Marvel
interpreted the Autobots as destroying a rogue asteroid approaching Cybertron.
Shockwave is loyal to Megatron in the TV series, keeping Cybertron in a
stalemate during his absence, but in the comic book he attempts to take command
of the Decepticons. The TV series would also differ wildly from the origins
Budiansky had created for the Dinobots, the Decepticon turned Autobot Jetfire
(known as Skyfire on TV), the Constructicons (who combine to form
Devastator),[19][20] and Omega Supreme. The Marvel comic establishes early on
that Prime wields the Creation Matrix, which gives life to machines. In the
second season, the two-part episode The Key to Vector Sigma introduced the
ancient Vector Sigma computer, which served the same original purpose as the
Creation Matrix (giving life to Transformers), and its guardian Alpha Trion.
"""

inputs = tokenizer(text, return_tensors="pt")
logits = model(**inputs).logits
IndexError: index out of range in self

糟糕,我们遇到问题了——并且错误消息比我们在 第 2 节 中看到的错误消息更加神秘!我们无法理解完整的回溯,因此我们决定转向 Hugging Face 论坛寻求帮助。我们该如何撰写主题?

首先,我们需要点击右上角的“新建主题”按钮(请注意,要创建主题,我们需要登录)

Creating a new forum topic.

这将弹出一个写作界面,我们可以在其中输入主题的标题,选择类别并起草内容

The interface for creating a forum topic.

由于错误似乎仅与 🤗 Transformers 相关,因此我们将为此选择类别。我们第一次尝试解释问题可能如下所示

Drafting the content for a new forum topic.

尽管此主题包含我们需要帮助的错误消息,但其编写方式存在一些问题

  1. 标题描述性不强,因此任何浏览论坛的人员都无法在不阅读正文的情况下了解主题内容。
  2. 正文没有提供足够的信息来解释错误来自哪里以及如何重现它。
  3. 主题直接标记了一些人,语气有点强硬。

类似这样的主题不太可能很快得到答复(如果得到答复的话),所以让我们看看如何改进它。我们将从第一个问题开始,即选择一个好的标题。

选择描述性标题

如果您尝试在代码中获取错误的帮助,一个好的经验法则是标题中包含足够的信息,以便其他人可以快速确定他们是否认为可以回答您的问题。在我们的运行示例中,我们知道引发异常的名称,并有一些提示表明它是在模型的前向传递中触发的,我们在其中调用 model(**inputs)。为了传达这一点,一个可能的标题可能是

AutoModel 前向传递中的 IndexError 的来源?

此标题告诉读者您认为错误来自哪里,如果他们之前遇到过 IndexError,那么他们很有可能知道如何调试它。当然,标题可以是您想要的任何内容,并且其他变体,例如

为什么我的模型会产生 IndexError?

也可以。现在我们有了描述性标题,让我们看看如何改进正文。

格式化代码片段

在 IDE 中阅读源代码已经够难的了,但当代码被复制粘贴为纯文本时,它会变得更加困难!幸运的是,Hugging Face 论坛支持使用 Markdown,因此您应该始终用三个反引号 (```) 将代码块括起来,以便更容易阅读。让我们这样做来美化错误消息——当我们这样做时,让我们使正文比原始版本更礼貌一些

Our revised forum topic, with proper code formatting.

正如你在截图中看到的,将代码块用反引号括起来会将原始文本转换为格式化的代码,并带有颜色样式!还要注意,可以使用单个反引号来格式化内联变量,就像我们对distilbert-base-uncased所做的那样。这个主题看起来好多了,如果运气好的话,我们可能会在社区中找到一些人能够猜出错误的原因。但是,与其依赖运气,不如让我们通过包含完整的跟踪信息来简化问题!

包含完整的跟踪信息

由于跟踪信息的最后一行通常足以调试你自己的代码,因此你可能会倾向于只在主题中提供该行以“节省空间”。虽然出发点是好的,但这实际上会使其他人更难调试问题,因为跟踪信息中较上层的信息也可能非常有用。因此,一个好的做法是复制粘贴整个跟踪信息,同时确保其格式良好。由于这些跟踪信息可能非常长,因此有些人更喜欢在解释源代码后才显示它们。让我们这样做。现在,我们的论坛主题如下所示

Our example forum topic, with the complete traceback.

这更有信息量,仔细阅读的人可能会指出,问题似乎是由于传递了过长的输入造成的,这是因为跟踪信息中的这一行

Token indices sequence length is longer than the specified maximum sequence length for this model (583 > 512).

但是,我们可以通过提供触发错误的实际代码来进一步简化问题。让我们现在就这样做。

提供可复现的示例

如果你曾经尝试过调试别人的代码,你可能首先尝试过重现他们报告的问题,以便你可以开始逐步检查跟踪信息以查明错误。在论坛上寻求(或提供)帮助时也是如此,因此如果你能提供一个可以重现错误的小示例,这将非常有帮助。一半情况下,仅仅完成这个练习就能帮助你找出问题所在。无论如何,我们示例中缺少的部分是展示我们提供给模型的输入。这样做会得到如下所示的完整示例

The final version of our forum topic.

这个主题现在包含了相当多的信息,并且以一种更有可能吸引社区关注并获得有用答案的方式编写。有了这些基本指南,你现在可以创建很棒的主题来找到你的 🤗 Transformers 问题的答案!