| """ | |
| 可视化与分析脚本 — 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/") | |