当前位置: 首页 > article >正文

1.7 Kaggle大白话:Eedi竞赛Transformer框架解决方案07-调用AI模型输出结果

目录

    • 0. 本栏目竞赛汇总表
    • 1. 本文主旨
    • 2. 调用AI模型输出结果架构
    • 3. 模型准备
      • 3.1 代码实现
      • 3.2 大白话模型准备
    • 4. 数据处理
      • 4.1 代码实现
      • 4.2 大白话数据处理
    • 5. 特征提取
      • 5.1 代码实现
      • 5.2 大白话特征提取
    • 6. 相似度匹配
      • 6.1 代码实现
      • 6.2 大白话相似度匹配
    • 7. 系列总结
      • 7.1 章节回顾
      • 7.2 竞赛排名
      • 7.3 其他优秀项目(皆为竞赛金牌)

0. 本栏目竞赛汇总表

Kaggle竞赛汇总

1. 本文主旨

  • 大白话:上一篇文章中,已经实现了Transformer模型的训练与评估。本文主旨是对已经有模型进行调用,并输出结果。
  • 通过本文可收获技能:AI模型调用、数据处理。
  • 上文回顾:Eedi竞赛Transformer框架解决方案06-Transformer模型训练及评估

2. 调用AI模型输出结果架构

相似度匹配
特征提取
数据处理
模型准备
排序获取TopK
计算相似度矩阵
获取误解概念ID
输出预测结果
tokenize处理
批量处理文本
模型编码
获取embeddings
读取误解概念库
读取测试数据
文本预处理
构建query和doc
初始化tokenizer
加载配置
加载训练好的模型
模型设置为评估模式

3. 模型准备

3.1 代码实现

# 1. 加载配置
config = Config()
model_config = AutoConfig.from_pretrained(config.checkpoint)

# 2. 初始化tokenizer
tokenizer = AutoTokenizer.from_pretrained(
    config.checkpoint,
    trust_remote_code=True,
    padding_side="right",
    use_fast=False,
)
tokenizer.pad_token = tokenizer.eos_token

# 3. 加载训练好的模型
model = CustomSimCSEModel(config.checkpoint, config=model_config, 
                         quantization_config=bnb_config, temperature=config.temperature)

# 4. 模型设置为评估模式
model.config.use_cache = False
model = prepare_model_for_kbit_training(model)

3.2 大白话模型准备

这段代码就像是在准备一个"智能阅卷老师":

  • 加载配置
    就像准备一份"工作说明书",告诉模型要用什么设置,比如文本最大长度、温度系数等
  • 初始化tokenizer
    像是准备一个"翻译器",能把文字转换成模型能理解的数字,设置一些特殊的标记和规则
  • 加载训练好的模型
    就像请来一个"经验丰富的老师",这个老师已经学会了如何判断学生的误解,使用4bit量化让它工作更高效
  • 设置评估模式
    告诉"老师"现在是在判卷,不需要继续学习新知识,专注于给出准确的判断

4. 数据处理

4.1 代码实现

# 1. 读取测试数据和误解概念库
misconception_mapping = pd.read_csv(DATA_PATH_MAP)  # 误解概念库
df = pd.read_csv(DATA_PATH_TRAIN)  # 测试数据

# 2. 文本预处理和构建query/doc
# 添加查询字段
misconception_mapping['query'] = misconception_mapping['MisconceptionName']  # 误解概念名作为query
misconception_mapping['order_index'] = misconception_mapping['MisconceptionId']  # 添加索引

4.2 大白话数据处理

这段代码就像是在准备考试材料:

  • 读取数据

    • 读取误解概念库
      像是拿出一本"错误类型参考手册",里面记录了各种常见的误解类型,每种误解都有编号和详细说明
    • 读取测试数据
      像是收集学生的答卷,包含题目、正确答案和错误答案,需要分析的实际案例
  • 文本整理

    • 添加查询字段
      把误解概念名称作为检索用的关键词,给每个误解概念编上序号,方便后续快速查找和匹配

5. 特征提取

5.1 代码实现

def inference(df, model, tokenizer, max_length, device):
    """执行模型推理获取embeddings"""
    batch_size = 8
    sentences = list(df['query'].values)  # 获取所有文本
    pids = list(df['order_index'].values)  # 获取ID
    
    # 1. 批量处理文本
    length_sorted_idx = np.argsort([-len(sen) for sen in sentences])  # 按长度排序
    sentences_sorted = [sentences[idx] for idx in length_sorted_idx]  # 重排文本
    
    # 2. tokenize处理和模型编码
    for start_index in range(0, len(sentences), batch_size):
        sentences_batch = sentences_sorted[start_index: start_index + batch_size]
        # tokenize处理
        features = tokenizer(sentences_batch, max_length=max_length, 
                           padding=True, truncation=True,
                           return_tensors="pt")
        features = batch_to_device(features, device)
        
        # 3. 获取embeddings
        with torch.no_grad():
            embeddings = model.encode(features)  # 模型编码
            embeddings = embeddings.detach().cpu().numpy().tolist()
        all_embeddings.extend(embeddings)

5.2 大白话特征提取

这段代码就像是一个"文本理解处理流水线":
1. 批量处理文本
像是把试卷分成小批次,先按长短排序,方便处理,每次处理8份,提高效率
2. tokenize处理
像是把文字拆分成小单元,统一长度(太长的截断,太短的补齐),转换成模型能理解的格式
3. 模型编码
像是"阅读理解"过程,模型仔细阅读每段文本,把文字的含义转换成数字向量,这些向量包含了文本的深层语义
4. 保存特征
把所有处理结果收集起来,恢复原来的顺序,准备进行后续的相似度计算

6. 相似度匹配

6.1 代码实现

# 1. 计算相似度矩阵
sentence_embeddings = np.concatenate([e.reshape(1, -1) for e in list(doc_embeddings.values())])
index_text_embeddings_index = {index: paper_id for index, paper_id in 
                             enumerate(list(doc_embeddings.keys()))}

predicts_test = []
for _, row in df.iterrows():
    # 获取query向量
    query_id = row['order_index']
    query_em = query_embeddings[query_id].reshape(1, -1)
    
    # 2. 计算相似度并排序
    cosine_similarity = np.dot(query_em, sentence_embeddings.T).flatten()
    sort_index = np.argsort(-cosine_similarity)[:max(top_ks)]
    
    # 3. 获取误解概念ID
    pids = [index_text_embeddings_index[index] for index in sort_index]
    predicts_test.append(pids)

# 4. 计算评估指标
metric_dict = {}
for i in top_ks:
    recall_score = mrecall([[data] for data in df['answer_id'].values], predicts_test, i)
    map_score = mapk([[data] for data in df['answer_id'].values], predicts_test, i)
    metric_dict[f"recall_at_{i}"] = recall_score
    metric_dict[f"map_at_{i}"] = map_score

6.2 大白话相似度匹配

这段代码就像是一个"智能匹配系统":

  • 计算相似度矩阵
    像是把每道题的错误答案,跟所有已知的误解概念进行比对,计算它们之间的相似程度
  • 排序获取TopK
    对相似度进行排序,选出最相似的前25个误解概念,就像找出最可能的错误原因
  • 获取误解概念ID
    把排序结果转换成具体的误解概念ID,就像给出具体的诊断结果
  • 输出预测结果
    计算预测的准确率(MAP@25),计算预测的召回率(Recall@25),就像评估诊断的准确性
  • 整个过程就像一个老师在
    看到学生的错误答案快速匹配可能的误解原因,找出最相关的几种可能性,最后检查判断的准确度

7. 系列总结

7.1 章节回顾

至此Eedi竞赛Transformer框架解决方案结束,章节回顾:

  • 项目博客01:Eedi竞赛Transformer框架解决方案01-竞赛信息解读与数据理解
  • 项目博客02:Eedi竞赛Transformer框架解决方案02-GPT_4o生成训练集缺失数据
  • 项目博客03:Eedi竞赛Transformer框架解决方案03-定义Transformer数据输入层
  • 项目博客04:Eedi竞赛Transformer框架解决方案04-定义Transformer模型
  • 项目博客05:Eedi竞赛Transformer框架解决方案05-实例化Transformer及参数解释
  • 项目博客06:Eedi竞赛Transformer框架解决方案06-Transformer模型训练及评估
  • 项目博客07:Eedi竞赛Transformer框架解决方案07-调用AI模型输出结果

7.2 竞赛排名

在这里插入图片描述

7.3 其他优秀项目(皆为竞赛金牌)

  • eedi-qwen32b-vllm
  • qwen14b-retrieval
  • eedi-qwen2-5-14b
  • eedi-efficiency-lb

http://www.kler.cn/a/567125.html

相关文章:

  • 中科大计算机网络原理 1.5 Internt结构和ISP
  • 【Linux高级IO】Linux多路转接:深入探索poll与epoll的奥秘
  • 自学微信小程序的第六天
  • 深入浅出数据结构(图)
  • 钩子项目 -- 实战案例品购物车
  • 数据库基础三(MySQL数据库操作)
  • leetcode35.搜索插入位置
  • 02内存映射与bmp解码
  • GCM模式在IPSec中的应用
  • Redis持久化方案RDB和AOF
  • C#光速入门的指南
  • 人工智能之数学基础:线性代数中的特殊矩阵
  • 计算机毕业设计Python+DeepSeek-R1大模型游戏推荐系统 Steam游戏推荐系统 游戏可视化 游戏数据分析(源码+文档+PPT+讲解)
  • Linux笔记---一切皆文件
  • AI编程Cursor之高级使用技巧
  • iOS for...in 循环
  • SpringBoot项目启动报错:PathVariable annotation was empty on param 0.
  • thinkphp下的Job队列处理
  • C语言多级指针详解 - 通过实例理解一级、二级、三级指针
  • day01_Java基础