{
"cells": [
{
"cell_type": "markdown",
"id": "nuclear-dream",
"metadata": {
"id": "nuclear-dream"
},
"source": [
"# Eyettention"
]
},
{
"cell_type": "markdown",
"source": [
"**Configuration**"
],
"metadata": {
"id": "g-FLEOyvYJUG"
},
"id": "g-FLEOyvYJUG"
},
{
"cell_type": "code",
"execution_count": null,
"id": "neutral-montreal",
"metadata": {
"id": "neutral-montreal"
},
"outputs": [],
"source": [
"import numpy as np\n",
"#configuration\n",
"#English\n",
"cf = {\"model_pretrained\": \"bert-base-cased\",\n",
" \"atten_type\": 'local-g',\n",
" #batch computation for training (CELER dataset)\n",
" \"max_sn_len\": 24,\n",
" \"max_sn_token\": 35,\n",
" \"max_sp_len\": 52\n",
" }\n",
"\n",
"#Chinese\n",
"#cf = {\"model_pretrained\": \"bert-base-chinese\",\n",
" #\"atten_type\": 'local-g',\n",
" #batch computation for training (BSC dataset)\n",
" #\"max_sn_len\": 27,\n",
" #\"max_sp_len\": 40\n",
" #"
]
},
{
"cell_type": "code",
"source": [
"!pip install --upgrade transformers==4.27.0"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "uhLxInukW82r",
"outputId": "76c33a63-4d13-4496-976d-126fe4ebb1b0"
},
"id": "uhLxInukW82r",
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Requirement already satisfied: transformers==4.27.0 in /usr/local/lib/python3.10/dist-packages (4.27.0)\n",
"Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers==4.27.0) (3.12.2)\n",
"Requirement already satisfied: huggingface-hub<1.0,>=0.11.0 in /usr/local/lib/python3.10/dist-packages (from transformers==4.27.0) (0.16.4)\n",
"Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers==4.27.0) (1.23.5)\n",
"Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers==4.27.0) (23.1)\n",
"Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers==4.27.0) (6.0.1)\n",
"Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers==4.27.0) (2023.6.3)\n",
"Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers==4.27.0) (2.31.0)\n",
"Requirement already satisfied: tokenizers!=0.11.3,<0.14,>=0.11.1 in /usr/local/lib/python3.10/dist-packages (from transformers==4.27.0) (0.13.3)\n",
"Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers==4.27.0) (4.66.1)\n",
"Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.11.0->transformers==4.27.0) (2023.6.0)\n",
"Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.11.0->transformers==4.27.0) (4.7.1)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers==4.27.0) (3.2.0)\n",
"Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers==4.27.0) (3.4)\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers==4.27.0) (2.0.4)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers==4.27.0) (2023.7.22)\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# You can also just download the file model.py, which is only used in this tutorial\n",
"!git clone https://github.com/aeye-lab/Eyettention"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "8-8qDf4EXljd",
"outputId": "97cffda3-ffde-4231-c80b-0bfbc9f98a68"
},
"id": "8-8qDf4EXljd",
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"fatal: destination path 'Eyettention' already exists and is not an empty directory.\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"**Load the model and download pre-trained weights**"
],
"metadata": {
"id": "jbqmeRpRY5Sg"
},
"id": "jbqmeRpRY5Sg"
},
{
"cell_type": "code",
"execution_count": null,
"id": "stylish-member",
"metadata": {
"id": "stylish-member",
"outputId": "2307c733-ee9e-4ffb-92ef-f9d973f53fd6",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"keeping Bert with pre-trained weights\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"Some weights of the model checkpoint at bert-base-cased were not used when initializing BertModel: ['cls.predictions.transform.LayerNorm.bias', 'cls.predictions.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.seq_relationship.bias', 'cls.seq_relationship.weight', 'cls.predictions.transform.dense.weight', 'cls.predictions.transform.dense.bias', 'cls.predictions.decoder.weight']\n",
"- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
"- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n"
]
}
],
"source": [
"from Eyettention import model\n",
"import torch\n",
"from torch.utils import model_zoo\n",
"\n",
"#DEVICE = 'cuda'\n",
"DEVICE = 'cpu'\n",
"\n",
"pretrained=True\n",
"\n",
"#load model\n",
"dnn = model.Eyettention(cf)\n",
"\n",
"dnn.eval()",
"\n",
"if pretrained:\n",
" dnn.load_state_dict(model_zoo.load_url('https://github.com/aeye-lab/Eyettention/releases/download/v1.0/Eyettention_english.pth', map_location=torch.device('cpu')))"
]
},
{
"cell_type": "markdown",
"source": [
"**Tokenization**\n",
" \n",
"**Introduction**: https://huggingface.co/learn/nlp-course/chapter2/4?fw=pt"
],
"metadata": {
"id": "f0DvCfMrZMYg"
},
"id": "f0DvCfMrZMYg"
},
{
"cell_type": "code",
"execution_count": null,
"id": "severe-findings",
"metadata": {
"id": "severe-findings"
},
"outputs": [],
"source": [
"from transformers import BertTokenizerFast\n",
"#initialize tokenizer\n",
"tokenizer = BertTokenizerFast.from_pretrained(cf['model_pretrained'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "funded-validity",
"metadata": {
"id": "funded-validity",
"outputId": "fbc6c028-3049-42ab-8187-6034e787c59d",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"['[CLS]', 'He', 'said', \"BankEast's\", 'offer', 'appears', 'to', 'be', '\"attractive', 'to', 'the', \"bank's\", 'shareholders.\"', '[SEP]']\n"
]
}
],
"source": [
"sentence = 'He said BankEast\\'s offer appears to be \"attractive to the bank\\'s shareholders.\"'\n",
"#add special tokens\n",
"text = ('[CLS]' + ' ' + sentence + ' ' + '[SEP]').split()\n",
"print(text)\n",
"tokens = tokenizer(text, add_special_tokens=False, max_length=cf['max_sn_token'], padding='max_length', is_split_into_words=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "vulnerable-figure",
"metadata": {
"id": "vulnerable-figure",
"outputId": "9dcba3a3-b8b8-4d77-bed9-3b6059f9cea8",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"['[CLS]', 'He', 'said', 'Bank', '##E', '##ast', \"'\", 's', 'offer', 'appears', 'to', 'be', '\"', 'attractive', 'to', 'the', 'bank', \"'\", 's', 'shareholders', '.', '\"', '[SEP]']\n"
]
}
],
"source": [
"print(tokenizer.tokenize(text, add_special_tokens=False, is_split_into_words=True))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "inappropriate-marketplace",
"metadata": {
"id": "inappropriate-marketplace",
"outputId": "6ca3b171-cd18-4a82-8770-871fd6fad840",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"{'input_ids': [101, 1124, 1163, 2950, 2036, 12788, 112, 188, 2906, 2691, 1106, 1129, 107, 8394, 1106, 1103, 3085, 112, 188, 16741, 119, 107, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}\n"
]
}
],
"source": [
"print(tokens)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "intelligent-express",
"metadata": {
"id": "intelligent-express",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "3a185313-5e28-450b-cd8c-4b885bac07f0"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[0, 1, 2, 3, 3, 3, 3, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]\n"
]
}
],
"source": [
"#use offset mapping to assign a word index to each token.\n",
"#index start from 0, CLS -> 0 and SEP -> last index\n",
"word_ids = tokens.word_ids()\n",
"word_ids = [val if val is not None else np.nan for val in word_ids]\n",
"print(word_ids)"
]
},
{
"cell_type": "markdown",
"source": [
"**Prepare features**"
],
"metadata": {
"id": "Zz6pcnFualMb"
},
"id": "Zz6pcnFualMb"
},
{
"cell_type": "code",
"execution_count": null,
"id": "specified-stomach",
"metadata": {
"id": "specified-stomach"
},
"outputs": [],
"source": [
"def compute_word_length(txt):\n",
" txt_word_len = [len(t) for t in txt[1:-1]]\n",
" #pad nan for CLS and SEP tokens\n",
" txt_word_len = [np.nan] + txt_word_len + [np.nan]\n",
" #length of a punctuation is 0, plus an epsilon to avoid division output inf\n",
" arr = np.array(txt_word_len).astype('float64')\n",
" arr[arr==0] = 1/(0+0.5)\n",
" arr[arr!=0] = 1/(arr[arr!=0])\n",
" return arr\n",
"\n",
"def pad_seq(seqs, max_len, dtype=np.int32, fill_value=np.nan):\n",
" padded = np.full((len(seqs), max_len), fill_value=fill_value, dtype=dtype)\n",
" for i, seq in enumerate(seqs):\n",
" padded[i, :len(seq)] = seq\n",
" return padded"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "proprietary-efficiency",
"metadata": {
"id": "proprietary-efficiency",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "a2b21281-ff87-4757-d3ff-88b9702436de"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[[ nan 0.5 0.25 0.1 0.2 0.14285715\n",
" 0.5 0.5 0.09090909 0.5 0.33333334 0.16666667\n",
" 0.07142857 nan nan nan nan nan\n",
" nan nan nan nan nan nan]]\n"
]
}
],
"source": [
"#compute the word length feature\n",
"text_word_len = [compute_word_length(txt) for txt in [text]]\n",
"text_word_len = pad_seq(text_word_len, cf['max_sn_len'], fill_value=np.nan, dtype=np.float32)\n",
"print(text_word_len)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "severe-industry",
"metadata": {
"id": "severe-industry",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "93474602-f510-4841-c612-dca9de230a9b"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"--2023-08-16 12:55:49-- https://github.com/aeye-lab/Eyettention/releases/download/v1.0/feature_norm_celer.pickle\n",
"Resolving github.com (github.com)... 140.82.112.3\n",
"Connecting to github.com (github.com)|140.82.112.3|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/617083089/db18fa6b-b2fa-46e9-82c4-131b91cdea74?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230816%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230816T125549Z&X-Amz-Expires=300&X-Amz-Signature=df325063287cb7a3909275d0694b86b4f95f7d0f09ea440b3206cde8a10dfee7&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=617083089&response-content-disposition=attachment%3B%20filename%3Dfeature_norm_celer.pickle&response-content-type=application%2Foctet-stream [following]\n",
"--2023-08-16 12:55:49-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/617083089/db18fa6b-b2fa-46e9-82c4-131b91cdea74?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230816%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230816T125549Z&X-Amz-Expires=300&X-Amz-Signature=df325063287cb7a3909275d0694b86b4f95f7d0f09ea440b3206cde8a10dfee7&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=617083089&response-content-disposition=attachment%3B%20filename%3Dfeature_norm_celer.pickle&response-content-type=application%2Foctet-stream\n",
"Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.111.133, 185.199.109.133, ...\n",
"Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 364 [application/octet-stream]\n",
"Saving to: ‘feature_norm_celer.pickle’\n",
"\n",
"\r feature_n 0%[ ] 0 --.-KB/s \rfeature_norm_celer. 100%[===================>] 364 --.-KB/s in 0s \n",
"\n",
"2023-08-16 12:55:49 (26.5 MB/s) - ‘feature_norm_celer.pickle’ saved [364/364]\n",
"\n"
]
}
],
"source": [
"#Download precomputed sn_word_len mean and std (from CELER dataset) for feature normalization\n",
"import pickle\n",
"!wget https://github.com/aeye-lab/Eyettention/releases/download/v1.0/feature_norm_celer.pickle\n",
"path = 'feature_norm_celer.pickle'\n",
"file_to_read = open(path, \"rb\")\n",
"loaded_dictionary = pickle.load(file_to_read)\n",
"sn_word_len_mean = loaded_dictionary['sn_word_len_mean']\n",
"sn_word_len_std = loaded_dictionary['sn_word_len_std']"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "dried-biodiversity",
"metadata": {
"id": "dried-biodiversity"
},
"outputs": [],
"source": [
"#normalize word length feature\n",
"text_word_len = (text_word_len - sn_word_len_mean)/sn_word_len_std\n",
"text_word_len = np.nan_to_num(text_word_len)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "according-decimal",
"metadata": {
"id": "according-decimal",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "e88d7af1-1d6a-4d65-86cc-f6bb50dd3c2a"
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
":4: UserWarning: Creating a tensor from a list of numpy.ndarrays is extremely slow. Please consider converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor. (Triggered internally at ../torch/csrc/utils/tensor_new.cpp:245.)\n",
" word_len = torch.tensor([text_word_len.squeeze()]).to(DEVICE)\n"
]
}
],
"source": [
"tokens['input_ids'] = torch.tensor([tokens['input_ids']]).to(DEVICE)\n",
"tokens['attention_mask'] = torch.tensor([tokens['attention_mask']]).to(DEVICE)\n",
"word_ids = torch.tensor([word_ids]).to(DEVICE)\n",
"word_len = torch.tensor([text_word_len.squeeze()]).to(DEVICE)"
]
},
{
"cell_type": "markdown",
"source": [
"**Generate synthetic scanpath**"
],
"metadata": {
"id": "Nrm-Rq4Ya2TX"
},
"id": "Nrm-Rq4Ya2TX"
},
{
"cell_type": "code",
"execution_count": null,
"id": "novel-monaco",
"metadata": {
"id": "novel-monaco",
"outputId": "8169a529-a161-4e48-d324-0c4399d8ff70",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 74
}
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"LabelEncoder()"
],
"text/html": [
"
LabelEncoder()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
LabelEncoder()
"
]
},
"metadata": {},
"execution_count": 15
}
],
"source": [
"from sklearn.preprocessing import LabelEncoder\n",
"#prepare the saccade range classes for model predictions, cf[\"max_sn_len\"]-1 -> stop class\n",
"le = LabelEncoder()\n",
"le.fit(np.append(np.arange(-cf[\"max_sn_len\"]+3, cf[\"max_sn_len\"]-1), cf[\"max_sn_len\"]-1))\n",
"#le.classes_"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "mathematical-dimension",
"metadata": {
"id": "mathematical-dimension"
},
"outputs": [],
"source": [
"syn_scanpath, density_pred = dnn.scanpath_generation(sn_emd=tokens['input_ids'],\n",
" sn_mask=tokens['attention_mask'],\n",
" word_ids_sn=word_ids,\n",
" sn_word_len = word_len,\n",
" le=le,\n",
" max_pred_len=50)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bacterial-cardiff",
"metadata": {
"id": "bacterial-cardiff"
},
"outputs": [],
"source": [
"def post_process_scanpath(syn_scanpath, sn_len):\n",
" syn_scanpath = syn_scanpath.detach().to('cpu').numpy()\n",
" max_sp_len = syn_scanpath.shape[1]\n",
"\n",
" #Find the number \"sn_len+1\" -> the stop class\n",
" stop_indx = []\n",
" for i in range(syn_scanpath.shape[0]):\n",
" stop = np.where(syn_scanpath[i,:]==(sn_len[i]+1))[0]\n",
" if len(stop)==0:#no stop class can be find -> exceeds the maximum length of the generated scanpath\n",
" stop_indx.append(max_sp_len-1)\n",
" else:\n",
" stop_indx.append(stop[0])\n",
"\n",
" #Truncating data after the stop class\n",
" syn_scanpath_cut = [syn_scanpath[i][1:stop_indx[i]] for i in range(syn_scanpath.shape[0])]\n",
" return syn_scanpath_cut"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "southern-cycling",
"metadata": {
"id": "southern-cycling",
"outputId": "32c519fa-5251-4869-fc78-242bae3cc5f3",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[ 1 2 2 3 5 3 5 7 9 8 9 10 11 12]\n"
]
}
],
"source": [
"sn_len = (torch.max(torch.nan_to_num(word_ids), dim=1)[0]+1-2).detach().to('cpu').numpy()\n",
"syn_scanpath = post_process_scanpath(syn_scanpath, sn_len)\n",
"print(syn_scanpath[0])"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "imposed-passing",
"metadata": {
"id": "imposed-passing",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "2400559b-3d51-461b-8df2-19f1ccc621da"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"['He', 'said', 'said', \"BankEast's\", 'appears', \"BankEast's\", 'appears', 'be', 'to', '\"attractive', 'to', 'the', \"bank's\", 'shareholders.\"']\n"
]
}
],
"source": [
"fixated_word = [text[idx] for idx in syn_scanpath[0]]\n",
"print(fixated_word)"
]
},
{
"cell_type": "markdown",
"source": [
"**Prediction visualization**"
],
"metadata": {
"id": "Q9ojBr5rba-R"
},
"id": "Q9ojBr5rba-R"
},
{
"cell_type": "code",
"execution_count": null,
"id": "dental-knock",
"metadata": {
"id": "dental-knock"
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"def visualize_distribution(syn_scanpath, density_pred, timestep, text):\n",
" #visualize density map\n",
" plt.figure(figsize = (25,5))\n",
" sac_range = np.append(np.arange(-cf[\"max_sn_len\"]+3, cf[\"max_sn_len\"]-1), cf[\"max_sn_len\"]-1)\n",
"\n",
" #current gaze position\n",
" cur_loc = syn_scanpath[timestep]\n",
" #convert the saccade range classes to the target word indexes\n",
" target_loc = sac_range + cur_loc\n",
"\n",
" prob_valid = density_pred[np.where((0 <= target_loc) & (target_loc <= (len(text)-2)))]#exclude SEP token\n",
" prob_valid = np.append(prob_valid, density_pred[-1])\n",
"\n",
" plt.subplot(2, 1, 2)\n",
" sns.heatmap(prob_valid[np.newaxis, :], annot=np.array(text)[np.newaxis,:], fmt=\"\", linewidths=2, cmap=\"YlGnBu\", xticklabels=False, yticklabels=False, cbar=True, annot_kws={\"fontsize\":15}, cbar_kws = dict(use_gridspec=False,location=\"top\"))\n",
" y = 3\n",
" for past_ts in range(timestep):\n",
" dy = 0\n",
" dx = syn_scanpath[past_ts+1] - syn_scanpath[past_ts]\n",
" #if refixation, display on next line\n",
" if dx <= 0:\n",
" dy = -0.5\n",
" plt.arrow(syn_scanpath[past_ts]+0.5, y, dx, dy, color='b', ec ='blue', head_width=0.2)\n",
" y = y + dy\n",
" else:\n",
" plt.arrow(syn_scanpath[past_ts]+0.5, y, dx, dy, color='b', ec ='blue', head_width=0.2)\n",
"\n",
" plt.arrow(syn_scanpath[timestep]+0.5, y, (syn_scanpath[timestep+1]-syn_scanpath[timestep]), 0, color='r', ec ='red', head_width=0.2)\n",
" plt.xlim([0, len(text)])\n",
" plt.ylim([0, 3.5])\n",
" ax = plt.gca()\n",
" ax.axes.get_xaxis().set_visible(False)\n",
" ax.axes.get_yaxis().set_visible(False)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cross-commercial",
"metadata": {
"id": "cross-commercial",
"outputId": "66a6e06d-7473-412f-9dba-10b9db130b9a",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 130
}
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "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\n"
},
"metadata": {}
}
],
"source": [
"sample_index=0\n",
"timestep = 5\n",
"visualize_distribution(syn_scanpath=syn_scanpath[sample_index],\n",
" density_pred=density_pred[timestep][sample_index].detach().numpy(),\n",
" timestep=timestep,\n",
" text=text)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "orange-persian",
"metadata": {
"id": "orange-persian",
"outputId": "df44ad8a-8a17-4f20-9c1d-3dea8be063a7",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 130
}
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "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\n"
},
"metadata": {}
}
],
"source": [
"sample_index=0\n",
"timestep = 8\n",
"visualize_distribution(syn_scanpath=syn_scanpath[sample_index],\n",
" density_pred=density_pred[timestep][sample_index].detach().numpy(),\n",
" timestep=timestep,\n",
" text=text)"
]
},
{
"cell_type": "markdown",
"source": [
"**Assignments**\n",
" \n",
"Generate synthetic scanpaths for the following sentences:\n",
" \n",
"1. Dole took many odd-jobs around Russell as a boy, and would later work as a soda jerk in the local drug store.\n",
" \n",
"2. Dole studied Law at KU, but his studies were interrupted by the start of World War II.\n",
" \n",
"3. He is of three quarters Irish and one quarter French descent."
],
"metadata": {
"id": "LQew7DVKcQ_t"
},
"id": "LQew7DVKcQ_t"
},
{
"cell_type": "code",
"execution_count": null,
"id": "preceding-phenomenon",
"metadata": {
"id": "preceding-phenomenon"
},
"outputs": [],
"source": []
}
],
"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.7.9"
},
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 5
}