Spaces:
Runtime error
Runtime error
Sukmadi commited on
Commit ·
aa09238
1
Parent(s): 4d508e0
add upload multiple files feature
Browse files- test/cerebras-api.py +0 -32
- test/mcq_output.json +96 -114
- test/raw_resp.json +12 -12
- test/test-api-key.py +22 -7
- test/test_case.py +36 -0
- test/verdict_context.md +1 -0
test/cerebras-api.py
DELETED
|
@@ -1,32 +0,0 @@
|
|
| 1 |
-
# import os
|
| 2 |
-
# from cerebras.cloud.sdk import Cerebras
|
| 3 |
-
|
| 4 |
-
# client = Cerebras(
|
| 5 |
-
# # This is the default and can be omitted
|
| 6 |
-
# api_key=os.environ.get("CEREBRAS_API_KEY")
|
| 7 |
-
# )
|
| 8 |
-
|
| 9 |
-
# stream = client.chat.completions.create(
|
| 10 |
-
# messages=[
|
| 11 |
-
# {
|
| 12 |
-
# "role": "system",
|
| 13 |
-
# "content": ""
|
| 14 |
-
# }
|
| 15 |
-
# ],
|
| 16 |
-
# model="gpt-oss-120b",
|
| 17 |
-
# stream=True,
|
| 18 |
-
# max_completion_tokens=65536,
|
| 19 |
-
# temperature=1,
|
| 20 |
-
# top_p=1
|
| 21 |
-
# )
|
| 22 |
-
|
| 23 |
-
my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}
|
| 24 |
-
|
| 25 |
-
# Enumerate through both keys and values
|
| 26 |
-
for index, (key, value) in enumerate(my_dict.items()):
|
| 27 |
-
print(f"Index: {index}, Key: {key}, Value: {value}")
|
| 28 |
-
|
| 29 |
-
# Enumerate only through keys (less common with dictionaries)
|
| 30 |
-
print("\nEnumerate through keys only:")
|
| 31 |
-
for index, key in enumerate(my_dict): # By default, iterating a dict iterates its keys
|
| 32 |
-
print(f"Index: {index}, Key: {key}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test/mcq_output.json
CHANGED
|
@@ -1,199 +1,181 @@
|
|
| 1 |
{
|
| 2 |
"mcqs": {
|
| 3 |
"1": {
|
| 4 |
-
"câu hỏi": "Trong bảng
|
| 5 |
"lựa chọn": {
|
| 6 |
-
"a": "
|
| 7 |
-
"b": "
|
| 8 |
-
"c": "
|
| 9 |
-
"d": "
|
| 10 |
},
|
| 11 |
-
"đáp án": "
|
| 12 |
},
|
| 13 |
"2": {
|
| 14 |
-
"câu hỏi": "
|
| 15 |
"lựa chọn": {
|
| 16 |
-
"a": "
|
| 17 |
-
"b": "
|
| 18 |
-
"c": "
|
| 19 |
-
"d": "
|
| 20 |
},
|
| 21 |
-
"đáp án": "
|
| 22 |
},
|
| 23 |
"3": {
|
| 24 |
-
"câu hỏi": "
|
| 25 |
"lựa chọn": {
|
| 26 |
-
"a": "
|
| 27 |
-
"b": "
|
| 28 |
-
"c": "
|
| 29 |
-
"d": "
|
| 30 |
},
|
| 31 |
-
"đáp án": "
|
| 32 |
},
|
| 33 |
"4": {
|
| 34 |
-
"câu hỏi": "Theo nội dung,
|
| 35 |
"lựa chọn": {
|
| 36 |
-
"a": "
|
| 37 |
-
"b": "
|
| 38 |
-
"c": "
|
| 39 |
-
"d": "
|
| 40 |
},
|
| 41 |
-
"đáp án": "
|
| 42 |
},
|
| 43 |
"5": {
|
| 44 |
-
"câu hỏi": "
|
| 45 |
"lựa chọn": {
|
| 46 |
-
"a": "
|
| 47 |
-
"b": "
|
| 48 |
-
"c": "
|
| 49 |
-
"d": "
|
| 50 |
},
|
| 51 |
-
"đáp án": "
|
| 52 |
}
|
| 53 |
},
|
| 54 |
"validation": {
|
| 55 |
"1": {
|
| 56 |
"supported_by_embeddings": true,
|
| 57 |
-
"max_similarity":
|
| 58 |
"evidence": [
|
| 59 |
{
|
| 60 |
-
"idx":
|
| 61 |
-
"page":
|
| 62 |
-
"score": 0.
|
| 63 |
-
"text": "
|
| 64 |
},
|
| 65 |
{
|
| 66 |
-
"idx":
|
| 67 |
-
"page":
|
| 68 |
-
"score": 0.
|
| 69 |
-
"text": "**
|
| 70 |
},
|
| 71 |
{
|
| 72 |
-
"idx":
|
| 73 |
-
"page":
|
| 74 |
-
"score":
|
| 75 |
-
"text": "
|
| 76 |
}
|
| 77 |
],
|
| 78 |
"model_verdict": {
|
| 79 |
-
"supported":
|
| 80 |
-
"confidence": 0.
|
| 81 |
-
"evidence": "
|
| 82 |
-
"reason": "Context
|
| 83 |
}
|
| 84 |
},
|
| 85 |
"2": {
|
| 86 |
"supported_by_embeddings": true,
|
| 87 |
-
"max_similarity":
|
| 88 |
"evidence": [
|
| 89 |
{
|
| 90 |
-
"idx":
|
| 91 |
-
"page":
|
| 92 |
-
"score": 0.
|
| 93 |
-
"text": "**
|
| 94 |
},
|
| 95 |
{
|
| 96 |
-
"idx":
|
| 97 |
-
"page":
|
| 98 |
-
"score": 0.
|
| 99 |
-
"text": "
|
| 100 |
},
|
| 101 |
{
|
| 102 |
-
"idx":
|
| 103 |
-
"page":
|
| 104 |
-
"score":
|
| 105 |
-
"text": "
|
| 106 |
}
|
| 107 |
],
|
| 108 |
"model_verdict": {
|
| 109 |
-
"supported":
|
| 110 |
-
"confidence": 0.
|
| 111 |
-
"evidence": "
|
| 112 |
-
"reason": "
|
| 113 |
}
|
| 114 |
},
|
| 115 |
"3": {
|
| 116 |
"supported_by_embeddings": true,
|
| 117 |
-
"max_similarity": 0.
|
| 118 |
"evidence": [
|
| 119 |
{
|
| 120 |
-
"idx":
|
| 121 |
-
"page":
|
| 122 |
-
"score": 0.
|
| 123 |
-
"text": "
|
| 124 |
-
},
|
| 125 |
-
{
|
| 126 |
-
"idx": 56,
|
| 127 |
-
"page": 24,
|
| 128 |
-
"score": 0.765610933303833,
|
| 129 |
-
"text": "**6.4.3** **Trọng sốNội dung dựa trên Saliency**\n\n\n**Định nghĩa 3** (Gradient-based Saliency) **.** _Thành phần saliency nắm bắt_ _**tầm quan trọng cụthể**_\n_**theo đầu vào**_ _dựa trên mô hình explainable AI:_\n\n\n_saliency_ ( _x_ _j_ _, q_ ) = _∥∇_ _x_ _j_ _L_ ( _f_ ( _x_ _j_ ) _,_ ˆ _y_ ) _∥_ 2 (38)\n\n\n**6.4.4** **Kết hợp Lồi và Tham sốCân bằng** _α_\n\n\n**��ịnh lý 6.1** (Tính chất Convex Combination) **.** _Tham số_ _α tạo ra_ _**kết hợp lồi**_ _của hai lược đồtrọng_\n_số:_\n\n_weight_ = (1 _−_ _α_ ) _× w_ _similarity×ICF_ + _α × w_ _saliency_ (39)\n\n_Với α ∈_ [0 _,_ 1] _, kết quảnằm trong convex hull của hai thành phần._\n\n\n**6.5** **Phân tích Lý thuyết: Tại sao Công thức này Hợp lý**\n\n\n**6.5.1** **Phân tích Hiệu chỉnh Bias**\n\n\n**Định lý 6.2** (Bias Correction) **.** _Đối với majority voting truyền thống, ảnh hưởng kỳvọng của lớp c_ _i_ _là:_\n\nE[ _Influence_ _traditional_ ( _c_ _i_ )] = _K × P_ ( _c_ _i_ ) = _K ×_ _N_ _[n]_ _[i]_ (40)\n\n\n_Với phương pháp trọng sốcủa chúng ta:_\n\n\nE[ _Influence..."
|
| 130 |
-
},
|
| 131 |
-
{
|
| 132 |
-
"idx": 41,
|
| 133 |
-
"page": 19,
|
| 134 |
-
"score": 0.808438777923584,
|
| 135 |
-
"text": "Đối với điểm truy vấn _q_, KNN truyền thống tính toán:\n\n\nˆ\n_y_ = arg max _c_ _i_ _∈C_ _[|{][x]_ _[j]_ _[ ∈N]_ _[K]_ [(] _[q]_ [) :] _[ y]_ [(] _[x]_ _[j]_ [) =] _[ c]_ _[i]_ _[}|]_ (1)\n\n\n**Phân tích Bias:**\nXác suất đểmột K-neighborhood ngẫu nhiên chứa _k_ thực thểtừlớp _c_ _i_ tuân theo phân phối siêu hình\nhọc:\n\n\n19"
|
| 136 |
}
|
| 137 |
],
|
| 138 |
"model_verdict": {
|
| 139 |
"supported": true,
|
| 140 |
"confidence": 0.99,
|
| 141 |
-
"evidence": "
|
| 142 |
-
"reason": "
|
| 143 |
}
|
| 144 |
},
|
| 145 |
"4": {
|
| 146 |
"supported_by_embeddings": true,
|
| 147 |
-
"max_similarity": 0.
|
| 148 |
"evidence": [
|
| 149 |
{
|
| 150 |
-
"idx":
|
| 151 |
-
"page":
|
| 152 |
-
"score": 0.
|
| 153 |
-
"text": "
|
| 154 |
},
|
| 155 |
{
|
| 156 |
-
"idx":
|
| 157 |
-
"page":
|
| 158 |
-
"score": 0.
|
| 159 |
-
"text": "**AI VIETNAM** **aivietnam.edu.vn**\n\n\
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 160 |
}
|
| 161 |
],
|
| 162 |
"model_verdict": {
|
| 163 |
"supported": true,
|
| 164 |
-
"confidence": 0.
|
| 165 |
-
"evidence": "
|
| 166 |
-
"reason": "Context
|
| 167 |
}
|
| 168 |
},
|
| 169 |
"5": {
|
| 170 |
"supported_by_embeddings": true,
|
| 171 |
-
"max_similarity":
|
| 172 |
"evidence": [
|
| 173 |
{
|
| 174 |
-
"idx":
|
| 175 |
-
"page":
|
| 176 |
-
"score": 0.
|
| 177 |
-
"text": "
|
| 178 |
-
},
|
| 179 |
-
{
|
| 180 |
-
"idx": 50,
|
| 181 |
-
"page": 7,
|
| 182 |
-
"score": 1.0445164442062378,
|
| 183 |
-
"text": "**AI VIETNAM** **aivietnam.edu.vn**\n\n\n**Explainable AI (XAI) và Classifier:**\n\n\n **Vấn đềtồn đọng:** Mô hình hoạt động như một ”hộp đen”, khó giải thích lý do đưa ra dựđoán. Khảnăng giải thích thường bịtách rời khỏi quá trình phân loại chính. **Giải pháp:** Tích hợp khảnăng giải thích vào lõi của bộphân loại. **–**\n_Masking-based Saliency:_ Phương pháp này xác định các từkhóa quan trọng nhất trong tin\nnhắn. Nói trực quan thì từnào quan trọng trong quyết định spam hơn sẽđược tô đậm hơn. **–**\n_Phân loại có tích hợp Saliency:_ Bộphân loại sửdụng một tham số‘alpha‘ đểđiều chỉnh mức\nđộảnh hưởng của điểm nổi bật (saliency score) vào công thức phân loại cuối cùng, giúp kết\nquảchính xác hơn và có thểgiải thích được. **Đầu ra cuối cùng:** Đầu ra cho mỗi câu gồm thông tin dựđoán và chỉsốgiải thích cho dựđoán đó,\ngiúp người dùng hiểu rõ quyết định của mô hình. Cấu trúc đầu ra bao gồm:\n\n\n - **Lớp dựđoán:** Tin nhắn được gán nhãn dựđoán cuối cùng ( _SPAM_ hoặc _HAM_ ) dựa trên kết quả\nphân loại. *..."
|
| 184 |
-
},
|
| 185 |
-
{
|
| 186 |
-
"idx": 42,
|
| 187 |
-
"page": 18,
|
| 188 |
-
"score": 1.0499497652053833,
|
| 189 |
-
"text": "**AI VIETNAM** **aivietnam.edu.vn**\n\n\n**Kết quả** Sau 12 lớp encoder, mỗi token có vector 768 chiều, chứa thông tin ngữcảnh sâu sắc. Vector\n\n[CLS] (hàng đầu tiên của ma trận đầu ra) tổng hợp ngữcảnh toàn tin nhắn, ví dụ: `[0.7, -0.1, ...,`\n`0.5]`, phản ánh đặc trưng spam như “miễn phí”, “quà”. **Liên hệvới spam/ham** Attention giúp BERT nhận diện mối quan hệgiữa các từ(như “miễn phí”\nvà “quà” gợi ý spam). FFN tinh chỉnh vector đểnhấn mạnh đặc trưng riêng của mỗi token, hỗtrợ\nvector [CLS] mang thông tin quảng cáo hoặc giao tiếp tựnhiên. **5.3.3** **Lớp Phân Loại**\n\n\n**Mục tiêu** Sửdụng vector [CLS] đểdựđoán nhãn spam (1) hoặc ham (0) cho tin nhắn. **Quy trình**\n\n\n1. **Lớp tuyến tính** : Vector [CLS] (768 chiều) được đưa qua lớp tuyến tính:\n\n\nlogits = _W_ cls _·_ vector [CLS] + _b_ cls\n\n\n - _W_ cls : Ma trận 768 _×_ 2 (2 nhãn: spam, ham). - _b_ cls : Bias 2 chiều. Ví dụ: Vector [CLS] `[0.7, -0.1, ..., 0.5]` _→_ Logits `[2.8, -0.7]` . 2. **Softmax** : Chuyển logits thành xác suất:\n\n\nexp(..."
|
| 190 |
}
|
| 191 |
],
|
| 192 |
"model_verdict": {
|
| 193 |
"supported": true,
|
| 194 |
"confidence": 0.99,
|
| 195 |
-
"evidence": "
|
| 196 |
-
"reason": "Context
|
| 197 |
}
|
| 198 |
}
|
| 199 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"mcqs": {
|
| 3 |
"1": {
|
| 4 |
+
"câu hỏi": "Trong bảng so sánh các phương pháp xử lý Feature Correlation, phương pháp nào được mô tả có nền tảng thống kê và sử dụng ngưỡng (threshold) khách quan?",
|
| 5 |
"lựa chọn": {
|
| 6 |
+
"a": "Loại bỏ Features",
|
| 7 |
+
"b": "VIF-based Removal",
|
| 8 |
+
"c": "PCA",
|
| 9 |
+
"d": "Autoencoder"
|
| 10 |
},
|
| 11 |
+
"đáp án": "VIF-based Removal"
|
| 12 |
},
|
| 13 |
"2": {
|
| 14 |
+
"câu hỏi": "Trong ví dụ pipeline, bước nào được dùng để giảm ảnh hưởng của các giá trị ngoại lệ (outliers) lên các đặc trưng?",
|
| 15 |
"lựa chọn": {
|
| 16 |
+
"a": "RobustScaler",
|
| 17 |
+
"b": "EditedNearestNeighbours",
|
| 18 |
+
"c": "KNeighborsClassifier",
|
| 19 |
+
"d": "StratifiedKFold"
|
| 20 |
},
|
| 21 |
+
"đáp án": "RobustScaler"
|
| 22 |
},
|
| 23 |
"3": {
|
| 24 |
+
"câu hỏi": "SMOTE tạo ra các điểm thiểu số tổng hợp mới bằng cách nào?",
|
| 25 |
"lựa chọn": {
|
| 26 |
+
"a": "Sao chép ngẫu nhiên các mẫu thiểu số hiện có.",
|
| 27 |
+
"b": "Nội suy giữa một mẫu thiểu số và một trong các hàng xóm thiểu số gần nhất của nó.",
|
| 28 |
+
"c": "Tạo các mẫu tổng hợp từ dữ liệu lớp đa số.",
|
| 29 |
+
"d": "Loại bỏ một số mẫu đa số để cân bằng dữ liệu."
|
| 30 |
},
|
| 31 |
+
"đáp án": "Nội suy giữa một mẫu thiểu số và một trong các hàng xóm thiểu số gần nhất của nó."
|
| 32 |
},
|
| 33 |
"4": {
|
| 34 |
+
"câu hỏi": "Theo nội dung trên, phương pháp nào được đề xuất để tăng cường ảnh hưởng của lớp thiểu số trong kNN?",
|
| 35 |
"lựa chọn": {
|
| 36 |
+
"a": "Tăng giá trị k",
|
| 37 |
+
"b": "Bỏ phiếu kNN có trọng số khoảng cách",
|
| 38 |
+
"c": "Giảm số chiều dữ liệu",
|
| 39 |
+
"d": "Sử dụng thuật toán Random Forest"
|
| 40 |
},
|
| 41 |
+
"đáp án": "Bỏ phiếu kNN có trọng số khoảng cách"
|
| 42 |
},
|
| 43 |
"5": {
|
| 44 |
+
"câu hỏi": "Trong ví dụ về dataset mất cân bằng, tại sao thuật toán 1 (luôn trả về 0) vẫn đạt accuracy 99%?",
|
| 45 |
"lựa chọn": {
|
| 46 |
+
"a": "Vì số lượng bệnh nhân không mắc ung thư chiếm đa số trong tập dữ liệu.",
|
| 47 |
+
"b": "Vì mô hình được huấn luyện tốt và học được các đặc trưng quan trọng.",
|
| 48 |
+
"c": "Vì độ chính xác (accuracy) luôn phản ánh đúng chất lượng của mô hình.",
|
| 49 |
+
"d": "Vì thuật toán sử dụng chỉ số precision cao để đánh giá."
|
| 50 |
},
|
| 51 |
+
"đáp án": "Vì số lượng bệnh nhân không mắc ung thư chiếm đa số trong tập dữ liệu."
|
| 52 |
}
|
| 53 |
},
|
| 54 |
"validation": {
|
| 55 |
"1": {
|
| 56 |
"supported_by_embeddings": true,
|
| 57 |
+
"max_similarity": 0.6565414071083069,
|
| 58 |
"evidence": [
|
| 59 |
{
|
| 60 |
+
"idx": 118,
|
| 61 |
+
"page": 46,
|
| 62 |
+
"score": 0.6023983359336853,
|
| 63 |
+
"text": "**AI VIETNAM** **aivietnam.edu.vn**\n\n\nHình 5: Ảnh hưởng feature correlation đến performance của KNN\n\n\n**7.5.3 Cách xửlý Feature Correlation**\n\n\nKhi phát hiện các features có correlation cao, chúng ta có nhiều cách tiếp cận đểxửlý vấn đềnày. Dưới\nđây là các phương pháp chính được sửdụng trong thực tế.\n\n\n**7.5.3.1 Loại bỏFeature dư thừa**\n\n\nPhương pháp đơn giản và hiệu quảnhất là loại bỏcác features có correlation cao với nhau. Thông\nthường, chúng ta giữlại feature có tương quan mạnh nhất với target variable hoặc feature có ý nghĩa\nbusiness quan trọng hơn.\n\n\n1 `import` `numpy as np`\n\n2 `import` `pandas as pd`\n\n\n3\n\n\n4 `def` `remove_correlated_features (X, threshold =0.8):`\n\n\n5 `\"\"\"`\n\n\n6 `Remove` `features` `with high` `correlation`\n\n\n7\n\n\n8 `Parameters:`\n\n\n9 `-----------`\n\n\n10 `X : array -like`\n\n\n45"
|
| 64 |
},
|
| 65 |
{
|
| 66 |
+
"idx": 158,
|
| 67 |
+
"page": 46,
|
| 68 |
+
"score": 0.6023983359336853,
|
| 69 |
+
"text": "**AI VIETNAM** **aivietnam.edu.vn**\n\n\nHình 5: Ảnh hưởng feature correlation đến performance của KNN\n\n\n**7.5.3 Cách xửlý Feature Correlation**\n\n\nKhi phát hiện các features có correlation cao, chúng ta có nhiều cách tiếp cận đểxửlý vấn đềnày. Dưới\nđây là các phương pháp chính được sửdụng trong thực tế.\n\n\n**7.5.3.1 Loại bỏFeature dư thừa**\n\n\nPhương pháp đơn giản và hiệu quảnhất là loại bỏcác features có correlation cao với nhau. Thông\nthường, chúng ta giữlại feature có tương quan mạnh nhất với target variable hoặc feature có ý nghĩa\nbusiness quan trọng hơn.\n\n\n1 `import` `numpy as np`\n\n2 `import` `pandas as pd`\n\n\n3\n\n\n4 `def` `remove_correlated_features (X, threshold =0.8):`\n\n\n5 `\"\"\"`\n\n\n6 `Remove` `features` `with high` `correlation`\n\n\n7\n\n\n8 `Parameters:`\n\n\n9 `-----------`\n\n\n10 `X : array -like`\n\n\n45"
|
| 70 |
},
|
| 71 |
{
|
| 72 |
+
"idx": 6,
|
| 73 |
+
"page": 47,
|
| 74 |
+
"score": 0.6565414071083069,
|
| 75 |
+
"text": "nflation Factor)**\n\n\nVIF đo mức độmột feature bịdựđoán bởi các features khác."
|
| 76 |
}
|
| 77 |
],
|
| 78 |
"model_verdict": {
|
| 79 |
+
"supported": false,
|
| 80 |
+
"confidence": 0.9,
|
| 81 |
+
"evidence": "VIF đo mức độ một feature bị dự đoán bởi các features khác.",
|
| 82 |
+
"reason": "Context không cung cấp thông tin về việc VIF-based Removal có nền tảng thống kê và sử dụng ngưỡng khách quan, nên không thể chứng thực đáp án."
|
| 83 |
}
|
| 84 |
},
|
| 85 |
"2": {
|
| 86 |
"supported_by_embeddings": true,
|
| 87 |
+
"max_similarity": 0.9880712032318115,
|
| 88 |
"evidence": [
|
| 89 |
{
|
| 90 |
+
"idx": 8,
|
| 91 |
+
"page": 15,
|
| 92 |
+
"score": 0.9730517864227295,
|
| 93 |
+
"text": "- Nếu KNN cho kết quảquá thấp, ta có thể **phân tích nguyên nhân** (ví dụ: dữliệu có nhiễu,\nphân bốkhông đồng đều, giá trịngoại lai,...) đểhiểu rõ hơn vềdataset. Sau đó, ta có thểchọn\nmột phương pháp khác phù hợp hơn. **Tóm lại:** KNN Regression là một cách tiếp cận đơn giản, không đòi hỏi giảđịnh vềdữliệu, và giúp\nđánh giá tổng quan vềdataset. Tuy nhiên, nếu KNN không hoạt động tốt, ta cần kiểm tra lại dữliệu\nvà cân nhắc phương pháp khác. **6** **Tăng tốc KNN bằng KD-Tree**\n\n\n**Giải thích vềhàm** `fit()` **trong KNN**\n\n\nKhi sửdụng KNN, ta có đoạn code:\n\n\n1 `knn.fit(X_train, y_train)`\n\n2 `pred_i = knn.predict(X_test)`\n\n\nTa biết rằng KNN không thực sựcó giai đoạn \"train\"giống như các mô hình học máy khác (như\nLinear Regression hay Neural Networks). Vậy tại sao vẫn có hàm `fit()`, và nó có thực sự\"train\"mô\nhình không? **Thực tế**, hàm `fit()` trong KNN **không** thực hiện quá trình học (training) mà chỉlưu trữdữliệu\nhuấn luyện và **xây dựng một cấu trúc dữliệu hỗtrợ** đểtăng tốc quá trìn..."
|
| 94 |
},
|
| 95 |
{
|
| 96 |
+
"idx": 113,
|
| 97 |
+
"page": 15,
|
| 98 |
+
"score": 0.9730517864227295,
|
| 99 |
+
"text": "- Nếu KNN cho kết quảquá thấp, ta có thể **phân tích nguyên nhân** (ví dụ: dữliệu có nhiễu,\nphân bốkhông đồng đều, giá trịngoại lai,...) đểhiểu rõ hơn vềdataset. Sau đó, ta có thểchọn\nmột phương pháp khác phù hợp hơn. **Tóm lại:** KNN Regression là một cách tiếp cận đơn giản, không đòi hỏi giảđịnh vềdữliệu, và giúp\nđánh giá tổng quan vềdataset. Tuy nhiên, nếu KNN không hoạt động tốt, ta cần kiểm tra lại dữliệu\nvà cân nhắc phương pháp khác. **6** **Tăng tốc KNN bằng KD-Tree**\n\n\n**Giải thích vềhàm** `fit()` **trong KNN**\n\n\nKhi sửdụng KNN, ta có đoạn code:\n\n\n1 `knn.fit(X_train, y_train)`\n\n2 `pred_i = knn.predict(X_test)`\n\n\nTa biết rằng KNN không thực sựcó giai đoạn \"train\"giống như các mô hình học máy khác (như\nLinear Regression hay Neural Networks). Vậy tại sao vẫn có hàm `fit()`, và nó có thực sự\"train\"mô\nhình không? **Thực tế**, hàm `fit()` trong KNN **không** thực hiện quá trình học (training) mà chỉlưu trữdữliệu\nhuấn luyện và **xây dựng một cấu trúc dữliệu hỗtrợ** đểtăng tốc quá trìn..."
|
| 100 |
},
|
| 101 |
{
|
| 102 |
+
"idx": 154,
|
| 103 |
+
"page": 24,
|
| 104 |
+
"score": 0.9880712032318115,
|
| 105 |
+
"text": "Một hệquảcủa lời nguyền chiều dữliệu là **hầu hết các điểm dữliệu**\n**nằm rất gần các siêu phẳng phân loại** _→_ chỉcần nhiễu nhỏ(thường khó nhận ra) là có thểđổi\nnhãn phân loại. Hiện tượng này chính là _mẫu đối kháng_ ( _adversarial samples_ ). **7.1.3 Xửlý Dữliệu nhiều chiều**\n\n\nXửlý dữliệu có kích thước cao không phải là một nhiệm vụdễdàng. Kích thước cao có nghĩa là chúng\nta cần lưu trữcác vectơ hoặc mảng với sốlượng phần tử/sốlượng lớn, điều này tiêu tốn một lượng lớn\nbộnhớlưu trữ. Không chỉbộnhớlưu trữ, mà các thao tác tìm kiếm trong không gian kích thước cao\ncũng là một nút thắt cổchai, vì thời gian và tính toán tăng theo cấp sốnhân. Do đó, việc giảm kích\nthước dữliệu là rất quan trọng, nhưng khi giảm kích thước, chúng ta cũng cần giữlại được phân bố\nhoặc các mẫu biểu hiện trong không gian kích thước cao. **7.1.4 Giảm Kích Thước: PCA, LDA, t-SNE**\n\n\nCác kỹthuật giảm kích thước biến đổi dữliệu có chiều cao thành không gian có chiều thấp hơn, đồng\nthời bảo tồn các cấu trúc quan tr..."
|
| 106 |
}
|
| 107 |
],
|
| 108 |
"model_verdict": {
|
| 109 |
+
"supported": false,
|
| 110 |
+
"confidence": 0.9,
|
| 111 |
+
"evidence": "",
|
| 112 |
+
"reason": "Trong ngữ cảnh không có đề cập đến RobustScaler hay bất kỳ bước nào trong pipeline dùng để giảm ảnh hưởng của outliers"
|
| 113 |
}
|
| 114 |
},
|
| 115 |
"3": {
|
| 116 |
"supported_by_embeddings": true,
|
| 117 |
+
"max_similarity": 0.8513287305831909,
|
| 118 |
"evidence": [
|
| 119 |
{
|
| 120 |
+
"idx": 104,
|
| 121 |
+
"page": 29,
|
| 122 |
+
"score": 0.8513287305831909,
|
| 123 |
+
"text": "Tuy nhiên, khi một lớp hiếm, hầu hết các hàng xóm đó có thể\nđến từlớp chiếm ưu thế- tạo ra sựthiên vịtrong kết quả. 28"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
}
|
| 125 |
],
|
| 126 |
"model_verdict": {
|
| 127 |
"supported": true,
|
| 128 |
"confidence": 0.99,
|
| 129 |
+
"evidence": "SMOTE ... tạo ra các điểm thiểu số tổng hợp mới bằng cách nội suy giữa các điểm hiện có. Ý tưởng cơ bản: đối với mỗi mẫu thiểu số, chọn một trong k hàng xóm thiểu số gần nhất của nó và tạo một điểm ở giữa.",
|
| 130 |
+
"reason": "Context explicitly describes SMOTE generating synthetic minority points by interpolating between a minority sample and one of its nearest minority neighbors."
|
| 131 |
}
|
| 132 |
},
|
| 133 |
"4": {
|
| 134 |
"supported_by_embeddings": true,
|
| 135 |
+
"max_similarity": 0.7898242473602295,
|
| 136 |
"evidence": [
|
| 137 |
{
|
| 138 |
+
"idx": 78,
|
| 139 |
+
"page": 13,
|
| 140 |
+
"score": 0.7718899250030518,
|
| 141 |
+
"text": "**AI VIETNAM** **aivietnam.edu.vn**\n\n\n - **Tại sao k chẵn ảnh hưởng đến độchính xác?**\nĐểhiểu điều này, ta xem lại các bước của KNN:\n\n\n1. Chọn sốlượng hàng xóm k. 2. Định nghĩa phương pháp đo độtương đồng (thường là Euclidean distance). 3. Tìm **k hàng xóm gần nhất** . 4. **Voting đểdựđoán nhãn của điểm mới** . Ở **bước 4 (Voting)**, nếu k là sốchẵn, có thểxảy ra trường hợp **sốlượng nhãn bịchia đều** giữa\nhai lớp. Ví dụ: - Với **k = 4**, nếu 2 điểm thuộc loại A và 2 điểm thuộc loại B, thuật toán sẽkhông biết\nchọn loại nào, dẫn đến sựbất ổn định trong dựđoán. - Tương tự, trong bài toán phân loại nhiều lớp\nnhư **Iris dataset**, giá trịk không phù hợp có thểlàm giảm hiệu suất mô hình. **4.3** **Cách giải quyết vấn đềkhi k là sốchẵn?**\n\n\nNếu chỉsửdụng voting, việc chọn loại A hay B đều hợp lý, nhưng điều này không tối ưu. Thay vào đó,\nta có thể **đánh trọng số(weighting)** đểưu tiên các điểm gần hơn trong không gian đặc trưng. **Ba phương pháp đánh trọng sốtrong KNN:**\n\n\n1. **Uniform wei..."
|
| 142 |
},
|
| 143 |
{
|
| 144 |
+
"idx": 199,
|
| 145 |
+
"page": 13,
|
| 146 |
+
"score": 0.7718899250030518,
|
| 147 |
+
"text": "**AI VIETNAM** **aivietnam.edu.vn**\n\n\n - **Tại sao k chẵn ảnh hưởng đến độchính xác?**\nĐểhiểu điều này, ta xem lại các bước của KNN:\n\n\n1. Chọn sốlượng hàng xóm k. 2. Định nghĩa phương pháp đo độtương đồng (thường là Euclidean distance). 3. Tìm **k hàng xóm gần nhất** . 4. **Voting đểdựđoán nhãn của điểm mới** . Ở **bước 4 (Voting)**, nếu k là sốchẵn, có thểxảy ra trường hợp **sốlượng nhãn bịchia đều** giữa\nhai lớp. Ví dụ: - Với **k = 4**, nếu 2 điểm thuộc loại A và 2 điểm thuộc loại B, thuật toán sẽkhông biết\nchọn loại nào, dẫn đến sựbất ổn định trong dựđoán. - Tương tự, trong bài toán phân loại nhiều lớp\nnhư **Iris dataset**, giá trịk không phù hợp có thểlàm giảm hiệu suất mô hình. **4.3** **Cách giải quyết vấn đềkhi k là sốchẵn?**\n\n\nNếu chỉsửdụng voting, việc chọn loại A hay B đều hợp lý, nhưng điều này không tối ưu. Thay vào đó,\nta có thể **đánh trọng số(weighting)** đểưu tiên các điểm gần hơn trong không gian đặc trưng. **Ba phương pháp đánh trọng sốtrong KNN:**\n\n\n1. **Uniform wei..."
|
| 148 |
+
},
|
| 149 |
+
{
|
| 150 |
+
"idx": 71,
|
| 151 |
+
"page": 31,
|
| 152 |
+
"score": 0.7898242473602295,
|
| 153 |
+
"text": "SMOTE (Synthetic Minority\nOver-sampling Technique) tạo ra các điểm thiểu sốtổng hợp mới bằng cách nội suy giữa các điểm hiện\ncó. Ý tưởng cơ bản: đối với mỗi mẫu thiểu số, chọn một trong k hàng xóm thiểu sốgần nhất của nó và\ntạo một điểm ởgiữa. 1 `from` `imblearn.over_sampling` `import` `SMOTE`\n\n2 `sm = SMOTE(random_state =42)`\n\n3 `X_res, y_res = sm.fit_resample(X_train, y_train)`\n\n4 `print (\" Before: \", sorted(Counter(y_train).items ()))`\n\n5 `print (\" After: \", sorted(Counter(y_res).items ()))`\n\n\n**Khi nào sửdụng:** SMOTE phù hợp khi bạn có đủmẫu thiểu sốgốc đểnội suy có ý nghĩa là có\nthể. Nó giảđịnh lớp thiểu sốcó phần nào liên tục trong không gian đặc trưng. **Mẹo triển khai:** Sửdụng imblearn trong một pipeline đểtránh rò rỉdữliệu:\n\n\n1 `from` `imblearn.pipeline` `import` `Pipeline`\n\n2 `pipe = Pipeline ([`\n\n3 `(’smote ’, SMOTE(random_state =42)),`\n\n4 `(’knn ’, KNeighborsClassifier (n_neighbors =5))`\n\n5 `])`\n\n6 `pipe.fit(X_train, y_train)`\n\n\n**7.2.4 Giảm mẫu Lớp đa số**\n\n\nĐôi khi việc..."
|
| 154 |
}
|
| 155 |
],
|
| 156 |
"model_verdict": {
|
| 157 |
"supported": true,
|
| 158 |
+
"confidence": 0.9,
|
| 159 |
+
"evidence": "thay vào đó, ta có thể **đánh trọng số(weighting)** để ưu tiên các điểm gần hơn trong không gian đặc trưng.",
|
| 160 |
+
"reason": "Context đề cập đến việc sử dụng trọng số (weighting) trong kNN để ưu tiên các điểm gần hơn, tức là bỏ phiếu kNN có trọng số khoảng cách, nên đáp án được chứng thực."
|
| 161 |
}
|
| 162 |
},
|
| 163 |
"5": {
|
| 164 |
"supported_by_embeddings": true,
|
| 165 |
+
"max_similarity": 0.766804039478302,
|
| 166 |
"evidence": [
|
| 167 |
{
|
| 168 |
+
"idx": 8,
|
| 169 |
+
"page": 15,
|
| 170 |
+
"score": 0.766804039478302,
|
| 171 |
+
"text": "- Nếu KNN cho kết quảquá thấp, ta có thể **phân tích nguyên nhân** (ví dụ: dữliệu có nhiễu,\nphân bốkhông đồng đều, giá trịngoại lai,...) đểhiểu rõ hơn vềdataset. Sau đó, ta có thểchọn\nmột phương pháp khác phù hợp hơn. **Tóm lại:** KNN Regression là một cách tiếp cận đơn giản, không đòi hỏi giảđịnh vềdữliệu, và giúp\nđánh giá tổng quan vềdataset. Tuy nhiên, nếu KNN không hoạt động tốt, ta cần kiểm tra lại dữliệu\nvà cân nhắc phương pháp khác. **6** **Tăng tốc KNN bằng KD-Tree**\n\n\n**Giải thích vềhàm** `fit()` **trong KNN**\n\n\nKhi sửdụng KNN, ta có đoạn code:\n\n\n1 `knn.fit(X_train, y_train)`\n\n2 `pred_i = knn.predict(X_test)`\n\n\nTa biết rằng KNN không thực sựcó giai đoạn \"train\"giống như các mô hình học máy khác (như\nLinear Regression hay Neural Networks). Vậy tại sao vẫn có hàm `fit()`, và nó có thực sự\"train\"mô\nhình không? **Thực tế**, hàm `fit()` trong KNN **không** thực hiện quá trình học (training) mà chỉlưu trữdữliệu\nhuấn luyện và **xây dựng một cấu trúc dữliệu hỗtrợ** đểtăng tốc quá trìn..."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 172 |
}
|
| 173 |
],
|
| 174 |
"model_verdict": {
|
| 175 |
"supported": true,
|
| 176 |
"confidence": 0.99,
|
| 177 |
+
"evidence": "Giả sủ trong 1000 bệnh nhân, chỉ có 5 người thực sự bị ung thư... Giải thuật 1 (Sai nhưng có Accuracy cao) trả về 0 và vẫn có accuracy = 99%",
|
| 178 |
+
"reason": "Context nêu rõ dataset mất cân bằng với đa số bệnh nhân không mắc ung thư, vì vậy thuật toán luôn trả về 0 vẫn đạt accuracy cao."
|
| 179 |
}
|
| 180 |
}
|
| 181 |
}
|
test/raw_resp.json
CHANGED
|
@@ -1,33 +1,33 @@
|
|
| 1 |
{
|
| 2 |
-
"id": "chatcmpl-
|
| 3 |
"choices": [
|
| 4 |
{
|
| 5 |
"finish_reason": "stop",
|
| 6 |
"index": 0,
|
| 7 |
"message": {
|
| 8 |
-
"content": "{\n \"supported\": true,\n \"confidence\": 0.
|
| 9 |
-
"reasoning": "We need to determine if the answer (
|
| 10 |
"role": "assistant"
|
| 11 |
}
|
| 12 |
}
|
| 13 |
],
|
| 14 |
-
"created":
|
| 15 |
"model": "gpt-oss-120b",
|
| 16 |
"system_fingerprint": "fp_e25f231b468af246abb0",
|
| 17 |
"object": "chat.completion",
|
| 18 |
"usage": {
|
| 19 |
-
"prompt_tokens":
|
| 20 |
-
"completion_tokens":
|
| 21 |
-
"total_tokens":
|
| 22 |
"prompt_tokens_details": {
|
| 23 |
"cached_tokens": 0
|
| 24 |
}
|
| 25 |
},
|
| 26 |
"time_info": {
|
| 27 |
-
"queue_time": 0.
|
| 28 |
-
"prompt_time": 0.
|
| 29 |
-
"completion_time": 0.
|
| 30 |
-
"total_time": 0.
|
| 31 |
-
"created":
|
| 32 |
}
|
| 33 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"id": "chatcmpl-1499765c-023c-4c15-8dca-3c7946ae5d7f",
|
| 3 |
"choices": [
|
| 4 |
{
|
| 5 |
"finish_reason": "stop",
|
| 6 |
"index": 0,
|
| 7 |
"message": {
|
| 8 |
+
"content": "{\n \"supported\": true,\n \"confidence\": 0.9,\n \"evidence\": \"d −→ p ( t ) ∧−→ q ( t ) dt ... = [−→] p ( t ) ∧ [d] [−→] q\",\n \"reason\": \"Context includes derivation showing derivative of cross product equals p'(t)×q(t) + p(t)×q'(t)\"\n}",
|
| 9 |
+
"reasoning": "We need to determine if the answer (the derivative formula) is supported by the context. The question: \"Theo công thức trong nội dung, đạo hàm của tích có hướng của hai vectơ p(t) và q(t) là gì?\" Options, correct answer is a: d/dt [p(t) × q(t)] = p'(t) × q(t) + p(t) × q'(t). We need to see if the context contains that formula. The context includes some garbled text but includes lines like:\n\n\"[(] [t] [)] + [d] [−→] q [(] [t] [)] dt dt ... = [d] [−→] p dt\" Not clear.\n\nLater, page 22 shows:\n\n\"d. d −→ p ( t ) ∧−→ q ( t ) dt ... = [d] ... = ... = [−→] p ( t ) ∧ [d] [−→] q ∧ [−→] q ( t ) dt\"\n\nIt seems they derive product rule for cross product: derivative of p × q equals p' × q + p × q'. The context includes lines like:\n\n\"= ... p 2 ( t ) p 3 ( t ) ... = + p 2 ( t ) p 3 [′] [(] [t] [)] ... + p 2 [′] [(] [t] [)] p 3 ( t ) ... = [−→] p ( t ) ∧ [d] [−→] [q] ∧ [−→] q ( t ) dt\"\n\nThus the context does contain the product rule for cross product. So supported = true. Confidence maybe 0.9. Evidence: a snippet showing \"d −→ p ( t ) ∧−→ q ( t ) dt ... = [−→] p ( t ) ∧ [d] [−→] q\". Or earlier: \"d/dt [p(t) × q(t)] = p'(t) × q(t) + p(t) × q'(t)\". The context may not have that exact string but the derivation shows that. Provide short evidence: \"d −→ p ( t ) ∧−→ q ( t ) dt ... = [−→] p ( t ) ∧ [d] [−→] q\". Or \" = [−→] p ( t ) ∧ [d] [−→] q\". That indicates product rule.\n\nThus answer JSON.",
|
| 10 |
"role": "assistant"
|
| 11 |
}
|
| 12 |
}
|
| 13 |
],
|
| 14 |
+
"created": 1755769091,
|
| 15 |
"model": "gpt-oss-120b",
|
| 16 |
"system_fingerprint": "fp_e25f231b468af246abb0",
|
| 17 |
"object": "chat.completion",
|
| 18 |
"usage": {
|
| 19 |
+
"prompt_tokens": 1924,
|
| 20 |
+
"completion_tokens": 628,
|
| 21 |
+
"total_tokens": 2552,
|
| 22 |
"prompt_tokens_details": {
|
| 23 |
"cached_tokens": 0
|
| 24 |
}
|
| 25 |
},
|
| 26 |
"time_info": {
|
| 27 |
+
"queue_time": 0.166335959,
|
| 28 |
+
"prompt_time": 0.097067263,
|
| 29 |
+
"completion_time": 0.358066944,
|
| 30 |
+
"total_time": 0.6239833831787109,
|
| 31 |
+
"created": 1755769091
|
| 32 |
}
|
| 33 |
}
|
test/test-api-key.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
| 1 |
import os
|
| 2 |
from qdrant_client import QdrantClient
|
|
|
|
| 3 |
|
| 4 |
qdrant_client = QdrantClient(
|
| 5 |
url=os.environ.get('QDRANT_URL'),
|
|
@@ -7,19 +8,33 @@ qdrant_client = QdrantClient(
|
|
| 7 |
)
|
| 8 |
print(qdrant_client.get_collections())
|
| 9 |
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
#
|
| 14 |
-
|
| 15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
print()
|
| 17 |
print(os.environ.get('HF_API_KEY'))
|
| 18 |
print(os.environ.get('TOGETHER_API_KEY'))
|
| 19 |
print(os.environ.get('QDRANT_URL'))
|
| 20 |
print(os.environ.get('QDRANT_API_KEY'))
|
| 21 |
print(os.environ.get('CEREBRAS_API_KEY'))
|
| 22 |
-
# cerebras API: your_key
|
| 23 |
|
| 24 |
|
| 25 |
"""
|
|
|
|
| 1 |
import os
|
| 2 |
from qdrant_client import QdrantClient
|
| 3 |
+
from cerebras.cloud.sdk import Cerebras
|
| 4 |
|
| 5 |
qdrant_client = QdrantClient(
|
| 6 |
url=os.environ.get('QDRANT_URL'),
|
|
|
|
| 8 |
)
|
| 9 |
print(qdrant_client.get_collections())
|
| 10 |
|
| 11 |
+
import os
|
| 12 |
+
|
| 13 |
+
client = Cerebras(
|
| 14 |
+
# This is the default and can be omitted
|
| 15 |
+
api_key=os.environ.get("CEREBRAS_API_KEY")
|
| 16 |
+
)
|
| 17 |
+
|
| 18 |
+
stream = client.chat.completions.create(
|
| 19 |
+
messages=[
|
| 20 |
+
{
|
| 21 |
+
"role": "system",
|
| 22 |
+
"content": ""
|
| 23 |
+
}
|
| 24 |
+
],
|
| 25 |
+
model="gpt-oss-120b",
|
| 26 |
+
stream=True,
|
| 27 |
+
max_completion_tokens=65536,
|
| 28 |
+
temperature=1,
|
| 29 |
+
top_p=1
|
| 30 |
+
)
|
| 31 |
+
|
| 32 |
print()
|
| 33 |
print(os.environ.get('HF_API_KEY'))
|
| 34 |
print(os.environ.get('TOGETHER_API_KEY'))
|
| 35 |
print(os.environ.get('QDRANT_URL'))
|
| 36 |
print(os.environ.get('QDRANT_API_KEY'))
|
| 37 |
print(os.environ.get('CEREBRAS_API_KEY'))
|
|
|
|
| 38 |
|
| 39 |
|
| 40 |
"""
|
test/test_case.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import requests
|
| 3 |
+
# uvicorn app:app --reload --reload-exclude test/
|
| 4 |
+
|
| 5 |
+
def test_upload_files(folder_path=None):
|
| 6 |
+
url = "http://127.0.0.1:8000/upload_multiple_files"
|
| 7 |
+
base = r"D:/graduation_project/mcq-generator/pdfs"
|
| 8 |
+
# file1 = os.path.join(base, "/Calculus2/Calculus2-1.pdf")
|
| 9 |
+
# file2 = os.path.join(base, "/Calculus2/Calculus2-2.pdf")
|
| 10 |
+
# file3 = os.path.join(base, "/Calculus2/Calculus2-3.pdf")
|
| 11 |
+
# file4 = os.path.join(base, "/Calculus2/Calculus2-4.pdf")
|
| 12 |
+
# file5 = os.path.join(base, "/Calculus2/Calculus2-5.pdf")
|
| 13 |
+
|
| 14 |
+
calculus_folder = os.path.join(base, "Calculus2")
|
| 15 |
+
files = []
|
| 16 |
+
for filename in os.listdir(calculus_folder):
|
| 17 |
+
if filename.endswith(".pdf"):
|
| 18 |
+
file_path = os.path.join(calculus_folder, filename)
|
| 19 |
+
file_name_without_suffix = os.path.splitext(filename)[0] # remove suffix
|
| 20 |
+
files.append(
|
| 21 |
+
("files", (file_name_without_suffix, open(file_path, "rb"))),
|
| 22 |
+
)
|
| 23 |
+
|
| 24 |
+
#? Upload multiple files manually
|
| 25 |
+
# files.append(
|
| 26 |
+
# ("files", (f"{file1}", open(file2, "rb"))),
|
| 27 |
+
# ("files", (f"{file2}", open(file2, "rb"))),
|
| 28 |
+
# )
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
data = {"collection_name": "math", "overwrite": "True", 'qdrant_filename_prefix': "math"}
|
| 32 |
+
resp = requests.post(url, files=files, data=data)
|
| 33 |
+
print(resp.status_code, resp.json())
|
| 34 |
+
|
| 35 |
+
def test_generation():
|
| 36 |
+
pass
|
test/verdict_context.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
['[page 21] t )\n\n\n\n\n[(] [t] [)]\n\ndt ∧ [−→] q ( t )\n\n\n\n( t ) + [d] [−→] [p] [(] [t] [)]\n\ndt dt\n\n\n\n_Lời giải_ . a. Giảsử [−→] p ( t ) = ( p 1 ( t ), p 2 ( t ), p 3 ( t )), [−→] q ( t ) = ( q 1 ( t ), q 2 ( t ), q 3 ( t )), khi đó:\n\n\nd −→ d\ndt � p ( t ) + −→ q ( t ) � = dt [(] [p] [1] [ (] [t] [) +] [ q] [1] [ (] [t] [)] [,][ p] [2] [ (] [t] [) +] [ q] [2] [ (] [t] [)] [,][ p] [3] [ (] [t] [) +] [ q] [3] [ (] [t] [))]\n\n\n=\n�p 1 [′] [(] [t] [) +] [ q] 1 [′] [(] [t] [)] [,][ p] 2 [′] [(] [t] [) +] [ q] 2 [′] [(] [t] [)] [,][ p] 3 [′] [(] [t] [) +] [ q] 3 [′] [(] [t] [)] �\n\n= �p 1 [′] [(] [t] [)] [,][ p] 2 [′] [(] [t] [)] [,][ p] 3 [′] [(] [t] [)] � + �q 1 [′] [(] [t] [)] [,][ q] 2 [′] [(] [t] [)] [,][ q] 3 [′] [(] [t] [)] �\n\n\n\n\n[p]\n\n[(] [t] [)] + [d] [−→] [q] [(] [t] [)]\n\ndt dt\n\n\n\n\n[(] [t] [)]\n= [d] [−→] [p]\n\n\n\ndt\n\n\n\nb.', '[page 22] _20_ _Chương 1. Các ứng dụng của phép tính vi phân trong hình học_\n\n\nd. d −→\n� p ( t ) ∧−→ q ( t ) �\ndt\n\n\n\n,\n�����\n\n\n\np 3 ( t ) p 1 ( t )\n����� q 3 ( t ) q 1 ( t )\n\n\n\n,\n�����\n\n\n\np 1 ( t ) p 2 ( t )\n����� q 1 ( t ) q 2 ( t )\n\n\n\n�����\n\n\n\n= [d]\n\ndt\n\n\n= ... p 2 ( t ) p 3 ( t )\n������ q 2 ( t ) q 3 ( t )\n\n\n\n�\n\n\n\np 3 ( t ) p 1 [′] [(] [t] [)]\n\n�����, ����� q 3 ( t ) q 1 [′] [(] [t] [)]\n\n\np 3 [′] [(] [t] [)] p 1 ( t )\n\n�����, ����� q 3 [′] [(] [t] [)] q 1 ( t )\n\n\n\np 1 ( t ) p 2 [′] [(] [t] [)]\n\n�����, ����� q 1 ( t ) q 2 [′] [(] [t] [)]\n\n\np 1 [′] [(] [t] [)] p 2 ( t )\n\n�����, ����� q 1 [′] [(] [t] [)] q 2 ( t )\n\n\n\n������\n\n������\n\n\n\n=\n\n\n+\n\n\n\np 2 ( t ) p 3 [′] [(] [t] [)]\n������ q 2 ( t ) q 3 [′] [(] [t] [)]\n\n\np 2 [′] [(] [t] [)] p 3 ( t )\n������ q 2 [′] [(] [t] [)] q 3 ( t )\n\n\n\n\n[(] [t] [)] + [d] [−→] [p] [(] [t] [)]\n\ndt dt\n\n\n\n\n[(] [t] [)]\n= [−→] p ( t ) ∧ [d] [−→] [q]\n\n\n\n∧ [−→] q ( t )\ndt\n\n\n\n**Bài tập 1.5.** Viết phương trình tiếp tuyến và pháp diện của đường:\n\n\n\na. b.', '[page 21] �\n\n\n\n\n[p]\n\n[(] [t] [)] + [d] [−→] [q] [(] [t] [)]\n\ndt dt\n\n\n\n\n[(] [t] [)]\n= [d] [−→] [p]\n\n\n\ndt\n\n\n\nb. d\n_α_ t [−→] t\n� ( ) p ( ) �\ndt\n\n\n′ ′ ′\n= � [ _α_ ( t ) p 1 ( t )], [ _α_ ( t ) p 2 ( t )], [ _α_ ( t ) p 3 ( t )] �\n\n= � _α_ [′] ( t ) p 1 ( t ) + _α_ ( t ) p 1 [′] [(] [t] [)] [,] _[ α]_ [′] [ (] [t] [)] [ p] [2] [(] [t] [) +] _[ α]_ [ (] [t] [)] [ p] 2 [′] [(] [t] [)] [,] _[ α]_ [′] [ (] [t] [)] [ p] [3] [(] [t] [) +] _[ α]_ [ (] [t] [)] [ p] 3 [′] [(] [t] [)] �\n\n= � _α_ [′] ( t ) p 1 ( t ), _α_ [′] ( t ) p 2 ( t ), _α_ [′] ( t ) p 3 ( t ) � + � _α_ ( t ) p 1 [′] [(] [t] [)] [,] _[ α]_ [ (] [t] [)] [ p] 2 [′] [(] [t] [)] [,] _[ α]_ [ (] [t] [)] [ p] 3 [′] [(] [t] [)] �\n\n\n[(] [t] [)]\n= _α_ ( t ) [d] [−→] [p] + _α_ [′] ( t ) [−→] p ( t )\n\ndt\n\n\nc. Chứng minh tương tựnhư câu b, sửdụng công thức đạo hàm của hàm hợp. 19']
|