菜单

文本续写

相关源文件

目的与范围

本文档详细介绍了 Llama 2 实现中的文本补全功能。文本补全使模型能够根据给定提示生成后续文本,从而自然地扩展输入文本。这与围绕对话交互构建的聊天补全(有关聊天补全的信息,请参阅聊天补全)有所不同。

文本补全适用于各种用例,包括创意写作辅助、内容生成、代码补全以及更通用的文本续写任务。

文本补全概述

文本补全接受一个或多个文本提示,并根据模型对语言模式的理解为每个提示生成后续内容。与聊天补全不同,它不需要对对话中不同的角色或轮次进行特殊格式化。

来源:llama/generation.py233-282 llama/generation.233-282130-231

文本补全 API

文本补全功能主要通过 Llama 类的 text_completion 方法实现。此方法提供了一个高级接口,用于根据输入提示生成文本。

方法签名

def text_completion(
    self,
    prompts: List[str],
    temperature: float = 0.6,
    top_p: float = 0.9,
    max_gen_len: Optional[int] = None,
    logprobs: bool = False,
    echo: bool = False,
) -> List[CompletionPrediction]

来源:llama/generation.233-242233-242

参数

参数类型默认描述
promptsList[str]必填要补全的文本提示列表
temperature浮点数0.6控制生成中的随机性(值越高,输出越多样)
top_p浮点数0.9核采样(nucleus sampling)的概率阈值
max_gen_lenOptional[int]None生成文本的最大长度(默认为模型最大序列长度减1)
logprobsbool是否返回词元对数概率
echobool输出中是否包含原始提示

来源:llama/generation.233-242233-242

返回值

该方法返回一个 CompletionPrediction 对象列表,它们是具有以下结构的 TypedDict 实例

字段类型始终存在描述
generationstr生成的文本补全
tokensList[str]仅当 logprobs=True 时生成文本中的各个词元
logprobsList[float]仅当 logprobs=True 时每个生成词元的对数概率

来源:llama/generation.30-3430-34 llama/generation.274-282274-282

实现细节

文本补全中的数据流

来源:llama/generation.py233-282 llama/generation.233-282130-231

生成核心

实际的文本生成由 generate 方法执行,该方法是文本补全和聊天补全背后的核心。此方法:

  1. 接受词元化的提示作为输入
  2. 使用 Transformer 模型迭代生成词元
  3. 应用 temperature 和 top-p 采样来控制生成
  4. 跟踪生成直到达到 EOS 词元或最大长度
  5. 返回生成的词元序列

来源:llama/generation.130-231130-231

词元采样过程

来源:llama/generation.187-192187-192 llama/generation.398-421398-421

使用示例

该代码库包含一个演示如何使用文本补全的示例脚本

来源:example_text_completion.32-6532-65

代码结构和关键组件

来源:llama/generation.51-12451-124 llama/generation.30-3430-34

参数的影响

温度

Temperature 控制词元选择的随机性。值越低,输出越确定;值越高,引入的变异性越大。

  • temperature=0.0:确定性输出(总是选择最有可能的词元)
  • temperature=0.6:默认设置,在确定性和创造性之间取得平衡
  • temperature=1.0+:更随机,可能更具创造性但连贯性较差的输出

来源:llama/generation.188-192188-192

Top-P(核采样)

Top-P 采样从累积概率超过阈值 p 的最小词元集合中进行选择

  1. 按概率降序排列词元
  2. 计算概率的累积和
  3. 只保留累积和减去当前概率 ≤ p 的词元
  4. 对剩余词元的概率进行重新归一化
  5. 从此缩小后的分布中进行采样

此方法有助于控制输出的多样性,同时避免低概率词元。

来源:llama/generation.398-421398-421

技术限制

  • 文本补全不具备聊天补全的上下文管理功能
  • 最大序列长度受限于模型的配置
  • 没有针对系统指令或基于角色的提示的特殊处理
  • 不具备聊天补全中内置的安全机制

来源:llama/generation.233-282233-282