Hàm mất mát và Phân rã Viterbi trong Mô hình Unigram (SentencePiece Unigram LM)
Trong khi BPE và WordPiece sử dụng các quy tắc ghép/tách có tính heuristic cứng, Unigram Language Model (Kudo, 2018 - cốt lõi của Google SentencePiece) xem việc phân đoạn từ như mộ…
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: longest-match-subword-tokenization.
Nội dung đề bài
Mô tả bài toán
Trong khi BPE và WordPiece sử dụng các quy tắc ghép/tách có tính heuristic cứng, Unigram Language Model (Kudo, 2018 - cốt lõi của Google SentencePiece) xem việc phân đoạn từ như một bài toán tối ưu hóa xác suất:
Giả sử từ điển subword cung cấp log-xác suất log P(s) cho mỗi chuỗi con s. Một từ W có thể được phân đoạn theo nhiều cách khác nhau x = (s1, s2, …, sm). Tổng log-xác suất của một cách phân đoạn: log P(x) = ∑k=1m log P(sk)
Hãy viết hàm unigram_viterbi_segmentation(word: str, subword_log_probs: dict[str, float]) -> tuple[list[str] | None, float]:
- Sử dụng quy hoạch động (thuật toán Viterbi) để tìm cách phân đoạn từ W thành các subword trong
subword_log_probssao cho tổng log-xác suất đạt giá trị lớn nhất. - Trả về tuple
(best_segmentation, best_log_prob): best_segmentation: danh sách các subword tối ưulist[str]. Nếu không tồn tại bất kỳ cách phân đoạn hợp lệ nào, trả về(None, -float('inf')).best_log_prob: tổng log-xác suất tương ứng (kiểufloat).
Input
- Hàm
unigram_viterbi_segmentation(word,subword_log_probs): 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
unigram_viterbi_segmentation: Trả về kết quả kiểutuple[list[str] | None, 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: 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
subwords = {'app': -2.0, 'le': -3.0, 'ap': -1.0, 'ple': -1.5}
seg, score = unigram_viterbi_segmentation('apple', subwords)Output
(['ap', 'ple'], -2.5)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
subwords = {'cat': -1.0, 'dog': -1.0}
seg, score = unigram_viterbi_segmentation('fish', subwords)Output
(None, -inf)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.
