【问题标题】:Open AI generate longer text with GPT-3Open AI 使用 GPT-3 生成更长的文本
【发布时间】:2023-01-27 06:12:46
【问题描述】:

我正在使用 OPENAI 的 GPT-3 API,但我很难找到一种方法来制作足够长的生成文本。

这是我的一段代码:

import os
import openai

# export OPENAI_API_KEY='get_key_from_openai'

openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.Completion.create(
  model="text-davinci-002",
  prompt="How to choose a student loan",
  temperature=0.6,
  max_tokens=512,
  top_p=1,
  frequency_penalty=1,
  presence_penalty=1,
  n= 10
)

print(response['choices'][0]['text'])

我有一个示例输出是

“选择学生贷款时需要考虑几件事,包括利率、还款方式,以及贷款是联邦贷款还是私人贷款。你还应该比较贷款,看看哪种贷款花费最少长跑”

但是,大约有 50 个单词不应接近 80-100 个标记。我还认为 n 参数应该运行 n 连续生成的文本?

有人可以解释如何使生成的文本更长(最好是 ~1000 个标记)吗?一些 huggingface 模型有一个 min_tokens 参数,但我在那里找不到它。

非常感谢

【问题讨论】:

    标签: python openai gpt-3


    【解决方案1】:

    来自 openAI 文档

    注意:目前没有办法设置令牌的最小数量。

    来源:https://help.openai.com/en/articles/5072518-controlling-the-length-of-completions

    我发现的一种方法是创建一个 while 循环,直到生成的文本足够长......

    假设我想要 1000 个字符,那么我的循环将是

    full_text = "How to choose a student loan ?"
    
    while len(full_text) < 1000 :
      response = openai.Completion.create(
        model="text-ada-001",
        prompt=full_text,
        temperature=0.6,
        max_tokens=300,
        top_p=1,
        frequency_penalty=1,
        presence_penalty=1,
      )
    
      full_text = full_text + response['choices'][0]['text']
    
    print(full_text)
    

    无需添加 ' ' 在文本之间,因为 api 已经在响应中方便地添加了它们。

    【讨论】:

      【解决方案2】:

      OpenAI API 中的 max_tokens 参数控制模型将在其响应中生成的最大令牌数。增加此值将导致生成更长的文本。但是,值得注意的是,最终生成的文本长度可能会略小于指定的 max_tokens 值,具体取决于模型的行为。

      关于 n 参数,它控制 API 响应中返回的生成完成数。所以如果你设置 n=10,你会得到 10 个不同的补全,但是文本长度仍然会被 max_tokens 参数控制。

      您可以尝试将 max_tokens 参数增加到更高的值,例如 1000,以获得更长的生成文本。但是,请记住,max_tokens 值越大,模型需要的计算资源就越多,这可能会导致生成时间更长和成本更高。

      您可以尝试的另一件事是调整温度参数,该参数控制模型的创造力水平,较高的温度会增加生成文本的随机性,从而导致文本可能更长。

      此外,您可以调整 top_p 参数,该参数控制用于选择下一个标记的分布质量的比例,较高的值将使模型不那么保守,并且更有可能生成多样化的补全集。

      最后,您可以尝试调整 frequency_penalty 和 presence_penalty 参数,它们控制模型因生成非常常见或非常罕见的标记而受到的惩罚程度。降低这些值可以使模型更有可能生成不太常见的词,这可能会导致文本变长。

      【讨论】:

        猜你喜欢
        • 2022-12-07
        • 2020-06-03
        • 2020-11-28
        • 2021-01-02
        • 1970-01-01
        • 2021-08-14
        • 1970-01-01
        • 2021-06-05
        • 2023-02-09
        相关资源
        最近更新 更多