| # 计算级联指标使用说明 | |
| 本脚本用于计算信息级联数据的情感得分、情感deviation、contextual deviation和perplexity。 | |
| ## 功能说明 | |
| 脚本 `compute_cascade_metrics.py` 会处理以下两个JSON文件: | |
| - `information_cascade.json`: 包含完整级联数据(原帖、评论、转发) | |
| - `information_cascade_original_posts.json`: 包含原帖数据(可选) | |
| 计算以下指标: | |
| 1. **情感得分 (Sentiment Score)**: 文本的情感倾向得分 | |
| 2. **情感偏差 (Sentiment Deviation)**: 相对于原帖的情感偏差 | |
| 3. **语境偏差 (Contextual Deviation)**: 相对于原帖的语义偏差 | |
| 4. **困惑度 (Perplexity)**: 文本的语言模型困惑度 | |
| ## 安装依赖 | |
| 在云电脑上安装必要的依赖: | |
| ```bash | |
| pip install torch transformers numpy tqdm | |
| ``` | |
| 如果需要使用GPU: | |
| ```bash | |
| pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 | |
| ``` | |
| ## 使用方法 | |
| ### 基本用法(使用默认模型) | |
| ```bash | |
| python compute_cascade_metrics.py \ | |
| --input_cascade information_cascade.json \ | |
| --output output_with_metrics.json \ | |
| --batch_size 32 | |
| ``` | |
| ### 完整用法(指定所有模型) | |
| ```bash | |
| python compute_cascade_metrics.py \ | |
| --input_cascade information_cascade.json \ | |
| --input_original information_cascade_original_posts.json \ | |
| --output output_with_metrics.json \ | |
| --bert_model bert-base-chinese \ | |
| --sentiment_model <情感分析模型路径> \ | |
| --perplexity_model <语言模型路径> \ | |
| --batch_size 32 \ | |
| --max_length 512 \ | |
| --device cuda | |
| ``` | |
| ### 参数说明 | |
| - `--input_cascade`: **必需**,输入级联JSON文件路径 | |
| - `--input_original`: 可选,输入原帖JSON文件路径 | |
| - `--output`: **必需**,输出JSON文件路径 | |
| - `--bert_model`: BERT模型名称或路径(默认: `bert-base-chinese`) | |
| - `--sentiment_model`: 情感分析模型路径(可选,不提供则使用简化方法) | |
| - `--perplexity_model`: 语言模型路径(可选,不提供则使用简化方法) | |
| - `--batch_size`: 批处理大小(默认: 32) | |
| - `--max_length`: 最大序列长度(默认: 512) | |
| - `--device`: 计算设备,`cuda` 或 `cpu`(默认: 自动选择) | |
| - `--max_cascades`: 最大处理级联数量(用于测试,默认: 处理所有) | |
| ## 输出格式 | |
| 处理后的JSON文件会在每个节点中添加以下字段: | |
| ### 原帖 (`post_info`) | |
| ```json | |
| { | |
| "post_info": { | |
| "content": "原帖内容", | |
| "embedding": [0.1, 0.2, ...], // BERT语义向量 (768维) | |
| "sentiment_score": 0.7, // 情感得分 | |
| "perplexity": 15.3 // 困惑度 | |
| } | |
| } | |
| ``` | |
| ### 评论 (`comment_tree`) | |
| ```json | |
| { | |
| "comment_tree": { | |
| "comment_id": { | |
| "content": "评论内容", | |
| "embedding": [0.1, 0.2, ...], | |
| "sentiment_score": 0.6, | |
| "perplexity": 12.5, | |
| "contextual_deviation": 0.25, // 语境偏差 | |
| "sentiment_deviation": 0.1 // 情感偏差 | |
| } | |
| } | |
| } | |
| ``` | |
| ### 转发 (`repost_chain`) | |
| ```json | |
| { | |
| "repost_chain": [ | |
| { | |
| "forward_text": "转发内容", | |
| "comment_content": "评论内容", | |
| "embedding": [0.1, 0.2, ...], | |
| "sentiment_score": 0.5, | |
| "perplexity": 18.2, | |
| "contextual_deviation": 0.35, | |
| "sentiment_deviation": 0.2 | |
| } | |
| ] | |
| } | |
| ``` | |
| ## 模型选择建议 | |
| ### BERT模型 | |
| - 中文文本:`bert-base-chinese` | |
| - 英文文本:`bert-base-uncased` | |
| - 自定义模型:提供本地路径 | |
| ### 情感分析模型 | |
| - 中文:可以使用 `uer/roberta-base-finetuned-chinanews-chinese` 或其他中文情感分析模型 | |
| - 英文:可以使用 `nlptown/bert-base-multilingual-uncased-sentiment` 等 | |
| - 如果不提供,脚本会使用基于关键词的简化方法 | |
| ### 困惑度模型 | |
| - 中文:可以使用 `gpt2-chinese` 或其他中文语言模型 | |
| - 英文:可以使用 `gpt2` 等 | |
| - 如果不提供,脚本会使用基于词汇多样性的简化方法 | |
| ## 注意事项 | |
| 1. **大文件处理**: 如果JSON文件很大,处理时间可能较长。建议: | |
| - 使用GPU加速(`--device cuda`) | |
| - 调整批处理大小(`--batch_size`) | |
| - 先用 `--max_cascades` 测试少量数据 | |
| 2. **内存使用**: | |
| - BERT模型需要较多内存 | |
| - 如果内存不足,减小 `--batch_size` | |
| 3. **简化方法**: | |
| - 如果不提供情感分析模型或困惑度模型,脚本会使用简化的启发式方法 | |
| - 简化方法的结果可能不如专业模型准确,但计算速度快 | |
| 4. **数据格式**: | |
| - 确保输入的JSON文件格式正确 | |
| - JSON文件应包含 `cascades` 字段,每个级联包含 `post_info`、`comment_tree`、`repost_chain` | |
| ## 示例 | |
| ### 示例1:使用默认设置处理数据 | |
| ```bash | |
| python compute_cascade_metrics.py \ | |
| --input_cascade /path/to/information_cascade.json \ | |
| --output /path/to/output.json | |
| ``` | |
| ### 示例2:使用GPU和自定义模型 | |
| ```bash | |
| python compute_cascade_metrics.py \ | |
| --input_cascade /path/to/information_cascade.json \ | |
| --output /path/to/output.json \ | |
| --bert_model bert-base-chinese \ | |
| --sentiment_model /path/to/sentiment_model \ | |
| --device cuda \ | |
| --batch_size 64 | |
| ``` | |
| ### 示例3:测试模式(只处理前10个级联) | |
| ```bash | |
| python compute_cascade_metrics.py \ | |
| --input_cascade /path/to/information_cascade.json \ | |
| --output /path/to/output.json \ | |
| --max_cascades 10 | |
| ``` | |
| ## 故障排除 | |
| 1. **CUDA内存不足**: 减小 `--batch_size` 或使用 `--device cpu` | |
| 2. **模型下载失败**: 检查网络连接,或手动下载模型到本地后指定路径 | |
| 3. **JSON格式错误**: 检查输入JSON文件格式是否正确 | |
| 4. **处理速度慢**: 使用GPU(`--device cuda`)和增大批处理大小 | |
| ## 与EasyTPP集成 | |
| 处理后的JSON文件可以用于EasyTPP框架的训练。参考 `examples/train_robot_thp_with_features.py` 了解如何使用这些特征。 | |