techAsmita/Second-Year-Projects
GitHub: techAsmita/Second-Year-Projects
一个大二学生的双项目作品集,包含一个管理黑客马拉松完整流程的全栈 Web 应用和一个基于 BERT 微调的英文性别歧视文本检测模型。
Stars: 0 | Forks: 0
# 🎓 大二项目 — Asmita Roy
这是我在 Thapar Institute of Engineering & Technology 计算机工程专业大二期间开发的一系列项目,涵盖了全栈 Web 开发、数据库设计以及基于 transformers 的 NLP。
## 📁 项目
### 1. 🏆 Hackathon 管理系统
### 2. 🧠 基于微调 BERT 的性别歧视检测
## 🏆 项目 1:Hackathon 管理系统
### 概述
这是一个基于 Flask 的 Web 应用程序,由 Oracle XE 数据库提供支持,负责处理黑客马拉松的完整生命周期——团队和成员注册、签到、物理资源分配、导师/评委打分、提交跟踪以及最终分数汇总。
### 功能
- **团队与成员管理** — 跨学院注册团队和成员;通过存储过程自动更新成员人数
- **签到系统** — 基于时间戳的成员签到,并在首次签到时自动分配桌子
- **资源分配** — 为每个团队分配桌子和延长线
- **双向打分** — 独立的导师和评委打分流程;分数实时汇总到最终评分表中
- **提交跟踪** — 团队通过 POST 表单提交 PPT 链接和 GitHub 仓库 URL
- **导师与评委名录** — 提供所有导师和评委的专用视图
### 技术栈
| 层级 | 技术 |
|---|---|
| Backend | Python, Flask |
| Database | Oracle XE (通过 cx_Oracle) |
| DB 层 | 存储过程 (PL/SQL), 序列 |
| Frontend | HTML/Jinja2 模板 (10 个页面) |
| 配置 | python-dotenv (.env 用于存储 DB 凭据) |
### 数据库 Schema
包含 12 个具有完整关系完整性的表:
`TEAM` → `MEMBER` → `CHECK_INTIME`
`TEAM` → `TABLE_ALLOCATION` (签到时通过序列自动分配)
`TEAM` → `EXTENTION_BOARD_ALLOCATION`
`MENTORS` → `MENTOR_SCORES` → `FINAL_SCORESHEETS`
`JUDGES` → `JUDGE_SCORES` → `FINAL_SCORESHEETS`
`TEAM` → `SUBMISSIONS`
### 存储过程 (PL/SQL)
- `insert_team` — 自动递增 TEAM_ID 并插入
- `insert_member` — 插入成员并更新团队的成员人数
- `check_in_member` — 记录时间戳,如果尚未分配则自动分配桌子
- `update_submissions` — 记录 PPT 和 GitHub 链接并初始化评分表行
- `add_mentor_scores` — 插入分数并重新计算累计导师分数及最终分数
- `add_judges_scores` — 插入分数并更新评分表中的评委分数及最终分数
### 项目结构
```
main.py # Flask routes (11 GET + POST endpoints)
new.py # Oracle DB layer (execute_sql_query / execute_sql_statement)
creation.sql # Full schema: CREATE TABLE, sequences, stored procedures, seed data
templates/ # 10 Jinja2 HTML templates
├── index.html
├── teams.html
├── members.html
├── mentor_judges.html
├── mentorScoring.html
├── judgesScoring.html
├── finalScoresheet.html
├── checkin.html
├── submissions.html
└── extensions.html
requirements.txt # cx_Oracle, flask, flask-cors, python-dotenv
```
### 配置与运行
```
# 安装依赖项
pip install -r requirements.txt
# 添加一个包含您的 Oracle 凭据的 .env 文件
DB_USER=your_username
DB_PASSWORD=your_password
# 在本地端口 1521 上运行 Oracle XE,服务名为 XEPDB1
# 然后初始化 schema
sqlplus your_username/your_password@XEPDB1 @creation.sql
# 启动 Flask 应用
python main.py
# 运行于 http://localhost:8080
```
## 🧠 项目 2:基于微调 BERT 的性别歧视检测
### 概述
这是一个文本分类项目,通过微调 `bert-base-uncased` 来检测英文句子中的性别歧视语言。使用 HuggingFace `lidiapierre/fr_sexism_labelled` 数据集进行训练,采用 Trainer API 并针对 Google Colab 进行了内存优化设置。
### 功能
- 微调 `bert-base-uncased` 以进行二分类(性别歧视 / 非性别歧视)
- 内存优化训练:FP16 混合精度、梯度累积(4 步)、梯度检查点
- 自定义 `compute_metrics` — 准确率、F1、精确率、召回率(支持二分类和宏平均)
- 通过 `predict_sexism()` 进行批量推理,支持感知设备的张量放置
- 集成 HuggingFace `pipeline`,实现简洁的单行推理
- 模型保存至 Google Drive,并支持导出为 `.zip`
### 技术栈
| 组件 | 工具 |
|---|---|
| 模型 | `bert-base-uncased` (HuggingFace) |
| 数据集 | `lidiapierre/fr_sexism_labelled` |
| 训练 | HuggingFace `Trainer` API |
| 指标 | scikit-learn (准确率、F1、精确率、召回率) |
| 环境 | Google Colab (GPU) |
| 存储 | Google Drive |
### 训练配置
| 参数 | 值 |
|---|---|
| 学习率 | 2e-5 |
| Epochs | 4 |
| Batch Size | 8 |
| 梯度累积步数 | 4 |
| 混合精度 | FP16 |
| 最佳模型指标 | 准确率 |
| 最大序列长度 | 128 |
### 预测示例
```
clf_pipeline("She is a terrible leader.")
# → Sexist
clf_pipeline("Everyone deserves equal opportunities regardless of gender.")
# → Not Sexist
clf_pipeline("She can't be a doctor, she should be a nurse.")
# → Sexist
clf_pipeline("Anyone can be a doctor.")
# → Not Sexist
```
### 运行方式
1. 在 Google Colab 中打开 `AI project_Asmita.ipynb`
2. 按顺序运行所有单元格——数据集加载、分词、训练和推理均为完整的端到端流程
3. 训练好的模型将保存到您 Google Drive 的 `AI_Project/SexismDetection/model/` 目录下
## 👩💻 作者
**Asmita Roy**
计算机工程 (2023–2027), Thapar Institute of Engineering & Technology, Patiala
[GitHub](https://github.com/techAsmita) • [LinkedIn](https://linkedin.com/in/techasmita) • asmitaasmani@gmail.com
标签:Oracle, PL/SQL, 数据库设计, 文本分类, 活动管理系统, 逆向工具