File size: 6,419 Bytes
6dd7103
853bed5
6dd7103
 
 
 
 
 
 
 
 
d174d87
c750faa
959ce23
c750faa
 
 
 
 
 
 
959ce23
c750faa
 
 
 
 
 
 
 
 
 
 
e33772f
c750faa
 
 
 
 
 
 
 
 
 
 
 
959ce23
c750faa
 
 
959ce23
c750faa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
959ce23
5449eee
c750faa
 
5449eee
 
 
c750faa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5449eee
c750faa
 
 
 
 
 
 
 
 
 
 
 
1b9ba34
c750faa
 
 
 
 
 
 
 
 
959ce23
c750faa
 
 
 
 
 
 
 
 
 
e33772f
 
c750faa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
---
title: Hệ thống sinh câu hỏi # <-- Đặt tiêu đề cho Space của bạn
emoji:  # <-- Chọn một emoji phù hợp
colorFrom: green
colorTo: blue
sdk: gradio # <-- Đảm bảo đây là 'gradio'
sdk_version: "5.38.0" # <-- Phiên bản Gradio bạn đang dùng (kiểm tra bằng pip show gradio)
app_file: app.py # <-- Đảm bảo đây là tên file Python chính của bạn
pinned: false
---

# 📘 Hệ thống sinh câu hỏi từ Context (Seq2Seq Transformer + spaCy NER)

Dự án này triển khai một hệ thống sinh câu hỏi tự động dựa trên một đoạn văn bản (context) và các thực thể được trích xuất từ đó. Nó sử dụng các mô hình Seq2Seq Transformer đã được fine-tuned như Prophetnet, T5, BART để sinh câu hỏi và thư viện spaCy cho việc trích xuất thực thể có tên (Named Entity Recognition - NER). Giao diện người dùng được xây dựng bằng Gradio, cho phép tương tác dễ dàng.

---

## 🚀 Tính năng chính

- **Sinh câu hỏi:** Dựa trên một đoạn văn bản (context) và các câu trả lời (entities) được trích xuất.
- **Trích xuất thực thể (NER):** Sử dụng `en_core_web_md` của spaCy để xác định các thực thể tiềm năng làm câu trả lời.
- **Hỗ trợ nhiều mô hình:** mô hình Seq2Seq Transformer đã được huấn luyện.
- **Giao diện web thân thiện:** Được xây dựng bằng Gradio, dễ dàng sử dụng và kiểm tra.
- **Khả năng tái tạo:** Hướng dẫn chi tiết để bạn có thể cài đặt và chạy dự án này trên máy của mình.

---

## 🛠️ Yêu cầu hệ thống

- Python 3.8+ (nên sử dụng môi trường ảo như Conda hoặc `venv`).
- Ít nhất 8GB RAM (để tải các mô hình ngôn ngữ lớn).
- Đề xuất có GPU với VRAM đủ lớn (ví dụ: 8GB+) để có hiệu suất sinh câu hỏi nhanh hơn. Nếu không có GPU, mô hình sẽ chạy trên CPU nhưng có thể chậm hơn đáng kể.

---

## 📦 Hướng dẫn cài đặt và chạy dự án

Bạn có thể sử dụng `conda` (nếu đã cài Anaconda) hoặc `venv` để tạo môi trường ảo.

### Phương pháp 1: Sử dụng Conda (Khuyến nghị)

Nếu bạn đã cài đặt **Anaconda** hoặc **Miniconda**:

1.  **Tạo và kích hoạt môi trường Conda mới:**

    ```bash
    conda create -n qg_env python=3.10.9
    conda activate qg_env
    ```

    (Bạn có thể chọn phiên bản Python khác như 3.8 hoặc 3.9 nếu muốn, nhưng 3.10 là một lựa chọn tốt).

2.  **Cài đặt các thư viện từ `requirements.txt`:**
    **Quan trọng:** Bạn cần file `requirements.txt` chứa danh sách các thư viện được sử dụng trong dự án này. Nếu bạn chưa có, hãy tạo nó:

    ```bash
    # Điều hướng đến thư mục gốc của dự án này
    cd path/to/your/project_folder
    # Tạo file requirements.txt
    pip freeze > requirements.txt
    ```

    Sau khi có file `requirements.txt` trong thư mục gốc của dự án, hãy chạy:

    ```bash
    pip install -r requirements.txt
    ```

3.  **Tải mô hình ngôn ngữ `en_core_web_md` của spaCy:**

    ```bash
    python -m spacy download en_core_web_md
    ```

4.  **Tải và đặt các mô hình:**
    Dự án này sử dụng các mô hình đã được fine-tuned. Bạn không cần tải về mà chạy trực tiếp dựa trên các mô hình đã được sử dụng trong mã nguồn.
    Theo code mẫu:

    - `prophetnet-large-uncased-finetuned`: `ManB2207540/prophetnet_large_uncased_qg_squad_2epoch_finetuned`
    - `bart-finetuned`: `mghan3624/bart_qg_finetune_squad`
    - `t5-small-finetuned`: `tbtminh/t5-small-qg-finetuned`



### Phương pháp 2: Sử dụng `venv`

1.  **Tạo và kích hoạt môi trường ảo mới:**

    ```bash
    # Điều hướng đến thư mục gốc của dự án này
    cd path/to/your/project_folder

    # Tạo môi trường ảo
    python -m venv venv_qg

    # Kích hoạt môi trường ảo
    source venv_qg/bin/activate  # Trên Linux/macOS
    # Hoặc: .\venv_qg\Scripts\activate # Trên Windows
    ```

2.  **Cài đặt các thư viện từ `requirements.txt`:**
    Tương tự như bước 2 của phương pháp Conda, tạo file `requirements.txt` nếu chưa có:

    ```bash
    pip freeze > requirements.txt
    ```

    Sau đó cài đặt:

    ```bash
    pip install -r requirements.txt
    ```

3.  **Tải mô hình ngôn ngữ `en_core_web_md` của spaCy:**

    ```bash
    python -m spacy download en_core_web_md
    ```

4.  **Tải và đặt các mô hình ProphetNet:**
    Tương tự như bước 4 của phương pháp Conda.

---

## 🏃 Cách chạy dự án

Sau khi đã hoàn thành các bước cài đặt và kích hoạt môi trường ảo:

1.  **Đảm bảo bạn đang ở trong thư mục gốc của dự án.**

2.  **Chạy script chính:**

    ```bash
    python app.py
    ```

3.  **Mở trình duyệt:**
    Khi ứng dụng Gradio khởi chạy, bạn sẽ thấy một URL trong terminal (thường là `http://127.0.0.1:7860` hoặc tương tự). Sao chép URL này và dán vào trình duyệt web của bạn để tương tác với giao diện hệ thống sinh câu hỏi.

---

## ⚠️ Lưu ý quan trọng

- **Đường dẫn mô hình:** Hãy kiểm tra và điều chỉnh các đường dẫn trong biến `MODEL_PATHS` trong code của bạn (`app.py` hoặc tên file tương ứng) để chúng trỏ đến đúng vị trí các thư mục mô hình ProphetNet đã được tải về trên máy của bạn.
- **Hiệu suất GPU:** Việc sử dụng GPU sẽ cải thiện đáng kể tốc độ sinh câu hỏi. Đảm bảo cài đặt CUDA và PyTorch với hỗ trợ CUDA nếu bạn muốn tận dụng GPU.
- **Kiểm tra cache:** Việc sử dụng quá nhiều model co thể gây tràn cache.
  ```bash
  du -sh ~/.cache/huggingface/hub
  ```
- **Xoá cache:** Việc sử dụng quá nhiều model co thể gây tràn cache hãy xoá nếu không sử dụng.
  ```bash
  huggingface-cli delete-cache
  ```

---

Hy vọng hướng dẫn này sẽ giúp bạn và những người khác dễ dàng thiết lập và chạy dự án của mình!