标签 数据清洗 下的文章

在数字经济成为必选题的今天,许多企业都面临一个共同的困境:数据量爆炸式增长,但数据价值却始终“雾里看花”。我们坐拥海量数据,为何在决策时仍感“无据可依”?
图片
数据采集问题的核心往往不在于数据本身,而在于数据从“原材料”到“价值资产”的转化过程缺乏科学、规范的治理。今天,我们就以五度易链的实践为例,深入拆解一下数据治理中最为关键的标准化开发流程。这套覆盖“采集-解析-清洗-标准化”的全链路体系,正是确保每一份数据都能被科学处理,最终转化为驱动业务增长的可靠引擎。数据采集:全面覆盖,筑牢数据基础
图片
数据采集数据采集是数据开发的起点,直接决定后续数据处理的广度与深度。五度易链运用专业的数据采集工具与成熟技术,能够根据不同行业和场景的具体需求,进行精准、全面的数据抓取。采集范围覆盖线上平台数据、线下业务系统数据、第三方合作数据等各类数据源,确保数据的完整性与全面性。同时,建立合规的数据采集机制,对数据来源的合法性、数据采集过程的安全性进行全程管控,在保障数据全面性的同时,坚守数据安全与合规底线,为后续数据处理工作奠定坚实基础。数据解析:深度挖掘,揭示数据价值采集到的原始数据多为非结构化形式,难以直接应用。五度易链采用先进的数据解析技术与算法模型,对海量原始数据进行深度挖掘与智能解析。通过技术手段,从杂乱无章的非结构化数据中提取关键信息,揭示数据背后隐藏的内在关联与发展规律。数据清洗:多维度质控,提升数据质量
图片
数据质量是数据价值实现的核心前提,五度易链建立严格的多维度质量控制流程,对采集到的原始数据进行深度排查与净化处理。清洗过程围绕数据准确性、完整性、一致性、唯一性、时效性等多个核心质量指标,通过自动化检测与人工复核相结合的方式,全面排查数据中的无效信息、错误记录、重复数据以及与业务无关的冗余数据。例如,针对数据录入错误导致的格式不一致、数值异常等问题,通过智能算法进行自动修正;对于重复采集的数据,建立去重规则进行精准剔除。通过多维度的清洗处理,有效提升数据集的质量与精准度,确保后续数据分析结果的可靠性与有效性。数据标准化:统一规范,实现数据兼容不同来源、不同类型的数据在格式、口径、计量单位等方面存在差异,直接影响数据的整合应用。五度易链遵循国内外相关行业标准及规范,结合企业业务需求,对完成清洗后的有效数据进行统一格式转换和标准化处理。通过建立统一的数据编码规则、字段定义标准、计量单位规范等,消除不同数据源之间的“语言壁垒”,让原本分散、异构的数据能够实现整合兼容。标准化处理后的数据,不仅便于后续进行高效的数据分析、挖掘与应用,更能支持跨部门、跨业务的数据共享与协同,为企业构建统一的数据应用平台提供关键支撑,最终实现客户定制化数据开发的核心目标。
图片
数据治理应用高质量的数据治理已成为企业核心竞争力的重要组成部分。五度易链大数据治理解决方案标准化的“采集-解析-清洗-标准化”数据开发流程,为企业提供全方位、高品质的数据治理服务。当我们将视线从单一的技术环节拉升至整个数据价值链时,会发现数据治理远不止是IT项目,而是一项关乎企业核心竞争力的战略工程。无论是金融行业的风控升级、政务领域的数据共享,还是制造行业的智能制造、生物医药行业的研发创新,五度易链都能精准匹配需求,助力企业破解数据治理痛点,激活数据核心价值。你是否也在工作中遇到过数据质量或数据整合的挑战?欢迎在评论区分享你的故事,我们一起探讨。

聚焦中文核心能力!LLaMA-Factory驱动CT-LLM微调全流程实践

在大模型领域,我们经常面临一个尴尬:很多号称全能的模型,内核依然是英文思维,中文输出总带着一股挥之不去的“翻译味儿”。难道参数量只有 2B 的小模型,注定只能在中文语境下做配角吗?

答案是否定的。

本次,我们把目光投向了以中文为核心的 Chinese Tiny LLM (CT-LLM)-2B。通过自主整理的高质量中英文语料,结合目前业内极其高效的微调利器 —— LLaMA-Factory,进行了一场深度炼丹实践。

我们尝试了不同的中英文数据集配比方案,从数据品质过滤到指令微调,全流程模拟主流开源模型的构建路径。实测证明,在 LLaMA-Factory 的加持下,这个 2B 的小模型不仅能听懂复杂的中文指令,更在生成质量上实现了质的飞跃,同时兼顾一定的英文和编程能力。

数据集介绍

为了喂饱这个 2B 的“小胃王”,我们选择了以下三类数据集,涵盖了从地道中文表达、海量通用知识到逻辑编程能力的方方面面:

  • COIG-CQIA (中文高质量指令集):主打“地道”与“高质量”。它深度挖掘了中文互联网的优质内容(如小红书、知乎、豆瓣等),让模型告别生硬的翻译腔,学习真正的中文思维。
  • OL-CC (中文通用语料):提供了海量的中文常识与语言素材。通过对该语料的清洗过滤,我们为模型构建了扎实的中文底蕴和流畅的叙事能力。
  • OpenHermesPreferences (英文偏好数据集):精选英文指令集。引入它的目的是通过“跨语言迁移”,保留模型在复杂逻辑推理、数学应用及编程代码上的核心竞争力。

我们设计了三组对照实验:

微调后效果一览

原生模型效果:

中英文语料比例为2:1微调后模型效果:

可见,原模型回答主题并不明确,微调后回答更具准确性,围绕”制作巧克力面包“展开。

项目实战

Step 1 数据处理

新建实例JupyterLab或VSCode,由于数据处理后期需要使用Qwen模型计算困惑度,建议选择1卡GPU,使用代码下载数据,共三个数据集。它们的原始数据形态差异较大:

下载完成后,先做数据清洗与格式统一,让不同来源的数据都符合 LLaMA-Factory 的数据规范(为 ShareGPT 或 Alpaca)。本文选择统一处理成 Alpaca 格式,即每条样本固定为:

  • instruction:任务指令/问题
  • input:可选上下文(没有就留空字符串)
  • output:目标答案/回复

完成格式统一后,引入一个关键环节:用困惑度评估文本自然度。困惑度是自然语言处理领域常用的语言模型评估指标。它用于衡量模型对文本的预测能力,数值越低表示模型对数据的拟合越好,生成的文本越自然。
本文选用 Qwen2.5-7B 作为评估模型,思路直接:

  • 文本越“顺”、越符合模型语言分布 → PPL 越低
  • 文本越“怪”、噪声越多(断句混乱、模板化、乱码、拼接错误等)→ PPL 越高
    为了避免只看均值带来的误判,这里统计了每个数据集 PPL 的分位点,用于观察整体质量分布:

    可以直观看到:OpenHermes 的整体 PPL 显著更低,说明文本更自然、更“模型友好”;而 COIG 与 OL-CC 在高分位(90%/95%)区间 PPL 拉升明显,往往对应更重的噪声与非自然片段。
    由于三类数据源的“天然噪声水平”不同,采用差异化阈值进行去噪过滤:统一选择 75% 分位点作为过滤门槛。保留 PPL ≤ 阈值的样本,剔除更“离谱”的高困惑度文本,这样既能显著降低噪声占比,也不会过度清洗导致数据规模骤减。

    处理完成后的数据为:

    清洗后的数据导出为 Alpaca JSON 文件后,最后一步是把数据注册到 llamafactory/data/dataset_info.json 中,并在训练配置里按预设比例进行混合采样。

    Step 2 模型微调

    完成数据处理后,进入微调阶段。这里新建实例并打开 LLaMA-Factory Web UI,建议直接使用 2 卡 GPU 启动训练。
    在「模型路径」处填入:/shared-only/models/m-a-p/CT-LLM-Base。
    需要说明的是:LLaMA-Factory 官方当前尚未对 CT-LLM-Base 做完整适配。因此虽然平台已内置该模型,但在 Web UI 的「模型名称」下拉框中可能不会显示它的名字。这种情况下,「模型名称」可以 不设置/任意,训练时会默认使用你在「模型路径」中指定的 CT-LLM-Base。
    Train页面中,为了保证实验可比性,本次三组微调实验使用完全一致的训练参数,只更换数据集组合以验证不同中英配比的影响。下图中未展示的参数均使用默认。


实验中设置三种数据配比方案(全中文 / 中英 2:1 / 中英 4:1),在 Web UI 中对应的数据集选择,参数配置完成后,点击开始启动任务。
全中文语料实验中,选择"coig_caia_train_ppl_filtered"、"olcc_train_ppl_filtered"两个数据集“,可以查看微调过程中的日志及loss曲线:

在中英语料比例为4:1实验中,选择 "coig_caia_train_ppl_filtered"、"olcc_train_ppl_filtered"、"open_hermes_train_ppl_filtered_2"三个数据集,可以查看微调过程中的日志及loss曲线:

注意:因为实验较多,注意区分不同实验的输出目录,后续在模型对话和模型微调时,需要在检查点路径处使用该目录。

Step 3 模型对话

微调完成后,切换到 “Chat” 页面进行定性验证。评测原模型时,先清空 “检查点路径”,再点击 “加载模型”,确保对话调用的是基础模型本体;随后在输入框中填写同一个测试问题,点击提交并观察模型回答。
评测微调模型(SFT)时,在 “检查点路径” 中选择对应实验输出目录下的 checkpoint,其余流程保持一致,同样输入相同问题进行对话。依次加载并验证三组实验 checkpoint:全中文 / 中英 2:1 / 中英 4:1。

全中文微调后模型效果:

中英语料比例为2:1时模型效果:

中英预料比例为4:1时模型效果:


从定性对话效果看,微调整体显著提升了指令跟随与回答相关性;其中 中英 2:1 的回答结构更完整、表达更自然。

Step 4 模型评估

完成三组微调训练后,进入 LLaMA-Factory 的 “Evaluate & Predict” 页面进行模型评估。
评测原模型时,需要先清空“检查点路径”,以确保评估对象为基础模型本体而非某个训练 checkpoint。随后在测试集处选择三个数据集对应的 test 子集,并将截断长度设为 2048、批处理大小设为 25、Top-p 设为 0.95、温度系数设为 0.01,最后点击开始
评测微调后的模型(SFT)时,在“检查点路径(Checkpoint Path)”处选择对应实验输出目录下的 checkpoint,其余评测参数与测试集保持与原模型一致。

按照相同流程分别运行三组实验(全中文 / 中英 2:1 / 中英 4:1),即可得到可对比的评估结果:

可以得出:

  • 微调显著提升生成质量指标:相比原模型,三组微调模型在 BLEU-4 与 ROUGE(1/2/L)上均有明显增益,说明 SFT 对目标数据分布的适配效果明显。
  • 综合最优出现在“中英 2:1”:中英 2:1 在 BLEU-4、ROUGE-1/2/L 上均为最高,整体表现最佳。
  • 4:1 未继续带来提升:相比 2:1,4:1 的质量指标略有回落,同时推理速度也略下降(samples/s 下降、runtime 增加),说明英语占比过低可能削弱了部分泛化与表达能力。
  • 推理开销整体稳定:除 4:1 的 runtime 略高外,三组微调模型的 steps/s 基本一致,模型准备时间几乎不变,评测成本整体可控。

    给新手的秘密武器

如果你还没接触过LLaMA Factory这个明星微调框架,快来看看《从零开始玩转 LLaMA Factory 大模型微调》这门课程!
随着多模态的应用场景越来越丰富,为了顺应大模型的发展需求,以及响应LLaMA Factory粉丝的呼声。我们在《从零开始玩转 LLaMA Factory 大模型微调》课程基础上做了重磅升级,新增多模态实战内容,但是加量不加价

课程亮点

作者亲授:LLaMA-Factory 开源作者亲自教学,拒绝二手解读、拒绝搬运教程
新增多模态实战内容:紧跟大模型发展趋势,课程全面升级!
早鸟价仅450元,包含:
⭐价值 300 元的配套算力资源(开箱即用)
⭐官方完课证书
⭐独家《大模型微调实战手册》
⭐课程期间专家答疑支持 立即抢购,锁定席位
立即抢购,锁定席位!

该项目来自LLaMA-Factory Online

关注“大模型实验室Lab4AI”,第一时间获取前沿AI技术解析!

做量化交易系统的后端开发,最怕的不是算法太难,而是数据源“太脏”或者粒度不够。

作为开发者,你一定遇到过这种情况:前端图表展示用K线绰绰有余,但后端撮合引擎如果也只用K线数据,那简直就是灾难。因为K线丢失了时间维度的时序性。

从工程角度看Tick数据的必要性 Tick(逐笔成交)数据,本质上是时间序列数据库里最基础的原子单位。在系统架构设计中,引入历史Tick数据主要为了解决两个工程痛点:

  1. 事件驱动的回测准确性:基于Bar(K线)的回测是粗粒度的,无法模拟Tick级别的撮合逻辑。
  2. 异常排查:当线上策略出现非预期亏损,你需要一份精确到毫秒的“系统日志”来还原当时的行情切片。

如何优雅地获取并“消费”Tick数据? 很多同学拿到Tick数据的第一反应是存起来再算。其实更高效的做法是流式处理或切片回放。这就要求上游接口必须足够稳定且结构规范。

这就涉及到接口选型的问题。如果每个交易所的API你都要写一套解析脚本,维护成本会极高。在工程实践中,推荐使用那些已经做过“归一化”处理的聚合接口,比如 AllTick API 这类服务,它直接返回标准化的JSON结构,能让你把精力集中在策略逻辑(Business Logic)上,而不是消耗在ETL(数据清洗)上。

import requests
import pandas as pd

API_KEY = "YOUR_API_KEY"
symbol = "AAPL.US"

url = "https://apis.alltick.co/stock/historical/tick"
params = {
    "symbol": symbol,
    "limit": 500
}

headers = {
    "Authorization": f"Bearer {API_KEY}"
}

resp = requests.get(url, headers=headers, params=params)
ticks = resp.json().get("ticks", [])

df = pd.DataFrame(ticks)
df["time"] = pd.to_datetime(df["time"])

print(df.head())

数据消费建议 代码跑通后,建议大家把重点放在数据落地上。不要一上来就搞复杂的各种因子计算。先试着把Tick数据可视化,观察一下在极短时间窗口内的价格跳动逻辑。你会发现,很多K线上看似合理的支撑位,在Tick级别其实是脆弱不堪的。