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, 上下文学习, 内容审核, 大语言模型, 提示词工程, 文本分类, 策略决策点, 逆向工具