Giá trị IDF kiểu BM25 cho một term
IDF đo mức độ hiếm của một term: term xuất hiện trong càng ít tài liệu thì càng đặc
Tiến độ của tôi ở bài này
Điểm và code bạn nộp đượ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: python-basics, python-math, python-loops.
Nội dung đề bài
Mô tả bài toán
IDF đo mức độ hiếm của một term: term xuất hiện trong càng ít tài liệu thì càng đặc trưng cho truy vấn. BM25 dùng công thức làm mượt dựa trên tổng số tài liệu n và số tài liệu chứa term df.
Yêu cầu
Viết hàm bm25_idf(corpus, term) trả về IDF của term trong corpus.
Quy ước nộp bài
Nộp hàm bm25_idf trong solution.py. Hệ thống gọi hàm trực tiếp, so giá trị với sai số 1e-6; không đọc stdin và không in ra stdout.
Input
- corpus: danh sách tài liệu, mỗi tài liệu là danh sách token.
- term: token cần tính IDF.
Output
Một số thực bằng ln(1 + (n - df + 0.5) / (df + 0.5)), trong đó n = len(corpus) và df là số tài liệu chứa term, dùng logarit tự nhiên.
Ràng buộc
- corpus phải khác rỗng; ném ValueError nếu rỗng.
- term phải xuất hiện trong ít nhất một tài liệu; ném ValueError khi df = 0.
- Dùng logarit tự nhiên ln, không dùng logarit cơ số 10.
Ví dụ 1
Input
bm25_idf(corpus=[["cat", "dog"], ["cat"], ["bird"], ["fish"]], term="cat")
Output
0.6931471805599453
Ví dụ 2
Input
bm25_idf(corpus=[["zebra"], ["a"], ["b"], ["c"], ["d"]], term="zebra")
Output
1.3862943611198906
Giải thích
Với corpus = [["cat", "dog"], ["cat"], ["bird"], ["fish"]] và term = "cat", ta có n = 4, df = 2, biểu thức là ln(1 + 2.5 / 2.5) = ln(2) = 0.6931471805599453.
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.
