claude 补全 API 没有 logprobs

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

我正在将我的应用程序从 OpenAI API 迁移到 Claude API。我非常依赖的一个功能是

logprobs
参数,它返回生成文本中每个位置的标记概率和顶级标记。然而,Claude 并不直接提供此功能。 有了 OpenAI,我可以做到:

from openai import OpenAI
client = OpenAI()

completion = client.chat.completions.create(
  model="gpt-4o",
  messages=[
    {"role": "user", "content": "Hello!"}
  ],
  logprobs=True,
  top_logprobs=2
)

这里有解决方法吗?

claude
1个回答
0
投票

我认为 API 中没有办法提取它。它们允许您使用 softmax 温度控制采样方式,但不直接暴露概率。我只采用经验抽样,当然效率不高,但有效

def estimate_probabilities(prompt, n_samples=100):
    responses = []
    
    for _ in range(n_samples):
        response = anthropic. completions.create(
            model="<your model of choice here>",
            prompt=prompt,
            temperature=1.0,
            max_tokens_to_sample=1024
        )
        responses.append(response.content)
        time.sleep(0.1)
    
    unique_responses = set(responses)
    probabilities = {
        response: responses.count(response) / n_samples 
        for response in unique_responses
    }
    
    return dict(sorted(probabilities.items(), key=lambda x: x[1], reverse=True)

如果您需要像 OpenAI 一样在完成中级联许多令牌,您将需要相应地扩展我的代码

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