| """ |
| 可视化与分析脚本 — Person E 负责 |
| |
| 功能: |
| 1. 训练曲线绘制 (loss, BLEU, learning rate) |
| 2. 实验结果对比图 |
| 3. 注意力权重可视化 |
| 4. 翻译样例展示 |
| """ |
|
|
| import sys |
| from pathlib import Path |
|
|
| sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "src")) |
|
|
|
|
| def plot_training_curves(log_dir: str, output_path: str = "outputs/training_curves.png"): |
| """ |
| 绘制训练曲线。 |
| |
| TODO [Person E]: |
| 1. 从 TensorBoard 日志或 CSV 读取训练数据 |
| 2. 绘制子图: |
| - Train Loss vs Steps |
| - Val Loss vs Steps |
| - BLEU vs Epochs |
| - Learning Rate vs Steps |
| 3. 保存图片 |
| """ |
| raise NotImplementedError("TODO: Person E 实现 plot_training_curves") |
|
|
|
|
| def plot_experiment_comparison(results_dir: str, output_path: str = "outputs/experiment_comparison.png"): |
| """ |
| 绘制实验对比图。 |
| |
| TODO [Person E]: |
| 1. 读取所有实验的评估结果 |
| 2. 绘制柱状图: BLEU / COMET / chrF 对比 |
| 3. 绘制表格: 所有指标汇总 |
| 4. 保存图片 |
| """ |
| raise NotImplementedError("TODO: Person E 实现 plot_experiment_comparison") |
|
|
|
|
| def visualize_attention( |
| model, |
| src_text: str, |
| tgt_text: str, |
| tokenizer, |
| output_path: str = "outputs/attention_map.png", |
| ): |
| """ |
| 注意力权重可视化。 |
| |
| TODO [Person E]: |
| 1. 获取模型的 encoder self-attention 和 cross-attention 权重 |
| 2. 绘制热力图 (matplotlib / seaborn) |
| 3. x 轴: 源语言 tokens, y 轴: 目标语言 tokens |
| 4. 支持多头注意力的分别可视化和平均可视化 |
| """ |
| raise NotImplementedError("TODO: Person E 实现 visualize_attention") |
|
|
|
|
| def generate_translation_examples( |
| evaluator, |
| test_pairs: list[tuple[str, str]], |
| output_path: str = "outputs/translation_examples.md", |
| ): |
| """ |
| 生成翻译样例展示。 |
| |
| TODO [Person E]: |
| 1. 翻译测试样例 |
| 2. 生成 Markdown 格式的对比表格: |
| | 源文 (英) | 参考翻译 (中) | 模型翻译 (中) | BLEU | |
| 3. 包含好的和差的翻译案例 |
| 4. 保存为 Markdown 文件 |
| """ |
| raise NotImplementedError("TODO: Person E 实现 generate_translation_examples") |
|
|
|
|
| if __name__ == "__main__": |
| print("请指定要运行的可视化任务") |
| print(" python scripts/visualize.py --task training_curves --log_dir logs/") |
| print(" python scripts/visualize.py --task comparison --results_dir outputs/") |
|
|