File size: 2,452 Bytes
c1a46f7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
可视化与分析脚本 — 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/")