File size: 5,879 Bytes
f43af3c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
# 计算级联指标使用说明

本脚本用于计算信息级联数据的情感得分、情感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` 了解如何使用这些特征。