diff --git a/experiments/compile_results.ipynb b/experiments/compile_results.ipynb new file mode 100644 index 0000000..b835fa4 --- /dev/null +++ b/experiments/compile_results.ipynb @@ -0,0 +1,2625 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/kevinmaikjablonka/miniconda3/envs/chemlift/lib/python3.9/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + } + ], + "source": [ + "from glob import glob\n", + "import pandas as pd\n", + "from fastcore.xtras import load_pickle\n", + "from scipy.stats import sem\n", + "import dabest\n", + "\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from gptchem.plotsettings import *\n", + "from gptchem.settings import (\n", + " ONE_COL_GOLDEN_RATIO_HEIGHT_INCH,\n", + " ONE_COL_WIDTH_INCH,\n", + " TWO_COL_GOLDEN_RATIO_HEIGHT_INCH,\n", + ")\n", + "\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "all_res = glob('results/*.pkl')" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "compiled_results = []\n", + "\n", + "for res in all_res:\n", + " res = load_pickle(res)\n", + " summary = {\n", + " 'acc_macro': res['acc_macro'],\n", + " 'f1_macro': res['f1_macro'],\n", + " 'f1_micro': res['f1_micro'],\n", + " 'kappa': res['kappa'],\n", + " 'num_support_samples': res['num_support_samples'],\n", + " 'model': res['model'],\n", + " 'temperature': res['temperature'],\n", + " 'strategy': res['strategy'],\n", + " }\n", + " compiled_results.append(summary)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'accuracy': 0.56,\n", + " 'acc_macro': 0.56,\n", + " 'racc': 0.5,\n", + " 'kappa': 0.1200000000000001,\n", + " 'confusion_matrix': pycm.ConfusionMatrix(classes: [0, 1]),\n", + " 'roc_auc': 0.56,\n", + " 'f1_macro': 0.45436507936507936,\n", + " 'f1_micro': 0.56,\n", + " 'frac_valid': 1.0,\n", + " 'all_y_true': (#50) [0,1,1,0,1,0,1,1,0,0...],\n", + " 'all_y_pred': [1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1],\n", + " 'valid_indices': [0,\n", + " 1,\n", + " 2,\n", + " 3,\n", + " 4,\n", + " 5,\n", + " 6,\n", + " 7,\n", + " 8,\n", + " 9,\n", + " 10,\n", + " 11,\n", + " 12,\n", + " 13,\n", + " 14,\n", + " 15,\n", + " 16,\n", + " 17,\n", + " 18,\n", + " 19,\n", + " 20,\n", + " 21,\n", + " 22,\n", + " 23,\n", + " 24,\n", + " 25,\n", + " 26,\n", + " 27,\n", + " 28,\n", + " 29,\n", + " 30,\n", + " 31,\n", + " 32,\n", + " 33,\n", + " 34,\n", + " 35,\n", + " 36,\n", + " 37,\n", + " 38,\n", + " 39,\n", + " 40,\n", + " 41,\n", + " 42,\n", + " 43,\n", + " 44,\n", + " 45,\n", + " 46,\n", + " 47,\n", + " 48,\n", + " 49],\n", + " 'might_have_rounded_floats': False,\n", + " 'num_support_samples': 10,\n", + " 'strategy': 'diverse',\n", + " 'model': 'claude-instant-1',\n", + " 'num_test_points': 50,\n", + " 'random_state': 0,\n", + " 'predictions': [1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1],\n", + " 'targets': array([0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0,\n", + " 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1,\n", + " 0, 0, 0, 1, 0, 0]),\n", + " 'max_test': 5,\n", + " 'temperature': 0.8}" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.DataFrame(compiled_results)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/kevinmaikjablonka/miniconda3/envs/chemlift/lib/python3.9/site-packages/numpy/core/_methods.py:206: RuntimeWarning: Degrees of freedom <= 0 for slice\n", + " ret = _var(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n", + "/Users/kevinmaikjablonka/miniconda3/envs/chemlift/lib/python3.9/site-packages/numpy/core/_methods.py:198: RuntimeWarning: invalid value encountered in scalar divide\n", + " ret = ret.dtype.type(ret / rcount)\n", + "/Users/kevinmaikjablonka/miniconda3/envs/chemlift/lib/python3.9/site-packages/numpy/core/_methods.py:206: RuntimeWarning: Degrees of freedom <= 0 for slice\n", + " ret = _var(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n", + "/Users/kevinmaikjablonka/miniconda3/envs/chemlift/lib/python3.9/site-packages/numpy/core/_methods.py:198: RuntimeWarning: invalid value encountered in scalar divide\n", + " ret = ret.dtype.type(ret / rcount)\n", + "/Users/kevinmaikjablonka/miniconda3/envs/chemlift/lib/python3.9/site-packages/numpy/core/_methods.py:206: RuntimeWarning: Degrees of freedom <= 0 for slice\n", + " ret = _var(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n", + "/Users/kevinmaikjablonka/miniconda3/envs/chemlift/lib/python3.9/site-packages/numpy/core/_methods.py:198: RuntimeWarning: invalid value encountered in scalar divide\n", + " ret = ret.dtype.type(ret / rcount)\n", + "/Users/kevinmaikjablonka/miniconda3/envs/chemlift/lib/python3.9/site-packages/numpy/core/_methods.py:206: RuntimeWarning: Degrees of freedom <= 0 for slice\n", + " ret = _var(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n", + "/Users/kevinmaikjablonka/miniconda3/envs/chemlift/lib/python3.9/site-packages/numpy/core/_methods.py:198: RuntimeWarning: invalid value encountered in scalar divide\n", + " ret = ret.dtype.type(ret / rcount)\n" + ] + } + ], + "source": [ + "aggregated = df.groupby(['model','temperature', 'strategy', 'num_support_samples']).agg(['mean', sem, 'std', 'count']).sort_values(('f1_macro', 'mean'), ascending=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \n", + " \n", + " \n", + "
acc_macrof1_macrof1_microkappa
meansemstdcountmeansemstdcountmeansemstdcountmeansemstdcount
modeltemperaturestrategynum_support_samples
gpt-40.8diverse1000.8133330.0183790.04501960.8121850.0184900.04529260.8133330.0183790.04501960.6266670.0367570.0900376
0.2diverse1000.8066670.0217050.05316660.8041660.0221900.05435460.8066670.0217050.05316660.6133330.0434100.1063336
0.8random1000.7766670.0227550.05573760.7683290.0254750.06240160.7766670.0227550.05573760.5533330.0455090.1114756
0.2random1000.7633330.0181960.04457260.7515800.0230220.05639260.7633330.0181960.04457260.5266670.0363930.0891446
500.7377780.0180880.05426390.7219330.0238790.07163890.7377780.0180880.05426390.4755560.0361750.1085259
............................................................
claude-instant-10.2diverse200.5266190.0204660.05013260.4319100.0326540.07998760.5266190.0204660.05013260.0558720.0416390.1019956
text-davinci-0030.2random200.4933330.0152020.069666210.4270140.0160190.073410210.4933330.0152020.06966621-0.0133330.0304050.13933221
text-ada-0010.2random50.5228740.0284090.05681840.4145700.0205750.04114940.5228740.0284090.0568184-0.0807270.0793020.1586034
text-davinci-0030.2random50.5018180.0108440.050863220.4133510.0161460.075730220.5018180.0108440.050863220.0036360.0216880.10172522
claude-20.2random50.5166670.0130810.03204260.4013660.0316960.07763960.5166670.0130810.03204260.0333330.0261620.0640836
\n", + "

75 rows × 16 columns

\n", + "
" + ], + "text/plain": [ + " acc_macro \\\n", + " mean sem \n", + "model temperature strategy num_support_samples \n", + "gpt-4 0.8 diverse 100 0.813333 0.018379 \n", + " 0.2 diverse 100 0.806667 0.021705 \n", + " 0.8 random 100 0.776667 0.022755 \n", + " 0.2 random 100 0.763333 0.018196 \n", + " 50 0.737778 0.018088 \n", + "... ... ... \n", + "claude-instant-1 0.2 diverse 20 0.526619 0.020466 \n", + "text-davinci-003 0.2 random 20 0.493333 0.015202 \n", + "text-ada-001 0.2 random 5 0.522874 0.028409 \n", + "text-davinci-003 0.2 random 5 0.501818 0.010844 \n", + "claude-2 0.2 random 5 0.516667 0.013081 \n", + "\n", + " \\\n", + " std count \n", + "model temperature strategy num_support_samples \n", + "gpt-4 0.8 diverse 100 0.045019 6 \n", + " 0.2 diverse 100 0.053166 6 \n", + " 0.8 random 100 0.055737 6 \n", + " 0.2 random 100 0.044572 6 \n", + " 50 0.054263 9 \n", + "... ... ... \n", + "claude-instant-1 0.2 diverse 20 0.050132 6 \n", + "text-davinci-003 0.2 random 20 0.069666 21 \n", + "text-ada-001 0.2 random 5 0.056818 4 \n", + "text-davinci-003 0.2 random 5 0.050863 22 \n", + "claude-2 0.2 random 5 0.032042 6 \n", + "\n", + " f1_macro \\\n", + " mean sem \n", + "model temperature strategy num_support_samples \n", + "gpt-4 0.8 diverse 100 0.812185 0.018490 \n", + " 0.2 diverse 100 0.804166 0.022190 \n", + " 0.8 random 100 0.768329 0.025475 \n", + " 0.2 random 100 0.751580 0.023022 \n", + " 50 0.721933 0.023879 \n", + "... ... ... \n", + "claude-instant-1 0.2 diverse 20 0.431910 0.032654 \n", + "text-davinci-003 0.2 random 20 0.427014 0.016019 \n", + "text-ada-001 0.2 random 5 0.414570 0.020575 \n", + "text-davinci-003 0.2 random 5 0.413351 0.016146 \n", + "claude-2 0.2 random 5 0.401366 0.031696 \n", + "\n", + " \\\n", + " std count \n", + "model temperature strategy num_support_samples \n", + "gpt-4 0.8 diverse 100 0.045292 6 \n", + " 0.2 diverse 100 0.054354 6 \n", + " 0.8 random 100 0.062401 6 \n", + " 0.2 random 100 0.056392 6 \n", + " 50 0.071638 9 \n", + "... ... ... \n", + "claude-instant-1 0.2 diverse 20 0.079987 6 \n", + "text-davinci-003 0.2 random 20 0.073410 21 \n", + "text-ada-001 0.2 random 5 0.041149 4 \n", + "text-davinci-003 0.2 random 5 0.075730 22 \n", + "claude-2 0.2 random 5 0.077639 6 \n", + "\n", + " f1_micro \\\n", + " mean sem \n", + "model temperature strategy num_support_samples \n", + "gpt-4 0.8 diverse 100 0.813333 0.018379 \n", + " 0.2 diverse 100 0.806667 0.021705 \n", + " 0.8 random 100 0.776667 0.022755 \n", + " 0.2 random 100 0.763333 0.018196 \n", + " 50 0.737778 0.018088 \n", + "... ... ... \n", + "claude-instant-1 0.2 diverse 20 0.526619 0.020466 \n", + "text-davinci-003 0.2 random 20 0.493333 0.015202 \n", + "text-ada-001 0.2 random 5 0.522874 0.028409 \n", + "text-davinci-003 0.2 random 5 0.501818 0.010844 \n", + "claude-2 0.2 random 5 0.516667 0.013081 \n", + "\n", + " \\\n", + " std count \n", + "model temperature strategy num_support_samples \n", + "gpt-4 0.8 diverse 100 0.045019 6 \n", + " 0.2 diverse 100 0.053166 6 \n", + " 0.8 random 100 0.055737 6 \n", + " 0.2 random 100 0.044572 6 \n", + " 50 0.054263 9 \n", + "... ... ... \n", + "claude-instant-1 0.2 diverse 20 0.050132 6 \n", + "text-davinci-003 0.2 random 20 0.069666 21 \n", + "text-ada-001 0.2 random 5 0.056818 4 \n", + "text-davinci-003 0.2 random 5 0.050863 22 \n", + "claude-2 0.2 random 5 0.032042 6 \n", + "\n", + " kappa \\\n", + " mean sem \n", + "model temperature strategy num_support_samples \n", + "gpt-4 0.8 diverse 100 0.626667 0.036757 \n", + " 0.2 diverse 100 0.613333 0.043410 \n", + " 0.8 random 100 0.553333 0.045509 \n", + " 0.2 random 100 0.526667 0.036393 \n", + " 50 0.475556 0.036175 \n", + "... ... ... \n", + "claude-instant-1 0.2 diverse 20 0.055872 0.041639 \n", + "text-davinci-003 0.2 random 20 -0.013333 0.030405 \n", + "text-ada-001 0.2 random 5 -0.080727 0.079302 \n", + "text-davinci-003 0.2 random 5 0.003636 0.021688 \n", + "claude-2 0.2 random 5 0.033333 0.026162 \n", + "\n", + " \n", + " std count \n", + "model temperature strategy num_support_samples \n", + "gpt-4 0.8 diverse 100 0.090037 6 \n", + " 0.2 diverse 100 0.106333 6 \n", + " 0.8 random 100 0.111475 6 \n", + " 0.2 random 100 0.089144 6 \n", + " 50 0.108525 9 \n", + "... ... ... \n", + "claude-instant-1 0.2 diverse 20 0.101995 6 \n", + "text-davinci-003 0.2 random 20 0.139332 21 \n", + "text-ada-001 0.2 random 5 0.158603 4 \n", + "text-davinci-003 0.2 random 5 0.101725 22 \n", + "claude-2 0.2 random 5 0.064083 6 \n", + "\n", + "[75 rows x 16 columns]" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aggregated" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [], + "source": [ + "differences = []\n", + "\n", + "metrics = 'f1_macro'\n", + "for model in df['model'].unique(): \n", + " for temperature in df['temperature'].unique(): \n", + "\n", + " for num_support_samples in df['num_support_samples'].unique():\n", + " subset = df.query(f'model == \"{model}\" and temperature == {temperature} and num_support_samples == {num_support_samples}')\n", + "\n", + " diverse_res = subset.query('strategy == \"diverse\"')\n", + " random_res = subset.query('strategy == \"random\"')\n", + "\n", + " differences.append({\n", + " 'random': random_res[metrics].mean(),\n", + " 'diverse': diverse_res[metrics].mean(),\n", + " 'model': model,\n", + " 'temperature': temperature,\n", + " 'num_support_samples': num_support_samples, \n", + " })" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [], + "source": [ + "differences = pd.DataFrame(differences)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + "
randomdiversemodeltemperaturenum_support_samples
00.467846NaNgpt-3.5-turbo0.85
10.541575NaNgpt-3.5-turbo0.8100
20.524538NaNgpt-3.5-turbo0.820
30.519985NaNgpt-3.5-turbo0.810
40.508387NaNgpt-3.5-turbo0.850
50.445453NaNgpt-3.5-turbo0.25
60.549613NaNgpt-3.5-turbo0.2100
70.493340NaNgpt-3.5-turbo0.220
80.486977NaNgpt-3.5-turbo0.210
90.530513NaNgpt-3.5-turbo0.250
100.4770050.461708claude-instant-10.85
110.5579130.490935claude-instant-10.8100
120.5065930.432338claude-instant-10.820
130.5168470.508217claude-instant-10.810
140.5829250.497253claude-instant-10.850
150.4572980.469855claude-instant-10.25
160.5404640.493734claude-instant-10.2100
170.4754010.431910claude-instant-10.220
180.4844720.490521claude-instant-10.210
190.6099730.446600claude-instant-10.250
200.469044NaNgpt-40.85
210.7683290.812185gpt-40.8100
220.656506NaNgpt-40.820
230.562016NaNgpt-40.810
240.679098NaNgpt-40.850
250.454896NaNgpt-40.25
260.7515800.804166gpt-40.2100
270.630447NaNgpt-40.220
280.588173NaNgpt-40.210
290.721933NaNgpt-40.250
300.438854NaNtext-davinci-0030.85
31NaNNaNtext-davinci-0030.8100
320.437460NaNtext-davinci-0030.820
330.458305NaNtext-davinci-0030.810
340.493742NaNtext-davinci-0030.850
350.413351NaNtext-davinci-0030.25
36NaNNaNtext-davinci-0030.2100
370.427014NaNtext-davinci-0030.220
380.465876NaNtext-davinci-0030.210
390.496884NaNtext-davinci-0030.250
400.4588280.490004claude-20.85
410.5083700.658772claude-20.8100
420.5175770.696970claude-20.820
430.5147910.529523claude-20.810
440.5374570.548816claude-20.850
450.4013660.560960claude-20.25
460.572401NaNclaude-20.2100
470.5450020.669170claude-20.220
480.5006680.597424claude-20.210
490.6028900.521686claude-20.250
500.450069NaNtext-ada-0010.85
51NaNNaNtext-ada-0010.8100
520.609821NaNtext-ada-0010.820
530.521528NaNtext-ada-0010.810
54NaNNaNtext-ada-0010.850
550.414570NaNtext-ada-0010.25
56NaNNaNtext-ada-0010.2100
570.436827NaNtext-ada-0010.220
580.548611NaNtext-ada-0010.210
59NaNNaNtext-ada-0010.250
\n", + "
" + ], + "text/plain": [ + " random diverse model temperature num_support_samples\n", + "0 0.467846 NaN gpt-3.5-turbo 0.8 5\n", + "1 0.541575 NaN gpt-3.5-turbo 0.8 100\n", + "2 0.524538 NaN gpt-3.5-turbo 0.8 20\n", + "3 0.519985 NaN gpt-3.5-turbo 0.8 10\n", + "4 0.508387 NaN gpt-3.5-turbo 0.8 50\n", + "5 0.445453 NaN gpt-3.5-turbo 0.2 5\n", + "6 0.549613 NaN gpt-3.5-turbo 0.2 100\n", + "7 0.493340 NaN gpt-3.5-turbo 0.2 20\n", + "8 0.486977 NaN gpt-3.5-turbo 0.2 10\n", + "9 0.530513 NaN gpt-3.5-turbo 0.2 50\n", + "10 0.477005 0.461708 claude-instant-1 0.8 5\n", + "11 0.557913 0.490935 claude-instant-1 0.8 100\n", + "12 0.506593 0.432338 claude-instant-1 0.8 20\n", + "13 0.516847 0.508217 claude-instant-1 0.8 10\n", + "14 0.582925 0.497253 claude-instant-1 0.8 50\n", + "15 0.457298 0.469855 claude-instant-1 0.2 5\n", + "16 0.540464 0.493734 claude-instant-1 0.2 100\n", + "17 0.475401 0.431910 claude-instant-1 0.2 20\n", + "18 0.484472 0.490521 claude-instant-1 0.2 10\n", + "19 0.609973 0.446600 claude-instant-1 0.2 50\n", + "20 0.469044 NaN gpt-4 0.8 5\n", + "21 0.768329 0.812185 gpt-4 0.8 100\n", + "22 0.656506 NaN gpt-4 0.8 20\n", + "23 0.562016 NaN gpt-4 0.8 10\n", + "24 0.679098 NaN gpt-4 0.8 50\n", + "25 0.454896 NaN gpt-4 0.2 5\n", + "26 0.751580 0.804166 gpt-4 0.2 100\n", + "27 0.630447 NaN gpt-4 0.2 20\n", + "28 0.588173 NaN gpt-4 0.2 10\n", + "29 0.721933 NaN gpt-4 0.2 50\n", + "30 0.438854 NaN text-davinci-003 0.8 5\n", + "31 NaN NaN text-davinci-003 0.8 100\n", + "32 0.437460 NaN text-davinci-003 0.8 20\n", + "33 0.458305 NaN text-davinci-003 0.8 10\n", + "34 0.493742 NaN text-davinci-003 0.8 50\n", + "35 0.413351 NaN text-davinci-003 0.2 5\n", + "36 NaN NaN text-davinci-003 0.2 100\n", + "37 0.427014 NaN text-davinci-003 0.2 20\n", + "38 0.465876 NaN text-davinci-003 0.2 10\n", + "39 0.496884 NaN text-davinci-003 0.2 50\n", + "40 0.458828 0.490004 claude-2 0.8 5\n", + "41 0.508370 0.658772 claude-2 0.8 100\n", + "42 0.517577 0.696970 claude-2 0.8 20\n", + "43 0.514791 0.529523 claude-2 0.8 10\n", + "44 0.537457 0.548816 claude-2 0.8 50\n", + "45 0.401366 0.560960 claude-2 0.2 5\n", + "46 0.572401 NaN claude-2 0.2 100\n", + "47 0.545002 0.669170 claude-2 0.2 20\n", + "48 0.500668 0.597424 claude-2 0.2 10\n", + "49 0.602890 0.521686 claude-2 0.2 50\n", + "50 0.450069 NaN text-ada-001 0.8 5\n", + "51 NaN NaN text-ada-001 0.8 100\n", + "52 0.609821 NaN text-ada-001 0.8 20\n", + "53 0.521528 NaN text-ada-001 0.8 10\n", + "54 NaN NaN text-ada-001 0.8 50\n", + "55 0.414570 NaN text-ada-001 0.2 5\n", + "56 NaN NaN text-ada-001 0.2 100\n", + "57 0.436827 NaN text-ada-001 0.2 20\n", + "58 0.548611 NaN text-ada-001 0.2 10\n", + "59 NaN NaN text-ada-001 0.2 50" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "differences" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Random low temperature" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [], + "source": [ + "random_low_temp = df.query('temperature == 0.2 and strategy == \"random\"')" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "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", + " \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", + " \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", + "
acc_macrof1_macrof1_microkappanum_support_samplesmodeltemperaturestrategy
20.780.7756020.780.56100gpt-40.2random
30.500.3333330.500.005gpt-3.5-turbo0.2random
40.560.5484400.560.1220text-davinci-0030.2random
110.520.3762990.520.045text-davinci-0030.2random
150.280.2800000.28-0.4410text-davinci-0030.2random
...........................
7240.700.6847410.700.4050gpt-3.5-turbo0.2random
7250.500.4998000.500.005claude-instant-10.2random
7260.580.5757580.580.1610gpt-3.5-turbo0.2random
7270.500.3333330.500.005claude-20.2random
7290.400.3990380.40-0.2020text-davinci-0030.2random
\n", + "

341 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " acc_macro f1_macro f1_micro kappa num_support_samples \\\n", + "2 0.78 0.775602 0.78 0.56 100 \n", + "3 0.50 0.333333 0.50 0.00 5 \n", + "4 0.56 0.548440 0.56 0.12 20 \n", + "11 0.52 0.376299 0.52 0.04 5 \n", + "15 0.28 0.280000 0.28 -0.44 10 \n", + ".. ... ... ... ... ... \n", + "724 0.70 0.684741 0.70 0.40 50 \n", + "725 0.50 0.499800 0.50 0.00 5 \n", + "726 0.58 0.575758 0.58 0.16 10 \n", + "727 0.50 0.333333 0.50 0.00 5 \n", + "729 0.40 0.399038 0.40 -0.20 20 \n", + "\n", + " model temperature strategy \n", + "2 gpt-4 0.2 random \n", + "3 gpt-3.5-turbo 0.2 random \n", + "4 text-davinci-003 0.2 random \n", + "11 text-davinci-003 0.2 random \n", + "15 text-davinci-003 0.2 random \n", + ".. ... ... ... \n", + "724 gpt-3.5-turbo 0.2 random \n", + "725 claude-instant-1 0.2 random \n", + "726 gpt-3.5-turbo 0.2 random \n", + "727 claude-2 0.2 random \n", + "729 text-davinci-003 0.2 random \n", + "\n", + "[341 rows x 8 columns]" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random_low_temp" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/m9/_txh68y946s4pxy1x2wnd3lh0000gn/T/ipykernel_2652/2342559592.py:1: FutureWarning: ['strategy'] did not aggregate successfully. If any error is raised this will raise in a future version of pandas. Drop these columns/ops to avoid this warning.\n", + " random_low_temp = random_low_temp.groupby(['model', 'temperature', 'num_support_samples']).agg(['mean', sem, 'std', 'count']).sort_values(('f1_macro', 'mean'), ascending=False)\n" + ] + } + ], + "source": [ + "random_low_temp = random_low_temp.groupby(['model', 'temperature', 'num_support_samples']).agg(['mean', sem, 'std', 'count']).sort_values(('f1_macro', 'mean'), ascending=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + "
acc_macrof1_macrof1_microkappa
meansemstdcountmeansemstdcountmeansemstdcountmeansemstdcount
modeltemperaturenum_support_samples
gpt-40.21000.7633330.0181960.04457260.7515800.0230220.05639260.7633330.0181960.04457260.5266670.0363930.0891446
500.7377780.0180880.05426390.7219330.0238790.07163890.7377780.0180880.05426390.4755560.0361750.1085259
200.6666670.0290590.08717890.6304470.0400280.12008590.6666670.0290590.08717890.3333330.0581190.1743569
claude-instant-10.2500.6320000.0500400.11189350.6099730.0581930.13012350.6320000.0500400.11189350.2640000.1000800.2237865
claude-20.2500.6100000.0500000.07071120.6028900.0457250.06466420.6100000.0500000.07071120.2200000.1000000.1414212
gpt-40.2100.6111110.0321650.09649490.5881730.0356740.10702190.6111110.0321650.09649490.2222220.0643290.1929889
claude-20.21000.5866670.0545690.09451630.5724010.0575460.09967330.5866670.0545690.09451630.1733330.1091380.1890333
gpt-3.5-turbo0.21000.5733330.0193540.106004300.5496130.0228420.125112300.5733330.0193540.106004300.1466670.0387070.21200730
text-ada-0010.2100.5558820.1441180.20381320.5486110.1388890.19641920.5558820.1441180.20381320.1004440.2809990.3973932
claude-20.2200.5500000.0500000.07071120.5450020.0549980.07777920.5500000.0500000.07071120.1000000.1000000.1414212
claude-instant-10.21000.5823670.0261840.05854950.5404640.0382990.08564050.5823670.0261840.05854950.1618980.0521880.1166965
gpt-3.5-turbo0.2500.5566670.0181710.099528300.5305130.0218450.119650300.5566670.0181710.099528300.1133330.0363420.19905530
claude-20.2100.5150000.0170780.03415740.5006680.0195460.03909240.5150000.0170780.03415740.0300000.0341570.0683134
text-davinci-0030.2500.5510000.0228250.102078200.4968840.0299920.134130200.5510000.0228250.102078200.1020000.0456510.20415720
gpt-3.5-turbo0.2200.5280000.0129580.070974300.4933400.0162180.088830300.5280000.0129580.070974300.0560000.0259160.14194730
100.5366670.0140630.077028300.4869770.0187290.102582300.5366670.0140630.077028300.0733330.0281270.15405630
claude-instant-10.2100.5266670.0190900.04676260.4844720.0403930.09894360.5266670.0190900.04676260.0533330.0381810.0935246
200.5300000.0184390.04516660.4754010.0327610.08024760.5300000.0184390.04516660.0600000.0368780.0903336
text-davinci-0030.2100.5103700.0188070.097723270.4658760.0205610.106837270.5103700.0188070.097723270.0207410.0376140.19544727
claude-instant-10.250.5377780.0139220.04176790.4572980.0329720.09891590.5377780.0139220.04176790.0755560.0278440.0835339
gpt-40.250.5333330.0216020.06480790.4548960.0416370.12491290.5333330.0216020.06480790.0666670.0432050.1296159
gpt-3.5-turbo0.250.5160000.0080460.044069300.4454530.0128920.070611300.5160000.0080460.044069300.0320000.0160920.08813830
text-ada-0010.2200.5244130.0722960.16165950.4368270.0941460.21051750.4789580.0825510.1845905-0.0146410.1429990.3197555
text-davinci-0030.2200.4933330.0152020.069666210.4270140.0160190.073410210.4933330.0152020.06966621-0.0133330.0304050.13933221
text-ada-0010.250.5228740.0284090.05681840.4145700.0205750.04114940.5228740.0284090.0568184-0.0807270.0793020.1586034
text-davinci-0030.250.5018180.0108440.050863220.4133510.0161460.075730220.5018180.0108440.050863220.0036360.0216880.10172522
claude-20.250.5166670.0130810.03204260.4013660.0316960.07763960.5166670.0130810.03204260.0333330.0261620.0640836
\n", + "
" + ], + "text/plain": [ + " acc_macro \\\n", + " mean sem \n", + "model temperature num_support_samples \n", + "gpt-4 0.2 100 0.763333 0.018196 \n", + " 50 0.737778 0.018088 \n", + " 20 0.666667 0.029059 \n", + "claude-instant-1 0.2 50 0.632000 0.050040 \n", + "claude-2 0.2 50 0.610000 0.050000 \n", + "gpt-4 0.2 10 0.611111 0.032165 \n", + "claude-2 0.2 100 0.586667 0.054569 \n", + "gpt-3.5-turbo 0.2 100 0.573333 0.019354 \n", + "text-ada-001 0.2 10 0.555882 0.144118 \n", + "claude-2 0.2 20 0.550000 0.050000 \n", + "claude-instant-1 0.2 100 0.582367 0.026184 \n", + "gpt-3.5-turbo 0.2 50 0.556667 0.018171 \n", + "claude-2 0.2 10 0.515000 0.017078 \n", + "text-davinci-003 0.2 50 0.551000 0.022825 \n", + "gpt-3.5-turbo 0.2 20 0.528000 0.012958 \n", + " 10 0.536667 0.014063 \n", + "claude-instant-1 0.2 10 0.526667 0.019090 \n", + " 20 0.530000 0.018439 \n", + "text-davinci-003 0.2 10 0.510370 0.018807 \n", + "claude-instant-1 0.2 5 0.537778 0.013922 \n", + "gpt-4 0.2 5 0.533333 0.021602 \n", + "gpt-3.5-turbo 0.2 5 0.516000 0.008046 \n", + "text-ada-001 0.2 20 0.524413 0.072296 \n", + "text-davinci-003 0.2 20 0.493333 0.015202 \n", + "text-ada-001 0.2 5 0.522874 0.028409 \n", + "text-davinci-003 0.2 5 0.501818 0.010844 \n", + "claude-2 0.2 5 0.516667 0.013081 \n", + "\n", + " f1_macro \\\n", + " std count mean \n", + "model temperature num_support_samples \n", + "gpt-4 0.2 100 0.044572 6 0.751580 \n", + " 50 0.054263 9 0.721933 \n", + " 20 0.087178 9 0.630447 \n", + "claude-instant-1 0.2 50 0.111893 5 0.609973 \n", + "claude-2 0.2 50 0.070711 2 0.602890 \n", + "gpt-4 0.2 10 0.096494 9 0.588173 \n", + "claude-2 0.2 100 0.094516 3 0.572401 \n", + "gpt-3.5-turbo 0.2 100 0.106004 30 0.549613 \n", + "text-ada-001 0.2 10 0.203813 2 0.548611 \n", + "claude-2 0.2 20 0.070711 2 0.545002 \n", + "claude-instant-1 0.2 100 0.058549 5 0.540464 \n", + "gpt-3.5-turbo 0.2 50 0.099528 30 0.530513 \n", + "claude-2 0.2 10 0.034157 4 0.500668 \n", + "text-davinci-003 0.2 50 0.102078 20 0.496884 \n", + "gpt-3.5-turbo 0.2 20 0.070974 30 0.493340 \n", + " 10 0.077028 30 0.486977 \n", + "claude-instant-1 0.2 10 0.046762 6 0.484472 \n", + " 20 0.045166 6 0.475401 \n", + "text-davinci-003 0.2 10 0.097723 27 0.465876 \n", + "claude-instant-1 0.2 5 0.041767 9 0.457298 \n", + "gpt-4 0.2 5 0.064807 9 0.454896 \n", + "gpt-3.5-turbo 0.2 5 0.044069 30 0.445453 \n", + "text-ada-001 0.2 20 0.161659 5 0.436827 \n", + "text-davinci-003 0.2 20 0.069666 21 0.427014 \n", + "text-ada-001 0.2 5 0.056818 4 0.414570 \n", + "text-davinci-003 0.2 5 0.050863 22 0.413351 \n", + "claude-2 0.2 5 0.032042 6 0.401366 \n", + "\n", + " \\\n", + " sem std count \n", + "model temperature num_support_samples \n", + "gpt-4 0.2 100 0.023022 0.056392 6 \n", + " 50 0.023879 0.071638 9 \n", + " 20 0.040028 0.120085 9 \n", + "claude-instant-1 0.2 50 0.058193 0.130123 5 \n", + "claude-2 0.2 50 0.045725 0.064664 2 \n", + "gpt-4 0.2 10 0.035674 0.107021 9 \n", + "claude-2 0.2 100 0.057546 0.099673 3 \n", + "gpt-3.5-turbo 0.2 100 0.022842 0.125112 30 \n", + "text-ada-001 0.2 10 0.138889 0.196419 2 \n", + "claude-2 0.2 20 0.054998 0.077779 2 \n", + "claude-instant-1 0.2 100 0.038299 0.085640 5 \n", + "gpt-3.5-turbo 0.2 50 0.021845 0.119650 30 \n", + "claude-2 0.2 10 0.019546 0.039092 4 \n", + "text-davinci-003 0.2 50 0.029992 0.134130 20 \n", + "gpt-3.5-turbo 0.2 20 0.016218 0.088830 30 \n", + " 10 0.018729 0.102582 30 \n", + "claude-instant-1 0.2 10 0.040393 0.098943 6 \n", + " 20 0.032761 0.080247 6 \n", + "text-davinci-003 0.2 10 0.020561 0.106837 27 \n", + "claude-instant-1 0.2 5 0.032972 0.098915 9 \n", + "gpt-4 0.2 5 0.041637 0.124912 9 \n", + "gpt-3.5-turbo 0.2 5 0.012892 0.070611 30 \n", + "text-ada-001 0.2 20 0.094146 0.210517 5 \n", + "text-davinci-003 0.2 20 0.016019 0.073410 21 \n", + "text-ada-001 0.2 5 0.020575 0.041149 4 \n", + "text-davinci-003 0.2 5 0.016146 0.075730 22 \n", + "claude-2 0.2 5 0.031696 0.077639 6 \n", + "\n", + " f1_micro \\\n", + " mean sem \n", + "model temperature num_support_samples \n", + "gpt-4 0.2 100 0.763333 0.018196 \n", + " 50 0.737778 0.018088 \n", + " 20 0.666667 0.029059 \n", + "claude-instant-1 0.2 50 0.632000 0.050040 \n", + "claude-2 0.2 50 0.610000 0.050000 \n", + "gpt-4 0.2 10 0.611111 0.032165 \n", + "claude-2 0.2 100 0.586667 0.054569 \n", + "gpt-3.5-turbo 0.2 100 0.573333 0.019354 \n", + "text-ada-001 0.2 10 0.555882 0.144118 \n", + "claude-2 0.2 20 0.550000 0.050000 \n", + "claude-instant-1 0.2 100 0.582367 0.026184 \n", + "gpt-3.5-turbo 0.2 50 0.556667 0.018171 \n", + "claude-2 0.2 10 0.515000 0.017078 \n", + "text-davinci-003 0.2 50 0.551000 0.022825 \n", + "gpt-3.5-turbo 0.2 20 0.528000 0.012958 \n", + " 10 0.536667 0.014063 \n", + "claude-instant-1 0.2 10 0.526667 0.019090 \n", + " 20 0.530000 0.018439 \n", + "text-davinci-003 0.2 10 0.510370 0.018807 \n", + "claude-instant-1 0.2 5 0.537778 0.013922 \n", + "gpt-4 0.2 5 0.533333 0.021602 \n", + "gpt-3.5-turbo 0.2 5 0.516000 0.008046 \n", + "text-ada-001 0.2 20 0.478958 0.082551 \n", + "text-davinci-003 0.2 20 0.493333 0.015202 \n", + "text-ada-001 0.2 5 0.522874 0.028409 \n", + "text-davinci-003 0.2 5 0.501818 0.010844 \n", + "claude-2 0.2 5 0.516667 0.013081 \n", + "\n", + " kappa \\\n", + " std count mean \n", + "model temperature num_support_samples \n", + "gpt-4 0.2 100 0.044572 6 0.526667 \n", + " 50 0.054263 9 0.475556 \n", + " 20 0.087178 9 0.333333 \n", + "claude-instant-1 0.2 50 0.111893 5 0.264000 \n", + "claude-2 0.2 50 0.070711 2 0.220000 \n", + "gpt-4 0.2 10 0.096494 9 0.222222 \n", + "claude-2 0.2 100 0.094516 3 0.173333 \n", + "gpt-3.5-turbo 0.2 100 0.106004 30 0.146667 \n", + "text-ada-001 0.2 10 0.203813 2 0.100444 \n", + "claude-2 0.2 20 0.070711 2 0.100000 \n", + "claude-instant-1 0.2 100 0.058549 5 0.161898 \n", + "gpt-3.5-turbo 0.2 50 0.099528 30 0.113333 \n", + "claude-2 0.2 10 0.034157 4 0.030000 \n", + "text-davinci-003 0.2 50 0.102078 20 0.102000 \n", + "gpt-3.5-turbo 0.2 20 0.070974 30 0.056000 \n", + " 10 0.077028 30 0.073333 \n", + "claude-instant-1 0.2 10 0.046762 6 0.053333 \n", + " 20 0.045166 6 0.060000 \n", + "text-davinci-003 0.2 10 0.097723 27 0.020741 \n", + "claude-instant-1 0.2 5 0.041767 9 0.075556 \n", + "gpt-4 0.2 5 0.064807 9 0.066667 \n", + "gpt-3.5-turbo 0.2 5 0.044069 30 0.032000 \n", + "text-ada-001 0.2 20 0.184590 5 -0.014641 \n", + "text-davinci-003 0.2 20 0.069666 21 -0.013333 \n", + "text-ada-001 0.2 5 0.056818 4 -0.080727 \n", + "text-davinci-003 0.2 5 0.050863 22 0.003636 \n", + "claude-2 0.2 5 0.032042 6 0.033333 \n", + "\n", + " \n", + " sem std count \n", + "model temperature num_support_samples \n", + "gpt-4 0.2 100 0.036393 0.089144 6 \n", + " 50 0.036175 0.108525 9 \n", + " 20 0.058119 0.174356 9 \n", + "claude-instant-1 0.2 50 0.100080 0.223786 5 \n", + "claude-2 0.2 50 0.100000 0.141421 2 \n", + "gpt-4 0.2 10 0.064329 0.192988 9 \n", + "claude-2 0.2 100 0.109138 0.189033 3 \n", + "gpt-3.5-turbo 0.2 100 0.038707 0.212007 30 \n", + "text-ada-001 0.2 10 0.280999 0.397393 2 \n", + "claude-2 0.2 20 0.100000 0.141421 2 \n", + "claude-instant-1 0.2 100 0.052188 0.116696 5 \n", + "gpt-3.5-turbo 0.2 50 0.036342 0.199055 30 \n", + "claude-2 0.2 10 0.034157 0.068313 4 \n", + "text-davinci-003 0.2 50 0.045651 0.204157 20 \n", + "gpt-3.5-turbo 0.2 20 0.025916 0.141947 30 \n", + " 10 0.028127 0.154056 30 \n", + "claude-instant-1 0.2 10 0.038181 0.093524 6 \n", + " 20 0.036878 0.090333 6 \n", + "text-davinci-003 0.2 10 0.037614 0.195447 27 \n", + "claude-instant-1 0.2 5 0.027844 0.083533 9 \n", + "gpt-4 0.2 5 0.043205 0.129615 9 \n", + "gpt-3.5-turbo 0.2 5 0.016092 0.088138 30 \n", + "text-ada-001 0.2 20 0.142999 0.319755 5 \n", + "text-davinci-003 0.2 20 0.030405 0.139332 21 \n", + "text-ada-001 0.2 5 0.079302 0.158603 4 \n", + "text-davinci-003 0.2 5 0.021688 0.101725 22 \n", + "claude-2 0.2 5 0.026162 0.064083 6 " + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random_low_temp" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "\n", + "for i, model in enumerate(df['model'].unique()):\n", + " subset = random_low_temp.query(f'model == \"{model}\"')\n", + " subset = subset.reset_index()\n", + " subset = subset.sort_values('num_support_samples')\n", + " ax.plot(subset['num_support_samples'], subset[('f1_macro', 'mean')], label=model, color=f\"C{i}\",\n", + " marker='o')\n", + " ax.fill_between(subset['num_support_samples'], subset[('f1_macro', 'mean')] - subset[('f1_macro', 'sem')], \n", + " subset[('f1_macro', 'mean')] + subset[('f1_macro', 'sem')], alpha=0.2, color=f\"C{i}\")\n", + "\n", + "range_frame(ax, \n", + " np.array([5, 100]),\n", + " np.array([df['f1_macro'].min(), df['f1_macro'].max()]),\n", + " )\n", + "\n", + "ax.set_xlabel('number of support samples')\n", + "ax.set_ylabel('macro F1 score')\n", + "\n", + "\n", + "matplotx.line_labels(ax)\n", + "fig.tight_layout()\n", + "\n", + "fig.savefig('icl_t02_random_sampling.pdf',bbox_inches='tight')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Random high temp" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [], + "source": [ + "random_high_temp = df.query('temperature == 0.8 and strategy == \"random\"')" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/m9/_txh68y946s4pxy1x2wnd3lh0000gn/T/ipykernel_2652/3153245902.py:1: FutureWarning: ['strategy'] did not aggregate successfully. If any error is raised this will raise in a future version of pandas. Drop these columns/ops to avoid this warning.\n", + " random_high_temp = random_high_temp.groupby(['model', 'num_support_samples']).agg(['mean', sem, 'std', 'count']).sort_values(('f1_macro', 'mean'), ascending=False)\n" + ] + } + ], + "source": [ + "random_high_temp = random_high_temp.groupby(['model', 'num_support_samples']).agg(['mean', sem, 'std', 'count']).sort_values(('f1_macro', 'mean'), ascending=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "\n", + "for i, model in enumerate(df['model'].unique()):\n", + " subset = random_high_temp.query(f'model == \"{model}\"')\n", + " subset = subset.reset_index()\n", + " subset = subset.sort_values('num_support_samples')\n", + " ax.plot(subset['num_support_samples'], subset[('f1_macro', 'mean')], label=model, color=f\"C{i}\",\n", + " marker='o')\n", + " ax.fill_between(subset['num_support_samples'], subset[('f1_macro', 'mean')] - subset[('f1_macro', 'sem')], \n", + " subset[('f1_macro', 'mean')] + subset[('f1_macro', 'sem')], alpha=0.2, color=f\"C{i}\")\n", + "\n", + "range_frame(ax, \n", + " np.array([5, 100]),\n", + " np.array([df['f1_macro'].min(), df['f1_macro'].max()]),\n", + " )\n", + "\n", + "ax.set_xlabel('number of support samples')\n", + "ax.set_ylabel('macro F1 score')\n", + "\n", + "\n", + "matplotx.line_labels(ax)\n", + "fig.tight_layout()\n", + "\n", + "fig.savefig('icl_t08_random_sampling.pdf',bbox_inches='tight')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "chemlift", + "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.9.18" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/experiments/icl_t02_random_sampling.pdf b/experiments/icl_t02_random_sampling.pdf new file mode 100644 index 0000000..18955a7 Binary files /dev/null and b/experiments/icl_t02_random_sampling.pdf differ diff --git a/experiments/icl_t08_random_sampling.pdf b/experiments/icl_t08_random_sampling.pdf new file mode 100644 index 0000000..f5b1c8e Binary files /dev/null and b/experiments/icl_t08_random_sampling.pdf differ diff --git a/experiments/run_experiments_hugginface.py b/experiments/run_experiments_hugginface.py index bfc63c8..d10be55 100644 --- a/experiments/run_experiments_hugginface.py +++ b/experiments/run_experiments_hugginface.py @@ -1,8 +1,20 @@ -# from langchain import HuggingFaceHub -# llm = HuggingFaceHub(repo_id = ) +from langchain import HuggingFaceHub +from chemlift.icl.fewshotclassifier import FewShotClassifier +from chemlift.icl.fewshotpredictor import Strategy +from gptchem.data import get_photoswitch_data +from sklearn.model_selection import train_test_split +from gptchem.evaluator import evaluate_classification +import time +from fastcore.xtras import save_pickle, load_pickle +import os +import dotenv +dotenv.load_dotenv("../.env", override=True) -models = [3 +number_support_samples = [5, 10, 20, 50, 100] +strategies = [Strategy.RANDOM, Strategy.DIVERSE] + +models = [ "google/flan-t5-xl", "bigscience/bloom", "EleutherAI/pythia-70m-deduped", @@ -15,3 +27,96 @@ ] +context_sizes = { + "google/flan-t5-xl": 1024, + "bigscience/bloom": 1024, + "EleutherAI/pythia-70m-deduped": 500, + "EleutherAI/pythia-160m-deduped": 500, + "EleutherAI/pythia-410m-deduped": 500, + "EleutherAI/pythia-1b-deduped": 500, + "EleutherAI/pythia-2.8b-deduped": 500, + "EleutherAI/pythia-6.9b-deduped": 500, + "EleutherAI/pythia-12b-deduped": 500, +} + + +def get_timestr(): + return time.strftime("%Y-%m-%d_%H-%M-%S") + + +def train_test( + num_support_samples, + strategy, + model, + num_test_points, + random_state=42, + temperature=0.8, + max_test=5, +): + llm = HuggingFaceHub( + repo_id=model, model_kwargs={"temperature": temperature, "max_length": context_sizes[model]} + ) + classifier = FewShotClassifier( + llm, + property_name="class of the transition wavelength", + n_support=num_support_samples, + strategy=strategy, + seed=random_state, + prefix="You are an expert chemist. ", + max_test=max_test, + ) + + data = get_photoswitch_data() + data = data.dropna(subset=["SMILES", "E isomer pi-pi* wavelength in nm"]) + + data["label"] = data["E isomer pi-pi* wavelength in nm"].apply( + lambda x: 1 if x > data["E isomer pi-pi* wavelength in nm"].median() else 0 + ) + + data_train, data_test = train_test_split( + data, test_size=num_test_points, stratify=data["label"], random_state=random_state + ) + + classifier.fit(data_train["SMILES"].values, data_train["label"].values) + predictions = classifier.predict(data_test["SMILES"].values) + + report = evaluate_classification(data_test["label"].values, predictions) + + report["num_support_samples"] = num_support_samples + report["strategy"] = strategy.value + report["model"] = model + report["num_test_points"] = num_test_points + report["random_state"] = random_state + + report["predictions"] = predictions + report["targets"] = data_test["label"].values + report["max_test"] = max_test + report["temperature"] = temperature + + if not os.path.exists("results"): + os.makedirs("results") + + save_pickle(f"results/{get_timestr()}_huggingface_report.pkl", report) + print(report) + + +if __name__ == "__main__": + for seed in range(5): + for num_support_samples in number_support_samples: + for strategy in strategies: + for anthropic_mode in models: + for num_test_points in [50]: + for temperature in [0.2, 0.8]: + for max_test in [1, 5, 10]: + try: + train_test( + num_support_samples, + strategy, + anthropic_mode, + num_test_points, + random_state=seed, + temperature=temperature, + max_test=max_test, + ) + except Exception as e: + print(anthropic_mode, e) diff --git a/experiments/run_experiments_openai.py b/experiments/run_experiments_openai.py index 92522a8..47bffb4 100644 --- a/experiments/run_experiments_openai.py +++ b/experiments/run_experiments_openai.py @@ -1,6 +1,111 @@ +from chemlift.icl.utils import LangChainChatModelWrapper +from langchain.chat_models import ChatOpenAI +from langchain.llms import OpenAI +from chemlift.icl.fewshotclassifier import FewShotClassifier +from chemlift.icl.fewshotpredictor import Strategy from gptchem.data import get_photoswitch_data -from gptchem.evaluator import evaluate_classication - from sklearn.model_selection import train_test_split +from gptchem.evaluator import evaluate_classification +import time +from fastcore.xtras import save_pickle, load_pickle +import os +import dotenv +import langchain +from langchain.cache import SQLiteCache + +langchain.llm_cache = SQLiteCache(database_path=".langchain.db") +dotenv.load_dotenv("../.env", override=True) + +number_support_samples = [5, 10, 20, 50, 100] +strategies = [Strategy.RANDOM, Strategy.DIVERSE] + +openai_llm_models = ["text-ada-001", "text-davinci-003"] +openai_chat_models = ["gpt-4", "gpt-3.5-turbo"] + +openai_models = openai_llm_models + openai_chat_models + + +def get_timestr(): + return time.strftime("%Y-%m-%d_%H-%M-%S") + + +def train_test( + num_support_samples, + strategy, + model, + num_test_points, + random_state=42, + temperature=0.8, + max_test=5, +): + if model in openai_chat_models: + llm = LangChainChatModelWrapper(ChatOpenAI(model=model, temperature=temperature)) + elif model in openai_llm_models: + llm = OpenAI(model_name=model) + else: + raise ValueError(f"Unknown model {model}") + + classifier = FewShotClassifier( + llm, + property_name="class of the transition wavelength", + n_support=num_support_samples, + strategy=strategy, + seed=random_state, + prefix="You are an expert chemist. ", + max_test=max_test, + ) + + data = get_photoswitch_data() + data = data.dropna(subset=["SMILES", "E isomer pi-pi* wavelength in nm"]) + + data["label"] = data["E isomer pi-pi* wavelength in nm"].apply( + lambda x: 1 if x > data["E isomer pi-pi* wavelength in nm"].median() else 0 + ) + + data_train, data_test = train_test_split( + data, test_size=num_test_points, stratify=data["label"], random_state=random_state + ) + + classifier.fit(data_train["SMILES"].values, data_train["label"].values) + predictions = classifier.predict(data_test["SMILES"].values) + + report = evaluate_classification(data_test["label"].values, predictions) + + report["num_support_samples"] = num_support_samples + report["strategy"] = strategy.value + report["model"] = model + report["num_test_points"] = num_test_points + report["random_state"] = random_state + + report["predictions"] = predictions + report["targets"] = data_test["label"].values + report["max_test"] = max_test + report["temperature"] = temperature + + if not os.path.exists("results"): + os.makedirs("results") + + save_pickle(f"results/{get_timestr()}_openai_report.pkl", report) + print(report) + -openai_models = ["text-ada-001", "text-davinci-003", "gpt-4", "gpt-3.5-turbo"] +if __name__ == "__main__": + for seed in range(5): + for num_support_samples in number_support_samples: + for strategy in strategies: + for anthropic_mode in openai_models: + for num_test_points in [50]: + for temperature in [0.2, 0.8]: + for max_test in [1, 5, 10]: + try: + train_test( + num_support_samples, + strategy, + anthropic_mode, + num_test_points, + random_state=seed + 34, + temperature=temperature, + max_test=max_test, + ) + except Exception as e: + print(e)