本文档详细介绍了 Llama 2 实现中的文本补全功能。文本补全使模型能够根据给定提示生成后续文本,从而自然地扩展输入文本。这与围绕对话交互构建的聊天补全(有关聊天补全的信息,请参阅聊天补全)有所不同。
文本补全适用于各种用例,包括创意写作辅助、内容生成、代码补全以及更通用的文本续写任务。
文本补全接受一个或多个文本提示,并根据模型对语言模式的理解为每个提示生成后续内容。与聊天补全不同,它不需要对对话中不同的角色或轮次进行特殊格式化。
来源:llama/generation.py233-282 llama/generation.233-282130-231
文本补全功能主要通过 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
| 参数 | 类型 | 默认 | 描述 |
|---|---|---|---|
prompts | List[str] | 必填 | 要补全的文本提示列表 |
temperature | 浮点数 | 0.6 | 控制生成中的随机性(值越高,输出越多样) |
top_p | 浮点数 | 0.9 | 核采样(nucleus sampling)的概率阈值 |
max_gen_len | Optional[int] | None | 生成文本的最大长度(默认为模型最大序列长度减1) |
logprobs | bool | 否 | 是否返回词元对数概率 |
echo | bool | 否 | 输出中是否包含原始提示 |
来源:llama/generation.233-242233-242
该方法返回一个 CompletionPrediction 对象列表,它们是具有以下结构的 TypedDict 实例
| 字段 | 类型 | 始终存在 | 描述 |
|---|---|---|---|
generation | str | 是 | 生成的文本补全 |
tokens | List[str] | 仅当 logprobs=True 时 | 生成文本中的各个词元 |
logprobs | List[float] | 仅当 logprobs=True 时 | 每个生成词元的对数概率 |
来源:llama/generation.30-3430-34 llama/generation.274-282274-282
来源:llama/generation.py233-282 llama/generation.233-282130-231
实际的文本生成由 generate 方法执行,该方法是文本补全和聊天补全背后的核心。此方法:
来源: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 采样从累积概率超过阈值 p 的最小词元集合中进行选择
此方法有助于控制输出的多样性,同时避免低概率词元。
来源:llama/generation.398-421398-421