File size: 22,901 Bytes
0063d17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "1195e917",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using device: cuda\n"
     ]
    }
   ],
   "source": [
    "!python settings.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "01589fc8",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from tqdm.autonotebook import tqdm\n",
    "\n",
    "import faiss\n",
    "from sentence_transformers import SentenceTransformer, CrossEncoder\n",
    "\n",
    "from settings import OUTPUT_DIR, DEVICE\n",
    "\n",
    "os.environ['WANDB_DISABLED'] = 'true'\n",
    "\n",
    "from transformers import logging\n",
    "logging.set_verbosity_error()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "057e852f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# data = {\n",
    "#     'corpus': pd.read_parquet('data/processed/corpus_data.parquet'),\n",
    "#     'train' : pd.read_parquet('data/processed/train_data.parquet'),\n",
    "#     'test'  : pd.read_parquet('data/processed/test_data.parquet')\n",
    "# }\n",
    "# for split in ['train', 'test']:\n",
    "#     data[split]['cid']          = data[split]['cid'].apply(lambda x: x.tolist())\n",
    "#     data[split]['context_list'] = data[split]['context_list'].apply(lambda x: x.tolist())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "5634b72a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SentenceTransformer(\n",
       "  (0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: BertModel \n",
       "  (1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})\n",
       ")"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fine_tuned_model = SentenceTransformer(OUTPUT_DIR, device=DEVICE)\n",
    "fine_tuned_model.half()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "62cc0ead",
   "metadata": {},
   "outputs": [],
   "source": [
    "passages          = pd.read_parquet('data/processed/corpus_data.parquet')['text'].tolist()\n",
    "# corpus_embeddings = fine_tuned_model.encode(\n",
    "#     passages, \n",
    "#     batch_size=128,\n",
    "#     convert_to_numpy=True, \n",
    "#     normalize_embeddings=True,\n",
    "#     show_progress_bar=True, \n",
    "#     device=DEVICE,\n",
    "# ).astype(np.float32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "465e8d2a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# d         = corpus_embeddings.shape[1]  # 768\n",
    "# cpu_index = faiss.IndexFlatIP(d)\n",
    "\n",
    "# res       = faiss.StandardGpuResources()\n",
    "# gpu_index = faiss.index_cpu_to_gpu(res, 0, cpu_index)\n",
    "# gpu_index.add(corpus_embeddings)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "af365371",
   "metadata": {},
   "outputs": [],
   "source": [
    "# final_cpu_index = faiss.index_gpu_to_cpu(gpu_index)\n",
    "# faiss.write_index(final_cpu_index, 'data/retrieval/legal_faiss.index')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "9251d0db",
   "metadata": {},
   "outputs": [],
   "source": [
    "legal_index = faiss.read_index('data/retrieval/legal_faiss.index')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "9f54c596",
   "metadata": {},
   "outputs": [],
   "source": [
    "def retrieval(emb_model, query, index, top_k=10):\n",
    "    q_emb = emb_model.encode(\n",
    "        query, \n",
    "        convert_to_numpy=True, \n",
    "        normalize_embeddings=True,\n",
    "    ).astype(np.float32).reshape(1, -1)\n",
    "    \n",
    "    scores, indices = index.search(q_emb, top_k)  # shape: (1, top_k)\n",
    "    \n",
    "    cand_idxs   = indices[0]\n",
    "    cand_scores = scores[0]\n",
    "    cand_texts  = [passages[i] for i in cand_idxs]\n",
    "\n",
    "    results = [{\n",
    "        'index': int(cand_idxs[i]),\n",
    "        'score': float(cand_scores[i]),\n",
    "        'text': cand_texts[i]\n",
    "    } for i in range(len(cand_idxs))]\n",
    "    \n",
    "    return results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "ece21ef6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Rank 1] index=76423, score=0.6417\n",
      "Tội làm nhục người khác\n",
      "1. Người nào xúc phạm nghiêm trọng nhân phẩm, danh dự của người khác, thì bị phạt cảnh cáo, phạt tiền từ 10.000.000 đồng đến 30.000.000 đồng hoặc phạt cải tạo không giam giữ đến 03 năm.\n",
      "...\n",
      "--------------------------------------------------------------------------------\n",
      "[Rank 2] index=99131, score=0.6155\n",
      "“Người nào có hành vi xâm phạm danh dự, nhân phẩm của người khác mà gây thiệt hại thì phải bồi thường.”\n",
      "--------------------------------------------------------------------------------\n",
      "[Rank 3] index=228550, score=0.5932\n",
      "i) Điều 353, các khoản 2, 3 và 4 (tội tham ô tài sản); Điều 354, các khoản 2, 3 và 4 (tội nhận hối lộ); Điều 355, các khoản 2, 3 và 4 (tội lạm dụng chức vụ, quyền hạn chiếm đoạt tài sản); Điều 356, các khoản 2 và 3 (tội lợi dụng chức vụ, quyền hạn trong khi thi hành công vụ); Điều 357, các khoản 2 và 3 (tội lạm quyền trong khi thi hành công vụ); Điều 358, các khoản 2, 3 và 4 (tội lợi dụng chức vụ, quyền hạn gây ảnh hưởng đối với người khác để trục lợi); Điều 359, các khoản 2, 3 và 4 (tội giả mạo trong công tác); Điều 364, các khoản 2, 3 và 4 (tội đưa hối lộ); Điều 365, các khoản 2, 3 và 4 (tội làm môi giới hối lộ);\n",
      "k) Điều 373, các khoản 3 và 4 (tội dùng nhục hình); Điều 374, các khoản 3 và 4 (tội bức cung); Điều 386, khoản 2 (tội trốn khỏi nơi giam, giữ hoặc trốn khi đang bị áp giải, dẫn giải, đang bị xét xử);\n",
      "l) Các điều từ Điều 421 đến Điều 425 về các tội phá hoại hòa bình, chống loài người và tội phạm chiến tranh.\n",
      "2. Phạm tội trong trường hợp lợi dụng chức vụ, quyền hạn cản trở việc phát hiện tội phạm hoặc có những hành vi khác bao che người phạm tội, thì bị phạt tù từ 02 năm đến 07 năm.\n",
      "Điều 390. Tội không tố giác tội phạm\n",
      "1. Người nào biết rõ một trong các tội phạm được quy định tại Điều 389 của Bộ luật này đang được chuẩn bị, đang hoặc đã được thực hiện mà không tố giác, nếu không thuộc trường hợp quy định tại khoản 2 Điều 19 của Bộ luật này, thì bị phạt cảnh cáo, phạt cải tạo không giam giữ đến 03 năm hoặc phạt tù từ 06 tháng đến 03 năm.\n",
      "2. Người không tố giác nếu đã có hành động can ngăn người phạm tội hoặc hạn chế tác hại của tội phạm, thì có thể được miễn trách nhiệm hình sự hoặc miễn hình phạt.\n",
      "Điều 391. Tội gây rối trật tự phiên tòa\n",
      "1. Người nào tại phiên tòa mà thóa mạ, xúc phạm nghiêm trọng danh dự, nhân phẩm thành viên Hội đồng xét xử, những người khác có mặt tại phiên tòa hoặc có hành vi đập phá tài sản thì bị phạt tiền từ 10.000.000 đồng đến 100.000.000 đồng, phạt cải tạo không giam giữ đến 01 năm hoặc phạt tù từ 03 tháng đến 01 năm.\n",
      "2. Phạm tội thuộc một trong các trường hợp sau đây, thì bị phạt tù từ 01 năm đến 03 năm:\n",
      "a) Gây náo loạn phiên tòa dẫn đến phải dừng phiên tòa;\n",
      "b) Hành hung thành viên Hội đồng xét xử.\n",
      "--------------------------------------------------------------------------------\n",
      "[Rank 4] index=228404, score=0.5660\n",
      "Điều 155. Tội làm nhục người khác\n",
      "1. Người nào xúc phạm nghiêm trọng nhân phẩm, danh dự của người khác, thì bị phạt cảnh cáo, phạt tiền từ 10.000.000 đồng đến 30.000.000 đồng hoặc phạt cải tạo không giam giữ đến 03 năm.\n",
      "2. Phạm tội thuộc một trong các trường hợp sau đây, thì bị phạt tù từ 03 tháng đến 02 năm:\n",
      "a) Phạm tội 02 lần trở lên;\n",
      "b) Đối với 02 người trở lên;\n",
      "c) Lợi dụng chức vụ, quyền hạn;\n",
      "d) Đối với người đang thi hành công vụ;\n",
      "đ) Đối với người dạy dỗ, nuôi dưỡng, chăm sóc, chữa bệnh cho mình;\n",
      "e) Sử dụng mạng máy tính hoặc mạng viễn thông, phương tiện điện tử để phạm tội;\n",
      "g) Gây rối loạn tâm thần và hành vi của nạn nhân từ 11% đến 45%.\n",
      "3. Phạm tội thuộc một trong các trường hợp sau đây, thì bị phạt tù từ 02 năm đến 05 năm:\n",
      "a) Gây rối loạn tâm thần và hành vi của nạn nhân 46% trở lên;\n",
      "b) Làm nạn nhân tự sát.\n",
      "4. Người phạm tội còn có thể bị cấm đảm nhiệm chức vụ, cấm hành nghề hoặc làm công việc nhất định từ 01 năm đến 05 năm.\n",
      "--------------------------------------------------------------------------------\n",
      "[Rank 5] index=143035, score=0.5470\n",
      "Khoản 4. Người có hành vi xâm phạm thân thể, sức khỏe, tính mạng hoặc xúc phạm danh dự, nhân phẩm của người hành nghề và người khác làm việc tại cơ sở khám bệnh, chữa bệnh thì tùy theo tính chất, mức độ vi phạm mà bị xử lý vi phạm hành chính hoặc bị truy cứu trách nhiệm hình sự theo quy định của pháp luật.\n",
      "--------------------------------------------------------------------------------\n",
      "[Rank 6] index=57787, score=0.5443\n",
      "\"Điều 7. Vi phạm quy định về trật tự công cộng\n",
      "..\n",
      "3. Phạt tiền từ 2.000.000 đồng đến 3.000.000 đồng đối với một trong những hành vi sau đây:\n",
      "a) Có hành vi khiêu khích, trêu ghẹo, xúc phạm, lăng mạ, bôi nhọ danh dự, nhân phẩm của người khác, trừ trường hợp quy định tại điểm b khoản 2 Điều 21 và Điều 54 Nghị định này;\n",
      "...\n",
      "14. Biện pháp khắc phục hậu quả:\n",
      "a) Buộc khôi phục lại tình trạng ban đầu đối với hành vi vi phạm quy định tại điểm c khoản 1, điểm l khoản 2 và điểm e khoản 4 Điều này;\n",
      "b) Buộc cải chính thông tin sai sự thật hoặc gây nhầm lẫn đối với hành vi vi phạm quy định tại điểm a khoản 3 và điểm i khoản 4 Điều này;\n",
      "c) Buộc xin lỗi công khai đối với hành vi vi phạm quy định tại điểm a khoản 3, các điểm d và đ khoản 5 Điều này trừ trường hợp nạn nhân có đơn không yêu cầu;\n",
      "d) Buộc thực hiện biện pháp khắc phục tình trạng ô nhiễm môi trường đối với hành vi vi phạm quy định tại điểm h khoản 5 Điều này;\n",
      "đ) Buộc chi trả toàn bộ chi phí khám bệnh, chữa bệnh đối với hành vi vi phạm quy định tại điểm d khoản 1, điểm c khoản 2, điểm b khoản 3 và điểm a khoản 5 Điều này.\"\n",
      "--------------------------------------------------------------------------------\n",
      "[Rank 7] index=57120, score=0.5337\n",
      "Vi phạm quy định về trật tự công cộng\n",
      "...\n",
      "2. Phạt tiền từ 1.000.000 đồng đến 2.000.000 đồng đối với một trong những hành vi sau đây:\n",
      "...\n",
      "b) Tổ chức, tham gia tụ tập nhiều người ở nơi công cộng gây mất trật tự công cộng;\n",
      "...\n",
      "3. Phạt tiền từ 2.000.000 đồng đến 3.000.000 đồng đối với một trong những hành vi sau đây:\n",
      "a) Có hành vi khiêu khích, trêu ghẹo, xúc phạm, lăng mạ, bôi nhọ danh dự, nhân phẩm của người khác, trừ trường hợp quy định tại điểm b khoản 2 Điều 21 và Điều 54 Nghị định này;\n",
      "b) Tổ chức, thuê, xúi giục, lôi kéo, dụ dỗ, kích động người khác cố ý gây thương tích hoặc gây tổn hại cho sức khỏe người khác hoặc xâm phạm danh dự, nhân phẩm của người khác nhưng không bị truy cứu trách nhiệm hình sự;\n",
      "...\n",
      "4. Phạt tiền từ 3.000.000 đồng đến 5.000.000 đồng đối với một trong những hành vi sau đây:\n",
      "a) Tổ chức thuê, xúi giục, lôi kéo, dụ dỗ hoặc kích động người khác gây rối, làm mất trật tự công cộng;\n",
      "b) Mang theo trong người hoặc tàng trữ, cất giấu các loại vũ khí thô sơ, công cụ hỗ trợ hoặc các loại công cụ, phương tiện khác có khả năng sát thương; đồ vật, phương tiện giao thông nhằm mục đích gây rối trật tự công cộng, cố ý gây thương tích cho người khác;\n",
      "...\n",
      "5. Phạt tiền từ 5.000.000 đồng đến 8.000.000 đồng đối với một trong những hành vi sau đây:\n",
      "a) Cố ý gây thương tích hoặc gây tổn hại cho sức khỏe của người khác nhưng không bị truy cứu trách nhiệm hình sự;\n",
      "b) Gây rối trật tự công cộng mà có mang theo các loại vũ khí thô sơ, công cụ hỗ trợ hoặc công cụ, đồ vật, phương tiện khác có khả năng sát thương;\n",
      "...\n",
      "13. Hình thức xử phạt bổ sung:\n",
      "a) Tịch thu tang vật, phương tiện vi phạm hành chính đối với hành vi vi phạm quy định tại các điểm a, d, đ và g khoản 2; điểm đ khoản 3; các điểm b, e và i khoản 4; các điểm a, b và c khoản 5; các khoản 6 và 10 Điều này;\n",
      "...\n",
      "14. Biện pháp khắc phục hậu quả:\n",
      "...\n",
      "b) Buộc cải chính thông tin sai sự thật hoặc gây nhầm lẫn đối với hành vi vi phạm quy định tại điểm a khoản 3 và điểm i khoản 4 Điều này;\n",
      "c) Buộc xin lỗi công khai đối với hành vi vi phạm quy định tại điểm a khoản 3, các điểm d và đ khoản 5 Điều này trừ trường hợp nạn nhân có đơn không yêu cầu;\n",
      "...\n",
      "đ) Buộc chi trả toàn bộ chi phí khám bệnh, chữa bệnh đối với hành vi vi phạm quy định tại điểm d khoản 1, điểm c khoản 2, điểm b khoản 3 và điểm a khoản 5 Điều này.\n",
      "--------------------------------------------------------------------------------\n",
      "[Rank 8] index=56183, score=0.5270\n",
      "\"Điều 155. Tội làm nhục người khác\n",
      "1. Người nào xúc phạm nghiêm trọng nhân phẩm, danh dự của người khác, thì bị phạt cảnh cáo, phạt tiền từ 10.000.000 đồng đến 30.000.000 đồng hoặc phạt cải tạo không giam giữ đến 03 năm.\n",
      "2. Phạm tội thuộc một trong các trường hợp sau đây, thì bị phạt tù từ 03 tháng đến 02 năm:\n",
      "a) Phạm tội 02 lần trở lên;\n",
      "b) Đối với 02 người trở lên;\n",
      "c) Lợi dụng chức vụ, quyền hạn;\n",
      "d) Đối với người đang thi hành công vụ;\n",
      "đ) Đối với người dạy dỗ, nuôi dưỡng, chăm sóc, chữa bệnh cho mình;\n",
      "e) Sử dụng mạng máy tính hoặc mạng viễn thông, phương tiện điện tử để phạm tội;\n",
      "g) Gây rối loạn tâm thần và hành vi của nạn nhân mà tỷ lệ tổn thương cơ thể từ 31% đến 60%”.\n",
      "3. Phạm tội thuộc một trong các trường hợp sau đây, thì bị phạt tù từ 02 năm đến 05 năm:\n",
      "a) Gây rối loạn tâm thần và hành vi của nạn nhân mà tỷ lệ tổn thương cơ thể 61% trở lên”;\n",
      "b) Làm nạn nhân tự sát.\n",
      "4. Người phạm tội còn có thể bị cấm đảm nhiệm chức vụ, cấm hành nghề hoặc làm công việc nhất định từ 01 năm đến 05 năm.\n",
      "Điều 156. Tội vu khống\n",
      "1. Người nào thực hiện một trong các hành vi sau đây, thì bị phạt tiền từ 10.000.000 đồng đến 50.000.000 đồng, phạt cải tạo không giam giữ đến 02 năm hoặc phạt tù từ 03 tháng đến 01 năm:\n",
      "a) Bịa đặt hoặc loan truyền những điều biết rõ là sai sự thật nhằm xúc phạm nghiêm trọng nhân phẩm, danh dự hoặc gây thiệt hại đến quyền, lợi ích hợp pháp của người khác;\n",
      "b) Bịa đặt người khác phạm tội và tố cáo họ trước cơ quan có thẩm quyền.\n",
      "2. Phạm tội thuộc một trong các trường hợp sau đây, thì bị phạt tù từ 01 năm đến 03 năm:\n",
      "a) Có tổ chức;\n",
      "b) Lợi dụng chức vụ, quyền hạn;\n",
      "c) Đối với 02 người trở lên;\n",
      "d) Đối với ông, bà, cha, mẹ, người dạy dỗ, nuôi dưỡng, chăm sóc, giáo dục, chữa bệnh cho mình;\n",
      "đ) Đối với người đang thi hành công vụ;\n",
      "e) Sử dụng mạng máy tính hoặc mạng viễn thông, phương tiện điện tử để phạm tội;\n",
      "g) Gây rối loạn tâm thần và hành vi của nạn nhân mà tỷ lệ tổn thương cơ thể từ 31% đến 60%;\n",
      "h) Vu khống người khác phạm tội rất nghiêm trọng hoặc đặc biệt nghiêm trọng.\n",
      "3. Phạm tội thuộc một trong các trường hợp sau đây, thì bị phạt tù từ 03 năm đến 07 năm:\n",
      "a) Vì động cơ đê hèn;\n",
      "b) Gây rối loạn tâm thần và hành vi của nạn nhân mà tỷ lệ tổn thương cơ thể 61% trở lên;\n",
      "c) Làm nạn nhân tự sát.\n",
      "4. Người phạm tội còn có thể bị phạt tiền từ 10.000.000 đồng đến 50.000.000 đồng, cấm đảm nhiệm chức vụ, cấm hành nghề hoặc làm công việc nhất định từ 01 năm đến 05 năm.\"\n",
      "--------------------------------------------------------------------------------\n",
      "[Rank 9] index=80022, score=0.5218\n",
      "\"Điều 20.\n",
      "1. Mọi người có quyền bất khả xâm phạm về thân thể, được pháp luật bảo hộ về sức khoẻ, danh dự và nhân phẩm; không bị tra tấn, bạo lực, truy bức, nhục hình hay bất kỳ hình thức đối xử nào khác xâm phạm thân thể, sức khỏe, xúc phạm danh dự, nhân phẩm.\"\n",
      "--------------------------------------------------------------------------------\n",
      "[Rank 10] index=52682, score=0.5203\n",
      "\"Điều 589. Thiệt hại do tài sản bị xâm phạm\n",
      "Thiệt hại do tài sản bị xâm phạm bao gồm:\n",
      "1. Tài sản bị mất, bị hủy hoại hoặc bị hư hỏng.\n",
      "2. Lợi ích gắn liền với việc sử dụng, khai thác tài sản bị mất, bị giảm sút.\n",
      "3. Chi phí hợp lý để ngăn chặn, hạn chế và khắc phục thiệt hại.\n",
      "4. Thiệt hại khác do luật quy định.\"\n",
      "--------------------------------------------------------------------------------\n"
     ]
    }
   ],
   "source": [
    "query = 'Tội xúc phạm danh dự'\n",
    "hits  = retrieval(fine_tuned_model, query, legal_index, top_k=10)\n",
    "\n",
    "for h in hits:\n",
    "    print(f\"[Rank {hits.index(h)+1}] index={h['index']}, score={h['score']:.4f}\")\n",
    "    print(f\"{h['text']}\\n{'-'*80}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1bedd1a7",
   "metadata": {},
   "outputs": [],
   "source": [
    "# def search(model, query, index, k=10):\n",
    "#     query_embedding = model.encode(\n",
    "#         query, \n",
    "#         convert_to_numpy=True, \n",
    "#         normalize_embeddings=True,\n",
    "#     ).astype(np.float32).reshape(1, -1)\n",
    "\n",
    "#     scores, indices = index.search(query_embedding, k*3)\n",
    "#     hits = [{'score': scores[0][i], 'index': indices[0][i]} for i in range(len(scores[0]))]\n",
    "#     return hits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4ef857db",
   "metadata": {},
   "outputs": [],
   "source": [
    "# hits = search(\n",
    "#     model=fine_tuned_model, \n",
    "#     query='Hợp đồng lao động là gì?', \n",
    "#     index=legal_index, \n",
    "#     k=10\n",
    "# )\n",
    "\n",
    "# for rank, hit in enumerate(hits):\n",
    "#     print(f\"[Rank: {rank + 1}]\")\n",
    "#     print(f\"(Index: {hit['index']}Score: {hit['score']:.4f})\\n\")\n",
    "#     print(passages[hit['index']])\n",
    "#     print('-' * 100)\n",
    "#     print()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "legal_doc_retrieval",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}