tatyanalaugh/NLP-ODS-Project
GitHub: tatyanalaugh/NLP-ODS-Project
该项目通过对比基于规则的关键词匹配、开源LLM提示工程与In-Context Learning等多种NLP方法,解决聊天机器人对话日志中涉毒信息的自动检测与分类问题。
Stars: 0 | Forks: 0
# NLP-ODS-Project
## 项目概述
本项目研究如何使用传统 NLP 技术和现代大型语言模型 (LLM) 来检测聊天机器人对话日志中的**毒品相关消息**。
本项目是作为**开放数据科学 (ODS) NLP 课程**的一部分完成的,探索了二分类文本分类的不同方法,包括:
- 基于规则的关键词匹配基线;
- 指令微调的开源 LLM;
- prompt 工程;
- In-Context Learning (ICL);
- 使用 embedding 模型对示例进行语义检索。
目标是在最大化 **recall** 的同时保持较高的整体分类质量,使该方案适用于漏报非法消息代价极高的内容审核场景。
## 主要结果
本项目对比了几种检测毒品相关消息的方法。
| 方法 | Macro F1 | Recall |
|---------|----------|---------|
| 基于规则的关键词匹配 | **0.68** | 0.79 |
| YandexGPT-5-Lite-8B (最佳 prompt) | **0.91** | 0.90 |
| ICL + 语义示例检索 (MMR) | **0.91** | **0.94** |
主要发现:
- 简单的关键词匹配提供了强大的基线,但泛化能力有限。
- prompt 工程显著提升了 LLM 的性能。
- 指令微调的 LLM 大幅优于基于规则的方法。
- 为 In-Context Learning 检索语义相似的示例提高了 recall,同时保持了较高的 precision。
- 表现最佳的配置实现了 **0.91 的 Macro F1 分数**和 **0.94 的 Recall**,这使其成为最适合审核任务的方案。
完整的评估细节、混淆矩阵、prompt 模板和错误分析可以在 **`Project_report.pdf`** 中找到。
## 仓库结构
```
NLP-ODS-Project
│
├── data/
│ ├── illegal_terms_dictionary_edit.csv # Drug-related keyword dictionary
│ └── train.parquet # Labeled dataset
│
├── docs/
│ ├── README.md # Additional documentation
│ └── requirements.txt # Python dependencies
│
├── embeddings_out_qwen3_8b/
│ └── embeddings_out_qwen3_8b/
│ ├── train_embeddings.npy
│ ├── val_embeddings.npy
│ ├── test_embeddings.npy
│ ├── *_labels.npy
│ └── *_ids.npy
│
├── src/
│ ├── dataset processing/
│ │ ├── 2026-04-05_create_labeled_dataset.ipynb
│ │ └── 2026-04-14_split_labeled_dataset.ipynb
│ │
│ ├── rule-based method/
│ │ ├── 2026-04-14_keyword_baseline.ipynb
│ │ └── extending_vocabulary.py
│ │
│ └── LLMs/
│ ├── 2026-05-26_model_api_refactored.ipynb
│ ├── 22_05_26_multi-model testing_fixed_.py
│ └── ICL/
│
└── Project_report.pdf # Full project report
```
### 仓库内容
#### `data/`
包含用于实验的已处理数据集,以及基于规则的基线所使用的人工整理的非法毒品相关术语词典。
#### `src/dataset processing/`
用于数据集准备的 Notebook:
- 创建带标签的数据集;
- 划分训练集/验证集/测试集。
#### `src/rule-based method/`
基于关键词的基线的实现,包括词典扩展和评估。
#### `src/LLMs/`
指令微调 LLM、prompt 工程、基于 API 的推理和模型评估的实验。
`ICL` 目录包含了关于 **In-Context Learning** 的实验,包括使用句子 embedding 对示例进行语义检索。
#### `embeddings_out_qwen3_8b/`
使用 **Qwen3-8B** 生成的预计算 embedding,用于 ICL 实验期间的语义检索。
## 项目工作流
1. 从原始聊天机器人对话中构建带标签的数据集。
2. 将数据集划分为训练集、验证集和测试子集。
3. 训练并评估基于规则的关键词检测器。
4. 使用不同的 prompt 评估多个指令微调的 LLM。
5. 通过 In-Context Learning 提高性能。
6. 使用基于 embedding 的搜索检索语义相似的示例。
7. 使用标准分类指标比较所有方法。
## 技术
- Python
- pandas
- NumPy
- scikit-learn
- Hugging Face Transformers
- Sentence Transformers
- Qwen3-8B Embeddings
- YandexGPT
- Jupyter Notebook
## 安装说明
克隆仓库:
```
git clone https://github.com/tatyanalaugh/NLP-ODS-Project.git
cd NLP-ODS-Project
```
安装依赖项:
```
pip install -r docs/requirements.txt
```
## 复现实验
实验可以按以下顺序进行复现:
1. 准备带标签的数据集 (`src/dataset processing/`)。
2. 运行基于规则的基线。
3. 评估基于 LLM 的方法。
4. 使用提供的 embedding 运行 In-Context Learning 实验。
5. 比较 `Project_report.pdf` 中报告的结果。
## 项目报告
项目的完整描述,包括动机、数据集构建、方法论、实验、prompt 设计、评估指标、错误分析和讨论,可在 **`Project_report.pdf`** 中找到。
```
### 一些建议
I would also make a couple of small improvements to the repository itself:
- Rename **`Project_peport.pdf`** → **`Project_report.pdf`** (there's a typo).
- Rename **`dataset processing`** → **`dataset_processing`**.
- Rename **`rule-based method`** → **`rule_based_method`**.
- Rename **`22_05_26_multi-model testing_fixed_.py`** to something cleaner like `multi_model_evaluation.py`.
- Remove the `__MACOSX` directory—it is an artifact created by macOS and should not be in the repository.
- Consider moving `requirements.txt` to the repository root instead of `docs/`, which is the more common GitHub convention.
These changes would make the repository look more polished and consistent with typical open-source NLP research projects.
```
标签:DLL 劫持, NoSQL, 上下文学习, 内容审核, 大语言模型, 提示词工程, 文本分类, 策略决策点, 逆向工具