news 2026/4/23 21:31:17

用Python视角拆解Google AMIE首次真实世界临床验证(下)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用Python视角拆解Google AMIE首次真实世界临床验证(下)

附录一、完整 Python 示例代码

下面这版代码适合做:

  • 多个方法 / 模型的批量评估
  • 生成逐样本结果表
  • 汇总平均指标、置信区间
  • 做配对显著性检验
  • 导出适合 notebook 和论文表格使用的数据

默认按分类/打分/二元判断类任务来写;如果你原本是生成式任务,也可以把metric_fn换成 ROUGE、BLEU、EM、F1、人工评分等。

from__future__importannotationsimportjsonimportmathfromdataclassesimportdataclass,asdictfrompathlibimportPathfromtypingimportCallable,Dict,List,Any,Optional,Tupleimportnumpyasnpimportpandasaspdfromscipyimportstats# =========================# 1. 数据结构# =========================@dataclassclassExample:sample_id:strinput_text:strgold:Any meta:Optional[Dict[str,Any]]=None@dataclassclassPrediction:sample_id:strmodel_name:strpred:Any score:Optional[float]=Nonelatency_ms:Optional[float]=Nonetokens_in:Optional[int]=Nonetokens_out:Optional[int]=Noneraw_output:Optional[str]=None# =========================# 2. 指标函数# =========================defbinary_accuracy(gold:Any,pred:Any)->float:returnfloat(gold==pred)defexact_match(gold:str,pred:str)->float:ifgoldisNoneorpredisNone:return0.0returnfloat(str(gold).strip()==str(pred).strip())defmacro_f1_from_frame(df:pd.DataFrame,gold_col:str="gold",pred_col:str="pred")->float:""" 基于整表计算 macro-F1。 适合多分类整体汇总,不适合逐样本。 """labels=sorted(set(df[gold_col].dropna().unique())|set(df[pred_col].dropna().unique()))f1s=[]forlabelinlabels:tp=((df[gold_col]==label)&(df[pred_col]==label)).sum()fp=((df[gold_col]!=label)&(df[pred_col]==label)).sum()fn=((df[gold_col]==label)&(df[pred_col]!=label)).sum()precision=tp/(tp+fp)if(tp+fp)>0else0.0recall=tp/(tp+fn)if(tp+fn)>0else0.0f1=2*precision*recall/(precision+recall)if(precision+recall)>0else0.0f1s.append(f1)returnfloat(np.mean(f1s))iff1selse0.0# =========================# 3. 评估主流程# =========================defevaluate_predictions(examples:List[Example],predictions:List[Prediction],metric_fn:Callable[[Any,Any],float],)->pd.DataFrame:""" 返回逐样本评估表: [sample_id, model_name, gold, pred, metric, latency_ms, ...] """ex_map={ex.sample_id:exforexinexamples}rows=[]forpinpredictions:ifp.sample_idnotinex_map:continueex=ex_map[p.sample_id]metric_value=metric_fn(ex.gold,p.pred)row={"sample_id":p.sample_id,"model_name":p.model_name,"input_text":ex.input_text,"gold":ex.gold,"pred":p.pred,"metric":metric_value,"latency_ms":p.latency_ms,"tokens_in":p.tokens_in,"tokens_out":p.tokens_out,"score":p.score,}ifex.meta:fork,vinex.meta.items():row[f"meta.{k}"]=v rows.append(row)returnpd.DataFrame(rows)# =========================# 4. Bootstrap 置信区间# =========================defbootstrap_ci(values:np.ndarray,n_bootstrap:int=5000,ci:float=
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 21:30:19

27-Java final 关键字

Java final 关键字 在本教程中,我们将通过示例学习Java final变量,final方法和final类。 在Java中,final关键字用于表示常量。它可以与变量,方法和类一起使用。 任何实体(变量,方法或类)一旦…

作者头像 李华
网站建设 2026/4/23 21:27:35

柔直系统中发电机调速器与受端下垂/虚拟惯量控制对一次调频的影响研究

柔直系统中发电机调速器与受端下垂/虚拟惯量控制对一次调频的影响研究 一、引言 随着大规模新能源接入和柔性直流输电(VSC-HVDC)技术的快速发展,电力系统的频率稳定性面临新的挑战。传统交流电网中,同步发电机的旋转惯量对系统频率具有天然的支撑作用,而柔直系统的接入在…

作者头像 李华
网站建设 2026/4/23 21:24:17

TabLLM实战解析:如何用大语言模型革新表格数据的少样本分类

1. TabLLM框架的核心设计思路 表格数据分类一直是机器学习领域的特殊挑战。与图像和文本不同,表格数据缺乏空间局部性和语义连贯性,传统深度学习方法在这里往往表现平平。我在医疗数据集上做过对比实验,ResNet和Transformer在相同样本量下的准…

作者头像 李华