File size: 4,574 Bytes
cc37925
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "42076100",
   "metadata": {},
   "outputs": [],
   "source": [
    "from openai import OpenAI\n",
    "import openai\n",
    "import os\n",
    "import backoff\n",
    "\n",
    "api_key = os.getenv(\"YEScale_OpenAI\")\n",
    "# gpt-4.1-mini-2025-04-14\n",
    "# gpt-4.1-2025-04-14\n",
    "model_name = \"gpt-4.1-2025-04-14\"\n",
    "embedder_name = \"text-embedding-3-small\"\n",
    "client = OpenAI(\n",
    "    api_key=api_key,\n",
    "    base_url=\"https://api.yescale.io/v1\"\n",
    "    )\n",
    "\n",
    "# Backoff for API calling (in case of rate limit, error, etc.)\n",
    "@backoff.on_exception(backoff.expo, openai.RateLimitError, max_time=999, max_tries=99)\n",
    "def completions_with_backoff(**kwargs):\n",
    "    return client.chat.completions.create(**kwargs)\n",
    "\n",
    "def ask_gpt(sys: str, user: str, max_token=500) -> str:\n",
    "    response = completions_with_backoff(\n",
    "        model=model_name,\n",
    "        messages=[\n",
    "            {\"role\": \"system\", \"content\": sys},\n",
    "            {\"role\": \"user\", \"content\": user},\n",
    "        ],\n",
    "        max_tokens=max_token,\n",
    "        n=1,\n",
    "        stop=None,\n",
    "        temperature=0.3,\n",
    "    )\n",
    "    return response.choices[0].message.content\n",
    "\n",
    "def get_embedding(text):\n",
    "    response = client.embeddings.create(\n",
    "        input=text,\n",
    "        model=embedder_name\n",
    "    )\n",
    "    return response.data[0].embedding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "dfa841f3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     Disease                                           Question\n",
      "0  Alzheimer  Tôi hiện đang có các triệu chứng như hay quên ...\n",
      "1  Alzheimer  Tôi đang cảm thấy khó khăn khi tham gia cuộc h...\n",
      "2  Alzheimer  Tôi hay quên nghĩa của từ và không thể theo dõ...\n",
      "3  Alzheimer  Tôi hiện đang có các triệu chứng như thay đổi ...\n",
      "4  Alzheimer  Tôi đang cảm thấy chán nản và muốn từ bỏ các s...\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "df = pd.read_csv('Dataset/ViMedical_Disease/ViMedical_Disease.csv', encoding='utf-8')\n",
    "print(df.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4b0f9805",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Processing diseases: 100%|██████████| 603/603 [14:20<00:00,  1.43s/disease]\n"
     ]
    }
   ],
   "source": [
    "from tqdm import tqdm\n",
    "\n",
    "disease = df['Disease'].unique()\n",
    "heart_disease = []\n",
    "respiretory_disease = []\n",
    "for dis in tqdm(disease, desc=\"Processing diseases\", unit=\"disease\"):\n",
    "    while True:\n",
    "        res = ask_gpt(\"Hãy xác định xem bệnh này là bệnh tim mạch hay bệnh hô hấp. Nếu là bệnh tim mạch, trả lời '1', hô hấp '2', không phải cả hai thì là '0'. Không cần giải thích gì thêm.\", dis, 1)\n",
    "        if res in ['0', '1', '2']:\n",
    "            if res == '1':\n",
    "                heart_disease.append(dis)\n",
    "            elif res == '2':\n",
    "                respiretory_disease.append(dis)\n",
    "            break\n",
    "with open(\"Dataset/ViMedical_Disease/heart_disease.txt\", \"w\", encoding=\"utf-8\") as file:\n",
    "    for item in heart_disease:\n",
    "        file.write(item + \"\\n\")\n",
    "with open(\"Dataset/ViMedical_Disease/respiretory_disease.txt\", \"w\", encoding=\"utf-8\") as file:\n",
    "    for item in respiretory_disease:\n",
    "        file.write(item + \"\\n\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "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.13.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}