---
name: asreview-headless-automation
description: Sử dụng ASReview CLI để tự động sàng lọc (Abstract Screening) số lượng lớn bài báo khoa học dựa trên Active Learning mà không cần mở GUI.
---

# ASReview Headless Automation

Kỹ năng này hướng dẫn AI Agent cách đóng vai trò một "Máy sàng lọc tự động" bằng cách sử dụng giao diện dòng lệnh (CLI) của ASReview để chạy giả lập (Simulation) và xếp hạng (Ranking) hàng ngàn bài báo khoa học, phục vụ cho quy trình Systematic Review (PRISMA).

## Bối Cảnh (Context)
Trong Systematic Review, bước sàng lọc tiêu đề và tóm tắt (Title & Abstract Screening) cực kỳ tốn thời gian. Thay vì để User hay Agent mở Web UI của ASReview và click từng bài, Agent có thể chạy ASReview ngầm qua Terminal (Command Line) để tận dụng Active Learning phân tích toàn bộ file dữ liệu (.csv, .ris) và trả ra danh sách xếp hạng.

## Yêu Cầu Cài Đặt (Prerequisites)
Agent cần đảm bảo môi trường Python đã cài đặt ASReview:
```bash
pip install asreview
```

## Quy Trình (Workflow)

### Bước 1: Chuẩn bị Dataset
Đảm bảo bạn có file dữ liệu chứa Title và Abstract của các bài báo cần sàng lọc. Phải có ít nhất 1-2 bài báo được đánh nhãn (label) là `1` (Relevant) và `0` (Irrelevant) để làm mồi (Prior knowledge).
Ví dụ: `dataset.csv` có cột `label_included`.

### Bước 2: Chạy ASReview Simulate (CLI)
Agent mở terminal và thực thi lệnh ASReview ở chế độ mô phỏng (`simulate`). Thuật toán mặc định là Naive Bayes (`nb`) và trích xuất đặc trưng TF-IDF (`tfidf`), có thể thay đổi sang SVM hoặc Neural Net tuỳ nhu cầu.

```bash
asreview simulate dataset.csv -m nb -e tfidf -s asreview_project.asreview
```
- `-m nb`: Dùng mô hình Naive Bayes (nhanh nhất).
- `-e tfidf`: Trích xuất feature dạng TF-IDF.
- `-s`: Tên file project xuất ra (lưu trữ model và state).

### Bước 3: Đọc và Xếp Hạng Kết Quả
Sau khi mô phỏng xong, ASReview lưu kết quả vào file State. Agent cần dùng thư viện `asreview` trong Python để xuất ra file CSV mới chứa danh sách bài báo đã được xếp hạng (từ liên quan nhất đến ít liên quan nhất).

**Mã Python mẫu (Tạo script `export_rank.py`):**
```python
import sys
from asreview.state import open_state
import pandas as pd

project_path = sys.argv[1]
with open_state(project_path) as state:
    # Lấy thông tin về độ liên quan dự đoán của các record
    record_table = state.get_dataset()
    
# Gộp kết quả và xếp hạng
record_table.to_csv("ranked_results.csv", index=False)
print("Saved ranked results to ranked_results.csv")
```

Chạy script:
```bash
python export_rank.py asreview_project.asreview
```

### Bước 4: Báo Cáo
Agent đọc file `ranked_results.csv`, lấy ra **Top 50** bài báo có xác suất (relevance score) cao nhất và chưa được dán nhãn prior, tóm tắt và trình bày cho User duyệt.

## Lưu ý (Gotchas)
- **Active Learning cần Prior:** Đừng quên tạo 1-2 dòng trong dataset ban đầu có cột nhãn `1` (Relevant) làm hạt giống cho mô hình.
- **Dataset lớn:** Nếu tập dữ liệu > 10,000 bài, bước Simulate có thể mất vài phút. Báo trước cho User biết tiến trình.
