AI-Scientist/review_iclr_bench/iclr_analysis.py 代码解释

AI-Scientist/review_iclr_bench/iclr_analysis.py 代码解释
 parser.add_argument(
        "--temperature",
        type=float,
        default=0.75,
        help="GPT temperature.",
    )
    return parser.parse_args()

llm_cols = [
    "paper_id",
    "Summary",
    "Questions",
    "Limitations",
    "Ethical Concerns",
    "Soundness",
    "Presentation",
    "Contribution",
    "Overall",
    "Confidence",
    "Strengths",
    "Weaknesses",
    "Originality",
    "Quality",
    "Clarity",
    "Significance",
    "Decision",
]

def prep_open_review_data(
    ratings_path="ratings_subset.tsv",
    data_seed=1,
    balanced_val=False,
    num_reviews=-1,
):
    ratings = pd.read_csv(ratings_path, sep="\t", index_col=0)
    ratings = ratings[ratings["decision"] != "Unknown"]

    avg = np.nanmean(ratings[["0", "1", "2", "3", "4", "5", "6"]], axis=1)
    ratings["mean"] = avg
    ratings["url"] = "https://openreview.net/pdf?id=" + ratings.index
    ratings["paper_id"] = ratings.index

    ratings["simplified_decision"] = ratings["decision"].apply(
        lambda x: (
            "Accept"
            if x in ["Accept (Oral)", "Accept (Poster)", "Accept (Spotlight)"]
            else "Reject"
        )
    )
    ratings = shuffle(ratings, random_state=data_seed)
    ratings.drop_duplicates(inplace=True)
    
    if balanced_val:
        ratings = (
            ratings[900:]
            .groupby("simplified_decision")
            .apply(lambda x: x.sample(n=int(num_reviews / 2), random_state=data_seed))
        )
        ratings = shuffle(ratings, random_state=data_seed)
        ratings = ratings.set_index("paper_id")
    return ratings

def get_perf_metrics(llm_ratings, ore_ratings):
    try:
        llm_ratings = llm_ratings.set_index("paper_id")
    except Exception:
        pass

    num_llm_reviews = llm_ratings.shape[0]
    if num_llm_reviews == 0:
        return 0, 0, 0, 0, 0

    correct = 0
    y_pred = []
    y_true = []
    for i in range(num_llm_reviews):
        name = llm_ratings.iloc[i].name
        if (
            llm_ratings["Decision"].loc[name]
            == ore_ratings["simplified_decision"].loc[name]
        ):
            correct += 1

        y_pred.append(llm_ratings["Decision"].loc[name] == "Accept")
        y_true.append(ore_ratings["simplified_decision"].loc[name] == "Accept")

    accuracy = correct / num_llm_reviews
    accuracy = round(accuracy, 2)
    f1 = round(f1_score(y_true, y_pred), 2)
    try:
        roc = round(roc_auc_score(y_true, y_pred), 2)
        tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
        fpr = fp / (fp + tn)
        fnr = fn / (fn + tp)
    except Exception:
        roc = 0
        fpr, fnr = 0, 0

    return accuracy, f1, roc, fpr, fnr

ChatGPT-4o-Latest

Poe

以下是你提供的代码的逐行解释:

parser.add_argument 部分

python

复制

parser.add_argument(
    "--temperature",
    type=float,
    default=0.75,
    help="GPT temperature.",
)
  1. parser.add_argument: 这是一个用于定义命令行参数的函数。此处为 parser 添加了一个参数 --temperature
  • --temperature: 提供的命令行参数名称(-- 表示这是一个可选参数)。
  • type=float: 指定该参数的类型为浮点数。
  • default=0.75: 如果用户没有提供此参数,则使用默认值 0.75
  • help="GPT temperature.": 参数的帮助信息,说明该参数用于设置 GPT 的温度。

python

复制

return parser.parse_args()
  1. parser.parse_args(): 解析命令行输入,返回解析后的参数对象。return 表示将解析的结果返回给调用该函数的代码。

llm_cols 部分

python

复制

llm_cols = [
    "paper_id",
    "Summary",
    "Questions",
    "Limitations",
    "Ethical Concerns",
    "Soundness",
    "Presentation",
    "Contribution",
    "Overall",
    "Confidence",
    "Strengths",
    "Weaknesses",
    "Originality",
    "Quality",
    "Clarity",
    "Significance",
    "Decision",
]
  1. llm_cols: 定义了一个包含论文属性的列名列表,表示在 LLM(大语言模型)评审数据中的不同属性。
  • 列名包括论文 ID、摘要、问题、局限性、伦理问题、健全性、展示等各类评审指标。

prep_open_review_data 函数

python

复制

def prep_open_review_data(
    ratings_path="ratings_subset.tsv",
    data_seed=1,
    balanced_val=False,
    num_reviews=-1,
):
  1. prep_open_review_data: 定义了一个用于准备 OpenReview 数据的函数。
  • ratings_path="ratings_subset.tsv": 指定加载的评分数据文件路径,默认值为 "ratings_subset.tsv"
  • data_seed=1: 数据随机化的种子,默认值为 1,用于保证数据打乱的可重复性。
  • balanced_val=False: 是否生成平衡的验证集,默认为 False
  • num_reviews=-1: 评审数量,默认值为 -1,表示不限制数量。

python

复制

    ratings = pd.read_csv(ratings_path, sep="\t", index_col=0)
  1. ratings = pd.read_csv(...): 使用 pandas 读取 TSV 文件(以制表符分隔),并将文件内容加载为一个 DataFrame,文件中的第一列被用作索引列。

python

复制

    ratings = ratings[ratings["decision"] != "Unknown"]
  1. ratings = ratings[...]: 过滤掉 decision 列值为 "Unknown" 的行,保留有效的评审数据。

python

复制

    avg = np.nanmean(ratings[["0", "1", "2", "3", "4", "5", "6"]], axis=1)
  1. avg = np.nanmean(...): 计算列 "0""6" 的均值(忽略空值 NaN),并将结果存储在 avg 中。

python

复制

    ratings["mean"] = avg
  1. ratings["mean"] = avg: 将计算出的平均值 avg 添加为新的列 "mean"

python

复制

    ratings["url"] = "https://openreview.net/pdf?id=" + ratings.index
  1. ratings["url"] = ...: 为每篇论文生成对应的 URL,URL 前缀为 "https://openreview.net/pdf?id=",后面拼接论文的 id(即索引)。

python

复制

    ratings["paper_id"] = ratings.index
  1. ratings["paper_id"] = ratings.index: 将 ratings 的索引列赋值给新的 paper_id 列。

python

复制

    ratings["simplified_decision"] = ratings["decision"].apply(
        lambda x: (
            "Accept"
            if x in ["Accept (Oral)", "Accept (Poster)", "Accept (Spotlight)"]
            else "Reject"
        )
    )
  1. ratings["simplified_decision"] = ...: 创建一个新列 simplified_decision,并根据原来的 decision 列值将评审决策简化为 "Accept""Reject"。如果原始决策是 "Accept (Oral)""Accept (Poster)""Accept (Spotlight)",则简化为 "Accept",否则为 "Reject"

python

复制

    ratings = shuffle(ratings, random_state=data_seed)
  1. shuffle(...): 将 ratings 数据随机打乱,使用 data_seed 保证随机性的一致性。

python

复制

    ratings.drop_duplicates(inplace=True)
  1. drop_duplicates(...): 删除 ratings 中的重复行。

python

复制

    if balanced_val:
  1. if balanced_val:: 检查是否需要生成平衡的验证集,如果 balanced_valTrue,则执行以下步骤。

python

复制

        ratings = (
            ratings[900:]
            .groupby("simplified_decision")
            .apply(lambda x: x.sample(n=int(num_reviews / 2), random_state=data_seed))
        )
  1. ratings[900:]: 从第 900 行开始过滤数据。
  • groupby("simplified_decision"): 按照 simplified_decision 列分组。
  • apply(lambda x: ...): 对每个组应用自定义的采样操作,随机抽取样本数为 num_reviews/2,使用 data_seed 保证采样一致性。

python

复制

        ratings = shuffle(ratings, random_state=data_seed)
  1. 再次将 ratings 随机打乱。

python

复制

        ratings = ratings.set_index("paper_id")
  1. ratings = ratings.set_index("paper_id"): 将 paper_id 设置为新的索引列。

python

复制

    return ratings
  1. 返回处理后的 ratings 数据。

get_perf_metrics 函数

python

复制

def get_perf_metrics(llm_ratings, ore_ratings):
  1. get_perf_metrics: 定义了一个用于计算模型性能指标的函数,比较 LLM 评审 (llm_ratings) 和 OpenReview 评审 (ore_ratings) 的决策。

python

复制

    try:
        llm_ratings = llm_ratings.set_index("paper_id")
    except Exception:
        pass
  1. set_index("paper_id"): 尝试将 LLM 评审的 paper_id 列设置为索引,如遇到错误则忽略。

python

复制

    num_llm_reviews = llm_ratings.shape[0]
    if num_llm_reviews == 0:
        return 0, 0, 0, 0, 0
  1. 计算 LLM 评审的总数量,如果为 0,则直接返回 5 个零值,表示无准确性等指标可计算。

python

复制

    correct = 0
    y_pred = []
    y_true = []
  1. 初始化变量:
  • correct = 0: 用于统计预测正确的数量。
  • y_pred = []: 存储 LLM 预测的结果(是否接受)。
  • y_true = []: 存储 OpenReview 的真实结果(是否接受)。

python

复制

    for i in range(num_llm_reviews):
        name = llm_ratings.iloc[i].name
  1. 循环遍历每一个 LLM 评审,获取论文的 paper_id

python

复制

        if (
            llm_ratings["Decision"].loc[name]
            == ore_ratings["simplified_decision"].loc[name]
        ):
            correct += 1
  1. 如果 LLM 评审的决策与 OpenReview 的简化决策一致,则计数 correct 增加 1。

python

复制

        y_pred.append(llm_ratings["Decision"].loc[name] == "Accept")
        y_true.append(ore_ratings["simplified_decision"].loc[name] == "Accept")
  1. 将 LLM 评审是否为 "Accept" 和 OpenReview 是否为 "Accept" 分别添加到 y_predy_true 列表中。

python

复制

    accuracy = correct / num_llm_reviews
    accuracy = round(accuracy, 2)
  1. 计算准确率(accuracy),即正确预测的比例,并将结果四舍五入到两位小数。

python

复制

    f1 = round(f1_score(y_true, y_pred), 2)
  1. 计算 F1 分数,用于衡量模型的精确性和召回率,并将结果四舍五入到两位小数。

python

复制

    try:
        roc = round(roc_auc_score(y_true, y_pred), 2)
        tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
        fpr = fp / (fp + tn)
        fnr = fn / (fn + tp)
    except Exception:
        roc = 0
        fpr, fnr = 0, 0
  1. 尝试计算 ROC-AUC 分数(roc),并提取混淆矩阵的四个值(TN, FP, FN, TP),用于计算假阳性率(fpr)和假阴性率(fnr)。如果计算过程中出现错误,则将所有值设为 0。

python

复制

    return accuracy, f1, roc, fpr, fnr
  1. 返回五个性能指标:准确率、F1 分数、ROC-AUC、假阳性率、假阴性率。

Read more

60个“特征工程”计算函数(Python代码)

60个“特征工程”计算函数(Python代码)

转自:coggle数据科学 近期一些朋友询问我关于如何做特征工程的问题,有没有什么适合初学者的有效操作。 特征工程的问题往往需要具体问题具体分析,当然也有一些暴力的策略,可以在竞赛初赛前期可以带来较大提升,而很多竞赛往往依赖这些信息就可以拿到非常好的效果,剩余的则需要结合业务逻辑以及很多其他的技巧,此处我们将平时用得最多的聚合操作罗列在下方。 最近刚好看到一篇文章汇总了非常多的聚合函数,就摘录在下方,供许多初入竞赛的朋友参考。 聚合特征汇总 pandas自带的聚合函数 * 其它重要聚合函数 其它重要聚合函数&分类分别如下。 def median(x):     return np.median(x) def variation_coefficient(x):     mean = np.mean(x)     if mean != 0:         return np.std(x) / mean     else:         return np.nan def variance(x):     return

By Ne0inhk
90w,确实可以封神了!

90w,确实可以封神了!

要说24年一定最热的技术,还得是AIGC! 前段时间阿里旗下的开源项目,登上GitHub热榜! AI大热,如今ChatGPT的优异表现,必然会出现各种细分场景应用的工具软件,和大量岗位项目! 山雨欲来风满楼,强人工智能的出现,所有科技公司已经开始巨量扩招此领域的人才。算法的岗位,近三个月已经增长68%!这件事在HR届也是相当震撼的。 目前各行各业都不景气的市场,人工智能岗位却一直保持常青!甚至同属AI边缘岗都比其他岗薪资高40%! 与此同时,AI算法岗上岸也不简单,竞争激烈,好公司核心岗位不用说,谁都想去。 所以事实就是,想要上岸,门槛也逐渐变高,项目经历、实习经历都很重要,越早明白这个道理就越能提前建立起自己的优势。 但我在b站逛知识区的时候,经常看到有些同学,因为一些客观原因导致无法参加实习,这种情况下,如果你想提升背景,增加项目经历的话,可以试试这个《CV/NLP 算法工程师培养计划》。 目前已经有上千位同学通过该计划拿到offer了,最新一期学员就业薪资最高能拿到78K!年薪94w! 优势就是有BAT大厂讲师带领,手把手带做AI真实企业项目(包含CV、NLP等

By Ne0inhk
再见nohup!试试这个神器,Python Supervisor!

再见nohup!试试这个神器,Python Supervisor!

👇我的小册 45章教程:() ,原价299,限时特价2杯咖啡,满100人涨10元。 作者丨Ais137 https://juejin.cn/post/7354406980784373798 1. 概述 Supervisor 是一个 C/S 架构的进程监控与管理工具,本文主要介绍其基本用法和部分高级特性,用于解决部署持久化进程的稳定性问题。 2. 问题场景 在实际的工作中,往往会有部署持久化进程的需求,比如接口服务进程,又或者是消费者进程等。这类进程通常是作为后台进程持久化运行的。 一般的部署方法是通过 nohup cmd & 命令来部署。但是这种方式有个弊端是在某些情况下无法保证目标进程的稳定性运行,有的时候 nohup 运行的后台任务会因为未知原因中断,从而导致服务或者消费中断,进而影响项目的正常运行。 为了解决上述问题,通过引入 Supervisor 来部署持久化进程,提高系统运行的稳定性。 3. Supervisor 简介 Supervisor is a client/

By Ne0inhk
第一本给程序员看的AI Agent图书上市了!

第一本给程序员看的AI Agent图书上市了!

AI Agent火爆到什么程度? OpenAI创始人奥特曼预测,未来各行各业,每一个人都可以拥有一个AI Agent;比尔·盖茨在2023年层预言:AI Agent将彻底改变人机交互方式,并颠覆整个软件行业;吴恩达教授在AI Ascent 2024演讲中高赞:AI Agent是一个令人兴奋的趋势,所有从事AI开发的人都应该关注。而国内的各科技巨头也纷纷布局AI Agent平台,如:钉钉的AI PaaS、百度智能云千帆大模型平台等等。 Agent 是未来最重要的智能化工具。对于程序员来说,是时候将目光转向大模型的应用开发了,率先抢占AI的下一个风口AI Agent。 小异带来一本新书《大模型应用开发 动手做 AI Agent》,这本书由《GPT图解》的作者黄佳老师创作,从0到1手把手教你做AI Agent。现在下单享受5折特惠! ▼点击下方,即可5折起购书 有这样一本秘籍在手,程序员们这下放心了吧,让我们先来揭开 Agent 的神秘面纱。 AI Agent 面面观

By Ne0inhk