!pip uninstall -y sentence-transformers transformers huggingface-hub
!pip install sentence-transformers==2.2.2 transformers==4.30.2 huggingface-hub==0.16.4
!pip install sentence-transformers scikit-learn pandas numpy tqdm
Found existing installation: sentence-transformers 5.1.2

Uninstalling sentence-transformers-5.1.2:

  Successfully uninstalled sentence-transformers-5.1.2

Found existing installation: transformers 4.57.1

Uninstalling transformers-4.57.1:

  Successfully uninstalled transformers-4.57.1

Found existing installation: huggingface-hub 0.36.0

Uninstalling huggingface-hub-0.36.0:

  Successfully uninstalled huggingface-hub-0.36.0

Collecting sentence-transformers==2.2.2

  Downloading sentence-transformers-2.2.2.tar.gz (85 kB)

     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 86.0/86.0 kB 4.0 MB/s eta 0:00:00

  Preparing metadata (setup.py) ... done

Collecting transformers==4.30.2

  Downloading transformers-4.30.2-py3-none-any.whl.metadata (113 kB)

     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 113.6/113.6 kB 10.5 MB/s eta 0:00:00

Collecting huggingface-hub==0.16.4

  Downloading huggingface_hub-0.16.4-py3-none-any.whl.metadata (12 kB)

Requirement already satisfied: tqdm in /usr/local/lib/python3.12/dist-packages (from sentence-transformers==2.2.2) (4.67.1)

Requirement already satisfied: torch>=1.6.0 in /usr/local/lib/python3.12/dist-packages (from sentence-transformers==2.2.2) (2.8.0+cu126)

Requirement already satisfied: torchvision in /usr/local/lib/python3.12/dist-packages (from sentence-transformers==2.2.2) (0.23.0+cu126)

Requirement already satisfied: numpy in /usr/local/lib/python3.12/dist-packages (from sentence-transformers==2.2.2) (2.0.2)

Requirement already satisfied: scikit-learn in /usr/local/lib/python3.12/dist-packages (from sentence-transformers==2.2.2) (1.6.1)

Requirement already satisfied: scipy in /usr/local/lib/python3.12/dist-packages (from sentence-transformers==2.2.2) (1.16.3)

Requirement already satisfied: nltk in /usr/local/lib/python3.12/dist-packages (from sentence-transformers==2.2.2) (3.9.1)

Requirement already satisfied: sentencepiece in /usr/local/lib/python3.12/dist-packages (from sentence-transformers==2.2.2) (0.2.1)

Requirement already satisfied: filelock in /usr/local/lib/python3.12/dist-packages (from transformers==4.30.2) (3.20.0)

Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.12/dist-packages (from transformers==4.30.2) (25.0)

Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.12/dist-packages (from transformers==4.30.2) (6.0.3)

Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.12/dist-packages (from transformers==4.30.2) (2024.11.6)

Requirement already satisfied: requests in /usr/local/lib/python3.12/dist-packages (from transformers==4.30.2) (2.32.4)

Collecting tokenizers!=0.11.3,<0.14,>=0.11.1 (from transformers==4.30.2)

  Downloading tokenizers-0.13.3.tar.gz (314 kB)

     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 314.9/314.9 kB 18.7 MB/s eta 0:00:00

  Installing build dependencies ... done

  Getting requirements to build wheel ... done

  Preparing metadata (pyproject.toml) ... done

Requirement already satisfied: safetensors>=0.3.1 in /usr/local/lib/python3.12/dist-packages (from transformers==4.30.2) (0.6.2)

Requirement already satisfied: fsspec in /usr/local/lib/python3.12/dist-packages (from huggingface-hub==0.16.4) (2025.3.0)

Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub==0.16.4) (4.15.0)

Requirement already satisfied: setuptools in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (75.2.0)

Requirement already satisfied: sympy>=1.13.3 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (1.13.3)

Requirement already satisfied: networkx in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (3.5)

Requirement already satisfied: jinja2 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (3.1.6)

Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (12.6.77)

Requirement already satisfied: nvidia-cuda-runtime-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (12.6.77)

Requirement already satisfied: nvidia-cuda-cupti-cu12==12.6.80 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (12.6.80)

Requirement already satisfied: nvidia-cudnn-cu12==9.10.2.21 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (9.10.2.21)

Requirement already satisfied: nvidia-cublas-cu12==12.6.4.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (12.6.4.1)

Requirement already satisfied: nvidia-cufft-cu12==11.3.0.4 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (11.3.0.4)

Requirement already satisfied: nvidia-curand-cu12==10.3.7.77 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (10.3.7.77)

Requirement already satisfied: nvidia-cusolver-cu12==11.7.1.2 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (11.7.1.2)

Requirement already satisfied: nvidia-cusparse-cu12==12.5.4.2 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (12.5.4.2)

Requirement already satisfied: nvidia-cusparselt-cu12==0.7.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (0.7.1)

Requirement already satisfied: nvidia-nccl-cu12==2.27.3 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (2.27.3)

Requirement already satisfied: nvidia-nvtx-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (12.6.77)

Requirement already satisfied: nvidia-nvjitlink-cu12==12.6.85 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (12.6.85)

Requirement already satisfied: nvidia-cufile-cu12==1.11.1.6 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (1.11.1.6)

Requirement already satisfied: triton==3.4.0 in /usr/local/lib/python3.12/dist-packages (from torch>=1.6.0->sentence-transformers==2.2.2) (3.4.0)

Requirement already satisfied: click in /usr/local/lib/python3.12/dist-packages (from nltk->sentence-transformers==2.2.2) (8.3.0)

Requirement already satisfied: joblib in /usr/local/lib/python3.12/dist-packages (from nltk->sentence-transformers==2.2.2) (1.5.2)

Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/lib/python3.12/dist-packages (from requests->transformers==4.30.2) (3.4.4)

Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.12/dist-packages (from requests->transformers==4.30.2) (3.11)

Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.12/dist-packages (from requests->transformers==4.30.2) (2.5.0)

Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/dist-packages (from requests->transformers==4.30.2) (2025.10.5)

Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.12/dist-packages (from scikit-learn->sentence-transformers==2.2.2) (3.6.0)

Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /usr/local/lib/python3.12/dist-packages (from torchvision->sentence-transformers==2.2.2) (11.3.0)

Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.12/dist-packages (from sympy>=1.13.3->torch>=1.6.0->sentence-transformers==2.2.2) (1.3.0)

Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.12/dist-packages (from jinja2->torch>=1.6.0->sentence-transformers==2.2.2) (3.0.3)

Downloading transformers-4.30.2-py3-none-any.whl (7.2 MB)

   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.2/7.2 MB 106.1 MB/s eta 0:00:00

Downloading huggingface_hub-0.16.4-py3-none-any.whl (268 kB)

   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 268.8/268.8 kB 26.0 MB/s eta 0:00:00

Building wheels for collected packages: sentence-transformers, tokenizers

  Building wheel for sentence-transformers (setup.py) ... done

  Created wheel for sentence-transformers: filename=sentence_transformers-2.2.2-py3-none-any.whl size=125923 sha256=598c7150cfb547d158210d7c5003f2960b0862aa7e17eb5a1bef8a4b7f88c86d

  Stored in directory: /root/.cache/pip/wheels/d9/3b/21/aa025e9c81a6cda4b8358756a756677b0969b4bc69be6dd5da

  error: subprocess-exited-with-error

  

  × Building wheel for tokenizers (pyproject.toml) did not run successfully.

   exit code: 1

  ╰─> See above for output.

  

  note: This error originates from a subprocess, and is likely not a problem with pip.

  Building wheel for tokenizers (pyproject.toml) ... error

  ERROR: Failed building wheel for tokenizers

Successfully built sentence-transformers

Failed to build tokenizers

ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (tokenizers)

Collecting sentence-transformers

  Downloading sentence_transformers-5.1.2-py3-none-any.whl.metadata (16 kB)

Requirement already satisfied: scikit-learn in /usr/local/lib/python3.12/dist-packages (1.6.1)

Requirement already satisfied: pandas in /usr/local/lib/python3.12/dist-packages (2.2.2)

Requirement already satisfied: numpy in /usr/local/lib/python3.12/dist-packages (2.0.2)

Requirement already satisfied: tqdm in /usr/local/lib/python3.12/dist-packages (4.67.1)

Collecting transformers<5.0.0,>=4.41.0 (from sentence-transformers)

  Downloading transformers-4.57.1-py3-none-any.whl.metadata (43 kB)

     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 44.0/44.0 kB 2.2 MB/s eta 0:00:00

Requirement already satisfied: torch>=1.11.0 in /usr/local/lib/python3.12/dist-packages (from sentence-transformers) (2.8.0+cu126)

Requirement already satisfied: scipy in /usr/local/lib/python3.12/dist-packages (from sentence-transformers) (1.16.3)

Collecting huggingface-hub>=0.20.0 (from sentence-transformers)

  Downloading huggingface_hub-1.1.4-py3-none-any.whl.metadata (13 kB)

Requirement already satisfied: Pillow in /usr/local/lib/python3.12/dist-packages (from sentence-transformers) (11.3.0)

Requirement already satisfied: typing_extensions>=4.5.0 in /usr/local/lib/python3.12/dist-packages (from sentence-transformers) (4.15.0)

Requirement already satisfied: joblib>=1.2.0 in /usr/local/lib/python3.12/dist-packages (from scikit-learn) (1.5.2)

Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.12/dist-packages (from scikit-learn) (3.6.0)

Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.12/dist-packages (from pandas) (2.9.0.post0)

Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.12/dist-packages (from pandas) (2025.2)

Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.12/dist-packages (from pandas) (2025.2)

Requirement already satisfied: filelock in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.20.0->sentence-transformers) (3.20.0)

Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.20.0->sentence-transformers) (2025.3.0)

Requirement already satisfied: hf-xet<2.0.0,>=1.2.0 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.20.0->sentence-transformers) (1.2.0)

Requirement already satisfied: httpx<1,>=0.23.0 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.20.0->sentence-transformers) (0.28.1)

Requirement already satisfied: packaging>=20.9 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.20.0->sentence-transformers) (25.0)

Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.20.0->sentence-transformers) (6.0.3)

Requirement already satisfied: shellingham in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.20.0->sentence-transformers) (1.5.4)

Requirement already satisfied: typer-slim in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.20.0->sentence-transformers) (0.20.0)

Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.12/dist-packages (from python-dateutil>=2.8.2->pandas) (1.17.0)

Requirement already satisfied: setuptools in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (75.2.0)

Requirement already satisfied: sympy>=1.13.3 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (1.13.3)

Requirement already satisfied: networkx in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (3.5)

Requirement already satisfied: jinja2 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (3.1.6)

Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (12.6.77)

Requirement already satisfied: nvidia-cuda-runtime-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (12.6.77)

Requirement already satisfied: nvidia-cuda-cupti-cu12==12.6.80 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (12.6.80)

Requirement already satisfied: nvidia-cudnn-cu12==9.10.2.21 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (9.10.2.21)

Requirement already satisfied: nvidia-cublas-cu12==12.6.4.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (12.6.4.1)

Requirement already satisfied: nvidia-cufft-cu12==11.3.0.4 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (11.3.0.4)

Requirement already satisfied: nvidia-curand-cu12==10.3.7.77 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (10.3.7.77)

Requirement already satisfied: nvidia-cusolver-cu12==11.7.1.2 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (11.7.1.2)

Requirement already satisfied: nvidia-cusparse-cu12==12.5.4.2 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (12.5.4.2)

Requirement already satisfied: nvidia-cusparselt-cu12==0.7.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (0.7.1)

Requirement already satisfied: nvidia-nccl-cu12==2.27.3 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (2.27.3)

Requirement already satisfied: nvidia-nvtx-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (12.6.77)

Requirement already satisfied: nvidia-nvjitlink-cu12==12.6.85 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (12.6.85)

Requirement already satisfied: nvidia-cufile-cu12==1.11.1.6 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (1.11.1.6)

Requirement already satisfied: triton==3.4.0 in /usr/local/lib/python3.12/dist-packages (from torch>=1.11.0->sentence-transformers) (3.4.0)

  Downloading huggingface_hub-0.36.0-py3-none-any.whl.metadata (14 kB)

Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.12/dist-packages (from transformers<5.0.0,>=4.41.0->sentence-transformers) (2024.11.6)

Requirement already satisfied: requests in /usr/local/lib/python3.12/dist-packages (from transformers<5.0.0,>=4.41.0->sentence-transformers) (2.32.4)

Requirement already satisfied: tokenizers<=0.23.0,>=0.22.0 in /usr/local/lib/python3.12/dist-packages (from transformers<5.0.0,>=4.41.0->sentence-transformers) (0.22.1)

Requirement already satisfied: safetensors>=0.4.3 in /usr/local/lib/python3.12/dist-packages (from transformers<5.0.0,>=4.41.0->sentence-transformers) (0.6.2)

Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.12/dist-packages (from sympy>=1.13.3->torch>=1.11.0->sentence-transformers) (1.3.0)

Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.12/dist-packages (from jinja2->torch>=1.11.0->sentence-transformers) (3.0.3)

Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/lib/python3.12/dist-packages (from requests->transformers<5.0.0,>=4.41.0->sentence-transformers) (3.4.4)

Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.12/dist-packages (from requests->transformers<5.0.0,>=4.41.0->sentence-transformers) (3.11)

Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.12/dist-packages (from requests->transformers<5.0.0,>=4.41.0->sentence-transformers) (2.5.0)

Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/dist-packages (from requests->transformers<5.0.0,>=4.41.0->sentence-transformers) (2025.10.5)

Requirement already satisfied: anyio in /usr/local/lib/python3.12/dist-packages (from httpx<1,>=0.23.0->huggingface-hub>=0.20.0->sentence-transformers) (4.11.0)

Requirement already satisfied: httpcore==1.* in /usr/local/lib/python3.12/dist-packages (from httpx<1,>=0.23.0->huggingface-hub>=0.20.0->sentence-transformers) (1.0.9)

Requirement already satisfied: h11>=0.16 in /usr/local/lib/python3.12/dist-packages (from httpcore==1.*->httpx<1,>=0.23.0->huggingface-hub>=0.20.0->sentence-transformers) (0.16.0)

Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.12/dist-packages (from anyio->httpx<1,>=0.23.0->huggingface-hub>=0.20.0->sentence-transformers) (1.3.1)

Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.12/dist-packages (from typer-slim->huggingface-hub>=0.20.0->sentence-transformers) (8.3.0)

Downloading sentence_transformers-5.1.2-py3-none-any.whl (488 kB)

   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 488.0/488.0 kB 18.8 MB/s eta 0:00:00

Downloading transformers-4.57.1-py3-none-any.whl (12.0 MB)

   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.0/12.0 MB 119.3 MB/s eta 0:00:00

Downloading huggingface_hub-0.36.0-py3-none-any.whl (566 kB)

   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 566.1/566.1 kB 46.6 MB/s eta 0:00:00

Installing collected packages: huggingface-hub, transformers, sentence-transformers

Successfully installed huggingface-hub-0.36.0 sentence-transformers-5.1.2 transformers-4.57.1
# SETUP

import pandas as pd
import numpy as np
from tqdm import tqdm
from sentence_transformers import SentenceTransformer
from sklearn.linear_model import RidgeCV
from sklearn.multioutput import MultiOutputRegressor
from sklearn.metrics import mean_absolute_error, r2_score
from sklearn.model_selection import train_test_split
import pickle

# Load Data
df = pd.read_csv("VAD.csv", encoding="utf-8", engine="python", on_bad_lines="skip")

# Standardize column names
df.columns = [c.strip().lower() for c in df.columns]

# Expecting: text, v, a, d
expected_cols = {"text", "v", "a", "d"}
missing = expected_cols - set(df.columns)
if missing:
    raise ValueError(f"Your VAD.csv is missing columns: {missing}")

# Rename into valence / arousal / dominance for clarity
df = df.rename(columns={
    "v": "valence",
    "a": "arousal",
    "d": "dominance"
})

# Drop rows missing text or scores
df = df.dropna(subset=["text", "valence", "arousal", "dominance"])

# Ensure VAD scores are floats
df["valence"] = df["valence"].astype(float)
df["arousal"] = df["arousal"].astype(float)
df["dominance"] = df["dominance"].astype(float)

print(f"Loaded {len(df):,} VAD samples.")
print(df.head(), "\n")

# --- Quick summary ---
print("Dataset Summary")
print(df.describe())
Loaded 310,538 VAD samples.
             id  split emotion_label  valence  arousal  dominance  \
0  a0f805e3-e15    dev       fearful     2.39     6.78       2.54   
1  a415e639-4db   test       neutral     4.09     4.84       5.37   
2  ebf2507e-847  train         angry     2.81     8.63       5.95   
3  360d8c31-6c9  train       disgust     2.68     6.94       3.52   
4  fc3fd738-176   test      surprise     6.95     5.83       5.89   

                                                text  
0  I felt pressured by my own anxiety., and I was...  
1  I simply experienced it and continued., and it...  
2  I reacted harshly because I felt overwhelmed.,...  
3  I felt violated by how disturbing it was., in ...  
4  I tried to make sense of the sudden turn., tha...   

Dataset Summary
             valence        arousal      dominance
count  310538.000000  310538.000000  310538.000000
mean        4.428955       5.556738       5.096671
std         2.304871       1.791122       1.861135
min         1.000000       1.500000       1.500000
25%         2.540000       4.230000       3.540000
50%         3.580000       5.410000       5.230000
75%         6.520000       6.830000       6.560000
max         9.500000       9.500000       9.200000


# Embedding

model_name = "sentence-transformers/all-MiniLM-L6-v2"
embedder = SentenceTransformer(model_name)
data = df
# Encode sentences to fixed-length embeddings

tqdm.pandas()
X = np.vstack(data["text"].progress_apply(lambda x: embedder.encode(str(x), show_progress_bar=False)))
y = data[["valence", "arousal", "dominance"]].values

# Training Split 85/15

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=42)

# Training

reg = MultiOutputRegressor(RidgeCV(alphas=(0.1, 1.0, 10.0)))
reg.fit(X_train, y_train)

# Evaluation

preds = reg.predict(X_test)
mae = mean_absolute_error(y_test, preds, multioutput='raw_values')
r2 = r2_score(y_test, preds, multioutput='raw_values')

print("\nEvaluation Metrics")
print(f"MAE - Valence: {mae[0]:.3f}, Arousal: {mae[1]:.3f}, Dominance: {mae[2]:.3f}")
print(f"R²  - Valence: {r2[0]:.3f}, Arousal: {r2[1]:.3f}, Dominance: {r2[2]:.3f}")

#  SAVE MODEL

with open("vad_regression_model.pkl", "wb") as f:
    pickle.dump({"embedder": embedder, "model": reg}, f)

print("\n Model saved as vad_regression_model.pkl")

#  SAMPLE PREDICTION

sample = "I feel nervous but excited for tomorrow."
vec = embedder.encode(sample)
pred = reg.predict([vec])[0]
print(f"\nUser input: {sample}")
print(f"Predicted VAD → Valence: {pred[0]:.2f}, Arousal: {pred[1]:.2f}, Dominance: {pred[2]:.2f}")
100%|██████████| 310538/310538 [30:28<00:00, 169.85it/s]

Evaluation Metrics
MAE - Valence: 0.868, Arousal: 0.851, Dominance: 0.890
R²  - Valence: 0.773, Arousal: 0.655, Dominance: 0.648

 Model saved as vad_regression_model.pkl

User input: I feel nervous but excited for tomorrow.
Predicted VAD → Valence: 6.42, Arousal: 6.35, Dominance: 5.94
# INTERACTIVE VAD PREDICTOR

import pickle
from sentence_transformers import SentenceTransformer
# Load the trained model (if not already in memory)

with open("vad_regression_model.pkl", "rb") as f:
    bundle = pickle.load(f)

embedder = bundle["embedder"]
model = bundle["model"]

print("VAD model loaded and ready.")
VAD model loaded and ready.
# Create a text input box (Colab magic)

from IPython.display import display
import ipywidgets as widgets
import numpy as np

prompt_box = widgets.Textarea(
    placeholder='Type something to analyze emotion (e.g., "I’m feeling hopeful today.")',
    description='Input:',
    layout=widgets.Layout(width='100%', height='80px')
)
output_box = widgets.Output()

button = widgets.Button(description="Predict VAD", button_style='info')

def cap_scale(pred, low=1.0, high=10.0):
    """Clip model predictions into the desired VAD range."""
    return np.clip(pred, low, high)

def on_button_click(b):
    text = prompt_box.value.strip()
    if not text:
        with output_box:
            output_box.clear_output()
            print("Please enter some text.")
        return

    # Encode and predict
    emb = embedder.encode(text)
    raw_pred = model.predict([emb])[0]

    pred = cap_scale(raw_pred, 1.0, 10.0)

    # Display results
    with output_box:
        output_box.clear_output()
        print(f"Input: {text}\n")
        print(f"🔹 Valence (Pleasantness): {pred[0]:.3f}")
        print(f"🔹 Arousal (Energy):       {pred[1]:.3f}")
        print(f"🔹 Dominance (Control):    {pred[2]:.3f}")

button.on_click(on_button_click)

display(prompt_box, button, output_box)