ai-214Đọc toàn bộ đề miễn phí

Thuật toán Beam Search Decoding cho Ngôn ngữ Sinh

Greedy decoding chỉ nhìn thấy một bước tiếp theo nên dễ rơi vào cực tiểu cục bộ (chọn một từ có xác suất cao ở bước 1 nhưng dẫn tới toàn bộ các bước sau có xác suất cực thấp).

AINâng cao30 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

beam-searchdecodinglog-probabilitysequence-generation

Kiến thức tiên quyết: next-token-probability-distribution.

Nội dung đề bài

Mô tả bài toán

Greedy decoding chỉ nhìn thấy một bước tiếp theo nên dễ rơi vào cực tiểu cục bộ (chọn một từ có xác suất cao ở bước 1 nhưng dẫn tới toàn bộ các bước sau có xác suất cực thấp).

Beam Search duy trì đồng thời B chuỗi giả thuyết (hypotheses / beams) có tổng log-xác suất cao nhất:

  • Khởi tạo tập beams gồm chuỗi ban đầu x0 với điểm số S0 = 0.0.
  • Tại mỗi bước:
  • Với mỗi beam hiện tại, gọi hàm mô hình step_fn(tokens) -> logits để lấy phân phối xác suất token tiếp theo: log p = log_softmax(z).
  • Mở rộng beam bằng cách cộng dồn log-xác suất: Snew = S + log pv cho mọi từ vựng v.
  • Sắp xếp tất cả các chuỗi mở rộng trên toàn bộ các beams và chọn ra B chuỗi có điểm cao nhất.
  • Nếu một beam sinh ra eos_token_id, beam đó hoàn tất và được chuyển vào danh sách kết quả completed.
  • Dừng khi đạt max_steps hoặc khi đã có đủ B chuỗi hoàn tất.

Hãy cài đặt lớp SimpleBeamSearch:

  • __init__(self, beam_width: int, eos_token_id: int, max_steps: int = 10)
  • search(self, step_fn: Callable[[list[int]], np.ndarray], prompt_tokens: list[int]) -> list[tuple[list[int], float]]:
  • Trả về danh sách các beam tốt nhất kèm theo tổng log-xác suất, sắp xếp theo điểm giảm dần.

Input

  • Lớp SimpleBeamSearch(beam_width, eos_token_id, max_steps): Khởi tạo đối tượng với các tham số, trọng số hoặc cấu hình tương ứng.

Output

  • Các phương thức của SimpleBeamSearch: Trả về kết quả tính toán hoặc cập nhật trạng thái nội bộ của đối tượng.

Ràng buộc

  • Thời gian chạy tối đa: 6000ms.
  • Giới hạn bộ nhớ: 512MB.
  • Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.

Ví dụ 1

Input

def mock_model(tokens):
    if len(tokens) == 0:
        return np.array([2.9, 3.0, 0.0])
    elif tokens == [1]:
        return np.array([0.0, 0.0, 0.0, 0.0, 0.0])
    elif tokens == [0]:
        return np.array([-10.0, -10.0, 10.0])
    return np.array([0.0, 0.0, 0.0])
bs = SimpleBeamSearch(beam_width=2, eos_token_id=2, max_steps=2)
results = bs.search(mock_model, prompt_tokens=[])
best_seq, best_score = results[0]

Output

([0, 2], -0.770198)

Giải thích

Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.

Ví dụ 2

Input

def mock_model(tokens):
    logits = np.full(100, -10.0)
    logits[99] = 5.0
    return logits
bs = SimpleBeamSearch(beam_width=3, eos_token_id=99, max_steps=5)
results = bs.search(mock_model, prompt_tokens=[1])

Output

[([1, 99], -3.0283871168679578e-05), ([1, 0, 99], -15.000060567742338), ([1, 1, 99], -15.000060567742338)]

Giải thích

Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.