Spaces:
Sleeping
Sleeping
| # File: src/clean_external_data_task1.py | |
| import json | |
| import os | |
| from datasets import load_dataset | |
| from tqdm import tqdm | |
| def to_float_safe(x): | |
| """Chuyển đổi string sang float (xử lý cả '9' và '9.0')""" | |
| try: | |
| if x is None: return None | |
| val = float(x) | |
| if 0 <= val <= 9: return val | |
| return None | |
| except ValueError: | |
| return None | |
| def parse_hai2131_dataset(dataset): | |
| """ | |
| Parser chuẩn cho 'hai2131/IELTS-essays-task-1'. | |
| Kết hợp: Prompt + Image Description + Essay | |
| """ | |
| print("Đang xử lý dataset 'hai2131'...") | |
| cleaned = [] | |
| bad_examples = 0 | |
| for item in tqdm(dataset, desc="Parsing hai2131"): | |
| try: | |
| # 1. Lấy thông tin đầu vào | |
| prompt = item.get("subject") or "" | |
| # QUAN TRỌNG: Lấy mô tả ảnh | |
| img_desc = item.get("image_description") or "" | |
| essay = item.get("content") or "" | |
| # 2. Tạo input text kết hợp (Prompt + Context + Essay) | |
| # Model sẽ đọc toàn bộ chuỗi này | |
| full_prompt_text = f"PROMPT: {prompt}\n\nIMAGE CONTEXT: {img_desc}" | |
| # 3. Lấy điểm số (Dataset này để điểm dạng string "9") | |
| scores = { | |
| "task_response": to_float_safe(item.get("task_response_score")), | |
| "coherence_cohesion": to_float_safe(item.get("coherence_cohesion_score")), | |
| "lexical_resource": to_float_safe(item.get("lexical_resource_score")), | |
| "grammatical_range": to_float_safe(item.get("grammatical_range_accuracy_score")) | |
| } | |
| # 4. Kiểm tra hợp lệ | |
| if essay and all(scores.values()): | |
| cleaned.append({ | |
| "prompt_text": full_prompt_text, # Input đặc biệt cho Task 1 | |
| "essay_text": essay, | |
| "scores": scores | |
| }) | |
| else: | |
| bad_examples += 1 | |
| except Exception: | |
| bad_examples += 1 | |
| print(f"hai2131: kept {len(cleaned)} samples, skipped {bad_examples}") | |
| return cleaned | |
| def main(): | |
| print("🚀 BẮT ĐẦU XỬ LÝ DATASET TASK 1 (hai2131)") | |
| # Cache dir để tránh tải lại nhiều lần | |
| cache_dir = "./.cache/huggingface_datasets_task1" | |
| try: | |
| # Tải dataset (lần này sẽ nhanh vì nó nhỏ gọn) | |
| dataset = load_dataset("hai2131/IELTS-essays-task-1", split="train", cache_dir=cache_dir) | |
| # Xử lý | |
| final_dataset = parse_hai2131_dataset(dataset) | |
| if not final_dataset: | |
| print("LỖI: Không có dữ liệu.") | |
| return | |
| # Lưu file | |
| output_dir = "data" | |
| if not os.path.exists(output_dir): os.makedirs(output_dir) | |
| output_path = os.path.join(output_dir, "dataset_for_scorer_task1.json") | |
| with open(output_path, "w", encoding="utf-8") as f: | |
| json.dump(final_dataset, f, ensure_ascii=False, indent=2) | |
| print(f"\n✅ HOÀN TẤT! Đã lưu {len(final_dataset)} mẫu vào '{output_path}'.") | |
| print("💡 Lưu ý: 'prompt_text' bây giờ chứa cả Đề bài VÀ Mô tả ảnh.") | |
| except Exception as e: | |
| print(f"❌ Lỗi: {e}") | |
| if __name__ == "__main__": | |
| main() |