评估生成式模型的方法pass@k

(1)EM

EM(Exact Match)是指生成的代码与真实代码具有相同的token序列的百分比。

(2)BLUE

机器翻译结果越接近专业人工翻译的结果,则越好。BLEU实际上就是在判断两个句子的相似程度,相似度越高得分越高。

(3)CodeBLEU

CodeBLEU是 BLEU变体。在BLEU在n-gram匹配上的基础上,进一步通过抽象语法树(AST)融入代码语法,通过数据流融入代码语义。

(4)pass@k

Kulal 等人[SPoC: Search-based Pseudocode to Code],2019 年提出pass@k指标评估功能正确性,其中每个问题生成 k 个代码样本,如果任何样本通过单元测试,则认为问题已解决报告总分数。
但是一次实验随机性太大,需要多次实验求平均值。 pass@k需要对每一个测试问题重复实验 t 次,并且每次都生成 k 个代码,最后计算平均通过率。假如重复实验 100 次来估计 pass@100,就需要生成 100*100=10000 个代码,这样的计算量是难以接受的。而 t 越小,估计的 pass@k 就越不准(方差越大)。

Mark Chen等人[Evaluating Large Language Models Trained on Code],2021年改进pass@k指标:
p a s s @ k : = E P r o b l e m s [ 1 − ( n − c k ) ( n k ) ] pass@k:=E_{Problems}\left [ 1-\frac{\binom{n-c}{k} }{\binom{n}{k} } \right ] pass@k:=EProblems[1(kn)(knc)]
让模型为每个问题生成 n(n>k)份代码,再从中随机选择 k 份代码,k 份代码中至少有一份代码通过单元测试即通过测试,c 代表能通过单元测试的总数。

### 关于序列最小优化算法(SMO)的实现方法及相关资料 #### SMO算法简介 序列最小优化(Sequential Minimal Optimization, SMO)是一种用于训练支持向量机(Support Vector Machine, SVM)的有效算法。它通过分解原始二次规划问题为一系列更小的子问题来简化求解过程,从而显著降低计算复杂度并提高效率。 #### SMO算法的核心思想 SMO算法的主要目标是最小化SVM的目标函数,而无需一次性解决整个优化问题。具体而言,SMO每次仅选择一对拉格朗日乘子进行更新,其余变量保持固定。这种方法不仅降低了内存需求,还使得算法更容易收敛[^2]。 #### SMO算法的具体实现步骤 尽管不能使用诸如“首先”、“然后”之类的词汇描述顺序,以下是SMO算法的关键组成部分: 1. **初始化参数** 定义核函数类型及其超参数,设置容忍误差阈值以及惩罚因子C。这些初始条件对于后续迭代至关重要。 2. **外层循环逻辑** 外层循环负责遍历所有样本点,挑选违反KKT条件最严重的样本来作为当前待调整的一对中的第一个变量α₁。 3. **内层循环逻辑** 给定α₁之后,依据启发式规则选取第二个变量α₂。常见的策略包括最大化步长变化或者优先考虑边界上的支持向量。 4. **计算最优方向与范围** 基于选定的两个变量,利用解析法推导出它们沿约束面移动的方向和允许变动区间。 5. **更新模型参数** 当新旧α值确定后,相应地修改b偏置项,并重新评估E_i误差缓存表以反映最新状态改变。 下面是一个简单的Python代码示例展示如何手动构建基本版SMO算法框架: ```python import numpy as np class SimpleSMO: def __init__(self, C=1.0, tol=0.001, max_passes=10): self.C = C self.tol = tol self.max_passes = max_passes def fit(self, X, y): m, n = X.shape alpha = np.zeros(m) b = 0 passes = 0 while passes < self.max_passes: num_changed_alphas = 0 for i in range(m): Ei = self._calc_E(X[i], y[i], X, y, alpha, b) if ((y[i]*Ei < -self.tol and alpha[i] < self.C) or (y[i]*Ei > self.tol and alpha[i] > 0)): j = self._select_j(i, m) Ej = self._calc_E(X[j], y[j], X, y, alpha, b) old_alpha_i = alpha[i].copy() old_alpha_j = alpha[j].copy() L, H = self._compute_LH(y[i], y[j], alpha[i], alpha[j]) if L == H: continue eta = self._calc_eta(X[i], X[j]) if eta >= 0: continue alpha[j] -= y[j]*(Ei-Ej)/eta alpha[j] = self._clip_alpha(alpha[j], L, H) if abs(alpha[j]-old_alpha_j)<1e-5: continue alpha[i] += y[i]*y[j]*(old_alpha_j-alpha[j]) b1_new = self._update_b(Ei, X[i], y[i], alpha[i], alpha[j], old_alpha_i, old_alpha_j, b) b2_new = self._update_b(Ej, X[j], y[j], alpha[i], alpha[j], old_alpha_i, old_alpha_j, b) if 0<alpha[i]<self.C: b = b1_new elif 0<alpha[j]<self.C: b = b2_new else: b = (b1_new+b2_new)/2 num_changed_alphas += 1 if num_changed_alphas == 0: passes += 1 else: passes = 0 self.alpha = alpha self.b = b def predict(self, X_test): pass @staticmethod def _calc_E(xi, yi, X, Y, alphas, b): f_xi = sum([alphas[k]*Y[k]*np.dot(X[k], xi.T)+b for k in range(len(alphas))]) return f_xi-yi @staticmethod def _select_j(i, m): j = i while(j==i): j=int(np.random.uniform(0,m)) return j @staticmethod def _compute_LH(yi, yj, alphai, alphaj): if yi != yj: L=max(0, alphaj-alphai) H=min(self.C, self.C+alphaj-alphai) else: L=max(0, alphai+alphaj-self.C) H=min(self.C, alphai+alphaj) return L,H @staticmethod def _calc_eta(xi,xj): Kii=np.dot(xi,xi.T) Kjj=np.dot(xj,xj.T) Kij=np.dot(xi,xj.T) return Kii + Kjj - 2*Kij @staticmethod def _clip_alpha(a,L,H): if a>H:return H elif a<L:return L else:return a @staticmethod def _update_b(error,X,y,alpha_i,alpha_j,old_alpha_i,old_alpha_j,b): s=y*(alpha-old_alpha) delta_b=-error-s*np.dot(X,X.T)-s_old*np.dot(X,X.T) return b-delta_b ``` 此脚本仅为示意用途,实际应用可能还需要进一步完善功能模块如预测部分等。 #### SMOS数据处理背景补充说明 虽然上述讨论集中在机器学习领域内的SMO技术上,但提到的SMOS实际上是指一种遥感卫星项目名称——Soil Moisture Ocean Salinity mission(土壤湿度与海洋盐度任务)。该项目主要致力于全球范围内监测陆地表面土壤含水量及近海区域海水浓度分布情况。其生成的数据集广泛应用于气象预报、农业管理等多个学科研究之中[^3][^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值