{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "f4eca598", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import json\n", "import ast\n", "from tqdm import tqdm\n", "import re\n", "import os\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "from scipy.stats import sem\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "8321f533", "metadata": {}, "outputs": [], "source": [ "def jaccard_similarity(list1, list2):\n", " if list1 is not None and list2 is not None and len(list1) > 0 and len(list2) > 0:\n", " list1 = [item.lower() for item in list1]\n", " list2 = [item.lower() for item in list2]\n", "\n", " set1 = set(list1)\n", " set2 = set(list2)\n", " intersection = len(set1.intersection(set2))\n", " union = len(set1) + len(set2) - intersection\n", " if union == 0:\n", " return 0.0\n", " else:\n", " jaccard_similarity = intersection / union\n", " return jaccard_similarity\n", " else:\n", " return 0.0\n", " \n", "def extract_answer(text):\n", " pattern = r'{[^{}]*}'\n", " match = re.search(pattern, text)\n", " if match:\n", " return match.group()\n", " else:\n", " return None\n", " \n", "def extract_by_splitting(text):\n", " compound_list = text.split(':')[1].split(\"Diseases\")[0].split(\"], \")[0]+\"]\"\n", " disease_list = text.split(':')[-1].split(\"}\")[0]\n", " resp = {}\n", " resp[\"Compounds\"] = ast.literal_eval(compound_list)\n", " resp[\"Diseases\"] = ast.literal_eval(disease_list)\n", " return resp\n", " \n", " \n", "def get_hyperparam_perf(files):\n", " llm_performance_list = []\n", " for file in tqdm(files):\n", " df = pd.read_csv(os.path.join(PARENT_PATH, file))\n", " df.dropna(subset=[\"llm_answer\"], inplace=True)\n", " llm_performance_list_across_questions = []\n", " for index, row in df.iterrows():\n", " cmp_gt = ast.literal_eval(row[\"compound_groundTruth\"])\n", " disease_gt = ast.literal_eval(row[\"disease_groundTruth\"])\n", " try:\n", " llm_answer = json.loads(extract_answer(row[\"llm_answer\"]))\n", " except:\n", " llm_answer = extract_by_splitting(row[\"llm_answer\"])\n", " cmp_llm = llm_answer[\"Compounds\"]\n", " disease_llm = llm_answer[\"Diseases\"]\n", " cmp_similarity = jaccard_similarity(cmp_gt, cmp_llm)\n", " disease_similarity = jaccard_similarity(disease_gt, disease_llm)\n", " llm_performance = np.mean([cmp_similarity, disease_similarity])\n", " llm_performance_list_across_questions.append(llm_performance)\n", " llm_performance_list.append((np.mean(llm_performance_list_across_questions), np.std(llm_performance_list_across_questions), sem(llm_performance_list_across_questions), row[\"context_volume\"]))\n", " hyperparam_perf = pd.DataFrame(llm_performance_list, columns=[\"performance_mean\", \"performance_std\", \"performance_sem\", \"context_volume\"]) \n", " return hyperparam_perf" ] }, { "cell_type": "code", "execution_count": 4, "id": "9feae00e", "metadata": {}, "outputs": [], "source": [ "'''\n", "Following files can be obtained by running the run_single_disease_entity_hyperparameter_tuning.py script.\n", "Make sure to change the parent path and filenames based on where and how you save the files\n", "'''\n", "\n", "PARENT_PATH = \"../data/results\"\n", "\n", "\n", "FILES_1 = [\n", " \"minilm_based_single_disease_hyperparam_tuning_round_1_gpt_4.csv\",\n", " \"minilm_based_single_disease_hyperparam_tuning_round_2_gpt_4.csv\",\n", " \"minilm_based_single_disease_hyperparam_tuning_round_3_gpt_4.csv\",\n", " \"minilm_based_single_disease_hyperparam_tuning_round_4_gpt_4.csv\",\n", " \"minilm_based_single_disease_hyperparam_tuning_round_5_gpt_4.csv\"\n", "]\n", "\n", "FILES_2 = [\n", " \"pubmert_based_single_disease_hyperparam_tuning_round_1_gpt_4.csv\",\n", " \"pubmert_based_single_disease_hyperparam_tuning_round_2_gpt_4.csv\",\n", " \"pubmert_based_single_disease_hyperparam_tuning_round_3_gpt_4.csv\",\n", " \"pubmert_based_single_disease_hyperparam_tuning_round_4_gpt_4.csv\",\n", " \"pubmert_based_single_disease_hyperparam_tuning_round_5_gpt_4.csv\"\n", "]" ] }, { "cell_type": "code", "execution_count": 5, "id": "7e85661a", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:00<00:00, 58.18it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:00<00:00, 114.49it/s]\n" ] } ], "source": [ "mini_lm_perf = get_hyperparam_perf(FILES_1)\n", "pubmedBert_perf = get_hyperparam_perf(FILES_2)" ] }, { "cell_type": "code", "execution_count": 7, "id": "322a19e4", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "params = mini_lm_perf.context_volume.values\n", "mini_lm_mean_performance = mini_lm_perf.performance_mean.values\n", "mini_lm_std_deviation = mini_lm_perf.performance_std.values\n", "mini_lm_sem_value = mini_lm_perf.performance_sem.values\n", "\n", "pubmedBert_mean_performance = pubmedBert_perf.performance_mean.values\n", "pubmedBert_std_deviation = pubmedBert_perf.performance_std.values\n", "pubmedBert_sem_value = pubmedBert_perf.performance_sem.values\n", "\n", "fig = plt.figure(figsize=(3, 4))\n", "plt.errorbar(params, mini_lm_mean_performance, yerr=None, fmt='o-', capsize=5, label='all-MiniLM-L6-v2')\n", "plt.errorbar(params, pubmedBert_mean_performance, yerr=None, fmt='o-', capsize=5, label='PubMedBERT', color=\"darkred\")\n", "plt.xlabel('Context volume')\n", "plt.ylabel('Mean Performance')\n", "plt.grid(True)\n", "plt.ylim(0.35,0.8)\n", "plt.legend(bbox_to_anchor=(0.2, 0.35))\n", "plt.show()\n", "\n", "fig_filename = \"../data/results/figures/context_volume_single_disease_prompt_miniLM_vs_PubMedBert.svg\"\n", "fig.savefig(fig_filename, format='svg', bbox_inches='tight')\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "b1de37a4", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
performance_meanperformance_stdperformance_semcontext_volume
00.4197610.2174930.02528310
10.6229520.1900950.02209850
20.6614600.1779320.020684100
30.6670210.1791100.020821150
40.6686740.1769350.020568200
\n", "
" ], "text/plain": [ " performance_mean performance_std performance_sem context_volume\n", "0 0.419761 0.217493 0.025283 10\n", "1 0.622952 0.190095 0.022098 50\n", "2 0.661460 0.177932 0.020684 100\n", "3 0.667021 0.179110 0.020821 150\n", "4 0.668674 0.176935 0.020568 200" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mini_lm_perf\n" ] }, { "cell_type": "code", "execution_count": 10, "id": "eecab597", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.61" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "round(mini_lm_perf.performance_mean.mean(), 2)\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "2adc10b9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.67" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "round(pubmedBert_perf.performance_mean.mean(), 2)\n" ] }, { "cell_type": "code", "execution_count": 12, "id": "a0db4b8d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9.836065573770501" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "100*(round(pubmedBert_perf.performance_mean.mean(), 2) - round(mini_lm_perf.performance_mean.mean(), 2))/round(mini_lm_perf.performance_mean.mean(), 2)\n" ] }, { "cell_type": "code", "execution_count": null, "id": "33437dd3", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9" } }, "nbformat": 4, "nbformat_minor": 5 }