在论坛上寻求帮助
Hugging Face 论坛是一个从开源团队和更广泛的 Hugging Face 社区获取帮助的好地方。以下是任何一天论坛主页的样子
在左侧,您可以看到所有各种主题分组的类别,而在右侧显示了最新的主题。主题是一个包含标题、类别和描述的帖子;它与我们在 第 5 章 中创建自己的数据集时看到的 GitHub Issues 格式非常相似。顾名思义,初学者 类别主要面向刚开始使用 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 论坛寻求帮助。我们该如何撰写主题呢?
首先,我们需要点击右上角的“新建主题”按钮(请注意,要创建主题,我们需要登录)
这将弹出一个写作界面,我们可以在其中输入主题的标题,选择类别并起草内容
由于错误似乎完全与 🤗 Transformers 相关,因此我们将为此选择类别。我们第一次尝试解释问题可能看起来像这样
尽管此主题包含我们需要帮助的错误消息,但其撰写方式存在一些问题
- 标题不够描述性,因此任何浏览论坛的人员都无法在不阅读正文的情况下了解主题内容。
- 正文没有提供足够的信息来解释错误的来源以及如何重现它。
- 主题直接标记了一些人,语气略显强硬。
类似这样的主题不太可能很快得到答复(如果能得到答复的话),因此让我们看看如何改进它。我们将从第一个问题——选择合适的标题开始。
选择描述性标题
如果您尝试在代码中获取错误的帮助,一个好的经验法则是包含足够的信息在标题中,以便其他人可以快速确定他们是否认为可以回答您的问题。在我们的运行示例中,我们知道引发异常的名称,并且有一些提示表明它是在模型的前向传递中触发的,我们在其中调用 model(**inputs)
。为了传达这一点,一个可能的标题可能是
AutoModel 前向传递中 IndexError 的来源?
此标题告诉读者您认为错误来自哪里,如果他们之前遇到过 IndexError
,那么他们很可能会知道如何调试它。当然,标题可以是您想要的任何内容,其他变体,如
为什么我的模型会产生 IndexError?
也可以。现在我们有了描述性标题,让我们看看如何改进正文。
格式化代码片段
在 IDE 中阅读源代码已经够难了,但当代码被复制粘贴为纯文本时,它变得更难了!幸运的是,Hugging Face 论坛支持使用 Markdown,因此您应该始终用三个反引号 (```) 将代码块括起来,以便更容易阅读。让我们这样做来美化错误消息——同时,让我们使正文比原始版本更礼貌一些
如您在屏幕截图中看到的,将代码块括在反引号中会将原始文本转换为格式化的代码,并带有颜色样式!另请注意,可以使用单个反引号来格式化内联变量,就像我们对 distilbert-base-uncased
所做的那样。这个主题看起来好多了,并且如果运气好的话,我们可能会在社区中找到某人可以猜出错误的原因。但是,与其依赖运气,不如让我们通过包含完整的回溯信息来简化工作!
包含完整回溯信息
由于回溯信息的最后一行通常足以调试您自己的代码,因此您可能很想只在主题中提供最后一行以“节省空间”。虽然出发点是好的,但这实际上会使其他人更难调试问题,因为回溯信息中较高的部分也可能非常有用。因此,一个好的做法是复制粘贴整个回溯信息,并确保其格式良好。由于这些回溯信息可能相当长,因此有些人更喜欢在解释源代码后才显示它们。让我们这样做。现在,我们的论坛主题如下所示
这更有信息量,细心的读者可能会指出,由于回溯信息中的这一行,问题似乎是由于传递了较长的输入造成的
标记索引序列长度超过此模型指定的最大序列长度 (583 > 512)。
但是,我们可以通过提供触发错误的实际代码来使事情变得更容易。让我们现在就做到这一点。
提供可复现的示例
如果您曾经尝试过调试其他人的代码,您可能首先尝试重现他们报告的问题,以便您可以开始逐步遍历回溯信息以查明错误。在论坛上寻求(或提供)帮助时也是如此,因此,如果您能提供一个可以重现错误的小示例,将会非常有帮助。有一半时间,仅仅完成此练习就能帮助您找出问题所在。无论如何,我们示例中缺少的部分是显示我们提供给模型的输入。这样做会得到类似于以下完成的示例
此主题现在包含大量信息,并且以更有可能引起社区关注并获得有益答案的方式编写。通过这些基本指南,您现在可以创建出色的主题,以找到您 🤗 Transformers 问题的答案!