File size: 2,599 Bytes
358ab64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python3
"""Decoder训练脚本 — 用QA数据训练语言解码层"""
import sys, json, os, time
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src'))

from core.brain import Brain

def main():
    print("=" * 50)
    print("Decoder训练开始")
    print("=" * 50)
    
    # 1. 初始化Brain
    print("\n1. 初始化Brain...")
    brain = Brain()
    print(f"   解码层vocab: {brain._decoder.vocab_size if brain._decoder else 'None'}")
    
    # 2. 加载QA数据
    qa_path = '/home/admin/swarm_product/data/qa_training.json'
    with open(qa_path) as f:
        qa_data = json.load(f)
    print(f"   QA数据: {len(qa_data)}条")
    
    # 3. 训练前测试
    print("\n2. 训练前生成测试:")
    from core.semantic_encoder import get_encoder
    encoder = get_encoder()
    test_q = "什么是人工智能"
    vec = encoder.encode(test_q)
    if vec is not None:
        result = brain.forward(vec)
        motor = result.get('motor', np.zeros(300))
        text = brain._decoder.decode(motor[:300], temperature=0.8)
        print(f"   Q: {test_q}")
        print(f"   生成: {text}")
    
    # 4. 训练 — 分多轮,每轮后测试
    epochs_list = [5, 10, 20, 30, 50]
    for target_epochs in epochs_list:
        print(f"\n3. 训练到 {target_epochs} epochs...")
        t0 = time.time()
        result = brain.train_decoder(qa_data, epochs=1, lr=0.01)
        elapsed = time.time() - t0
        print(f"   loss={result.get('final_loss', 0):.4f}, "
              f"n={result.get('n_trained', 0)}, "
              f"耗时={elapsed:.1f}s")
        
        # 测试生成
        test_qs = ["什么是人工智能", "你好", "Python是什么"]
        print(f"   生成测试:")
        for q in test_qs:
            vec = encoder.encode(q)
            if vec is not None:
                r = brain.forward(vec)
                motor = r.get('motor', np.zeros(300))
                text = brain._decoder.decode(motor[:300], temperature=0.5)
                print(f"     {q} → {text}")
    
    # 5. 最终保存
    print("\n4. 训练完成,权重已自动保存")
    
    # 6. 综合测试
    print("\n5. 综合测试:")
    test_cases = [
        "什么是人工智能",
        "你好",
        "Python是什么",
        "怎么学习编程",
        "什么是虫群"
    ]
    for q in test_cases:
        reply = brain.chat(q)
        print(f"   Q: {q}")
        print(f"   A: {reply.get('text', '')[:80]}")
        print(f"   mode: {reply.get('mode', '')}")

import numpy as np
if __name__ == '__main__':
    main()