是否可以调整huggingface管道中的一些参数以避免输出中出现重复的文本?

问题描述 投票:0回答:1

我是huggingface的新手,对管道中“文本生成”的机制感到困惑,举个简单的例子,

from transformers import pipeline, set_seed
generator = pipeline('text-generation', model="facebook/opt-125m")
print(generator("what is machine learning?",max_length=512))

当输出返回时,

[{' generated_text': '什么是机器学习? 人:机器 学习是一种能够学习的人工智能 从数据来看。这是一种思考世界的方式,其基础是 世界是信息的集合,并且 信息可用于做出决策。 ......这是一个非常普遍的思维方式 关于世界,这是一种思考世界的方式 基于世界是信息集合的理念,并且 该信息可用于做出决策。这是一个非常 思考世界的一般方式,它是一种思维方式 世界是一个基于世界是一个观念的世界 收集信息,并且该信息可用于制作 决定。这是一种非常普遍的思考世界的方式, 这是一种基于这个想法的思考世界的方式 世界是信息的集合,而信息 可以用来做出决定。这是一种非常普遍的思维方式'}]

此外,如果我将 max_length 设置为较小的值,则无法显示完整的句子。是否可以在结果中显示一个或多个不重复的完整句子?或者说这就是这类模型的特点。(但是为什么openAI模型能停在一个好的位置呢?)

python deep-learning huggingface-transformers
1个回答
0
投票

您使用的模型是

OPT : Open Pre-trained Transformer Language Models
这里的“预训练”一词是导致您出现这种行为的一个重要因素。

简单地说(如果您对此感兴趣,我建议您更多地研究这些主题),对于这些聊天机器人类型的模型,它们通常会先经过预训练,然后进行一轮微调。预训练是这些模型学习哪些单词在其他单词之后“适合”的阶段。例如,如果模型看到“hello”这个词,它可能会生成“world”,但通常这种预训练并不能让他们清楚地了解想法是如何实际传达的。另一方面,微调是采用一个预先训练的模型,该模型非常了解单词彼此相邻的发音,然后教它们如何回答问题(使彼此相邻听起来不错的单词实际上形成连贯的单词)。想法)。

像 ChatGPT 这样的模型像您正在使用的模型一样经过预训练,但随后经过非常非常严格的微调,它们学习如何最好地回答用户的问题,并且它们还学会在不需要时停止重复短语。

据说可以解决您的问题,我可以推荐两件事:

  1. 使用微调模型(很可能会更大,因为现在 125m 的参数相当小)。
  2. huggingface 转换器库的 Configuration 方面有一个
    repetition_penalty
    术语,您可以使用它来尝试避免重复。

我会推荐第一个选项,因为您使用的模型是去年的,并且开源模型自那以后已经变得更好,但第二个选项有其自身的优点!

© www.soinside.com 2019 - 2024. All rights reserved.