Python实现基于字符串Token长度的加权随机整数生成
基于Token数量的加权随机整数生成方案
核心逻辑
要生成0-7之间的整数,需让4和5的概率最高,其余数值的概率向两端(0、7方向)依次递减,且整体权重分布要和当前字符串的Token数量(len(tokens))与最大Token数(max_len_token=64)的比例挂钩:Token数量越接近最大值,4和5的概率优势越明显,其余数值的概率越低。
权重设计思路
- 先构建基础对称权重模板:以4、5为峰值,向两侧对称降低,比如初始基准权重为
[0.05, 0.1, 0.15, 0.2, 0.25, 0.2, 0.15, 0.05](对应0-7),确保4和5的权重天然最高。 - 计算Token占比:
ratio = len(tokens) / max_len_token,取值范围0到1。 - 动态调整权重:根据
ratio放大4和5的权重,ratio越大,放大倍数越高;同时按比例压缩其余数值的权重,最后归一化所有权重,保证总和为1。
代码实现
import random def weighted_random_int(tokens_len, max_len_token=64): # 基础权重模板:对应0-7的初始概率分布,4和5权重最高 base_weights = [0.05, 0.1, 0.15, 0.2, 0.25, 0.2, 0.15, 0.05] # 计算当前Token数占最大Token数的比例 ratio = tokens_len / max_len_token # 峰值权重放大倍数:ratio越大,4和5的权重提升越明显 peak_multiplier = 1 + ratio * 2 # 倍数范围1-3,可按需调整 adjusted_weights = base_weights.copy() adjusted_weights[4] *= peak_multiplier adjusted_weights[5] *= peak_multiplier # 归一化权重,确保权重总和为1 total_weight = sum(adjusted_weights) normalized_weights = [w / total_weight for w in adjusted_weights] # 生成目标随机整数 return random.choices([0,1,2,3,4,5,6,7], weights=normalized_weights, k=1)[0] # 示例:当Token数为46时的调用 print(weighted_random_int(46))
效果说明
- 当
tokens_len=46时,ratio≈0.71875,peak_multiplier≈2.4375,调整后4和5的权重会显著高于其他数值,其余数值的概率按比例降低。 - 若Token数接近64(ratio接近1),4和5的概率会进一步提升,几乎成为主要输出;若Token数很少(ratio接近0),权重会接近基础模板,4和5仍保持最高概率但优势减弱。
内容的提问来源于stack exchange,提问作者jupyter
相关产品推荐
相关产品推荐

