File size: 2,502 Bytes
c0793ae
34fa13e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c0793ae
34fa13e
 
 
 
 
c0793ae
34fa13e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c0793ae
34fa13e
 
 
c0793ae
34fa13e
 
 
 
c0793ae
34fa13e
 
 
 
 
 
 
 
 
 
 
 
 
c0793ae
34fa13e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c0793ae
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
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Module 3: Intent Classification\n",
    "\n",
    "This notebook documents the intent classifier used to route chatbot messages. The classifier uses few-shot prompting with Groq and returns one of five intents."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Design\n",
    "\n",
    "Few-shot prompting is a good fit here because the label space is small, the routing rules are explicit, and the classifier should be easy to inspect and adjust without training a new model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9aa6f310",
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "from pathlib import Path\n",
    "\n",
    "PROJECT_ROOT = Path.cwd().resolve().parent if Path.cwd().name == 'notebooks' else Path.cwd().resolve()\n",
    "sys.path.append(str(PROJECT_ROOT / 'src' / 'models'))\n",
    "\n",
    "from intent_classifier import IntentClassifier, TEST_CASES"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "4ba6de78",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'intent': 'asking_mental_health_question',\n",
       " 'confidence': 1.0,\n",
       " 'reason': 'The user describes anxiety and sleep difficulty, indicating a mental-health concern.'}"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "classifier = IntentClassifier()\n",
    "classifier.classify('hi, I feel anxious and cannot sleep')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "7f5eb391",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results = classifier.evaluate(TEST_CASES)\n",
    "classifier.save_reports(results)\n",
    "results['accuracy']"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.12.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}