上传文件至 /

This commit is contained in:
2026-07-06 14:43:43 +08:00
parent aa35aef93b
commit fec143c402
5 changed files with 33538 additions and 96 deletions

252
README.md
View File

@@ -1,96 +1,156 @@
<!--
本文件由助教自动生成
课程: 人工智能数据服务 (090945)
班级: AI_251
学号: 2509165003
仓库: final-practice
原讲义文件: 期末实践题_电影类别预测.md
-->
# 人工智能数据服务 · 综合实践
> 课程代码090945  班级人工智能251班50人
> 考试形式:上机实践 · 2 节连堂90 分钟)· 个人独立完成
---
## 一、说明
**类别词典**(共 10 类,本试卷通用):
```
0.剧情 1.喜剧 2.科幻 3.悬疑 4.动作
5.爱情 6.动画 7.犯罪 8.奇幻 9.纪录
```
注:一部电影一个类别
**要求**
1. 独立完成
2. 可参考 gitea 中的模板文件
3. 禁止使用豆包等大模型工具
4. 完成后提交到 Gitea 仓库 final-practice
---
## 二、数据采集
爬取豆瓣电影 Top250 前 50 部电影信息,包含电影名称、主演、短评。数据保存为 `movies.json`
JSON 字段示例:
```json
{"rank": 1, "title": "肖申克的救赎", "actors": "蒂姆·罗宾斯 / 摩根·弗里曼", "quote": "希望让人自由。"}
```
---
## 三、数据处理与标注
读取 `movies.json`,整理出短评部分。并且使用 label-studio 进行数据标注。
操作要点:
- 过滤 `quote` 字段为空的电影
- 将待标注数据导入 label-studio
- 给每条短评标注 10 个类别中**最显著的一个**
- 导出标注结果
---
## 四、模型训练
使用标注的数据,使用 MLP 模型进行训练。获取训练时候的 loss 和 precision 两个数据,分别保存为 `loss.csv``predictions.csv` 两个文件。
操作要点:
-`TfidfVectorizer` 提取文本特征
- 划分训练集 / 验证集
- 训练 MLP 模型并记录 loss
- 预测测试集并计算 precision
---
## 五、可视化编程
基于 `loss.csv``predictions.csv` 绘制 2 张图。
操作要点:
- 图 1loss 曲线(横轴 epoch纵轴 loss含训练集和验证集
- 图 210 个类别的预测分布柱状图
---
## 六、提交规范
### 6.1 必交文件
```
学号_姓名/
├── movies.json
├── quotes_processed.txt
├── process_stats.json
├── predictions.csv
├── my_labels.csv
├── report.md
└── images/
├── wordcloud.png
└── category_bar.png
```
---
<!--
用途: 模拟考试实操题2026-06-23
说明: 这是模拟考试,所有代码提交到这个仓库
-->
# 模拟考试(实操题)
**考试时间**90 分钟2 课时)
**考试形式**:开卷
**总分**70 分
---
## ⚠️ 重要说明
- 本题所有代码、标注结果、图片都要上传到 **本仓库**
- **文件夹必须按下面要求** 的结构创建,否则不得分
- 数据爬取代码 **必须** 在一次爬取中获取到所有需要数据(数据刷新会变)
---
## 第Ⅱ部分 实操题
### 一、数据爬取25 分)
**本题中涉及的爬虫代码必须包含检测头,同时由于网页刷新后数据会变化,必须在一次爬取中获取到所有需要数据,否则不得分。**
#### 第 1 题10 分)
用 python 代码访问网址 `https://exam.detr.top/exam-b/movies`,抓取网页的数据编号和其中全部 10 部电影的信息,并分别保存为两个文件:
- `movies.json`(存放数据编号和电影信息,电影中包含的键为 `id, title, director, year, rating, duration, genre, actors_count`
- `movies.html`(保存原始网页源码)
#### 第 2 题15 分)
根据 `movies.json` 中的数据:
1. ① 找出评分最高和最低的电影,打印电影名 + 评分。
2. ② 统计各类型的电影数量,用字典格式输出。
3. ③ 统计各导演的电影数量,用字典格式输出。
4. ④ 统计 2020 年(含)以后上映的电影数量。
---
### 二、数据标注20 分)
**本章中所有标注结果都需要导出文件,并上传到本仓库的 `q3` 文件夹下。每个小题单独放一个子文件夹。未按要求上传文件不得分。**
#### 第 1 小题8 分)— 图像目标检测标注
在 Label Studio 中打开图片 `data/images/标注练习1.jpg`(图片中含 1 只猫、1 只狗、1 辆车,背景为街道),使用 Rectangle Labels 工具标出 3 个目标物。要求:
1. 1边界框必须紧贴目标物轮廓
2. 2标签必须为 `cat``dog``car`**必须小写英文**,不能写成"猫/狗/车"或"Cat/Dog/Car"
3. 3导出为 YOLO 格式压缩包
4. 4将压缩包命名为 `q3_1_image_labels.zip` 并上传到 `q3/q3_1/` 文件夹
5. 5压缩包解压后必须包含 `classes.txt``labels/` 目录
#### 第 2 小题7 分)— 文本情感分类标注
现有 5 条外卖评论文本 `data/reviews.json`,用 Label Studio 完成情感分类标注(标签:正面/负面),导出为 JSON 格式。要求:
1. 1标注必须包含每条评论的 `id``text` 字段
2. 2每个标注必须有一个 `sentiment` 字段,值为 `"正面"``"负面"`
3. 35 条评论必须全部标注
4. 4将导出文件命名为 `q3_2_takeout_reviews.json` 并上传到 `q3/q3_2/` 文件夹
#### 第 3 小题5 分)— 标注质量自评
`q3` 文件夹下新建 `q3_3_质量自评.md` 文件,写一份 200 字左右的标注质量自评报告,内容包括:
1. 1标注前准备 —— 你制定了什么标注规范看了几张示例图片2 分)
2. 2标注过程 —— 遇到什么困难如何解决中途不确定的标注如何处理2 分
3. 3标注后检查 —— 做了哪些检查是否导入了多份相同数据互相对比1 分)
---
### 三、数据可视化25 分)
**本章所有图表都要用 matplotlib 绘制PNG 文件必须用 `plt.savefig` 保存。所有 Python 代码和 PNG 文件都需要上传到本仓库的 `q4` 文件夹下,每个小题单独一个子文件夹。**
#### 第 1 小题8 分)— 柱状图
`movies.json`(本卷第 II 部分保存的 `movies.json`)读取数据,用 matplotlib 绘制**各类型的电影数量柱状图**。要求:
1. 1使用 `plt.bar` 函数绘制柱状图
2. 2X 轴为类型名称
3. 3Y 轴为电影数量
4. 4标题设置为"类型电影数量分布"(用 `plt.title`
5. 5保存为 `q4_1_bar.png`(用 `plt.savefig``dpi=150`
6. 6Python 代码保存为 `q4_1.py`
#### 第 2 小题7 分)— 散点图
`movies.json` 读取数据,用 matplotlib 绘制**评分 vs 时长散点图**。要求:
1. 1使用 `plt.scatter` 函数绘制散点图
2. 2X 轴为时长分钟Y 轴为评分
3. 3标题设置为"时长与评分关系散点图"(用 `plt.title`
4. 4使用 `plt.xlabel``plt.ylabel` 设置轴标签
5. 5点的颜色设为红色`alpha=0.6`(半透明)
6. 6保存为 `q4_2_scatter.png`(用 `plt.savefig``dpi=150`
7. 7Python 代码保存为 `q4_2.py`
#### 第 3 小题10 分)— 直方图
`movies.json` 读取数据,绘制**两张独立的直方图**
- **A评分直方图5 分)**:使用 `plt.hist` 函数绘制 10 部电影评分字段的分布直方图,`bins=5`,颜色蓝色,标题"评分分布"(用 `plt.title`X 轴标签"评分"(用 `plt.xlabel`),保存为 `q4_3a_hist.png``dpi=150`),代码保存为 `q4_3a.py`
- **B时长直方图5 分)**:使用 `plt.hist` 函数绘制 10 部电影时长字段的分布直方图,`bins=5`,颜色绿色,标题"时长分布"X 轴标签"时长(分钟)",保存为 `q4_3b_hist.png``dpi=150`),代码保存为 `q4_3b.py`
---
## 📁 仓库文件夹结构(必须按这个提交)
```
simulated-examination/
├── data/ # 模拟考数据(已上传)
│ ├── images/
│ │ └── 标注练习1.jpg
│ └── reviews.json
├── q2_1_crawler/
│ ├── q2_1.py # 数据爬取第 1 题代码
│ ├── q2_2.py # 数据爬取第 2 题代码
│ ├── movies.json # 爬取结果(由 q2_1.py 生成)
│ └── movies.html # 原始网页(由 q2_1.py 生成)
├── q3/
│ ├── q3_1/
│ │ └── q3_1_image_labels.zip # 图像标注 YOLO 导出
│ ├── q3_2/
│ │ └── q3_2_takeout_reviews.json # 文本标注 JSON 导出
│ └── q3_3_质量自评.md
├── q4/
│ ├── q4_1/
│ │ ├── q4_1.py # 柱状图代码
│ │ └── q4_1_bar.png # 柱状图结果
│ ├── q4_2/
│ │ ├── q4_2.py # 散点图代码
│ │ └── q4_2_scatter.png # 散点图结果
│ ├── q4_3a/
│ │ ├── q4_3a.py # 评分直方图代码
│ │ └── q4_3a_hist.png # 评分直方图结果
│ ├── q4_3b/
│ │ ├── q4_3b.py # 时长直方图代码
│ │ └── q4_3b_hist.png # 时长直方图结果
```
---
## 提交方式
1. 在本仓库下**按上面的文件夹结构**创建目录
2. 依次完成 3 大题的所有小题
3. 每完成一题就 `git add` + `git commit` + `git push` 到本仓库
4. 考试结束时**最后一次 commit 时间**视为交卷时间