Trích xuất và lập chỉ mục từ vựng N-gram (N-gram Vocabulary Construction)
Mô hình ngôn ngữ N-gram và các kỹ thuật biểu diễn từ vựng cổ điển (như FastText, BoW) dựa trên việc trích xuất các cụm từ liên tiếp gồm N 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ủ đề
Kiến thức tiên quyết: word-level-frequency-threshold-tokenizer.
Nội dung đề bài
Mô tả bài toán
Mô hình ngôn ngữ N-gram và các kỹ thuật biểu diễn từ vựng cổ điển (như FastText, BoW) dựa trên việc trích xuất các cụm từ liên tiếp gồm N từ.
Hãy viết hàm extract_ngram_vocab(corpus: list[str], min_n: int = 1, max_n: int = 2, min_freq: int = 2, max_vocab: int = 500) -> dict[tuple[str, ...], int]:
- Tách từ trong từng câu bằng
re.findall(r"\w+|[^\w\s]", text.lower()). - Trích xuất tất cả các n-gram có độ dài n ∈ [min_n, max_n] dưới dạng tuple các chuỗi, ví dụ:
('the', 'cat'). - Đếm tần suất xuất hiện của từng n-gram.
- Lọc các n-gram có tần suất ≥ min_freq.
- Sắp xếp các n-gram theo:
- Tần suất giảm dần.
- Thứ tự tuple tăng dần (lexicographical tie-breaking).
- Giữ lại tối đa
max_vocabn-gram hàng đầu và gán ID tuần tự từ 0 đến K-1. - Trả về dictionary ánh xạ từ n-gram tuple sang ID.
Input
- Hàm
extract_ngram_vocab(corpus,min_n,max_n,min_freq,max_vocab): 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
extract_ngram_vocab: Trả về kết quả kiểudict[tuple[str, ...], int]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
corpus = ['deep learning is great', 'deep learning is fun']
vocab = extract_ngram_vocab(corpus, min_n=1, max_n=2, min_freq=2, max_vocab=10)Output
{
('deep',): 0,
('deep', 'learning'): 1,
('is',): 2,
('learning',): 3,
('learning', 'is'): 4
}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
corpus = ['a b c a b c a b c']
vocab = extract_ngram_vocab(corpus, min_n=1, max_n=1, min_freq=1, max_vocab=2)Output
{
('a',): 0,
('b',): 1
}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.
