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
}
|