1.3 Kaggle大白话:Eedi竞赛Transformer框架解决方案03-定义Transformer数据输入层

目录

    • 0. 本栏目竞赛汇总表
    • 1. 本文主旨
    • 2. Transformer数据输入层
    • 3. 构建训练数据
      • 3.1 代码实现
      • 3.2 大白话构建训练数据
    • 4. 文本构造&Tokenizer处理
      • 4.1 代码实现
      • 4.2 大白话文本构造&Tokenizer处理

0. 本栏目竞赛汇总表

Kaggle竞赛汇总

1. 本文主旨

  • 大白话:上一篇文章中已经实现缺失错误解释的AI补充,之后的主要任务是使用Transformer架构,训练出错误答案与错误解释的文本匹配模型。本文主旨是定义一个能够实现文本相似度的对比学习的Transformer类,由于整体Transformer架构过大,本文先解读架构图中的“数据输入层”。
  • 通过本文可收获技能:Transformer训练数据的生成、Transformer数据的标准化处理。
  • 上文回顾:Eedi竞赛Transformer框架解决方案02-GPT_4o生成训练集缺失数据

2. Transformer数据输入层

构建训练数据
Tokenizer处理
文本构造
学科名称
问题文本
知识点
题目内容
正确答案
答案文本
错误答案
词元ID
分词器
注意力掩码
填充
截断
掩码处理
问题:学科名称-知识点-题目内容
文本拼接
正确答案:答案内容
错误答案:选项内容
生成指令文本

3. 构建训练数据

3.1 代码实现

task_description = 'Given a math question and a misconcepte incorrect answer, please retrieve the most accurate reason for the misconception.'

def get_detailed_instruct(task_description: str, query: str) -> str:
    """生成详细的指令文本"""
    return f'Instruct: {task_description}\nQuery: {query}'
    
def create_train_df(train_df, misconception_mapping, is_train=True):
    """创建训练数据集
    Args:
        train_df: 原始数据DataFrame
        misconception_mapping: 误解概念映射
        is_train: 是否为训练集
    """

    train_data = []
    for _,row in train_df.iterrows():
        for c in ['A','B','C','D']:
            if is_train:
                misconception_id = row[f"Misconception{c}Id"]
                if np.isnan(misconception_id):
                    misconception_id = -1
                    doc_text = row[f'Misconception{c}Name']
                misconception_id = int(misconception_id)
            if c == row['CorrectAnswer']:
                continue
            if f'Answer{c}Text' not in row:
                continue
            real_answer_id = row['CorrectAnswer']
            real_text = row[f'Answer{real_answer_id}Text']
            query_text =f"###question###:{row['SubjectName']}-{row['ConstructName']}-{row['QuestionText']}\n###Correct Answer###:{real_text}\n###Misconcepte Incorrect answer###:{row[f'Answer{c}Text']}"
            row['query'] = get_detailed_instruct(task_description,query_text)
            row['answer_name'] = c
            if is_train and misconception_id != -1:
                doc_text = misconception_mapping.iloc[misconception_id]['MisconceptionName']
            row['doc'] = doc_text
            row['answer_id'] = misconception_id
            train_data.append(copy.deepcopy(row))
    new_train_df = pd.DataFrame(train_data)
    return new_train_df

3.2 大白话构建训练数据

这个函数就像在:

  • 收集学生做错的题
  • 分析每个错误答案
  • 把"题目-错误答案-误解概念"这三个信息关联起来
  • 这样模型才能学会"看到这种错误,就知道学生有什么误解"
    这就像是在帮助老师建立一个"错题本",不仅记录错在哪,还要理解为什么会错。

4. 文本构造&Tokenizer处理

4.1 代码实现

@dataclass
class EmbedCollator(DataCollatorWithPadding):
    """数据批处理整理器"""
    tokenizer: AutoTokenizer = None
    
    def __init__(self, tokenizer, query_max_len=None, passage_max_len=None):
        super().__init__(tokenizer=tokenizer)
        self.tokenizer = tokenizer
        self.query_max_len = query_max_len or 256
        self.passage_max_len = passage_max_len or 50

    def padding_score(self, teacher_score):
        """处理教师分数的填充"""
        group_size = None
        for scores in teacher_score:
            if scores is not None:
                group_size = len(scores)
                break
        if group_size is None:
            return None

        padding_scores = [100.0] + [0.0] * (group_size - 1)
        new_teacher_score = []
        for scores in teacher_score:
            if scores is None:
                new_teacher_score.append(padding_scores)
            else:
                new_teacher_score.append(scores)
        return new_teacher_score

    def mask_pad_token(self,q):
        """随机mask输入tokens"""
        if random.random()>0.9:
            tensor = q['input_ids'].float()
            mask = torch.rand(tensor.shape)
            mask = (mask > 0.9).float()
            tensor = tensor * (1 - mask) + 2 * mask
            tensor = tensor.long()
            q['input_ids'] = tensor
        return q

    def __call__(self, features):
        """处理一个batch的数据"""
        query = [f["query"] for f in features]
        passage = [f["doc"] for f in features]

        if isinstance(query[0], list):
            query = sum(query, [])
        if isinstance(passage[0], list):
            passage = sum(passage, [])

        q_collated = self.tokenizer(
            query,
            padding=True,
            truncation=True,
            max_length=self.query_max_len,
            return_tensors="pt",
        )
        q_collated = self.mask_pad_token(q_collated)

        d_collated = self.tokenizer(
            passage,
            padding=True,
            truncation=True,
            max_length=self.passage_max_len,
            return_tensors="pt",
        )
        d_collated = self.mask_pad_token(d_collated)

        return {"query": q_collated, "doc": d_collated}

4.2 大白话文本构造&Tokenizer处理

对文字数据实现标准化,简单来说流程:

  • 接收各种大小不一的包裹(文本)
  • 把它们都处理成统一规格(分词、填充、截断)
  • 贴上特殊标记(mask处理),目的:
    • 增强模型鲁棒性:让模型学会处理不完整的输入
    • 防止过拟合:通过随机遮盖,增加数据的多样性
    • 提升泛化能力:模型需要从上下文学习理解文本
  1. 最后打包成标准箱(tensor)
  2. 方便后续的运输(模型处理)

这样不管收到什么样的包裹,出站时都是规格统一、整齐划一的标准包装,便于后续的批量处理。

(To be continued)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/978415.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

组件注册方式、传递数据

组件注册 一个vue组件要先被注册,这样vue才能在渲染模版时找到其对应的实现。有两种注册方式:全局注册和局部注册。(组件的引入方式) 以下这种属于局部引用。 组件传递数据 注意:props传递数据,只能从父…

使用DeepSeek/chatgpt等AI工具辅助网络协议流量数据包分析

随着deepseek,chatgpt等大模型的能力越来越强大,本文将介绍一下deepseek等LLM在分数流量数据包这方面的能力。为需要借助LLM等大模型辅助分析流量数据包的同学提供参考,也了解一下目前是否有必要继续学习wireshark工具以及复杂的协议知识。 pcap格式 目…

蓝桥杯嵌入式客观题以及解释

第十一届省赛(大学组) 1.稳压二极管时利用PN节的反向击穿特性制作而成 2.STM32嵌套向量终端控制器NVIC具有可编程的优先等级 16 个 3.一个功能简单但是需要频繁调用的函数,比较适用内联函数 4.模拟/数字转换器的分辨率可以通过输出二进制…

《Mycat核心技术》第17章:实现MySQL的读写分离

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

虚拟机 | Ubuntu 安装流程以及界面太小问题解决

文章目录 前言一、Ubuntu初识二、使用步骤1.下载ubuntu镜像2.创建虚拟机1、使用典型(节省空间)2、稍后安装方便配置3、优选Linux版本符合4、浏览位置,选择空间大的磁盘 6、 配置信息,选择镜像7、 启动虚拟机,执行以下步…

2025系统架构师(一考就过):案例之三:架构风格总结

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式,按照软件架构风格,物联网系统属于( )软件架构风格。 A:层次型 B:事件系统 C:数据线 D:C2 答案:A 解析: 物联网分为多个层次&#xff0…

ubuntu离线安装Ollama并部署Llama3.1 70B INT4

文章目录 1.下载Ollama2. 下载安装Ollama的安装命令文件install.sh3.安装并验证Ollama4.下载所需要的大模型文件4.1 加载.GGUF文件(推荐、更容易)4.2 加载.Safetensors文件(不建议使用) 5.配置大模型文件 参考: 1、 如…

算法-数据结构(图)-DFS深度优先遍历

深度优先遍历(DFS)是一种用于遍历或搜索图的算法。以下是对它的详细介绍: 1. 定义 基本思想:从图中某个起始顶点出发,沿着一条路径尽可能深地访问图中的顶点,直到无法继续前进(即到达一个没…

uni-app集成sqlite

Sqlite SQLite 是一种轻量级的关系型数据库管理系统(RDBMS),广泛应用于各种应用程序中,特别是那些需要嵌入式数据库解决方案的场景。它不需要单独的服务器进程或系统配置,所有数据都存储在一个单一的普通磁盘文件中&am…

python文件的基本操作,文件读写

1.文件 1.1文件就是存储在某种长期存储设备上的一段数据 1.2文件操作 打开文件-->读写文件-->关闭文件 注意:可以只打开和关闭文件不进行任何操作 1.3文件对象的方法 1.open():创建一个file对象,默认以只读模式打开 2.read(n):n表示从文件中…

半导体晶圆精控:ethercat转profient网关数据提升制造精度

数据采集系统通过网关连接离子注入机,精细控制半导体晶圆制造过程中的关键参数。 在半导体制造中,晶圆制造设备的精密控制是决定产品性能的关键因素。某半导体工厂采用耐达讯Profinet转EtherCAT协议网关NY-PN-ECATM,将其数据采集系统与离子注…

双臂机器人的动力学建模

双臂机器人的动力学建模是研究机器人在运动过程中的力学行为和动力学特性,主要目的是确定在给定的控制指令下,机器人各个关节或末端执行器所受的力与加速度之间的关系。建立动力学模型通常涉及以下几个步骤: 1. 定义机器人坐标系和关节空间 双…

驱动开发系列39 - Linux Graphics 3D 绘制流程(二)- 设置渲染管线

一:概述 Intel 的 Iris 驱动是 Mesa 中的 Gallium 驱动,主要用于 Intel Gen8+ GPU(Broadwell 及更新架构)。它负责与 i915 内核 DRM 驱动交互,并通过 Vulkan(ANV)、OpenGL(Iris Gallium)、或 OpenCL(Clover)来提供 3D 加速。在 Iris 驱动中,GPU Pipeline 设置 涉及…

中国的Cursor! 字节跳动推出Trae,开放Windows版(附资源),开发自己的网站,内置 GPT-4o 强大Al模型!

Trae是什么 Trae 是字节跳动推出的免费 AI IDE,通过 AI 技术提升开发效率。支持中文,集成了 Claude 3.5 和 GPT-4 等主流 AI 模型,完全免费使用。Trae 的主要功能包括 Builder 模式和 Chat 模式,其中 Builder 模式可帮助开发者从…

【洛谷排序算法】P1012拼数-详细讲解

洛谷 P1012 拼数这道题本身并非单纯考察某种经典排序算法(如冒泡排序、选择排序、插入排序、快速排序、归并排序等)的实现,而是在排序的基础上,自定义了排序的比较规则,属于自定义排序类型的题目。不过它借助了标准库中…

阿里云可观测全面拥抱 OpenTelemetry 社区

作者:古琦 在云计算、微服务、容器化等技术重塑 IT 架构的今天,系统复杂度呈指数级增长。在此背景下,开源可观测性技术已从辅助工具演变为现代 IT 系统的"数字神经系统",为企业提供故障预警、性能优化和成本治理的全方…

STM32开发学习(三)----使用STM32CUBEMX创建项目

前言 开始正式接触代码,学习代码开发,先熟悉STM32CUBEMX软件,控制开发板的GPIO。(STM32F103C8T6)。 正式开始 1.打开软件 2.点击ACCESS TO MCU SELECTOR,进入软件选择,可能会弹出更新,等待更新完成即可。…

初识Skywalking

背景 筒子们,最近雷袭又接触到一项新工具:Skywalking,本着好东西要和大家分享的原则,在对它有了初步了解,草草的进行了实践之后,就迫不及待的把它推荐给大家了。在写本篇博客时,本人对Skywalkin…

【论文笔记】ClipSAM: CLIP and SAM collaboration for zero-shot anomaly segmentation

原文链接 摘要 近年来,CLIP 和 SAM 等基础模型在零样本异常分割 (ZSAS) 任务中展现出良好的性能。然而,无论是基于 CLIP 还是基于 SAM 的 ZSAS 方法,仍然存在不可忽视的关键缺陷:1) CLIP 主要关注不同输入之间的全局特征对齐&am…

1分钟用DeepSeek编写一个PDF转Word软件

一、引言 如今,在线工具的普及让PDF转Word成为了一个常见需求,常见的pdf转word工具有收费的wps,免费的有pdfgear,见下文: PDFgear:一款免费的PDF编辑、格式转化软件-CSDN博客 还有网上在线的免费pdf转word工具smallp…