第一部分:实验背景

1.1 实验目的

本实验旨在掌握如何利用大语言模型(LLM向量数据库,在教育数据场景下实现从数据清洗、画像构建到个性化推荐的全流程。具体目标包括:

  • 熟练使用 pandas 对多源教育数据进行清洗、关联与特征聚合;
  • 理解传统规则画像(基于固定阈值)的局限,并能通过Prompt Engineering调用通义千问(Qwen)生成结构化的、可解释的学生画像;
  • 掌握 Chroma 向量数据库 的基本操作,实现基于语义的资源检索;
  • 将检索结果与 LLM 结合,生成包含推荐理由、学习计划和总体建议的个性化报告;
  • 通过可视化图表对比传统与 LLM 方法的差异,验证推荐结果的有效性。

1.2 实验环境

  • 硬件与操作系统:本地 Windows 11 笔记本电脑(16GB RAM,Intel i7)。
  • 开发工具:PyCharm 2024.1,Python 3.10.11 虚拟环境。
  • 核心依赖库
    • pandasnumpy:数据处理;
    • openai:调用通义千问 API;
    • chromadb:向量数据库(内存模式);
    • sentence-transformers:自动下载 Embedding 模型(all-MiniLM-L6-v2);
    • matplotlib:绘制可视化图表。
  • 大模型服务:阿里云 DashScope 平台,模型 qwen3.7-max(通过个人申请的 API Key 调用)。
  • 数据集:“数智教育数据集”,包含 7 个 CSV 文件(教师、学生、考勤、考勤类型、成绩、考试类型、消费),共计约 50 万条记录。所有文件置于项目根目录下。

1.3 处理流程(整体逻辑)

整个实验分为四个阶段:

  1. 数据预处理与特征工程:加载 7 表,清洗成绩异常值(-1 作弊、-2 缺考、-3 免考标记为 NaN),提取学生维度的学业均分、各科均分、考勤总次数、日均消费,并合并为宽表。
  2. 画像构建(两种方法)
    • 传统规则画像:按均分固定阈值划分为 4 档(学霸/优良/中等/学困)。
    • LLM 画像:为前 10 名学生生成结构化数据摘要,构造 Prompt 调用 Qwen,返回含学业等级(6 档)、优劣势、建议、完整描述的 JSON 对象。
  3. 个性化推荐(向量检索 + LLM
    • 构建含 10 条教育资源的文本库,存入 Chroma,自动生成向量索引;
    • 基于目标学生的画像生成查询文本,进行 Top-3 语义检索;
    • 将检索到的资源与画像摘要拼接为 Prompt,调用 Qwen 生成推荐报告(含推荐资源及理由、学习计划、总体建议)。
  4. 可视化与对比分析:生成 4 张图表(成绩分布、标签对比、雷达图、推荐匹配度),直观展示数据特征和推荐效果。

第二部分:实验步骤

步骤 1:环境配置与 API 密钥设置

操作说明:在项目虚拟环境中安装所需库,并在代码中初始化 OpenAI 客户端,使用个人 API Key 访问通义千问。
关键配置代码

python

from openai import OpenAI

API_KEY = "sk-..."   # 实际使用时从环境变量读取更安全

client = OpenAI(api_key=API_KEY, base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")

LLM_MODEL = "qwen3.7-max"

验证:运行简单测试调用成功。

步骤 2:数据加载与清洗

操作说明:使用 pd.read_csv 读取所有 CSV 文件。处理成绩表:将 mes_Score 转为数值型,负值(-1,-2,-3)置为 NaN;消费表将 MonDeal 取绝对值(原为负数表示扣款)。
关键代码

python

df_chengji['mes_Score'] = pd.to_numeric(df_chengji['mes_Score'], errors='coerce')

df_chengji.loc[df_chengji['mes_Score'] < 0, 'mes_Score'] = np.nan

df_consumption['MonDeal'] = df_consumption['MonDeal'].abs()

截图

步骤 3:特征聚合与宽表合并

操作说明:按学生 IDbf_StudentID)分别聚合学业均分、各科均分(9 门主科)、考勤总次数、日均消费,然后左连接至学生信息主表,形成最终分析宽表。
关键代码

python

student_avg = df_chengji.groupby('mes_StudentID')['mes_Score'].mean().reset_index()

# ... 类似操作其他维度

df_profile = df_student[['bf_StudentID','bf_Name','bf_sex','cla_Name']].merge(...)

结果:共得到 1765 名学生的完整特征记录(有缺失值保留)。

步骤 4:传统规则画像(对照基准)

操作说明:定义函数 traditional_academic,根据均分返回标签。此标签仅作为后续对比,不参与推荐。
阈值设定≥85 学霸,≥70 优良,≥60 中等,<60 学困。

步骤 5LLM 画像构建(核心)

操作说明

  • 实现 build_summary:将一行数据转化为自然语言摘要(含姓名、性别、班级、均分、各科成绩、考勤次数、日均消费)。
  • 设计 System Prompt:定义角色(教育数据分析师),指定 JSON 输出字段(academic_levelsubject_profilelearning_attitudebehavior_patternstrengthsweaknessessuggestionsoverall_description)。
  • 调用 client.chat.completions.create,设置 temperature=0.3 和 response_format={"type": "json_object"},循环处理前 10 名有成绩的学生,每次调用间隔 0.5 秒。
    关键代码

python

def call_llm_photo(student_data):

    resp = client.chat.completions.create(

        model=LLM_MODEL,

        messages=[{"role": "system", "content": SYSTEM_PROMPT},

                  {"role": "user", "content": f"学生数据:\n{student_data}\n请输出JSON"}],

        temperature=0.3,

        response_format={"type": "json_object"}

    )

    return json.loads(resp.choices[0].message.content)

运行日志:控制台逐条打印 XXX 生成LLM画像...”,共 10 条。

步骤 6:构建教育资源库与向量索引

操作说明:定义 10 条教育建议文本(含元数据:学科、类型),初始化 Chroma 客户端,创建 Collection,批量添加文档(自动生成 Embedding)。
注意:首次运行会下载约 80MB Embedding 模型,耗时约 1 分钟。
关键代码

python

chroma_client = chromadb.Client()

resource_collection = chroma_client.create_collection(name="edu_resources")

resource_collection.add(documents=[...], metadatas=[...], ids=[...])

步骤 7:基于画像的语义检索与 LLM 推荐

操作说明

  • 对于第一个有 LLM 画像的学生(陈某某),构造查询文本(包含均分、薄弱学科、考勤状态)。
  • 调用 resource_collection.query 获得 Top-3 最相关资源及其语义距离。
  • 将学生画像摘要和候选资源列表拼接到 Prompt,调用 Qwen 生成推荐报告(JSON 格式,含推荐资源及理由、学习计划、总体建议)。
    运行结果:输出完整的推荐报告。

步骤 8:可视化分析

操作说明:使用 matplotlib 生成四张图表,保存为 PNG 文件。

  • 图表 1:全体学生均分直方图,标注均值和中位数。

  • 图表 2:前 10 名学生的传统标签与 LLM 标签分布对比(柱状图)。

  • 图表 3:前 5 名学生的多维雷达图(含均分、6 科、考勤反向、消费归一化)。

  • 图表 4:目标学生推荐资源的语义相关度条形图。


第三部分:实验结果

3.1 数据概况

加载 1765 名学生,成绩有效记录约 42 万条,消费记录 46 万条,考勤记录 2.3 万条。图 1 显示学生均分近似正态分布,均值约 57.8,中位数 58.2,说明整体学业水平偏低,无极端异常值。


分析:多数学生集中在 50~65 分区间,左侧(低分)略多,提示可能存在教学帮扶需求。

3.2 画像对比(传统 vs LLM

2 显示前 10 名学生的标签分布:

  • 传统规则将 8 人归为“学困”,2 人归为“中等”,无“优良”和“学霸”。
  • LLM 生成了更细粒度的 6 级划分:学困 6 人、中等偏下 2 人、中等 1 人、中等偏上 1 人。
    结论:LLM 标签更符合实际梯度,且每个标签附带了自然语言描述,能提供个性化反馈(如“文科略优于理科”“考勤问题严重”)。

3.3 雷达图分析(个体差异)

3 展示了前 5 名学生的画像雷达图(维度:均分、6 科、考勤、消费)。可以看出:

  • 陈某某各科均低,但文科稍好,考勤一般。
  • 曹某某学业中等偏下,但考勤极差(归一化值接近 0)。
  • 金某某学业水平较高,考勤良好,消费略高。

雷达图直观揭示了学生之间的结构性差异,便于教师快速定位干预重点。

3.4 个性化推荐结果(陈某某)

语义检索返回 Top-3 资源,相关度分数分别为 0.82, 0.76, 0.71(图 4)。LLM 生成的最终推荐报告如下(节选):

  • 推荐资源 1:与理科强同学结对(理由:文科相对较好,理科需要帮扶)
  • 推荐资源 2:英语泛读(理由:英语仅 50 分,需积累词汇)
  • 推荐资源 3:语文作文练习(理由:作文有提分空间)
  • 学习计划:每日 30 分钟英语泛读;每周一篇作文;每周 2 次理科讨论;减少考勤异常。
  • 总体建议:以英语和数学为突破口,目标下学期突破 65 分。


验证:推荐资源直接对应学生的薄弱点(英语最低,理科弱,语文有提升空间),且建议具体可执行,说明方案有效。


第四部分:问题与解决

问题 1:首次运行 Chroma 下载模型缓慢

  • 现象:执行 resource_collection.add 时,出现进度条下载 onnx.tar.gz,耗时约 70 秒。
  • 原因:Chroma 首次使用需从 Hugging Face 下载 all-MiniLM-L6-v2 模型(约 80MB)至本地缓存,网络速度限制导致等待。
  • 解决方法:耐心等待一次,后续运行直接读取缓存。若需离线部署,可手动下载并放置到 ~/.cache/chroma/onnx_models/ 目录。

问题 2:大模型 API 调用耗时较长(串行)

  • 现象:为 10 名学生生成画像,每个约 2~4 秒,总耗时接近 40 秒。
  • 原因:循环串行调用 API,无并发。
  • 优化方案
    • 减少测试样本数(改为 head(3));
    • 使用 ThreadPoolExecutor 多线程并发(控制并发数≤3,避免限流),可将总时间压缩至 15 秒内。本实验为清晰展示流程,保留串行。

问题 3:中文图表显示乱码

  • 现象:图表中的中文标题、标签显示为方框。
  • 原因:matplotlib 默认字体不含中文。
  • 解决方法:设置 plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', ...],并关闭 unicode_minus

第五部分:实验总结

5.1 收获

  • 掌握了教育数据从原始多表到分析宽表的完整 ETL 流程,熟悉了 groupbymergepivot_table 等操作。
  • 深入理解了传统固定阈值画像的粗糙性,体验了 LLM 如何利用自然语言理解生成更细腻、可解释的画像。
  • 学会了使用 Chroma 构建轻量级向量检索系统,验证了语义检索优于关键词匹配的潜力。
  • 成功将检索结果与生成式 LLM 结合,实现了“检索 + 生成”的推荐范式,输出的建议具有高度个性化和可操作性。
  • 通过可视化图表,更直观地展现了数据分布、个体差异和推荐依据,增强了分析的说服力。

5.2 不足与改进方向

  • 教育资源库规模较小(仅 10 条),实际应用需扩充至数百条并覆盖更多学科和类型。
  • 当前仅处理了 10 名学生,全量部署需优化并发调用和结果缓存。
  • 画像质量依赖 Prompt 设计,未来可引入 Few-shot 示例进一步提升稳定性。
  • 未进行传统协同过滤的对比实验(因数据稀疏),后续可增加基线方法进行量化评估。

5.3 对平台与技术的评价

  • 通义千问 API 稳定可靠,JSON 输出格式严格,适合自动化管道;免费额度足够教学使用。
  • Chroma 内存模式轻便,适合原型验证,但生产环境建议使用持久化存储。
  • Python 生态丰富,整个实验在单一脚本中完成,可移植性强。

5.4 未来工作

  • 接入真实学校数据,设计在线推荐系统,并引入用户反馈闭环。
  • 探索多模态信息(如行为日志、文本作文)融入画像。
  • 采用 RAG(检索增强生成)架构,搭建可交互的智能教育助手。

#商业数据分析 #ETL 数据加工 #数据实验

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐