File size: 31,723 Bytes
bfe6b6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "df_input = pd.read_csv('sampled_data.csv')\n",
    "df_inferenced = pd.read_csv('inference_output.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1000\n",
      "1000\n"
     ]
    }
   ],
   "source": [
    "print(len(df_input))\n",
    "print(len(df_inferenced))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_combined = pd.concat([df_input, df_inferenced], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>title</th>\n",
       "      <th>text</th>\n",
       "      <th>label</th>\n",
       "      <th>Output</th>\n",
       "      <th>Tokens Used</th>\n",
       "      <th>Finish Reason</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Live at Truthdig: Robert Scheer and Thomas Fra...</td>\n",
       "      <td>Live at Truthdig: Robert Scheer and Thomas Fra...</td>\n",
       "      <td>0</td>\n",
       "      <td>Real</td>\n",
       "      <td>265</td>\n",
       "      <td>stop</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>The Mirage of a Return to Manufacturing Greatn...</td>\n",
       "      <td>Half a century ago, harvesting California’s 2....</td>\n",
       "      <td>1</td>\n",
       "      <td>Real</td>\n",
       "      <td>1627</td>\n",
       "      <td>stop</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>British PM expected to offer to fill post-Brex...</td>\n",
       "      <td>(Reuters) - The British government has told Ge...</td>\n",
       "      <td>1</td>\n",
       "      <td>fake</td>\n",
       "      <td>200</td>\n",
       "      <td>stop</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Checkmating Obama</td>\n",
       "      <td>Originally published by the Jerusalem Post . \\...</td>\n",
       "      <td>0</td>\n",
       "      <td>fake</td>\n",
       "      <td>2166</td>\n",
       "      <td>stop</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Thirty-eight injured in police charges in Cata...</td>\n",
       "      <td>MADRID (Reuters) - Emergency services have att...</td>\n",
       "      <td>1</td>\n",
       "      <td>Real</td>\n",
       "      <td>176</td>\n",
       "      <td>stop</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                               title  \\\n",
       "0  Live at Truthdig: Robert Scheer and Thomas Fra...   \n",
       "1  The Mirage of a Return to Manufacturing Greatn...   \n",
       "2  British PM expected to offer to fill post-Brex...   \n",
       "3                                  Checkmating Obama   \n",
       "4  Thirty-eight injured in police charges in Cata...   \n",
       "\n",
       "                                                text  label Output  \\\n",
       "0  Live at Truthdig: Robert Scheer and Thomas Fra...      0   Real   \n",
       "1  Half a century ago, harvesting California’s 2....      1   Real   \n",
       "2  (Reuters) - The British government has told Ge...      1   fake   \n",
       "3  Originally published by the Jerusalem Post . \\...      0   fake   \n",
       "4  MADRID (Reuters) - Emergency services have att...      1   Real   \n",
       "\n",
       "   Tokens Used Finish Reason  \n",
       "0          265          stop  \n",
       "1         1627          stop  \n",
       "2          200          stop  \n",
       "3         2166          stop  \n",
       "4          176          stop  "
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_combined.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['stop', 'length'], dtype=object)"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_combined[\"Finish Reason\"].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "994"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_combined = df_combined[df_combined[\"Finish Reason\"] != \"length\"]\n",
    "len(df_combined)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_combined.drop(columns=[\"title\", \"text\", \"Tokens Used\", \"Finish Reason\"], inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\kimi\\AppData\\Local\\Temp\\ipykernel_31372\\3169472720.py:2: DeprecationWarning: In a future version, `df.iloc[:, i] = newvals` will attempt to set the values inplace instead of always setting a new array. To retain the old behavior, use either `df[df.columns[i]] = newvals` or, if columns are non-unique, `df.isetitem(i, newvals)`\n",
      "  df_combined.loc[:, \"Output\"] = df_combined[\"Output\"].str.strip().str.lower().map({\"real\": 1, \"fake\": 0})\n"
     ]
    }
   ],
   "source": [
    "df_combined = df_combined.copy()\n",
    "df_combined.loc[:, \"Output\"] = df_combined[\"Output\"].str.strip().str.lower().map({\"real\": 1, \"fake\": 0})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "994"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(df_combined)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.7323943661971831\n",
      "F1 Score: 0.5969696969696969\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\kimi\\AppData\\Local\\Temp\\ipykernel_31372\\2541391757.py:14: MatplotlibDeprecationWarning: The seaborn styles shipped by Matplotlib are deprecated since 3.6, as they no longer correspond to the styles shipped by seaborn. However, they will remain available as 'seaborn-v0_8-<style>'. Alternatively, directly use the seaborn API instead.\n",
      "  plt.style.use(\"seaborn-whitegrid\")\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAngAAAIYCAYAAAD+Y5FgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABBPklEQVR4nO3deVhUdf//8degKLgkoOaWVsZi7oSC3K5ouGOKmN0Rd7ZZLl/LCvc0U9wqLTW1XKIM01tvKbk1M0tbBXFJzTTBcskFRQQTQdbfH/2cuwkXUIZxzjwf1zXXJeecOec9I9W71+dzPsdUWFhYKAAAABiGk60LAAAAQOmiwQMAADAYGjwAAACDocEDAAAwGBo8AAAAg6HBAwAAMBgaPAAAAIOhwQMAADAYGjwAVsEa6gBgOzR4sHv79u1TZGSkOnXqpObNm6tLly6aMGGCjh8/brVrbtiwQUFBQWrWrJkmTpxYauf18fHRvHnzSu18N7qWj4+PZs+efdX9BQUFat++vXx8fLR27doSnXv16tWaOXPmDY+LiIhQREREic59LVOmTNGcOXMstmVnZys6OloDBw5UQECAmjVrpuDgYL322ms6deqUxbHz5s0zfydXXo0bN1ZAQICGDRumpKQkSVJCQkKR4672SkhIKFbdH3zwgXx8fPT7779f85iIiIgbXu9Wv8e1a9fesI7ieumll7RkyZJbPg+Am1fe1gUAtyImJkbTpk1TQECAXnrpJd155506duyYlixZok2bNun9999XkyZNSv26kydP1j333KMZM2aoVq1apXbeVatWqXbt2qV2vhtxcnLSxo0b9eKLLxbZl5iYqDNnztzUeRcuXCh/f/8bHjdp0qSbOv/fxcfHa9OmTfr888/N21JSUvT000/r1KlTevTRRzVs2DC5uLjo4MGD+uCDD7R+/XqtWLFC9913n8W5Vq1aZf5zfn6+Tp48qTlz5ig8PFzr169XkyZNLI7Zv3+/XnvtNU2cONHid83T0/OGdR85cuSaDfZfTZo0SRcvXjT/PHnyZPP2K6pUqXLD85SVUaNGKSQkREFBQUW+XwBlgwYPdmvnzp2KiopSeHi4xo8fb94eEBCgLl26KDQ0VGPHjtW6detK/drp6elq27atAgICSvW8LVu2LNXz3cgDDzygHTt2aP/+/UUa4fXr1+v+++/XgQMHrHb94jRBxTF9+nT961//UqVKlST9OTw8atQonTp1SmvWrNE999xjPtbf3199+vRRv379NG3aNC1dutTiXH//O/Dz81OdOnUUHh6u2NhYDR482OKYy5cvmz9LSf7+8vPzNWbMGLm5uen06dPXPfbv39OVZq6sf1+Kq1atWurZs6feeOMNLVy40NblAA6JIVrYraVLl6pq1apXTZ88PDw0ZswYde3a1SL52LBhg0JDQ+Xr66u2bdtq4sSJysjIMO+fN2+egoODtXXrVoWEhKhp06bq1q2bYmNjJf1veE6S3nnnHfOQ1pgxY9S5c2eLGn7//fciw5vLly9X9+7d1axZM7Vv316vvvqqRX1/H6I9c+aMxo4dq44dO6p58+YKCwvTl19+aXEdHx8fxcTEaPz48fL395evr69GjBih1NTUG36H/v7+qlGjhj777DOL7Xl5edq0aZN69epV5D0HDx7U8OHD1aZNGzVp0kTt27fX1KlTlZ2dLUnq3LmzTpw4odjYWPP3s3btWjVu3FirV69Wu3bt1KFDByUlJVkM0X744YdFvq/ExETdf//9mjt37jU/w9atW/XLL7+od+/e5m07duxQfHy8Ro4cadHcXeHm5qYRI0borrvuUkFBwQ2/p6ZNm0qSTpw4ccNji2vp0qVKTU3V4MGDS+2c1xpm7dy5s8aMGWP+2cfHR/Pnz1f//v3l5+enBQsWmPft2rVLffv2VbNmzRQSEqINGzZYnOuPP/7Q9OnT9eCDD6pZs2bq3bu31qxZU6SWPn36aMuWLTp06FCpfT4AxUeDB7tUWFio7777ToGBgXJ1db3qMd27d9fw4cPNaceCBQs0cuRItWjRQnPnztWwYcP0+eefKyIiwtycSNLZs2f12muv6V//+pfee+893XXXXRozZowOHz5sMTwXFhamVatW6c477yxWzevXr9fMmTMVHh6upUuXatiwYfr00081derUqx6fmpqqsLAwbd++XSNHjtS8efNUr149DRs2rEgqOWfOHBUUFGj27NkaNWqUtm7dqmnTpt2wJicnJ3Xr1k0bN2602L5t2zZdvnxZQUFBFtvPnDmj8PBwZWVlacaMGVq8eLF69Oih5cuXKzo6WpI0f/581axZUx07drT4fvLz87Vo0SJNnTpVL7zwQpFUKiIiQv7+/po5c6bS0tKUmZmpMWPGqGnTpho6dOg1P8O6devUsmVL1alTx7xt8+bNMplMV21Qr+jXr58mT54sJ6cb/2vwt99+kyQ1aNDghscWR1JSkubPn69p06Zd8/fX2hYuXKhu3bpp9uzZ6tKli3n7K6+8ou7du+udd96Rp6enRo4cqe+++07Sn3MaH330Ua1bt05PPvmkFixYID8/P40fP16LFi2yOL+vr69q1aql//73v2X6uQD8iSFa2KXz58/r8uXLuuuuu4p1fEZGhhYuXKgBAwZYzFvy9vZWeHi41q5dq0cffVSSlJWVpaioKAUGBkqS7rnnHgUFBenrr7/Wk08+aR4Wq127domGyBISElSvXj2Fh4fLyclJ/v7+qlSpks6fP3/V499//32lpaXps88+U/369SVJHTt21KBBgzRr1iz17t3b3Jx4e3tr+vTp5vfu3bu3SNN2LT179lRMTIx++uknc1K1YcMGdenSRS4uLhbHHjp0SPfff7/efvttc+P8j3/8Q9u2bVNiYqKee+45NW7cWBUqVJCHh0eR7+e5555Tp06drlqHyWTStGnT1KdPH73++uuqUKGC0tLStGzZMpUvf+1/VcXHxxdp5I4dOyY3Nze5ublZbM/Pzy9yd2+5cuVkMpnMP+fl5Zn/nJ2drYMHD2ratGmqWrWq+vTpc806iisvL0+jR4/WgAED5O/vXyo3NdyM5s2bW6SH+/fvlyQNGzbMvL1Dhw46cuSI5s+fr3bt2mnt2rU6dOiQVqxYIT8/P0lS+/btlZeXpwULFuiRRx4xf+cmk0lNmzbVtm3byvaDAZBEggc7daWxyc/PL9bxP/74o3JychQSEmKxvVWrVqpXr16ROx7/2phcuenh0qVLt1Cx1KZNGx05ckShoaFasGCBfv75Z4WEhOjxxx+/6vHbt2+Xr6+vubm7ok+fPjp79qx+/fXXq9Z7peasrKxi1eXn56datWqZh2lzcnK0efNmiyHPK9q1a6ePPvpIFStW1G+//aYtW7Zo0aJFSktLU05Ozg2v5e3tfd399evX1+jRoxUbG6tVq1Zp3Lhxuvvuu695fFZWls6dO1ek0b/WEi2PPfaYmjRpYvHavn27xTF/3efn56fw8HBdvnxZ8+bNU82aNW/4Ga/Iz89XXl6e+XXld3XRokW6cOGCXnrppWKfyxqu9XfRo0cPi58ffPBB/fjjj8rMzNT27dtVr149c3N3RZ8+fXT58mXt2bPHYnu9evVs1sACjo4ED3bJzc1NlStX1smTJ695zKVLl5STkyM3NzfzPLsaNWoUOa5GjRr6448/LLb9ddjsSjN5q+u69ezZUwUFBVqxYoXmz5+vt99+W/Xq1dNLL7101aHEjIyMqyaUVz7DhQsXrlrvlZqLW6/JZFL37t21ceNGRUZG6ttvv5WTk5Patm2rlJQUi2OvDAPHxMTo0qVLqlOnjpo3b66KFSsW61rVq1e/4TE9evTQ9OnTlZ+fr3bt2l332CvfwZWbK66oV6+etm7dqosXL1rcXRoVFaXMzExJfyZWV7uL96/zyZydnVWzZs1i1f13gwYNsmge/f39NXbsWC1atEiLFy9WhQoVlJeXZ54DWFBQoPz8fJUrV67E17oZV/tnQVKRJrZ69eoqLCzUxYsXlZGRcc1/hiTL30npz9/Lv/+zBaBs0ODBbrVr104JCQm6fPnyVRuMtWvXKioqSitWrFC1atUk/Tmv7e/LNpw9e7ZISlZSJpOpSJp4tcSvd+/e6t27t/744w999913Wrx4sSIjI9WqVasiy61Uq1btqjdKnD17VpLk7u5+SzX/Vc+ePfXBBx9o37592rBhg7p27SpnZ+cix7333nuKjo7Wq6++qm7duqlq1aqS/pyPWFqmTp0qFxcXubq6asKECUXucv2rK9/B3xuLLl266KOPPtKmTZsUGhpq3t6wYUPzn6+VyDZr1uxWyjebPHmyuZmUpMqVK2v9+vXKzc3VoEGDihwfHBwsf39/LV++/KaveWWo+e83jvy1jhvJyMiwGJpPTU1VuXLlVK1aNVWrVk1Hjx4t8p5r/U5euHChVH9PARQfQ7SwW08++aTS09OLLG4rSefOndOSJUt09913q2XLlmrRooUqVKiguLg4i+N27NihkydP6oEHHrilWipXrmyeF3jFrl27LI554YUXNHz4cElS1apV1aNHDw0dOlT5+flXXW+udevW2r17d5EFm9etW6eaNWted+iypFq2bKl69eopLi5OX3311TVvTti5c6c8PT0VFhZmbu5SUlJ06NAhi6aiODcuXM3mzZu1bt06jRkzRpMmTdJ3332nlStXXvP4ChUqqGbNmkUWLQ4MDJS/v79ef/11i6Hsv7qycLG1NGzYUM2aNTO/GjZsqIcfflhr1qyxeF35nVi4cKF5fbubdSWt/Ov38euvvyo9Pb3Y5/j222/Nfy4oKNDGjRvVokULubi4qHXr1jpx4oR27txp8Z5169bJ2dlZzZs3t9h+6tQp1atX7yY+CYBbRYIHu9WyZUs9//zzeuutt3T48GH169dP7u7uSkpK0rJly5SZman33ntPJpNJbm5uGjx4sObPny9nZ2d16dJFv//+u95++215enpapDw3IygoSMuXL9e4ceM0YMAAcw1/HW5r06aNJk2apJkzZ6pDhw66cOGC5s+fr3vuuUeNGjUqcs4nnnhC69at0xNPPKHhw4fL3d1dn3zyieLj4zVt2rSbbqKupXv37vrwww/l5uZ2zUWKmzdvrgULFui9995Ty5YtdfToUb377rvKycmxmPN3xx136Oeff9b27duL/Ef/WtLS0jRp0iS1bdtW/fr1kyR169ZNM2fOVNu2ba+ZsrZt27ZIM20ymTR79mwNGTJEoaGhGjBggNq0aaOqVavqyJEj+u9//6uEhAS1aNHiqsuoWEutWrWKJLVXGk1vb+9i3zR0LW3atJGrq6tmzJihF154QZmZmZo/f36Rm02u56233lJ+fr7q1Kmjjz/+WL/99pvef/99SVJoaKhWrFih4cOHa8SIEapfv76++uor/ec//9Hw4cN1xx13mM9TWFio3bt3l9qTSgCUDA0e7NqQIUPUuHFjxcTEaPr06UpPT1ft2rXVoUMHPffcc6pbt6752P/7v/9TjRo19NFHH2n16tVyc3NT9+7d9cILL9zyUhVt27bV6NGjtXz5cm3atElNmjTR/Pnz9cgjj5iPeeSRR5Sbm6uVK1dqxYoVcnFxUWBgoCIjI686HFqzZk19/PHHevPNNxUVFaXc3Fw1atRICxYssFjWorT07NlTS5cuVY8ePa7ZPD777LM6f/68PvzwQ73zzjuqU6eOHnroIZlMJr377rvKyMhQtWrV9OSTT2ratGl66qmnzM3BjVwZ0vxrivXKK6+oZ8+eGjdunD788EOLu12v6Natm+Li4nTmzBmLJWuufH+ffPKJ4uLitH79el24cMF8d++CBQvUuXPnq57TXlWtWlVz587Vm2++qWHDhqlevXoaPny4Pvnkk2KfIyoqSrNmzdLRo0fl7e2txYsXmxt+V1dXLV++XG+++abmzp2rixcvqmHDhoqKiioyTL93716lp6ere/fupfkRARSTqZAnggOwY4WFhXrooYfUrVs3DRs2zNbl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",
      "text/plain": [
       "<Figure size 800x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from sklearn.metrics import accuracy_score, f1_score, confusion_matrix\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "accuracy = accuracy_score(df_combined[\"label\"], df_combined[\"Output\"])\n",
    "f1 = f1_score(df_combined[\"label\"], df_combined[\"Output\"])\n",
    "\n",
    "print(f\"Accuracy: {accuracy}\")\n",
    "print(f\"F1 Score: {f1}\")\n",
    "\n",
    "conf_matrix = confusion_matrix(df_combined[\"label\"], df_combined[\"Output\"])\n",
    "\n",
    "plt.style.use(\"seaborn-whitegrid\")\n",
    "plt.figure(figsize=(8, 6))\n",
    "sns.heatmap(conf_matrix, annot=True, fmt=\"d\", cmap=\"Blues\")\n",
    "plt.title(\"Confusion Matrix (GPT-4 Turbo)\")\n",
    "plt.ylabel(\"True Label\")\n",
    "plt.xlabel(\"Predicted Label\")\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "torch",
   "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.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}