Giải Thuật Tìm Kiếm Chùm (Beam Search) Có Phạt Độ Dài (Wu et al.)
Vì mỗi bước cộng thêm một số âm log P(wt) ≤ 0, câu càng dài thì tổng log xác suất càng âm. Nếu chỉ so sánh điểm thô, mô hình luôn có xu hướng sinh câu cụt ngủn.
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ủ đề
Kiến thức tiên quyết: nucleus-sampling-top-p-top-k.
Nội dung đề bài
Mục tiêu kiến thức
- Khi sinh câu văn từ mô hình Sequence-to-Sequence (Dịch máy, Tóm tắt văn bản), giải thuật tham lam (Greedy) chỉ chọn token tốt nhất tại từng bước có thể bỏ lỡ câu tối ưu toàn cục.
- Beam Search: Duy trì một tập hợp gồm B chùm giả thuyết (hypotheses) có log xác suất tích lũy cao nhất tại mỗi bước.
- Hiện tượng thiên vị câu ngắn (Short sentence bias):
Vì mỗi bước cộng thêm một số âm log P(wt) ≤ 0, câu càng dài thì tổng log xác suất càng âm. Nếu chỉ so sánh điểm thô, mô hình luôn có xu hướng sinh câu cụt ngủn.
- Hệ số phạt độ dài (Length Penalty - Wu et al., Google GNMT 2016):
Score(Y) = ∑t=1|Y| log P(yt | y<t)LP(|Y|), LP(|Y|) = (5 + |Y|)α(5 + 1)α Với α = 0.6 (hoặc 0.7), hệ số LP(|Y|) bù trừ công bằng cho các chuỗi dài.
Yêu cầu
Viết hàm:
def beam_search_step(
beam: list[tuple[list[int], float]],
log_probs: torch.Tensor,
beam_width: int = 3,
alpha: float = 0.6
) -> list[tuple[list[int], float]]:
passbeam: Danh sách các tuple(token_sequence, cumulative_log_prob)từ bước trước.log_probs: Tensor 1D shape(vocab_size,)chứa log xác suất của token tiếp theo (giả lập cho chùm).- Trả về top
beam_widthcặp(sequence, cumulative_log_prob)có điểm số chuẩn hóa cao nhất.
Input
- Hàm
length_penalty(length,alpha): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng. - Hàm
beam_search_step(beam,log_probs,beam_width,alpha): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
length_penalty: Trả về kết quả kiểufloattheo đúng đặc tả kỹ thuật và kích thước quy định. - Hàm
beam_search_step: Trả về kết quả kiểulist[tuple[list[int], float]]theo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 2000ms.
- Giới hạn bộ nhớ: 256MB.
- 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
log_probs = torch.tensor([-0.2, -1.5, -0.8, -3.0])
new_beam = beam_search_step(initial_beam, log_probs, beam_width=2, alpha=0.6)Output
[([1, 0], -0.20000000298023224), ([1, 2], -0.800000011920929)]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
beam = [([1, 2], -1.0), ([1, 2, 3, 4, 5], -1.1)]
log_probs = torch.tensor([-0.1])
beam_search_step(beam, log_probs, beam_width=1, alpha=0.6)Output
[([1, 2, 3, 4, 5, 0], -1.2000000014901162)]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ế.
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.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
