├── honeypot-server ├── logs │ ├── auth.log │ └── log_2024-05-31_15-09-54.txt ├── README.md ├── main.py ├── server.key.pub ├── llm.py ├── server.key └── ssh_server.py ├── .DS_Store ├── supervised-finetuning ├── model_inference.yaml ├── multi_gpu_sft_script.sh ├── merge_lora_sft.yaml ├── multi_gpu_phi3.yaml ├── multi_gpu_llama3.yaml ├── multi_gpu_codellama.yaml └── README.md ├── notebooks ├── ssh_server.png ├── training_loss.png ├── similarity_score_distribution_140samples.png ├── preprocess.ipynb └── postprocess.ipynb └── README.md /honeypot-server/logs/auth.log: -------------------------------------------------------------------------------- 1 | root:dagshj 2 | -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AI-in-Complex-Systems-Lab/LLM-Honeypot/HEAD/.DS_Store -------------------------------------------------------------------------------- /supervised-finetuning/model_inference.yaml: -------------------------------------------------------------------------------- 1 | model_name_or_path: models/honeypot-llama3-8B 2 | template: llama3 3 | -------------------------------------------------------------------------------- /notebooks/ssh_server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AI-in-Complex-Systems-Lab/LLM-Honeypot/HEAD/notebooks/ssh_server.png -------------------------------------------------------------------------------- /honeypot-server/README.md: -------------------------------------------------------------------------------- 1 | ## Start server 2 | > python main.py 3 | 4 | ## Connect with SSH 5 | > ssh -T -p 2222 "root@localhost" -------------------------------------------------------------------------------- /notebooks/training_loss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AI-in-Complex-Systems-Lab/LLM-Honeypot/HEAD/notebooks/training_loss.png -------------------------------------------------------------------------------- /notebooks/similarity_score_distribution_140samples.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AI-in-Complex-Systems-Lab/LLM-Honeypot/HEAD/notebooks/similarity_score_distribution_140samples.png -------------------------------------------------------------------------------- /honeypot-server/logs/log_2024-05-31_15-09-54.txt: -------------------------------------------------------------------------------- 1 | @CMD: ls 2 | @RESP: ``` 3 | bin desktop documents downloads music pictures public videos 4 | ``` 5 | 6 | @CMD: 7 | @RESP: ``` 8 | bash: command not found 9 | ``` 10 | 11 | -------------------------------------------------------------------------------- /honeypot-server/main.py: -------------------------------------------------------------------------------- 1 | from ssh_server import start_ssh_server 2 | from llm import LLM 3 | 4 | MODEL_NAME = "../models/honeypot-llama3-8B" 5 | llama = LLM(MODEL_NAME) 6 | print(llama.answer('ls -al', ['mkdir test_directory; touch test.txt','\n'])) 7 | 8 | start_ssh_server(llama) -------------------------------------------------------------------------------- /supervised-finetuning/multi_gpu_sft_script.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CUDA_VISIBLE_DEVICES=0,1 accelerate launch src/train.py multi_gpu_phi3.yaml 4 | 5 | CUDA_VISIBLE_DEVICES=0,1 accelerate launch src/train.py multi_gpu_llama3.yaml 6 | 7 | CUDA_VISIBLE_DEVICES=0,1 accelerate launch src/train.py multi_gpu_codellama.yaml -------------------------------------------------------------------------------- /supervised-finetuning/merge_lora_sft.yaml: -------------------------------------------------------------------------------- 1 | # Note: DO NOT use quantized model or quantization_bit when merging lora adapters 2 | 3 | # model 4 | model_name_or_path: NousResearch/Meta-Llama-3-8B-Instruct 5 | adapter_name_or_path: saves/Custom/lora/honeypot_llama3_v3 6 | template: llama3 7 | finetuning_type: lora 8 | 9 | # export 10 | export_dir: models/honeypot-llama3-8B 11 | export_size: 1 12 | export_device: cuda 13 | export_legacy_format: false 14 | -------------------------------------------------------------------------------- /honeypot-server/server.key.pub: -------------------------------------------------------------------------------- 1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDsqkBcRScrwI5rbuAbaiEUurBruU6R3s4BW8iDSXCtVlA7/SK9zBNnswjUdJDIzhA4Q/gb1n3q+jp8Ivmn8fQhuqOzfeQY/m5iAxA547/lkYrppwpRuKCUn5uBfwLI2G94BdGUQI2XBYW/foDkSr+j1sYQm3XZJnjkkljQ7F0lWA7bQx5RdcRASn0/LMa+eFqlkFmKqG7AsPHApFXsHs8E+4QGhvdDUifB/99aDCthDA0Jn5OpOXqnZ2mImQcSDwcoHOvTG9CvRY0fBfRBXTOt4Pw+RU3qFzJJHx/8wsoR5yBFJDoTRYt3KpaWyd0zdkhxRVPYN6ePhofCMmCG8CJuJNtBYYuc1pvWMGgNescNMX3qeQc2fT8B3PetMkU1yYAFx3Wquf4mIdbSWr2A+8DYt3lPvKCHEheY8z5+bLQ5aICj89hQoeB8h4DFoapMA0gCDSPm+Oa/p/32f7zUB2f68V76UHA42EKzQXy0XN2B20LqIn7lz5QYuk0QC8khriU= hotal@dyn-169-226-53-44.etec.albany.edu 2 | -------------------------------------------------------------------------------- /supervised-finetuning/multi_gpu_phi3.yaml: -------------------------------------------------------------------------------- 1 | bf16: true 2 | cutoff_len: 1024 3 | dataset: honeypot_logs 4 | dataset_dir: data 5 | do_train: true 6 | finetuning_type: lora 7 | flash_attn: fa2 8 | gradient_accumulation_steps: 8 9 | learning_rate: 5.0e-05 10 | logging_steps: 1 11 | lora_alpha: 16 12 | lora_dropout: 0 13 | lora_rank: 8 14 | lora_target: qkv_proj 15 | lr_scheduler_type: cosine 16 | max_grad_norm: 1.0 17 | max_samples: 100000 18 | model_name_or_path: microsoft/Phi-3-mini-4k-instruct 19 | num_train_epochs: 2.0 20 | optim: adamw_torch 21 | output_dir: saves/Custom/lora/honeypot_phi3 22 | packing: false 23 | per_device_train_batch_size: 16 24 | quantization_bit: 8 25 | report_to: none 26 | save_steps: 100 27 | stage: sft 28 | template: phi 29 | warmup_steps: 0 30 | -------------------------------------------------------------------------------- /supervised-finetuning/multi_gpu_llama3.yaml: -------------------------------------------------------------------------------- 1 | bf16: true 2 | cutoff_len: 2048 3 | dataset: honeypot_logs 4 | dataset_dir: data 5 | do_train: true 6 | finetuning_type: lora 7 | flash_attn: fa2 8 | gradient_accumulation_steps: 8 9 | learning_rate: 1.0e-04 10 | logging_steps: 1 11 | lora_alpha: 16 12 | lora_dropout: 0 13 | lora_rank: 8 14 | lora_target: q_proj,v_proj 15 | lr_scheduler_type: cosine 16 | max_grad_norm: 1.0 17 | max_samples: 100000 18 | model_name_or_path: NousResearch/Meta-Llama-3-8B-Instruct 19 | num_train_epochs: 3.0 20 | optim: adamw_torch 21 | output_dir: saves/Custom/lora/honeypot_llama3_v3 22 | packing: false 23 | per_device_train_batch_size: 8 24 | quantization_bit: 8 25 | report_to: none 26 | save_steps: 100 27 | stage: sft 28 | template: llama3 29 | warmup_steps: 0 30 | -------------------------------------------------------------------------------- /supervised-finetuning/multi_gpu_codellama.yaml: -------------------------------------------------------------------------------- 1 | bf16: true 2 | cutoff_len: 1024 3 | dataset: honeypot_logs 4 | dataset_dir: data 5 | do_train: true 6 | finetuning_type: lora 7 | flash_attn: fa2 8 | gradient_accumulation_steps: 8 9 | learning_rate: 5.0e-05 10 | logging_steps: 1 11 | lora_alpha: 16 12 | lora_dropout: 0 13 | lora_rank: 8 14 | lora_target: q_proj,v_proj 15 | lr_scheduler_type: cosine 16 | max_grad_norm: 1.0 17 | max_samples: 100000 18 | model_name_or_path: codellama/CodeLlama-7b-Instruct-hf 19 | num_train_epochs: 2.0 20 | optim: adamw_torch 21 | output_dir: saves/Custom/lora/honeypot_codellama 22 | packing: false 23 | per_device_train_batch_size: 16 24 | quantization_bit: 8 25 | report_to: none 26 | save_steps: 100 27 | stage: sft 28 | template: llama2 29 | warmup_steps: 0 30 | -------------------------------------------------------------------------------- /supervised-finetuning/README.md: -------------------------------------------------------------------------------- 1 | > conda activate python3-11 2 | 3 | ### Single-GPU: 4 | 5 | > CUDA_VISIBLE_DEVICES=0 GRADIO_SHARE=0 llamafactory-cli webui 6 | 7 | - Update data/dataset_info.json 8 | 9 | 10 | ### Multi-GPU: 11 | 12 | > sh multi_gpu_sft_script.sh 13 | 14 | > CUDA_VISIBLE_DEVICES=0,1 accelerate launch src/train.py multi_gpu_llama3.yaml 15 | 16 | 17 | ### Merge: 18 | 19 | > CUDA_VISIBLE_DEVICES=0 llamafactory-cli export merge_lora_sft.yaml 20 | 21 | 22 | 23 | #### Prompt: 24 | 25 | You are mimicking a linux server. Respond with what the terminal would respond when a code given. I want you to only reply with the terminal outputs inside one unique code block and nothing else. Do not write any explanations. Do not type any commands unless I instruct you to do so. -------------------------------------------------------------------------------- /honeypot-server/llm.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import gc 3 | import re 4 | from transformers import ( 5 | AutoModelForCausalLM, 6 | AutoTokenizer, 7 | BitsAndBytesConfig, 8 | pipeline 9 | ) 10 | 11 | class LLM: 12 | def __init__(self, model_name="NousResearch/Meta-Llama-3-8B-Instruct"): 13 | gc.collect() 14 | torch.cuda.empty_cache() 15 | print("Cleared GPU...") 16 | 17 | self.DEVICE = "cuda:0" if torch.cuda.is_available() else "cpu" 18 | self.BASE_MODEL_NAME = model_name 19 | self.SYSTEM_PROMPT = "You are mimicking a linux server. Respond with what the terminal would respond when a code given. I want you to only reply with the terminal outputs inside one unique code block and nothing else. Do not write any explanations. Do not type any commands unless I instruct you to do so." 20 | 21 | # Model configuration 22 | self.pipeline = pipeline( 23 | "text-generation", 24 | model=self.BASE_MODEL_NAME, 25 | tokenizer=self.BASE_MODEL_NAME, 26 | model_kwargs={"torch_dtype": torch.bfloat16}, 27 | device=self.DEVICE, 28 | ) 29 | 30 | print("Loaded Model: ", self.BASE_MODEL_NAME) 31 | 32 | def answer(self, query, log_history=[], max_tokens=4096, temperature=0.01, top_p=0.8): 33 | 34 | message_history = [{"role": "system", "content": self.SYSTEM_PROMPT}] 35 | if len(log_history) > 0: 36 | for i, item in enumerate(log_history): 37 | if i % 2 == 0: 38 | message_history.append({"role": "user", "content": item}) 39 | else: 40 | message_history.append({"role": "assistant", "content": item}) 41 | 42 | user_prompt = message_history + [{"role": "user", "content": query}] 43 | prompt = self.pipeline.tokenizer.apply_chat_template( 44 | user_prompt, tokenize=False, add_generation_prompt=True 45 | ) 46 | outputs = self.pipeline( 47 | prompt, 48 | max_new_tokens=max_tokens, 49 | eos_token_id=self.pipeline.tokenizer.eos_token_id, 50 | do_sample=True, 51 | temperature=temperature, 52 | top_p=top_p, 53 | ) 54 | response = outputs[0]["generated_text"][len(prompt):] 55 | 56 | # remove unnecessary quotes 57 | if response.startswith("```") and response.endswith("```"): 58 | response = response[3:-3] 59 | elif response.startswith("`") and response.endswith("`"): 60 | response = response[1:-1] 61 | 62 | return response 63 | -------------------------------------------------------------------------------- /honeypot-server/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN OPENSSH PRIVATE KEY----- 2 | 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 38 | dQECAw== 39 | -----END OPENSSH PRIVATE KEY----- 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LLM Honeypot: Leveraging Large Language Models as Advanced Interactive Honeypot Systems 2 | 3 | Code for our paper "LLM Honeypot: Leveraging Large Language Models as Advanced Interactive Honeypot Systems" published in 2024 IEEE Conference on Communications and Network Security (CNS). 4 | 5 | You can download the paper via: [[IEEE]](https://ieeexplore.ieee.org/iel8/10735442/10735467/10735607.pdf) - [[DOI]](https://doi.org/10.1109/CNS62487.2024.10735607) 6 | 7 | [Dataset](https://huggingface.co/datasets/hotal/honeypot_logs) 8 | 9 | [Finetuned Model](https://huggingface.co/hotal/honeypot-llama3-8B) 10 | 11 | ## Training 12 | 13 | The training and fine-tuning process for the model presented in the paper utilized the [Llama-Factory](https://github.com/hiyouga/LLaMA-Factory) tool. Consequently, specific training scripts are not included in this repository. 14 | 15 | Please be aware that the Llama-Factory repository is actively maintained and frequently updated. The methods or scripts used during our research might require adjustments to remain compatible with the latest versions of Llama-Factory. 16 | 17 | To replicate the model training: 18 | 1. Use our custom dataset available on Hugging Face: [hotal/honeypot_logs](https://huggingface.co/datasets/hotal/honeypot_logs). 19 | 2. Follow the Llama-Factory documentation on using custom datasets, which can be found here: [Llama-Factory Custom Data Documentation](https://github.com/hiyouga/LLaMA-Factory/tree/main/data). 20 | 21 | Combining our dataset with the instructions provided by Llama-Factory should offer the most direct path to reproduce the training process. 22 | 23 | ## Running the Model 24 | 25 | The code relevant for running the honeypot server with the trained model can be found within the `/honeypot-server` directory of this repository. 26 | 27 | You can use the pre-trained model available on Hugging Face: [hotal/honeypot-llama3-8B](https://huggingface.co/hotal/honeypot-llama3-8B). 28 | 29 | **Note:** Similar to the training dependencies, the code in `/honeypot-server` may require updates to ensure compatibility with the current versions of dependent libraries (e.g., huggingface, transformers, etc.). Please check library compatibility if you encounter issues. 30 | 31 | ## Abstract 32 | 33 | The rapid evolution of cyber threats necessitates innovative solutions for detecting and analyzing malicious activity. Honeypots, which are decoy systems designed to lure and interact with attackers, have emerged as a critical component in cybersecurity. In this paper, we present a novel approach to creating realistic and interactive honeypot systems using Large Language Models (LLMs). By fine-tuning a pre-trained open-source language model on a diverse dataset of attacker-generated commands and responses, we developed a honeypot capable of sophisticated engagement with attackers. Our methodology involved several key steps: data collection and processing, prompt engineering, model selection, and supervised fine-tuning to optimize the model’s performance. Evaluation through similarity metrics and live deployment demonstrated that our approach effectively generates accurate and informative responses. The results highlight the potential of LLMs to revolutionize honeypot technology, providing cybersecurity professionals with a powerful tool to detect and analyze malicious activity, thereby enhancing overall security infrastructure. 34 | 35 | ## Citation 36 | 37 | If this work is helpful, please cite as: 38 | 39 | ```bibtex 40 | @INPROCEEDINGS{ 41 | 10735607, 42 | author={Otal, Hakan T. and Canbaz, M. Abdullah}, 43 | booktitle={2024 IEEE Conference on Communications and Network Security (CNS)}, 44 | title={LLM Honeypot: Leveraging Large Language Models as Advanced Interactive Honeypot Systems}, 45 | year={2024}, 46 | pages={1-6}, 47 | doi={10.1109/CNS62487.2024.10735607} 48 | } 49 | ``` 50 | 51 | ## Contact 52 | 53 | hotal [AT] albany [DOT] edu 54 | -------------------------------------------------------------------------------- /honeypot-server/ssh_server.py: -------------------------------------------------------------------------------- 1 | import socket, sys, threading 2 | import paramiko 3 | from datetime import datetime 4 | 5 | # Generate keys with 'ssh-keygen -t rsa -f server.key' 6 | HOST_KEY = paramiko.RSAKey(filename='server.key') 7 | SSH_PORT = 2222 8 | 9 | # Log the user:password combinations to files 10 | LOGFILE = 'logs/auth.log' 11 | LOGFILE_LOCK = threading.Lock() 12 | 13 | class SSHServerHandler(paramiko.ServerInterface): 14 | def __init__(self, llm_model): 15 | self.event = threading.Event() 16 | self.llm_model = llm_model 17 | self.log_history = [] 18 | 19 | def check_channel_request(self, kind, channelID): 20 | return paramiko.OPEN_SUCCEEDED 21 | 22 | def check_channel_shell_request(self, channel): 23 | print("Channel", channel) 24 | self.channel = channel 25 | return True 26 | 27 | def check_channel_pty_request(self, c, t, w, h, p, ph, m): 28 | return True 29 | 30 | def get_allowed_auths(self, username): 31 | return 'password' 32 | 33 | def check_auth_password(self, username, password): 34 | self.username = username 35 | 36 | # save login info to a file 37 | LOGFILE_LOCK.acquire() 38 | try: 39 | logfile_handle = open(LOGFILE,"a") 40 | print("New login: " + username + ":" + password) 41 | logfile_handle.write(username + ":" + password + "\n") 42 | logfile_handle.close() 43 | finally: 44 | LOGFILE_LOCK.release() 45 | 46 | return paramiko.AUTH_SUCCESSFUL 47 | 48 | def handle_shell(self): 49 | log_filename = f"logs/log_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.txt" 50 | 51 | while not self.channel.exit_status_ready(): 52 | try: 53 | # Receive user input 54 | self.channel.sendall(f'{self.username}@localhost:~/ $') 55 | command = self.channel.recv(1024).decode("utf-8").strip() 56 | print("CMD:", command) 57 | 58 | # Produce output with LLM 59 | response = self.llm_model.answer(command, self.log_history) 60 | 61 | # Save the logs 62 | self.log_history.append(command) 63 | self.log_history.append(response) 64 | log_file = open(log_filename, "a") 65 | log_file.write(f"@CMD: {command}\n@RESP: {response}\n\n") 66 | log_file.close() 67 | 68 | # Send response 69 | self.channel.sendall(f'{response}\n') 70 | 71 | except Exception as e: 72 | print("Channel closed:", e) 73 | self.channel.close() 74 | self.event.set() 75 | return 76 | 77 | self.channel.close() 78 | self.event.set() 79 | 80 | 81 | def handleConnection(client, llm_model): 82 | transport = paramiko.Transport(client) 83 | transport.add_server_key(HOST_KEY) 84 | 85 | server_handler = SSHServerHandler(llm_model) 86 | transport.start_server(server=server_handler) 87 | 88 | channel = transport.accept() 89 | 90 | if channel is None: 91 | transport.close() 92 | return 93 | 94 | server_handler.channel = channel 95 | server_handler.handle_shell() 96 | 97 | def start_ssh_server(llm_model): 98 | try: 99 | server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 100 | server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 101 | server_socket.bind(('', SSH_PORT)) 102 | server_socket.listen(100) 103 | print('Server started...') 104 | 105 | while(True): 106 | try: 107 | client_socket, client_addr = server_socket.accept() 108 | print(f'New Connection: {client_addr}') 109 | threading.Thread(target=handleConnection, args=(client_socket,llm_model,)).start() 110 | except Exception as e: 111 | print("ERROR: Client handling") 112 | print(e) 113 | 114 | except Exception as e: 115 | print("ERROR: Failed to create socket") 116 | print(e) 117 | sys.exit(1) 118 | -------------------------------------------------------------------------------- /notebooks/preprocess.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 10, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "from datetime import datetime\n", 10 | "import pandas as pd\n", 11 | "import json\n", 12 | "from datasets import load_dataset, Dataset, DatasetDict" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": 11, 18 | "metadata": {}, 19 | "outputs": [ 20 | { 21 | "name": "stderr", 22 | "output_type": "stream", 23 | "text": [ 24 | "Downloading readme: 100%|██████████| 405/405 [00:00<00:00, 3.61MB/s]\n", 25 | "Downloading data: 100%|██████████| 116k/116k [00:10<00:00, 10.9kB/s]\n", 26 | "Generating train split: 100%|██████████| 481/481 [00:00<00:00, 108763.83 examples/s]\n" 27 | ] 28 | }, 29 | { 30 | "data": { 31 | "text/plain": [ 32 | "DatasetDict({\n", 33 | " train: Dataset({\n", 34 | " features: ['system', 'command', 'response', '__index_level_0__'],\n", 35 | " num_rows: 481\n", 36 | " })\n", 37 | "})" 38 | ] 39 | }, 40 | "execution_count": 11, 41 | "metadata": {}, 42 | "output_type": "execute_result" 43 | } 44 | ], 45 | "source": [ 46 | "dataset = load_dataset(\"hotal/linux_commands\")\n", 47 | "dataset" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 12, 53 | "metadata": {}, 54 | "outputs": [ 55 | { 56 | "data": { 57 | "text/html": [ 58 | "
\n", 59 | "\n", 72 | "\n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | "
systemcommandresponse__index_level_0__
0I want you to understand what every Linux term...chgrp# chgrp\\n> Change group ownership of files and...0
1I want you to understand what every Linux term...more# more\\n> Open a file for interactive reading,...1
2I want you to understand what every Linux term...git-hash-object# git hash-object\\n> Computes the unique hash ...2
3I want you to understand what every Linux term...id# id\\n> Display current user and group identit...3
4I want you to understand what every Linux term...nl# nl\\n> A utility for numbering lines, either ...4
...............
476I want you to understand what every Linux term...sleep# sleep\\n> Delay for a specified amount of tim...476
477I want you to understand what every Linux term...manpath# manpath\\n> Determine the search path for man...477
478I want you to understand what every Linux term...mv# mv\\n> Move or rename files and directories. ...478
479I want you to understand what every Linux term...whereis# whereis\\n> Locate the binary, source, and ma...479
480I want you to understand what every Linux term...git-daemon# git daemon\\n> A really simple server for Git...480
\n", 162 | "

481 rows × 4 columns

\n", 163 | "
" 164 | ], 165 | "text/plain": [ 166 | " system command \\\n", 167 | "0 I want you to understand what every Linux term... chgrp \n", 168 | "1 I want you to understand what every Linux term... more \n", 169 | "2 I want you to understand what every Linux term... git-hash-object \n", 170 | "3 I want you to understand what every Linux term... id \n", 171 | "4 I want you to understand what every Linux term... nl \n", 172 | ".. ... ... \n", 173 | "476 I want you to understand what every Linux term... sleep \n", 174 | "477 I want you to understand what every Linux term... manpath \n", 175 | "478 I want you to understand what every Linux term... mv \n", 176 | "479 I want you to understand what every Linux term... whereis \n", 177 | "480 I want you to understand what every Linux term... git-daemon \n", 178 | "\n", 179 | " response __index_level_0__ \n", 180 | "0 # chgrp\\n> Change group ownership of files and... 0 \n", 181 | "1 # more\\n> Open a file for interactive reading,... 1 \n", 182 | "2 # git hash-object\\n> Computes the unique hash ... 2 \n", 183 | "3 # id\\n> Display current user and group identit... 3 \n", 184 | "4 # nl\\n> A utility for numbering lines, either ... 4 \n", 185 | ".. ... ... \n", 186 | "476 # sleep\\n> Delay for a specified amount of tim... 476 \n", 187 | "477 # manpath\\n> Determine the search path for man... 477 \n", 188 | "478 # mv\\n> Move or rename files and directories. ... 478 \n", 189 | "479 # whereis\\n> Locate the binary, source, and ma... 479 \n", 190 | "480 # git daemon\\n> A really simple server for Git... 480 \n", 191 | "\n", 192 | "[481 rows x 4 columns]" 193 | ] 194 | }, 195 | "execution_count": 12, 196 | "metadata": {}, 197 | "output_type": "execute_result" 198 | } 199 | ], 200 | "source": [ 201 | "df = pd.DataFrame(dataset['train'])\n", 202 | "df" 203 | ] 204 | }, 205 | { 206 | "cell_type": "code", 207 | "execution_count": 17, 208 | "metadata": {}, 209 | "outputs": [ 210 | { 211 | "data": { 212 | "text/html": [ 213 | "
\n", 214 | "\n", 227 | "\n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | "
systemcommandresponse
0You are a linux expert. You understand what ev...chgrp# chgrp\\n> Change group ownership of files and...
1You are a linux expert. You understand what ev...more# more\\n> Open a file for interactive reading,...
2You are a linux expert. You understand what ev...git-hash-object# git hash-object\\n> Computes the unique hash ...
3You are a linux expert. You understand what ev...id# id\\n> Display current user and group identit...
4You are a linux expert. You understand what ev...nl# nl\\n> A utility for numbering lines, either ...
............
476You are a linux expert. You understand what ev...sleep# sleep\\n> Delay for a specified amount of tim...
477You are a linux expert. You understand what ev...manpath# manpath\\n> Determine the search path for man...
478You are a linux expert. You understand what ev...mv# mv\\n> Move or rename files and directories. ...
479You are a linux expert. You understand what ev...whereis# whereis\\n> Locate the binary, source, and ma...
480You are a linux expert. You understand what ev...git-daemon# git daemon\\n> A really simple server for Git...
\n", 305 | "

481 rows × 3 columns

\n", 306 | "
" 307 | ], 308 | "text/plain": [ 309 | " system command \\\n", 310 | "0 You are a linux expert. You understand what ev... chgrp \n", 311 | "1 You are a linux expert. You understand what ev... more \n", 312 | "2 You are a linux expert. You understand what ev... git-hash-object \n", 313 | "3 You are a linux expert. You understand what ev... id \n", 314 | "4 You are a linux expert. You understand what ev... nl \n", 315 | ".. ... ... \n", 316 | "476 You are a linux expert. You understand what ev... sleep \n", 317 | "477 You are a linux expert. You understand what ev... manpath \n", 318 | "478 You are a linux expert. You understand what ev... mv \n", 319 | "479 You are a linux expert. You understand what ev... whereis \n", 320 | "480 You are a linux expert. You understand what ev... git-daemon \n", 321 | "\n", 322 | " response \n", 323 | "0 # chgrp\\n> Change group ownership of files and... \n", 324 | "1 # more\\n> Open a file for interactive reading,... \n", 325 | "2 # git hash-object\\n> Computes the unique hash ... \n", 326 | "3 # id\\n> Display current user and group identit... \n", 327 | "4 # nl\\n> A utility for numbering lines, either ... \n", 328 | ".. ... \n", 329 | "476 # sleep\\n> Delay for a specified amount of tim... \n", 330 | "477 # manpath\\n> Determine the search path for man... \n", 331 | "478 # mv\\n> Move or rename files and directories. ... \n", 332 | "479 # whereis\\n> Locate the binary, source, and ma... \n", 333 | "480 # git daemon\\n> A really simple server for Git... \n", 334 | "\n", 335 | "[481 rows x 3 columns]" 336 | ] 337 | }, 338 | "execution_count": 17, 339 | "metadata": {}, 340 | "output_type": "execute_result" 341 | } 342 | ], 343 | "source": [ 344 | "for i, data in df.iterrows():\n", 345 | " df.loc[i, 'system'] = \"You are a linux expert. You understand what every Linux terminal command does and you reply with the explanation when asked.\"\n", 346 | "\n", 347 | "df = df.drop('__index_level_0__', axis=1)\n", 348 | "df" 349 | ] 350 | }, 351 | { 352 | "cell_type": "code", 353 | "execution_count": 19, 354 | "metadata": {}, 355 | "outputs": [ 356 | { 357 | "data": { 358 | "text/html": [ 359 | "
\n", 360 | "\n", 373 | "\n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | "
systemcommandresponse
0You are a linux expert. You understand what ev...w# w\\n> Show who is logged on and what they are...
1You are a linux expert. You understand what ev...ar# ar\\n> Create, modify, and extract from Unix ...
2You are a linux expert. You understand what ev...mv# mv\\n> Move or rename files and directories. ...
3You are a linux expert. You understand what ev...ps# ps\\n> Information about running processes. M...
4You are a linux expert. You understand what ev...ld# ld\\n> Link object files together. More infor...
............
476You are a linux expert. You understand what ev...git-cvsexportcommit# git cvsexportcommit\\n> Export a single `Git`...
477You are a linux expert. You understand what ev...update-alternatives# update-alternatives\\n> A convenient tool for...
478You are a linux expert. You understand what ev...git-credential-store# git credential-store\\n> `git` helper to stor...
479You are a linux expert. You understand what ev...git-credential-cache# git credential-cache\\n> Git helper to tempor...
480You are a linux expert. You understand what ev...git-check-ref-format# git check-ref-format\\n> Checks if a given re...
\n", 451 | "

481 rows × 3 columns

\n", 452 | "
" 453 | ], 454 | "text/plain": [ 455 | " system command \\\n", 456 | "0 You are a linux expert. You understand what ev... w \n", 457 | "1 You are a linux expert. You understand what ev... ar \n", 458 | "2 You are a linux expert. You understand what ev... mv \n", 459 | "3 You are a linux expert. You understand what ev... ps \n", 460 | "4 You are a linux expert. You understand what ev... ld \n", 461 | ".. ... ... \n", 462 | "476 You are a linux expert. You understand what ev... git-cvsexportcommit \n", 463 | "477 You are a linux expert. You understand what ev... update-alternatives \n", 464 | "478 You are a linux expert. You understand what ev... git-credential-store \n", 465 | "479 You are a linux expert. You understand what ev... git-credential-cache \n", 466 | "480 You are a linux expert. You understand what ev... git-check-ref-format \n", 467 | "\n", 468 | " response \n", 469 | "0 # w\\n> Show who is logged on and what they are... \n", 470 | "1 # ar\\n> Create, modify, and extract from Unix ... \n", 471 | "2 # mv\\n> Move or rename files and directories. ... \n", 472 | "3 # ps\\n> Information about running processes. M... \n", 473 | "4 # ld\\n> Link object files together. More infor... \n", 474 | ".. ... \n", 475 | "476 # git cvsexportcommit\\n> Export a single `Git`... \n", 476 | "477 # update-alternatives\\n> A convenient tool for... \n", 477 | "478 # git credential-store\\n> `git` helper to stor... \n", 478 | "479 # git credential-cache\\n> Git helper to tempor... \n", 479 | "480 # git check-ref-format\\n> Checks if a given re... \n", 480 | "\n", 481 | "[481 rows x 3 columns]" 482 | ] 483 | }, 484 | "execution_count": 19, 485 | "metadata": {}, 486 | "output_type": "execute_result" 487 | } 488 | ], 489 | "source": [ 490 | "s = df.command.str.len().sort_values(ascending=True).index\n", 491 | "df = df.reindex(s).reset_index(drop=True)\n", 492 | "df" 493 | ] 494 | }, 495 | { 496 | "cell_type": "code", 497 | "execution_count": 8, 498 | "metadata": {}, 499 | "outputs": [], 500 | "source": [ 501 | "from huggingface_hub.hf_api import HfFolder; HfFolder.save_token('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')" 502 | ] 503 | }, 504 | { 505 | "cell_type": "code", 506 | "execution_count": 20, 507 | "metadata": {}, 508 | "outputs": [ 509 | { 510 | "name": "stderr", 511 | "output_type": "stream", 512 | "text": [ 513 | "Creating parquet from Arrow format: 100%|██████████| 1/1 [00:00<00:00, 958.04ba/s]\n", 514 | "Uploading the dataset shards: 100%|██████████| 1/1 [00:01<00:00, 1.49s/it]\n" 515 | ] 516 | }, 517 | { 518 | "data": { 519 | "text/plain": [ 520 | "CommitInfo(commit_url='https://huggingface.co/datasets/hotal/linux_commands/commit/96c38caacb53d0b586cb93731b94e3e0dad1fa10', commit_message='Upload dataset', commit_description='', oid='96c38caacb53d0b586cb93731b94e3e0dad1fa10', pr_url=None, pr_revision=None, pr_num=None)" 521 | ] 522 | }, 523 | "execution_count": 20, 524 | "metadata": {}, 525 | "output_type": "execute_result" 526 | } 527 | ], 528 | "source": [ 529 | "dataset = Dataset.from_pandas(df)\n", 530 | "dataset.push_to_hub(\"hotal/linux_commands\")" 531 | ] 532 | }, 533 | { 534 | "cell_type": "code", 535 | "execution_count": null, 536 | "metadata": {}, 537 | "outputs": [], 538 | "source": [] 539 | } 540 | ], 541 | "metadata": { 542 | "kernelspec": { 543 | "display_name": "venv", 544 | "language": "python", 545 | "name": "python3" 546 | }, 547 | "language_info": { 548 | "codemirror_mode": { 549 | "name": "ipython", 550 | "version": 3 551 | }, 552 | "file_extension": ".py", 553 | "mimetype": "text/x-python", 554 | "name": "python", 555 | "nbconvert_exporter": "python", 556 | "pygments_lexer": "ipython3", 557 | "version": "3.11.8" 558 | } 559 | }, 560 | "nbformat": 4, 561 | "nbformat_minor": 2 562 | } 563 | -------------------------------------------------------------------------------- /notebooks/postprocess.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Upload Model to HF" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "from transformers import AutoModel,AutoTokenizer\n", 17 | "\n", 18 | "model = AutoModel.from_pretrained('../models/honeypot-llama3-8B')\n", 19 | "tokenizer = AutoTokenizer.from_pretrained('../models/honeypot-llama3-8B')\n", 20 | "\n", 21 | "model.push_to_hub(\"honeypot-llama3-8B\")\n", 22 | "tokenizer.push_to_hub(\"honeypot-llama3-8B\")" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "## LLM Inference" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 29, 35 | "metadata": {}, 36 | "outputs": [ 37 | { 38 | "name": "stdout", 39 | "output_type": "stream", 40 | "text": [ 41 | "Cleared GPU...\n" 42 | ] 43 | }, 44 | { 45 | "name": "stderr", 46 | "output_type": "stream", 47 | "text": [ 48 | "Loading checkpoint shards: 100%|██████████| 17/17 [00:05<00:00, 3.38it/s]\n", 49 | "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n" 50 | ] 51 | }, 52 | { 53 | "name": "stdout", 54 | "output_type": "stream", 55 | "text": [ 56 | "Loaded Model: ../models/honeypot-llama3-8B\n" 57 | ] 58 | } 59 | ], 60 | "source": [ 61 | "import torch\n", 62 | "import gc\n", 63 | "import re\n", 64 | "from transformers import (\n", 65 | " AutoModelForCausalLM,\n", 66 | " AutoTokenizer,\n", 67 | " BitsAndBytesConfig,\n", 68 | " pipeline\n", 69 | ")\n", 70 | "\n", 71 | "class LLM:\n", 72 | " def __init__(self, model_name=\"NousResearch/Meta-Llama-3-8B-Instruct\"):\n", 73 | " gc.collect()\n", 74 | " torch.cuda.empty_cache()\n", 75 | " print(\"Cleared GPU...\")\n", 76 | "\n", 77 | " self.DEVICE = \"cuda:1\" if torch.cuda.is_available() else \"cpu\"\n", 78 | " self.BASE_MODEL_NAME = model_name\n", 79 | " self.SYSTEM_PROMPT = \"You are mimicking a linux server. Respond with what the terminal would respond when a code given. I want you to only reply with the terminal outputs inside one unique code block and nothing else. Do not write any explanations. Do not type any commands unless I instruct you to do so.\"\n", 80 | "\n", 81 | " # Model configuration\n", 82 | " self.pipeline = pipeline(\n", 83 | " \"text-generation\",\n", 84 | " model=self.BASE_MODEL_NAME,\n", 85 | " tokenizer=self.BASE_MODEL_NAME,\n", 86 | " model_kwargs={\"torch_dtype\": torch.bfloat16},\n", 87 | " device=self.DEVICE,\n", 88 | " )\n", 89 | "\n", 90 | " print(\"Loaded Model: \", self.BASE_MODEL_NAME)\n", 91 | "\n", 92 | " def answer(self, query, log_history=[], max_tokens=4096, temperature=0.01, top_p=0.8):\n", 93 | "\n", 94 | " message_history = [{\"role\": \"system\", \"content\": self.SYSTEM_PROMPT}]\n", 95 | " if len(log_history) > 0:\n", 96 | " for i, item in enumerate(log_history):\n", 97 | " if i % 2 == 0:\n", 98 | " message_history.append({\"role\": \"user\", \"content\": item})\n", 99 | " else:\n", 100 | " message_history.append({\"role\": \"assistant\", \"content\": item})\n", 101 | "\n", 102 | " user_prompt = message_history + [{\"role\": \"user\", \"content\": query}]\n", 103 | " prompt = self.pipeline.tokenizer.apply_chat_template(\n", 104 | " user_prompt, tokenize=False, add_generation_prompt=True\n", 105 | " )\n", 106 | " outputs = self.pipeline(\n", 107 | " prompt,\n", 108 | " max_new_tokens=max_tokens,\n", 109 | " eos_token_id=self.pipeline.tokenizer.eos_token_id,\n", 110 | " do_sample=True,\n", 111 | " temperature=temperature,\n", 112 | " top_p=top_p,\n", 113 | " )\n", 114 | " response = outputs[0][\"generated_text\"][len(prompt):]\n", 115 | "\n", 116 | " # remove unnecessary quotes\n", 117 | " if response.startswith(\"```\") and response.endswith(\"```\"):\n", 118 | " response = response[3:-3]\n", 119 | " elif response.startswith(\"`\") and response.endswith(\"`\"):\n", 120 | " response = response[1:-1]\n", 121 | " \n", 122 | " return response\n", 123 | " \n", 124 | "\n", 125 | "llama = LLM(\"../models/honeypot-llama3-8B\")\n", 126 | "#print(llama.answer('ls -al', ['mkdir test_directory; touch test.txt','\\n']))" 127 | ] 128 | }, 129 | { 130 | "cell_type": "markdown", 131 | "metadata": {}, 132 | "source": [ 133 | "## Evaluation" 134 | ] 135 | }, 136 | { 137 | "cell_type": "code", 138 | "execution_count": 52, 139 | "metadata": {}, 140 | "outputs": [], 141 | "source": [ 142 | "from openai import OpenAI\n", 143 | "\n", 144 | "client = OpenAI(base_url=\"http://localhost:1234/v1\", api_key=\"lm-studio\")\n", 145 | "\n", 146 | "\n", 147 | "def measure_correctness(prompt, command, generated_answer, reference_answer):\n", 148 | " try:\n", 149 | " correctness_prompt = f\"\"\"###Task Description: An instruction (might include an Input inside it), a query, a response to evaluate, a reference answer that gets a score of 5, and a score rubric representing a evaluation criteria are given. \n", 150 | " 1. Write a detailed feedback that assesses the quality of the response strictly based on the given score rubric, not evaluating in general. \n", 151 | " 2. After writing a feedback, write a score that is either 1 or 2 or 3 or 4 or 5. You should refer to the score rubric. \n", 152 | " 3. The output format should look as follows: \"Feedback: (write a feedback for criteria) [RESULT] (1 or 2 or 3 or 4 or 5)\" \n", 153 | " 4. Please do not generate any other opening, closing, and explanations. \n", 154 | " 5. Generated answer and reference answer can be completely different, consider if it makes sense for the given command.\n", 155 | " 6. Error messages in the generated answer are fine as long as the reference answer has error messages too.\n", 156 | "\n", 157 | " ###The instruction to evaluate: Your task is to evaluate the generated answer and reference answer for the query: {prompt}\\nCommand:{command}\n", 158 | "\n", 159 | " ###Generate answer to evaluate: {generated_answer} \n", 160 | "\n", 161 | " ###Reference Answer (Score 5): {reference_answer}\n", 162 | "\n", 163 | " ###Score Rubrics: \n", 164 | " Score 1: The response is completely irrelevant to the given command.\n", 165 | " Score 2: The response executes the command but provides incomplete or inaccurate information.\n", 166 | " Score 3: The response provides some accurate information but lacks detail or has minor errors.\n", 167 | " Score 4: The response provides mostly accurate and complete information but has some minor errors or omissions.\n", 168 | " Score 5: The response provides a complete and accurate response to the given command, identical to what a Linux terminal would output.\n", 169 | " \n", 170 | " ###Feedback:\"\"\"\n", 171 | "\n", 172 | " completion = client.chat.completions.create(\n", 173 | " model=\"RichardErkhov/prometheus-eval_-_prometheus-7b-v2.0-gguf\",\n", 174 | " messages=[\n", 175 | " {\"role\": \"system\", \"content\": \"You are a language model evaluator. Respond according to the given task.\"},\n", 176 | " {\"role\": \"user\", \"content\": correctness_prompt}\n", 177 | " ],\n", 178 | " temperature=0.01,\n", 179 | " )\n", 180 | "\n", 181 | " return int(completion.choices[0].message.content.split('[RESULT] ')[1])\n", 182 | " except:\n", 183 | " return -1" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": 53, 189 | "metadata": {}, 190 | "outputs": [ 191 | { 192 | "data": { 193 | "text/plain": [ 194 | "2" 195 | ] 196 | }, 197 | "execution_count": 53, 198 | "metadata": {}, 199 | "output_type": "execute_result" 200 | } 201 | ], 202 | "source": [ 203 | "prompt = 'You are mimicking a linux server. Respond with what the terminal would respond when a code given. I want you to only reply with the terminal outputs inside one unique code block and nothing else. Do not write any explanations. Do not type any commands unless I instruct you to do so.'\n", 204 | "command = 'ls'\n", 205 | "generated_answer = 'bin boot dev etc home '\n", 206 | "reference_answer = 'bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var'\n", 207 | "\n", 208 | "measure_correctness(prompt, command, generated_answer, reference_answer)" 209 | ] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "execution_count": 72, 214 | "metadata": {}, 215 | "outputs": [ 216 | { 217 | "name": "stderr", 218 | "output_type": "stream", 219 | "text": [ 220 | "12it [00:28, 6.20s/it]" 221 | ] 222 | }, 223 | { 224 | "name": "stdout", 225 | "output_type": "stream", 226 | "text": [ 227 | "Skipping row 9 due to timeout (> 15 seconds)\n" 228 | ] 229 | }, 230 | { 231 | "name": "stderr", 232 | "output_type": "stream", 233 | "text": [ 234 | "16it [00:45, 6.26s/it]" 235 | ] 236 | }, 237 | { 238 | "name": "stdout", 239 | "output_type": "stream", 240 | "text": [ 241 | "Skipping row 132 due to timeout (> 15 seconds)\n" 242 | ] 243 | }, 244 | { 245 | "name": "stderr", 246 | "output_type": "stream", 247 | "text": [ 248 | "42it [01:32, 5.52s/it]" 249 | ] 250 | }, 251 | { 252 | "name": "stdout", 253 | "output_type": "stream", 254 | "text": [ 255 | "Skipping row 42 due to timeout (> 15 seconds)\n" 256 | ] 257 | }, 258 | { 259 | "name": "stderr", 260 | "output_type": "stream", 261 | "text": [ 262 | "60it [02:28, 9.42s/it]" 263 | ] 264 | }, 265 | { 266 | "name": "stdout", 267 | "output_type": "stream", 268 | "text": [ 269 | "Skipping row 179 due to timeout (> 15 seconds)\n" 270 | ] 271 | }, 272 | { 273 | "name": "stderr", 274 | "output_type": "stream", 275 | "text": [ 276 | "67it [02:58, 6.99s/it]" 277 | ] 278 | }, 279 | { 280 | "name": "stdout", 281 | "output_type": "stream", 282 | "text": [ 283 | "Skipping row 60 due to timeout (> 15 seconds)\n" 284 | ] 285 | }, 286 | { 287 | "name": "stderr", 288 | "output_type": "stream", 289 | "text": [ 290 | "76it [03:24, 5.86s/it]" 291 | ] 292 | }, 293 | { 294 | "name": "stdout", 295 | "output_type": "stream", 296 | "text": [ 297 | "Skipping row 177 due to timeout (> 15 seconds)\n" 298 | ] 299 | }, 300 | { 301 | "name": "stderr", 302 | "output_type": "stream", 303 | "text": [ 304 | "90it [03:50, 3.73s/it]" 305 | ] 306 | }, 307 | { 308 | "name": "stdout", 309 | "output_type": "stream", 310 | "text": [ 311 | "Skipping row 185 due to timeout (> 15 seconds)\n" 312 | ] 313 | }, 314 | { 315 | "name": "stderr", 316 | "output_type": "stream", 317 | "text": [ 318 | "142it [05:04, 4.91s/it]" 319 | ] 320 | }, 321 | { 322 | "name": "stdout", 323 | "output_type": "stream", 324 | "text": [ 325 | "Skipping row 221 due to timeout (> 15 seconds)\n" 326 | ] 327 | }, 328 | { 329 | "name": "stderr", 330 | "output_type": "stream", 331 | "text": [ 332 | "150it [05:30, 2.20s/it]" 333 | ] 334 | }, 335 | { 336 | "name": "stdout", 337 | "output_type": "stream", 338 | "text": [ 339 | "Skipping row 222 due to timeout (> 15 seconds)\n" 340 | ] 341 | }, 342 | { 343 | "name": "stderr", 344 | "output_type": "stream", 345 | "text": [ 346 | "\n" 347 | ] 348 | }, 349 | { 350 | "data": { 351 | "text/html": [ 352 | "
\n", 353 | "\n", 366 | "\n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | "
systemcommandresponsegenerated
25You are mimicking a linux server. Respond with...psPID TTY TIME COMMAND ...\\n PID TTY TIME CMD\\n 1234 pts/0 ...
309You are mimicking a linux server. Respond with...uptime -u18:42:29 up 3:14, 1 user, load average: 0....\\n 00:00:00\\n
73You are mimicking a linux server. Respond with...chmod u+rw /home/phil/file_or_directory1,/home...chmod: cannot access '/home/phil/file_or_direc...\\nchmod: cannot access '/home/phil/file_or_dir...
195You are mimicking a linux server. Respond with...mv /home/phil/source/myfile.txt /home/phil/tar...mv: cannot create regular file `/home/phil/tar...mv: cannot move '/home/phil/source/myfile.txt'...
57You are mimicking a linux server. Respond with...cat /test2ELF\u0002\u0001\u0001cat: /test2: No such file or directory
...............
283You are mimicking a linux server. Respond with...uname -huname: invalid option -- 'h'\\nTry 'uname --hel...Linux
148You are mimicking a linux server. Respond with...gcc -Wall -O2 -o path/to/output_executable pat...gcc: path/to/source.cpp: No such file or direc...\\ngcc: error: path/to/output_executable: No su...
291You are mimicking a linux server. Respond with...uptime18:42:08 up 3:13, 1 user, load average: 0....\\n 21:34:12 up 2 days, 1:04, 1 user, load a...
239You are mimicking a linux server. Respond with...rmdir -p /home/phil/directory1 /home/phil/dire...rmdir: failed to remove `-p': No such file or ...\\nrmdir: failed to remove `/home/phil/director...
222You are mimicking a linux server. Respond with...ps auxUSER PID %CPU %MEM VSZ ...None
\n", 456 | "

150 rows × 4 columns

\n", 457 | "
" 458 | ], 459 | "text/plain": [ 460 | " system \\\n", 461 | "25 You are mimicking a linux server. Respond with... \n", 462 | "309 You are mimicking a linux server. Respond with... \n", 463 | "73 You are mimicking a linux server. Respond with... \n", 464 | "195 You are mimicking a linux server. Respond with... \n", 465 | "57 You are mimicking a linux server. Respond with... \n", 466 | ".. ... \n", 467 | "283 You are mimicking a linux server. Respond with... \n", 468 | "148 You are mimicking a linux server. Respond with... \n", 469 | "291 You are mimicking a linux server. Respond with... \n", 470 | "239 You are mimicking a linux server. Respond with... \n", 471 | "222 You are mimicking a linux server. Respond with... \n", 472 | "\n", 473 | " command \\\n", 474 | "25 ps \n", 475 | "309 uptime -u \n", 476 | "73 chmod u+rw /home/phil/file_or_directory1,/home... \n", 477 | "195 mv /home/phil/source/myfile.txt /home/phil/tar... \n", 478 | "57 cat /test2 \n", 479 | ".. ... \n", 480 | "283 uname -h \n", 481 | "148 gcc -Wall -O2 -o path/to/output_executable pat... \n", 482 | "291 uptime \n", 483 | "239 rmdir -p /home/phil/directory1 /home/phil/dire... \n", 484 | "222 ps aux \n", 485 | "\n", 486 | " response \\\n", 487 | "25 PID TTY TIME COMMAND ... \n", 488 | "309 18:42:29 up 3:14, 1 user, load average: 0.... \n", 489 | "73 chmod: cannot access '/home/phil/file_or_direc... \n", 490 | "195 mv: cannot create regular file `/home/phil/tar... \n", 491 | "57 ELF\u0002\u0001\u0001 \n", 492 | ".. ... \n", 493 | "283 uname: invalid option -- 'h'\\nTry 'uname --hel... \n", 494 | "148 gcc: path/to/source.cpp: No such file or direc... \n", 495 | "291 18:42:08 up 3:13, 1 user, load average: 0.... \n", 496 | "239 rmdir: failed to remove `-p': No such file or ... \n", 497 | "222 USER PID %CPU %MEM VSZ ... \n", 498 | "\n", 499 | " generated \n", 500 | "25 \\n PID TTY TIME CMD\\n 1234 pts/0 ... \n", 501 | "309 \\n 00:00:00\\n \n", 502 | "73 \\nchmod: cannot access '/home/phil/file_or_dir... \n", 503 | "195 mv: cannot move '/home/phil/source/myfile.txt'... \n", 504 | "57 cat: /test2: No such file or directory \n", 505 | ".. ... \n", 506 | "283 Linux \n", 507 | "148 \\ngcc: error: path/to/output_executable: No su... \n", 508 | "291 \\n 21:34:12 up 2 days, 1:04, 1 user, load a... \n", 509 | "239 \\nrmdir: failed to remove `/home/phil/director... \n", 510 | "222 None \n", 511 | "\n", 512 | "[150 rows x 4 columns]" 513 | ] 514 | }, 515 | "execution_count": 72, 516 | "metadata": {}, 517 | "output_type": "execute_result" 518 | } 519 | ], 520 | "source": [ 521 | "import pandas as pd\n", 522 | "from datasets import load_dataset\n", 523 | "from tqdm import tqdm\n", 524 | "import time\n", 525 | "import spacy\n", 526 | "import signal\n", 527 | "nlp = spacy.load(\"en_core_web_sm\")\n", 528 | "\n", 529 | "dataset = load_dataset(\"hotal/honeypot_logs\")\n", 530 | "df = pd.DataFrame(dataset['train'])[:334].sample(n=150, random_state=42)\n", 531 | "\n", 532 | "def timeout_handler(signum, frame):\n", 533 | " raise TimeoutError\n", 534 | "\n", 535 | "for index, row in tqdm(df.iterrows()):\n", 536 | " signal.signal(signal.SIGALRM, timeout_handler)\n", 537 | " signal.alarm(15) # 10 seconds\n", 538 | " try:\n", 539 | " df.loc[index, 'generated'] = llama.answer(row['command'], [])\n", 540 | " except TimeoutError:\n", 541 | " print(f\"Skipping row {index} due to timeout (> 15 seconds)\")\n", 542 | " df.loc[index, 'generated'] = None\n", 543 | " finally:\n", 544 | " signal.alarm(0) # reset the alarm\n", 545 | "\n", 546 | "df\n" 547 | ] 548 | }, 549 | { 550 | "cell_type": "code", 551 | "execution_count": 78, 552 | "metadata": {}, 553 | "outputs": [ 554 | { 555 | "name": "stderr", 556 | "output_type": "stream", 557 | "text": [ 558 | "0it [00:00, ?it/s]/tmp/ipykernel_1638383/3606016577.py:5: UserWarning: [W007] The model you're using has no word vectors loaded, so the result of the Doc.similarity method will be based on the tagger, parser and NER, which may not give useful similarity judgements. This may happen if you're using one of the small models, e.g. `en_core_web_sm`, which don't ship with word vectors and only use context-sensitive tensors. You can always add your own word vectors, or use one of the larger models instead if available.\n", 559 | " similarity = doc1.similarity(doc2)\n", 560 | "150it [00:01, 130.00it/s]\n" 561 | ] 562 | }, 563 | { 564 | "data": { 565 | "text/plain": [ 566 | "[0.9266226889377728,\n", 567 | " 0.7483038693015535,\n", 568 | " 0.9854740744166057,\n", 569 | " 0.8750943762180343,\n", 570 | " 0.1222527798910181,\n", 571 | " 0.9599760967911799,\n", 572 | " 0.15790873052795754,\n", 573 | " 0.3427842031666325,\n", 574 | " 0.8901137910677026,\n", 575 | " 0.9250525849039357,\n", 576 | " 0.6146497515738819,\n", 577 | " 0.6783382553049272,\n", 578 | " 0.9551248995922451,\n", 579 | " 0.627599031453704,\n", 580 | " 0.8775345504719663,\n", 581 | " 0.8153339463875003,\n", 582 | " 0.43039500631938543,\n", 583 | " 0.4415520404516888,\n", 584 | " 0.6499677098298162,\n", 585 | " 0.7572771114785681,\n", 586 | " 0.7478363709157725,\n", 587 | " 0.517494247868626,\n", 588 | " 0.5214024835335245,\n", 589 | " 0.5217871483441932,\n", 590 | " 0.4151627115886709,\n", 591 | " 0.7464344056291038,\n", 592 | " 0.5545979492340203,\n", 593 | " 0.7469779958000291,\n", 594 | " 0.3084552815614088,\n", 595 | " 0.9770636258190092,\n", 596 | " 0.42111358743318955,\n", 597 | " 0.508898890243933,\n", 598 | " 0.4691406705359161,\n", 599 | " 0.8500015026444628,\n", 600 | " 0.7013135151145201,\n", 601 | " 0.9176107960715111,\n", 602 | " 0.8260988634215954,\n", 603 | " 0.47781991339817054,\n", 604 | " 0.41822584352315856,\n", 605 | " 0.40500443370038985,\n", 606 | " 0.6149629113333346,\n", 607 | " 0.672761011302793,\n", 608 | " 0.9757408913151834,\n", 609 | " 0.7929636702502307,\n", 610 | " 0.28980344659973345,\n", 611 | " 0.5850302585113578,\n", 612 | " 0.5611672372311479,\n", 613 | " 0.8562951543701436,\n", 614 | " 0.950702976797263,\n", 615 | " 0.91938663377379,\n", 616 | " 0.9457809333641432,\n", 617 | " 0.4807638058305509,\n", 618 | " 0.9092084540315909,\n", 619 | " 0.6367839109198675,\n", 620 | " 0.9812164222549482,\n", 621 | " 0.8186939002754022,\n", 622 | " 0.9771496763658669,\n", 623 | " 0.7486600345735321,\n", 624 | " 0.41910924509250236,\n", 625 | " 0.4091024332843984,\n", 626 | " 0.3836090746137256,\n", 627 | " 0.9759682589885805,\n", 628 | " 0.44465350719130636,\n", 629 | " 0.6120472117886202,\n", 630 | " 0.9789453902284974,\n", 631 | " 0.7153902543235714,\n", 632 | " 0.7426386062855006,\n", 633 | " 0.9744701036083163,\n", 634 | " 0.6558226640808129,\n", 635 | " 0.9532569160570045,\n", 636 | " 0.6264219005218772,\n", 637 | " 0.468927884859053,\n", 638 | " 0.5790208651494848,\n", 639 | " 0.9093797194028849,\n", 640 | " 0.8619641459279357,\n", 641 | " 0.40928139596157587,\n", 642 | " 0.05515600619347201,\n", 643 | " 0.5654284362318464,\n", 644 | " 0.705511556698048,\n", 645 | " 0.7566292069891919,\n", 646 | " 0.5345443710608845,\n", 647 | " 0.9750915300170969,\n", 648 | " 0.2812566174949539,\n", 649 | " 0.9016269139383067,\n", 650 | " 0.7629358538450524,\n", 651 | " 0.9885831370195848,\n", 652 | " 0.8946553398557442,\n", 653 | " 0.40125993982842567,\n", 654 | " 0.9216778170046728,\n", 655 | " 0.3842899033080288,\n", 656 | " 0.9172229385791985,\n", 657 | " 0.5771070729807252,\n", 658 | " 0.34359980264799184,\n", 659 | " 0.8792366989444065,\n", 660 | " 0.9686253387818091,\n", 661 | " 0.8772259641843925,\n", 662 | " 0.28082071452590873,\n", 663 | " 0.6648062023302003,\n", 664 | " 0.7091523172314665,\n", 665 | " 0.9308563527991272,\n", 666 | " 0.6379564087919317,\n", 667 | " 0.2941533246890943,\n", 668 | " 0.40961384119132643,\n", 669 | " 0.9830999518848895,\n", 670 | " 0.8573340272480829,\n", 671 | " 0.6096735436269064,\n", 672 | " 0.867486599832943,\n", 673 | " 0.3184837440305669,\n", 674 | " 0.3161855948383834,\n", 675 | " 0.9135009372705184,\n", 676 | " 0.8137313915768604,\n", 677 | " 0.8123733670376505,\n", 678 | " 0.9667515554007875,\n", 679 | " 0.8935746811734981,\n", 680 | " 0.8542122675981001,\n", 681 | " 0.9885607732671146,\n", 682 | " 0.9491577734752112,\n", 683 | " 0.6577316278883858,\n", 684 | " 0.8955741072535015,\n", 685 | " 0.35920635435693815,\n", 686 | " 0.9752386936788853,\n", 687 | " 0.7163785906107277,\n", 688 | " 0.7413162555648729,\n", 689 | " 0.76000288795456,\n", 690 | " 0.8606838733019466,\n", 691 | " 0.6496282700594403,\n", 692 | " 0.40762294957370837,\n", 693 | " 0.8426753638284821,\n", 694 | " 0.9070421984574294,\n", 695 | " 0.9451967510573314,\n", 696 | " 0.07869086945968735,\n", 697 | " 0.5564012886490949,\n", 698 | " 0.9267505365363619,\n", 699 | " 0.6127896978889558,\n", 700 | " 0.41232448670824684,\n", 701 | " 0.6403345808255426,\n", 702 | " 0.2019148676242682,\n", 703 | " 0.929285189521436,\n", 704 | " 0.9783733409331761,\n", 705 | " 0.906493423110178]" 706 | ] 707 | }, 708 | "execution_count": 78, 709 | "metadata": {}, 710 | "output_type": "execute_result" 711 | } 712 | ], 713 | "source": [ 714 | "def measure_similarity(sentence1, sentence2):\n", 715 | " try:\n", 716 | " doc1 = nlp(sentence1)\n", 717 | " doc2 = nlp(sentence2)\n", 718 | " similarity = doc1.similarity(doc2)\n", 719 | " return similarity\n", 720 | " except Exception as e:\n", 721 | " return -1\n", 722 | "\n", 723 | "results = []\n", 724 | "for index, row in tqdm(df.iterrows()):\n", 725 | " \n", 726 | " prompt = row['system']\n", 727 | " command = row['command']\n", 728 | " reference_answer = row['response']\n", 729 | " generated_answer = row['generated']\n", 730 | "\n", 731 | " #result = measure_correctness(prompt, command, generated_answer, reference_answer)\n", 732 | " result = measure_similarity(generated_answer, reference_answer)\n", 733 | " if result != -1:\n", 734 | " results.append(result)\n", 735 | " #time.sleep(0.05)\n", 736 | "\n", 737 | "results" 738 | ] 739 | }, 740 | { 741 | "cell_type": "markdown", 742 | "metadata": {}, 743 | "source": [ 744 | "## Visualizations" 745 | ] 746 | }, 747 | { 748 | "cell_type": "code", 749 | "execution_count": 113, 750 | "metadata": {}, 751 | "outputs": [ 752 | { 753 | "data": { 754 | "text/plain": [ 755 | "(0.6885405904371525, 140)" 756 | ] 757 | }, 758 | "execution_count": 113, 759 | "metadata": {}, 760 | "output_type": "execute_result" 761 | } 762 | ], 763 | "source": [ 764 | "import numpy as np\n", 765 | "np.array(results).mean(), len(results)" 766 | ] 767 | }, 768 | { 769 | "cell_type": "code", 770 | "execution_count": 146, 771 | "metadata": {}, 772 | "outputs": [ 773 | { 774 | "data": { 775 | "image/png": "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Kadkk002yfHHH5/nn3++occAAAAAAIAP1ODRfLmlS5dm0aJFWbhwYZKkKIosXLgw119/fXbaaad89rOfzbvvvttY4wAAAAAAwCoaPJo/++yzOfHEE7PJJpvkC1/4Ql544YV86lOfyt1335133303N998c7bZZpvccccdOe200xp6HAAAAAAAWKP1GuKkc+fOzU033ZQf/ehHefHFF1MURXr37p1///d/zwknnJBNN910xbFHHXVUjjjiiGy//fb59a9/3RDjAAAAAADAWql6NP/Xf/3X3H777Vm4cGEqlUoOPPDAfOELX8ghhxySNm1Wf2P7euutlx133DE33HBDtccBAAAAAIC1VvVofsstt2TjjTfOcccdlxNPPDF9+/Zdq9cddthha30sAAAAAAA0hKpH85///Of59Kc/nfXW+3CnPvTQQ3PooYdWexwAAAAAAFhrVY/mhx9+eLVPCQAAAAAAjWL1DxlfB0899VSOO+64PP300x94zIQJE6p9eQAAAAAAqLeqR/Orr74648aNy9Zbb73GY7beeuv87Gc/yzXXXFPtywMAAAAAQL1VPZo/88wz2X777dOtW7c1HrPhhhtm6NCh+c1vflPtywMAAAAAQL1VPZq//fbb6dOnzwce16dPn8ycObPalwcAAAAAgHqrejTv3LlzZs+e/YHHzZ49O+3atav25QEAAAAAoN6qHs233XbbPPnkk5kxY8Yaj5kxY0aeeOKJDBkypNqXBwAAAACAeqt6ND/uuOOyYMGCHHrooXnhhRdW2f/CCy/kn//5n7No0aIcd9xx1b48AAAAAADU23rVPuHnP//5jB8/Prfffnt23HHHDB06NP3790+lUsnrr7+eSZMmZdmyZTnssMNy7LHHVvvyAAAAAABQb1WP5kkybty4fPOb38y3v/3tTJw4MRMnTlyxr1u3bjnzzDNz3nnnNcSlAQAAAACg3hokmrdp0ybnn39+zjnnnEycODFvvfVWkmSzzTbLDjvskJqamoa4LAAAAAAArJMGiebL1dTUZPjw4Rk+fHhDXgYAAAAAAKqi6l8ECgAAAAAALVWD3Gm+cOHC/PSnP83jjz+emTNnZuHChas9rlKp5KGHHmqIEQAAAAAA4EOrejT/v//3/2bffffNa6+9lqIo3vfYSqVS7csDAAAAAEC9VT2af+UrX8mrr76aXXfdNV/+8pczaNCgdOnSpdqXAQAAAOBDKIoidXV1TT0Gjay2trapR4AWp+rR/L777kufPn3y4IMPpkOHDtU+PQAAAAD1UFdX58ZGgLVQ9S8CXbhwYXbccUfBHAAAAACAFqfqd5pvs802mTFjRrVPCwAAAECV9D715lRq3PDYGiytm5u3rzuhqceAFqXq0fycc87J4Ycfnsceeyx77rlntU8PAAAAwDqq1HRIm3aieWuwbLF1hg+r6tF86NCh+fKXv5xDDz00Z511Vvbff//07t07lUpltcf36dOn2iMAAAAAAEC9VD2a9+vXL5VKJUVR5OKLL87FF1+8xmMrlUqWLFlS7REAAAAAAKBeqh7NR4wYsca7ygEAAAAAoDmrejR/9NFHq31KAAAAAABoFG2aegAAAAAAAGguqn6n+T967bXXMnv27HTv3j2DBg1q6MsBAAAAAEC9Ncid5vPnz88555yT7t27Z6uttsruu++eyy67bMX+66+/PkOHDs3kyZMb4vIAAAAAAFAvVY/mtbW12XPPPXPFFVekffv2GTlyZIqiWOmYESNGZPLkyRk3bly1Lw8AAAAAAPVW9Wj+rW99KxMnTsyJJ56YN954I//zP/+zyjH9+/fPVlttlQcffLDalwcAAAAAgHqrejQfN25c+vXrl6uvvjrt27df43F9+/bNjBkz6nWNurq6jB8/Pscff3yGDBmSDTbYIJ07d862226br3/965k3b94aX3vjjTdmp512SpcuXbLRRhvl4IMPzlNPPVWvOQAAAAAA+GipejSfPn16hg0blrZt277vcRtssEHmzJlTr2vceuutOeyww/KTn/wky5Yty4EHHpg99tgjb7zxRi688MLsuOOO+fOf/7zK684666wce+yxefHFF7Pffvtlp512ygMPPJARI0bkzjvvrNcsAAAAAAB8dFQ9mnfu3DmzZ8/+wOPeeOONdO/evV7XaNeuXU4++eS8+uqrefHFF/Pzn/889957b1555ZVsv/32efnll/OlL31ppdc8/PDD+c53vpPu3bvnt7/9bcaPH5977703jz/+eNq2bZsxY8bUO+IDAAAAAPDRUPVoPmzYsDz77LN566231njM1KlT88ILL2T48OH1usYxxxyTa665JgMHDlxp+yabbJKrr746SXLHHXdk0aJFK/ZdeeWVSZLzzz9/pdcNHz48J510Uv7617/mJz/5Sb3mAQAAAADgo6Hq0fzUU0/N/PnzM2rUqLz++uur7H/zzTdzzDHHZNmyZTn11FOrfflsu+22SZKFCxfmnXfeSZIsWLAgDz30UJLk8MMPX+U1y7fdddddVZ8HAAAAAICWo+rR/NBDD82ZZ56Z559/PltuuWU+8YlPpFKp5P77788OO+yQgQMH5oUXXsjZZ5+dvfbaq9qXz+9///skSU1NTTbaaKMkycsvv5yFCxemZ8+e6d279yqvGTp0aJJkypQpVZ8HAAAAAICWo+rRPPnbo1B+9rOfZZtttsn//u//piiKvP3225k0aVL69++fm266KZdeemlDXDpXXXVVkuTAAw9M+/btk/zty0mTrDaYJ397Dnu3bt0yZ86cvPfeew0yFwAAAAAAzd96DXXiI444IkcccURmzZqVN998M0uXLk3v3r3Tq1evhrpk7r777vz4xz9OTU1NLr744hXb582blyTp1KnTGl/buXPnzJ07N/Pmzcv666//vtcZPHjwardPmzYt/fv3r8fkAAAAAAA0Bw0WzZfr2bNnevbs2dCXyUsvvZSjjz46RVHk8ssvX/Fs8yQpiiJJUqlU1vj65ccAAAAAANB6NXg0bwwzZszIgQcemDlz5uSss87KGWecsdL+5XeO19bWrvEcdXV1SZIuXbp84PWmTp262u1rugMdAAAAAICWoerRfJ999lnrYyuVSh566KF1ut7s2bOz//77Z/r06RkzZkyuuOKKVY7p06dPkr/F9dWpra3N3Llz061btw98NAsAAAAAAB9dVY/mjz766AceU6lUUhTF+z4uZW289957Oeigg/Lyyy9n1KhR+eEPf7jac2655ZZp3759Zs2alRkzZqzyhaCTJk1KkgwZMmSd5gEAAAAAoGVrU+0TvvHGG6v9MW3atDz66KP56le/mo4dO+YrX/lKfv/739f7OgsXLsynPvWpTJw4MQcccEB++tOfpm3btqs9tmPHjivugL/ttttW2b982yGHHFLveQAAAAAAaPmqfqd5375917hv8803z4gRI7L33nvnoIMOyi677PK+x6/J0qVL87nPfS6PPPJI9thjj9xxxx1p167d+77mrLPOyj333JNvfOMbGTlyZAYOHJgkefrpp3Pddddlgw02yPHHH/+hZwEAAAAA4KOjSb4IdL/99suwYcNy2WWX5bDDDvvQr//+97+fO++8M0nSo0ePnHLKKas97oorrkiPHj1WXPOMM87IVVddle222y77779/Fi1alAceeCDLli3LLbfcko022qj+bwoAAAAAgBavSaJ5kmy22Wa555576vXaOXPmrPjn5fF8dS666KIV0TxJvvvd72a77bbL97///TzwwAOpqanJvvvum/PPPz+77757vWYBAAAAAOCjo0mi+fz58/Pcc8+lQ4cO9Xr9RRddlIsuuqherx09enRGjx5dr9cCAAAAAPDRVvVoPn369DXumzdvXl599dVceeWVeeutt/K5z32u2pcHAAAAAIB6q3o079evXyqVyvseUxRFttxyy1x++eXVvjwAAAAAANRb1aP5iBEj1hjN27Vrl0022SR77rlnPve5z9X78SwAAAAAANAQqh7NH3300WqfEgAAAAAAGkWbph4AAAAAAACaC9EcAAAAAABKVX88y3HHHVfv11Yqlfz4xz+u4jQAAAAAALD2qh7Nx44dmyQrvgy0KIqV9q9p+/J9ojkAAAAAAE2l6tH8kUceyc9//vNce+212XXXXfMv//Iv6dOnT5Jk+vTp+elPf5qnn346J598co444ohqXx4AAAAAAOqt6tG8trY21113XX70ox+t9lEtp556aq6//vqceOKJOfjggzNy5MhqjwAAAAAAAPVS9S8CveSSS7LTTju977PNx4wZk5122imXXHJJtS8PAAAAAAD1VvVoPmXKlGy++eYfeNzmm2+e3/3ud9W+PAAAAAAA1FvVo3n79u0zadKk9z2mKIpMmjQp7du3r/blAQAAAACg3qoezffff/+8+uqrOf300zN//vxV9s+fPz9f+tKX8uqrr2b//fev9uUBAAAAAKDeqv5FoJdddlkefvjhXH311bn11ltz8MEHp0+fPqlUKnnzzTdz9913Z86cOenZs2cuvfTSal8eAAAAAADqrerRvG/fvnn66adz8skn54EHHsjNN9+8yjH77rtvrr322vTr16/alwcAAAAAgHqrejRPki222CL33Xdffv/73+c3v/lN3n777RRFkU033TS77bZb+vfv3xCXBQAAAACAddIg0Xy5LbbYIltssUVDXgIAAAAAAKqmQaN5krz22muZPXt2unfvnkGDBjX05QAAAAAAoN7aNMRJ58+fn3POOSfdu3fPVlttld133z2XXXbZiv3XX399hg4dmsmTJzfE5QEAAAAAoF6qHs1ra2uz55575oorrkj79u0zcuTIFEWx0jEjRozI5MmTM27cuGpfHgAAAAAA6q3q0fxb3/pWJk6cmBNPPDFvvPFG/ud//meVY/r375+tttoqDz74YLUvDwAAAAAA9Vb1aD5u3Lj069cvV199ddq3b7/G4/r27ZsZM2ZU+/IAAAAAAFBvVY/m06dPz7Bhw9K2bdv3PW6DDTbInDlzqn15AAAAAACot6pH886dO2f27NkfeNwbb7yR7t27V/vyAAAAAABQb1WP5sOGDcuzzz6bt956a43HTJ06NS+88EKGDx9e7csDAAAAAEC9VT2an3rqqZk/f35GjRqV119/fZX9b775Zo455pgsW7Ysp556arUvDwAAAAAA9Vb1aH7ooYfmzDPPzPPPP58tt9wyn/jEJ1KpVHL//fdnhx12yMCBA/PCCy/k7LPPzl577VXtywMAAAAAQL1VPZonyZVXXpmf/exn2WabbfK///u/KYoib7/9diZNmpT+/fvnpptuyqWXXtoQlwYAAAAAgHpbr9onfPfdd1OpVHLEEUfkiCOOyKxZs/Lmm29m6dKl6d27d3r16lXtSwIAUGVFUaSurq6px6AJderUKZVKpanHAACARlf1aN6tW7fsvPPOefrpp5MkPXv2TM+ePat9GQAAGlBdXV26dOnS1GPQhObNm5fOnTs39RgAANDoqv54lq5du2aLLbao9mkBAAAAAKDBVf1O8+233z7Tpk2r9mkBAGgivU+9OZWaDk09Bo2gWLwgM75/dFOPAQAATarq0fycc87JwQcfnNtuuy2HH354tU8PAEAjq9R0SJt2onlrsKypBwAAgGag6tG8Y8eOOeGEE3LkkUfmkEMOyaGHHpo+ffqkQ4fV/4vWiBEjqj0CAAAAAADUS9Wj+V577ZVKpZKiKHLXXXflV7/61fsev3Tp0mqPAAAAAAAA9VL1aH7MMcekUqlU+7QAAAAAANDgqh7Nx44dW+1TAgAAAABAo2izrifYZ5998p//+Z+r3ffuu+9mwYIF63oJAAAAAABoFOsczR999NG8/PLLq9234YYb5otf/OK6XgIAAAAAABrFOkfz91MURYqiaMhLAAAAAABA1TRoNAcAAAAAgJZENAcAAAAAgJJoDgAAAAAAJdEcAAAAAABKVYnmN9xwQ9q2bbvKj0qlssZ9bdu2zXrrrVeNywMAAAAAQFVUpVoXRdGorwMAAAAAgIawztF82bJl1ZgDAAAAAACanGeaAwAAAABAyUPFAQAAWrGiKFJXV9fUY9DI/n7dO3XqlEql0sQT0Rhqa2ubegSAFkE0BwAAaMXq6urSpUuXph4DAKDZ8HgWAAAAAAAoudMcAACAJEnvU29OpaZDU49BI1haNzdvX3dCEuvemvz9ugOwZqI5AAAASZJKTYe0aSeetgbLFv//dbburcffrzsAa+bxLAAAAAAAUBLNAQAAAACgJJoDAAAAAEBJNAcAAAAAgJJoDgAAAAAAJdEcAAAAAABKojkAAAAAAJREcwAAAAAAKInmAAAAAABQEs0BAAAAAKAkmgMAAAAAQEk0BwAAAACAkmgOAAAAAAAl0RwAAAAAAEqiOQAAAAAAlERzAAAAAAAoieYAAAAAAFASzQEAAAAAoCSaAwAAAABASTQHAAAAAICSaA4AAAAAACXRHAAAAAAASqI5AAAAAACURHMAAAAAACiJ5gAAAAAAUBLNAQAAAACgJJoDAAAAAEBJNAcAAAAAgFKLjebPP/98LrvssowaNSq9evVKpVJJhw4d1nj8RRddlEqlssYf5557biNODwAAAABAc7ReUw9QXxdffHF++ctffujX7bbbbhkwYMAq24cNG1aNsQAAAAAAaMFabDQfPnx4tt122+y4447Zcccds/HGG6/V60444YSMHj26YYcDAAAAAKBFarHR/JxzzmnqEQAAAAAA+Ihpsc80BwAAAACAamuxd5rX18MPP5zJkydnwYIF6d27dw466CDPMwcAAAAAIEkrjOY33XTTSj+/4IIL8pnPfCZjx45Nly5dmmgqAAAAAACag1YTzQcMGJArrrgiBx10UPr27Zs5c+bk8ccfz9lnn53bb789S5cuzZ133rlW5xo8ePBqt0+bNi39+/ev5tgAAAAAADSiVhPNjz766JV+3rlz5xx11FHZe++9s80222T8+PF56qmnsuuuuzbRhAAAAAAANLVWE83XZJNNNsmYMWNyxRVX5L777luraD516tTVbl/THegAAAAAALQMbZp6gOZg4MCBSZKZM2c28SQAAAAAADQl0TzJnDlzksQXgQIAAAAAtHKtPpoXRbHiC0CHDRvWxNMAAAAAANCUWkU0nz17dm688cYsXLhwpe3z5s3LySefnAkTJmTjjTfOYYcd1kQTAgAA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T705lZoOTT0GjWBp3dy8fd0JSax7a/L36w4AAADwUSSaU1WVmg5p0048bQ2WLf7/62zdW4+/X3cAAACAjyKPZwEAAAAAgJJoDgAAAAAAJdEcAAAAAABKojkAAAAAAJREcwAAAAAAKInmAAAAAABQEs0BAAAAAKAkmgMAAAAAQEk0BwAAAACAkmgOAAAAAAAl0RwAAAAAAEqiOQAAAAAAlERzAAAAAAAoieYAAAAAAFASzQEAAAAAoCSaAwAAAABASTQHAAAAAICSaA4AAAAAACXRHAAAAAAASqI5AAAAAACURHMAAAAAACiJ5gAAAAAAUBLNAQAAAACgJJoDAAAAAEBJNAcAAAAAgJJoDgAAAAAAJdEcAAAAAABKojkAAAAAAJREcwAAAAAAKLW6aL5gwYJceOGFGTRoUDp06JBNN900xx13XGbMmNHUowEAAAAA0MRaVTRfsGBB9t1333z961/PvHnz8qlPfSqbbbZZrr/++gwdOjTTpk1r6hEBAAAAAGhCrSqaf/Ob38xTTz2V4cOH59VXX824ceMyYcKEXHnllZk1a1aOO+64ph4RAAAAAIAm1Gqi+eLFi/O9730vSXL11VenS5cuK/adddZZGTJkSB5//PE8//zzTTUiAAAAAABNrNVE8yeffDJz585N//79s/3226+y//DDD0+S3HXXXY09GgAAAAAAzUSriea//e1vkyRDhw5d7f7l25cfBwAAAABA67NeUw/QWKZPn54k6d2792r3L9++/Djqp1i8IMuaeggaRbF4wUr/bN1bB+veOln31sm6t07WvXWy7q2TdW+drHvrZN1bp79fdz68SlEURVMP0Rj+7d/+LT/84Q/zta99Ld/4xjdW2f/6669n4MCBGTRoUF555ZX3PdfgwYNXu/3ll19OTU1N+vfvX5WZW4ply5bl5ZdfbuoxAAAAAIB/sNVWW6VNm1bzwJEkybRp01JTU5P33nuvXq9vNXeaL/+7gUql8r7710WlUklNTc06n6eladOmTdq3b58kre4vDFq7adOmJbHurY11b52se+tk3Vsn6946WffWybq3Tta9dbLurdPydW9twTxJampq0rlz53q/vtVE8/XXXz9JUltbu9r9dXV1SZIuXbp84LmmTp1avcE+Ipbffe9/m9bFurdO1r11su6tk3Vvnax762TdWyfr3jpZ99bJurdO1r3+Ws1fM/Tp0ydJMmPGjNXuX759+XEAAAAAALQ+rSaab7vttkmSSZMmrXb/8u1DhgxptJkAAAAAAGheWk0032233dK1a9dMmzYtL7zwwir7b7vttiTJIYcc0tijAQAAAADQTLSaaN6uXbuceuqpSZJTTz11pWebf/vb386UKVOy++67Z8cdd2yqEQEAAAAAaGKt5otAk+T888/Pgw8+mKeeeioDBw7MHnvskTfffDMTJkxI9+7dc/311zf1iAAAAAAANKFKURRFUw/RmObPn59LL700t956a956661suOGGOfDAA3PxxRdns802a+rxAAAAAABoQq0umgMAAAAAwJq0mmeaAwAAAADABxHNAQAAAACgJJoDAAAAAEBJNAcAAAAAgJJoDgAAAAAAJdEcAAAAAABKojmrtWDBglx44YUZNGhQOnTokE033TTHHXdcZsyY8aHPNXfu3HzpS19K37590759+/Tt2zdnnHFG5s6dW/3BWSfVWvfHHnss/+f//J+MHDkyPXv2TKVSyVZbbdVAU7OuqrHuc+fOza233pqjjjoq//RP/5TOnTtn/fXXz84775yrrroqixcvbsB3QH1UY92XLFmSiy66KCNHjswWW2yR9ddfPx06dMjAgQPzxS9+MdOnT2/Ad0B9VPP397/32muvpWPHjqlUKjnwwAOrNC3VUq1179evXyqVyhp/vPzyyw30DqiPan/eX3/99Zx44onp169fOnTokJ49e2bXXXfN5ZdfXuXJWRfVWPexY8e+72d9+Y8bb7yxAd8JH0Y1P+/33ntvDjrooPTo0SM1NTX52Mc+lkMOOSQPPfRQA0zOuqjmut9zzz3Zf//9061bt3Tq1CnbbLNNLr/88ixZsqQBJqe+nn/++Vx22WUZNWpUevXqlUqlkg4dOtT7fHrd+6sURVE09RA0LwsWLMi+++6bp556Kptsskn22GOP/OEPf8izzz6bnj175umnn07//v3X6lzvvPNOhg8fntdeey1bbLFFdthhh0ydOjVTp07NgAED8swzz6R79+4N/I5YG9Vc9+222y6//e1vV9q25ZZb+pfpZqha637++efnkksuSZs2bbL99ttnwIABmTVrVn7zm99k4cKF2X333XPfffelU6dOjfCu+CDVWvd58+Zl/fXXT5cuXTJkyJBsuummWbRoUSZPnpzp06ena9euefjhhzN06NBGeFd8kGr+Ov+P9tlnnzz66KMpiiIHHHBA7r333ipPT31Vc9379euXN998M8cee+xq91966aXZZJNNqjk+9VTtz/udd96Zo446KgsXLsz222+fQYMG5Z133snvfve7dO7cOa+//noDvhvWVrXW/cknn8yPfvSj1e7761//mvHjxydJpk2bli222KKab4F6qObn/dvf/na+/OUvp1KpZLfddkuvXr3y+9//Ps8991yS5Nprr81JJ53UkG+HtVTNdf/Wt76Vc889N23atMnOO++cnj175plnnsmf//znfPKTn8yvf/3rrLfeeg38jlgbn/70p/PLX/5ypW3t27fPggULPvS59Lq1UMA/uOCCC4okxfDhw4v33ntvxfYrr7yySFKMGDFirc/1r//6r0WSYtSoUcXixYtXbD/ttNOKJMUxxxxT1dmpv2qu+1e+8pXikksuKe6///5i0qRJRZJiyy23bIixWUfVWvdLL720OO+884oZM2astP3VV18t+vTpUyQpvvrVr1Z1duqvWuu+ePHi4sknn1zp1/eiKIolS5YUX/3qV4skxc4771zV2am/av46//d+9KMfFUmKf/u3fyuSFAcccEC1RqYKqrnuffv2LfzrQ8tQzXWfPHly0a5du6J79+7FE088sdK+pUuXFs8991zV5mbdNNSv83/vmmuuKZIUu+222zqfi+qo1rr/+c9/Ltq1a1e0a9dulc/6bbfdVlQqlaJTp04rXYOmU611f/bZZ4tKpVLU1NQU991334rtc+fOLUaMGFEkKS677LKqz0/9XHbZZcV//Md/FHfddVfxxz/+sUhStG/fvl7n0us+mD/1spJFixYV3bp1K5IUkyZNWmX/kCFDiiTFxIkTP/BcM2fOLNq0aVPU1NQUf/zjH1fat2DBgqJnz55F27ZtV9lH46vmuv+jN954QzRvphpy3f/erbfeWiQp+vXrt07noToaa90XL15cdOjQoUhSzJs3b53OxbprqHX/05/+VGy44YbFfvvtVzzyyCOieTNT7XUXzVuGaq/7HnvsUSQp7rrrrmqPShU11u/vu+66a5Gk+MEPfrBO56E6qrnud911V5GkOPDAA1e7f9ttty2SFBMmTFjnuVk31Vz3448/vkhSnHjiiavse/HFF4skRc+ePYslS5ZUZXaqq77RXK9bO55pzkqefPLJzJ07N/3798/222+/yv7DDz88SXLXXXd94LnuueeeLFu2LCNGjMjHP/7xlfa1b98+hx56aJYuXZp77rmnOsNTb9Vcd1qOxlr3bbfdNkny9ttvr9N5qI7GWvdKpZI2bdqkTZs2/nPOZqCh1v3000/P/Pnzc+2111ZlTqrL7++tUzXX/aWXXsoTTzyRQYMG5ZBDDqn6rFRPY3ze33jjjTz11FNp165djjjiiHqfh+qp5rq3b99+ra650UYbfbghqbpqrvvzzz+fJNlrr71W2Td48OD06NEjs2bNylNPPbVuQ9Os6HVrRzRnJcufQ72m588u3/6Pz6tu6HPRsKxV69RY6/773/8+SbLxxhuv03mojsZY96Ioctlll6Wuri777LPPWv9LGA2nIdb97rvvzrhx43LeeedlwIAB6z4kVddQn/fLL788J510Us4444z893//d2bNmrVug1JV1Vz35V/8t//++2fBggW54YYbctppp+X000/Pj370o7z77rtVmpp11Ri/v998881JkpEjR2bDDTes93monmqu+4477rji+2iefPLJlfbdcccdmTJlSnbddVe/5zcD1Vz32traJFnjZ3r5X5JoAR8tGtDacesXK5k+fXqSpHfv3qvdv3z78uMa61w0LGvVOjXWul911VVJkk996lPrdB6qo6HW/Zxzzsmf/vSnvPvuu5kyZUqmTZuWrbbaKv/93/+9bgNTFdVe99ra2pxyyinZcsstc84551RnSKquoT7vZ5999ko/P/PMM/Nf//VfOf744+sxJdVWzXWfOnVqkqRjx47Zbrvt8sorr6y0/6tf/Wpuv/32jBgxYl1Gpgoa4891t9xyS5LkX//1X+t9DqqrmuverVu3/OhHP8rnP//5jBgxYsUXgb7xxht57rnncuCBB2bs2LFVm536q+a69+zZM6+99lrefPPNVfYtW7Ysb731VpLkD3/4Qz2npTnSgNaOO81Zybx585IknTp1Wu3+zp07r3RcY52LhmWtWqfGWPcf/OAHefDBB9OtW7ece+659T4P1dNQ63777bfnhhtuyJ133plp06blE5/4RMaNG5fNN9983QamKqq97ueff37efPPNXHvttWnXrl11hqTqqr3u//zP/5w77rgjb775Zurq6vLiiy/mrLPOysKFC3PCCSdk/PjxVZmbdVPNdZ8zZ06S5Lvf/W7+8pe/5I477sjcuXPzyiuv5Kijjsrs2bPz6U9/OjNnzqzS9NRXQ/+57tlnn80rr7ySDTfcMCNHjqzfkFRdtdf98MMPzz333JPu3bvnySefzLhx4/Lss8/mYx/7WPbZZ5907969OoOzTqq57nvuuWeS5IYbblhl37hx4zJ//vwkyXvvvVevWWmeNKC1I5qzkqIokvztWbTvt7+xz0XDslatU0Ov+2OPPZYzzjgjlUolP/nJT7Lpppuu0/mojoZa99dffz1FUWTWrFm599570759+wwbNmy1fwCn8VVz3SdOnJjvfe97OeaYY7L33ntXZT4aRrU/7//1X/+Vww47LH369EnHjh0zePDgXHnllbnmmmuSxH910ExUc92XLl2aJFmyZEluvvnmHHbYYenatWsGDRqUW265JTvuuGPmzJmTq6++et0HZ5009J/rlj+a5cgjj/SXpc1Itdf9yiuvzP77758RI0ZkypQpmTdvXqZMmZLhw4fnK1/5So488sh1npl1V811/+IXv5iuXbvmmWeeyejRo/P6669n7ty5GTduXL74xS+u+G6iNm3kw48SDWjt+H89K1l//fWT/P/nWv2jurq6JEmXLl0a9Vw0LGvVOjXkuk+ZMiWf/vSns2jRolx11VU57LDD6j8oVdXQn/cePXrkgAMOyEMPPZRNN900J5988or/rJOmU611X7JkSU488cR07do1V1xxRXWHpOoa6/f3E044IR/72Mfy6quv5o033linc7HuGuLP87169conP/nJVfaPGTMmSfLoo4/WZ1SqqCE/70uWLMm4ceOSeDRLc1PNdX/sscfy7//+79luu+3yi1/8Ittss006d+6cbbbZJrfddlu233773H777bn//vur9waol2que69evXLnnXdmo402yg033JCBAwdmww03zL/8y79ks802y3HHHZdkzc88p2XSgNaOZ5qzkj59+iRJZsyYsdr9y7cvP66xzkXDslatU0Ot+7Rp03LAAQdk7ty5ueiii3Laaaet26BUVWN93rt27ZpDDjkk11xzTR544IEVf+CmaVRr3WfMmJHJkydn4403zmc/+9mV9s2dOzfJ3/4T/r322itdunTJr371q3WcnHXRWJ/3Nm3apH///vnzn/+cmTNneixTE6vmuvfr1y9J0rdv3/fd/+c///lDTkm1NeTn/f7778+f//znbLHFFtl1113rPyRVV811v/HGG5Mko0aNWuWu4rZt22bUqFF54YUX8uijj672L9FoPNX+vO+9996ZNm1axo0blylTpqRNmzbZeeed89nPfjbHHHNMkmTw4MFVmJzmQgNaO6I5K9l2222TJJMmTVrt/uXbhwwZ0qjnomFZq9apIdb97bffzv77758//vGPOeOMM3LhhReu+6BUVWN+3nv06JEkmTVr1jqfi3VT7XX/4x//mD/+8Y+r3Tdnzpw89thj6dq1az0mpZoa8/O+/NnXrf2OpOagmuu+/fbbJ0n+8pe/rHb/O++8k8S6NwcN+Xlf/miWo48+up7T0VCque7LI9kGG2yw2v3Lt6/p1wMaT0N83rt165YvfOELK21bsmRJHnvssbRp08YXPn/EaEBrqYC/s3DhwqJr165FkmLSpEmr7B8yZEiRpHj22Wc/8Fxvv/120aZNm6Jdu3bFn/70p5X2LViwoOjZs2fRpk2bYubMmVWbn/qp5rr/ozfeeKNIUmy55ZbVGJUqqva6/+Uvfyk+8YlPFEmKMWPGFMuWLav2yFRBQ37e/9Gee+5ZJCl+8YtfrPO5WDeNse6PPPJIkaQ44IAD1mVUqqixPu8vvvhiUalUik6dOhULFy5cp3Ox7qq57rW1tUXnzp2LmpqaYvr06avsP/7444skxfHHH1+V2am/hvq8v/fee0WnTp2KJMWrr75arXGpkmqu+zHHHFMkKY455pjV7j/66KOLJMWll166znOzbhrr9/exY8cWSYqDDz54nc5Dw0lStG/f/kO/Tq9bO6I5q/ja175WJCl23XXXYt68eSu2X3nllUWSYvfdd1/p+O9973vFlltuWZx77rmrnOvzn/98kaT4zGc+UyxevHjF9tNPP71IUhx99NEN90b4UKq57n9PNG/eqrXutbW1xS677FIkKY444ohiyZIljTI/9VOtdf/lL39Z3H333av8BUltbW1x3nnnFUmKjTfeuHjvvfca7s2w1hrq1/nlRPPmqVrrfu+99xYTJ05c5fy//e1vi6233rpIUpx++ukN8yb40Kr5eT/33HOLJMXIkSNXOtc999xTrLfeekWlUikmTJjQcG+GtdYQv87fcMMNRZJil112abC5WTfVWvc77rijSFK0bdu2+J//+Z+V9o0fP75o06ZN0aZNm+Lll19uuDfDWqvm533ixImr/Hn+/vvvL9Zff/2iQ4cO1rwZ+6BortetG9GcVcyfP7/YeeediyTFJptsUhxxxBErft69e/fitddeW+n4Cy+8sEhSHHvssauca9asWUX//v2LJEX//v2LI488csWdqP379y9mzZrVSO+KD1LNdf/hD39Y7LzzzsXOO+9cbLfddkWSokOHDiu27bzzzsXzzz/fSO+M91Otdf/Sl7604g/ZRx11VHHssceu9gfNQ7XWffn2TTfdtBg5cmRx1FFHFfvss0+x0UYbFUmKrl27Fo8//ngjvjPeTzV/nV8d0bx5qvbnvW/fvsU+++xTHHnkkcVOO+1UrLfeekWSYs899yxqa2sb8Z3xfqr5eZ8/f36x2267rTjXpz/96WLXXXct2rRpUyQpLrnkkkZ6V3yQhvh1fv/99y+SFFdffXUDT099VWvdly1bVnz2s58tkhRJih122KH47Gc/W+ywww4rtvm8Nx/V/Lz37du36N27d3HQQQcV//Iv/1Jsv/32RZKiY8eOxa9+9atGekesjV/96lcrdZUkRaVSWWnb36+ZXrduVv52B0jSoUOHPPLII7ngggvSqVOnjB8/Pn/4wx9y7LHH5oUXXsiAAQPW+lw9evTIc889l9NOOy2LFi3KnXfemb/+9a859dRT8+yzz6543i1Nr5rrPmPGjEyYMCETJkzI5MmTkyQLFixYsW3ChAl59913G+id8GFUa92XP8t26dKlufXWW3PDDTes9gfNQ7XWfdSoUTnrrLPSq1evPPfcc/n5z3+e5557Ln379s1Xv/rVvPTSS9ljjz0a+N2wtqr56zwtR7XW/YADDshxxx2XDTbYIL/97W9z++235/XXX8/uu++eH/7wh3nooYfSqVOnBn43rK1qft47dOiQhx9+OJdcckm6deuWe+65J1OnTs3ee++dX/3qVznvvPMa8J3wYVT71/mZM2fm4YcfTk1NTY488sgGmpp1Va11r1QqGTduXH784x9nxIgRef3113PnnXfmD3/4Qw4++ODcc889Pu/NSDU/7yeddFJ69eqVCRMm5I477shf/vKX/Nu//VtefPHFjBw5sgHfBR/WrFmzVuoqSVIUxUrb1vb7pPS6D1YpiqJo6iEAAAAAAKA5cKc5AAAAAACURHMAAAAAACiJ5gAAAAAAUBLNAQAAAACgJJoDAAAAAEBJNAcAAAAAgJJoDgAAAAAAJdEcAAAAAABKojkAAAAAAJREcwAAAAAAKInmAAAAAABQEs0BAFhntbW1+c53vpO99947H//4x9OuXbtsuOGGGT58eP7jP/4j06dPb9R5+vXrl0ql0qjXXFtz587NBRdckO222y6dO3dOx44d06dPn4wYMSJf+9rXMnny5JWOHzt2bCqVSi666KIGnevRRx9NpVLJ6NGjm+T6SfKHP/whlUole+21V4Nf64P84he/yAEHHJAePXqkpqYmH/vYxzJkyJAcf/zxueWWW5p6PAAAGtB6TT0AAAAt2zPPPJNRo0Zl5syZ6dSpU3bZZZd8/OMfz1//+tc899xzeeaZZ/Kf//mf+dWvfpX99tuvqcdtUm+++WZGjBiR6dOnZ/3118+uu+6aj33sY5k9e3YmTpyYJ554Iu+8805+8IMfNPWozcrYsWMzZsyYXHjhhY0S70ePHp0bbrghSbLDDjtk8803z9KlSzN16tT85Cc/yS233JLPf/7zDT4HAABNQzQHAKDepkyZkn322Sfz58/POeeckwsuuCCdO3desX/ZsmUZP358zj777MyYMaPR5nrooYeyePHiRrve2jr11FMzffr0HHLIIbn55pvTtWvXFfuWLFmSBx54IH/6059Wes1hhx2WXXbZJT169GjQ2Xbaaae89NJLK83U2Hr16pWXXnopnTp1arIZbr/99txwww3ZcMMNc//992eHHXZYaf9rr72WH//4x000HQAAjUE0BwCgXoqiyNFHH5358+fnoosuyoUXXrjKMW3atMmoUaOy77775q233mq02fr3799o11pb8+fPz7333psk+e53v7tKnF5vvfVy0EEHrfK6rl27NkrI7tSpU7baaqsGv877qampafIZ7rjjjiTJF7/4xVWCeZIMHDgwl112WWOPBQBAI/JMcwAA6uW+++7L7373u/Tu3Ttf+9rX3vfYrl275hOf+MRK2+rq6nLxxRfnE5/4RDp27JiuXbtmxIgR+dnPfrbac7zzzjs577zzMnjw4HTp0iVdu/6/9u49qOo6/+P48wABooCGEoiVA5jstiCMBBoqmiagFGiW45BCLSLbppujqyZpramks+RlM0oqjVob1zbwwmpmhhd2XfBCXjba9ZJL6gIqoBKGwvf3h5yzng7IRX7btr0eM8zo5/45348zzvt8eH/due+++5g0aRKFhYVWbZvKaX5zvuza2lrmzJnDvffei5OTE/7+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acSIEQDk5uZ2+NhNOXHiBPDvwOp/q8rKSqDpVDeVlZWWHNsdxdHREYDr16/fsl1ycjL29vZkZWW1OzVLS7n6m3pG5nOyevXqFsc35xfPy8ujqqrKpt58/s3pelrjP31ORURERP7XKWguIiIiIu1iMpl4//33cXZ25qWXXuL555+npqbGqo1hGGzatInQ0FDLSwg7d+7M008/TUNDA7/85S+t+vz9739n4cKFAEydOtVSnpuba/WCR7NDhw5RVlaGq6sr3bp16/A9jhs3joCAANauXcuSJUu4du2aVX1dXR0fffSR5cWXt1JVVUV4eDg5OTk241y7do2FCxdSXFxMp06diI6O7tB9dDR/f3/s7OzYuXOn1RcfV69eJTU1lYsXL3bofOYA9ZdffnnLdj4+PsTGxrJ//34KCgro16+fJe98ayUnJ7No0SL+9a9/2dQVFRXx8ssvAzB27FirPt27d2fz5s289tprNoH3PXv2UF1dDdx4Sevo0aO5fPkyv/rVr6zOwl/+8hcyMzOxt7fnmWeeafWaBwwYwPDhw/nss8+YPn06V65csapvaGhg+/btlpeQioiIiMitKT2LiIiIiLRbcHAwO3bs4LHHHuOVV15h5cqVDBw4kLvuuovq6mr2799PWVkZzs7O3H333ZZ+6enp7Nu3j08++QRfX18iIyOpqalh586dXL16lWnTpjF69GhL+/z8fFasWIGPjw8hISG4ublx9uxZ9u7dS0NDAy+//DJ33HFHh+/PwcGBnJwcoqKimDNnDitWrCAoKAg3NzdKS0spKSmhqqqKnJwcAgMDWxyvsLCQsWPH4ubmRv/+/fHy8qKqqori4mLOnTuHvb09mZmZeHl5dfheOpKnpyc///nPycrKol+/fjz00EN06tSJPXv2UF9fT1JSEmvXru2w+QYMGICnpycffvghQ4cOxdfXFzs7O55++mkefPBBq7bmvPdAq/PC3+zChQu88847zJ8/n8DAQPr06QPcuGF+6NAh4EaO+1/84heWPnfeeSd/+MMfiIuLY+rUqSxfvpz+/fvzzTffcOzYMU6dOsWpU6dwd3cH4M0332Tw4MFkZ2eza9cuBg4cSEVFBfn5+dTX15ORkUFQUFCb1v373/+ekSNHsnz5crKzswkODqZHjx6cOXOGL7/8koqKCpYtW2a56S4iIiIizVPQXERERERuS0REBMePH+fNN99k8+bNHD58mMrKSrp06ULfvn1JTU0lOTnZKpWHq6sru3btIiMjg/Xr17Np0yYcHR0JDQ3lmWeeYcKECVZzJCUl4eDgwO7duyksLKS6uhovLy9GjRrF9OnTGTp06P/b/gICAiguLmblypXk5OSwd+9eDMPA29ubIUOGMGbMGEt6jFtxd3fnz3/+M9u2bSM/P5+TJ09SUFCAvb0999xzD6NHj2bq1KltDpZ+XzIzMwkICODtt9/m008/xd3dnREjRrBo0SLWrFnToXM5OzuTl5fH3LlzKSwsZPfu3RiGwaBBg2yC5pGRkdjb2+Po6EhCQkKb53rttdcYNWoU27dv529/+xvbt2+ntrYWDw8PoqOjSUhIICEhwSZ10LBhwyguLmbJkiV8/PHH5Obm4ubmhp+fHykpKVZfhPj4+FBUVER6ejq5ubl89NFHuLi4MHz4cGbMmMHIkSPbvO677rqLffv28cYbb7B+/XqKioqoq6vD29ubkJAQ4uLieOKJJ9o8roiIiMiPkcloKWmfiIiIiIjID8S6detISEggMTGxQ2+7i4iIiMiPh4LmIiIiIiLyP+HatWs88MADfP755xQWFvLAAw9830sSERERkR8gpWcREREREZEftE2bNpGbm0thYSHHjh1jzJgxCpiLiIiISLvZfd8LEBERERERuR0HDx5kzZo1nD17loSEBN55553ve0kiIiIi8gOm9CwiIiIiIiIiIiIiIo1001xEREREREREREREpJGC5iIiIiIiIiIiIiIijRQ0FxERERERERERERFppKC5iIiIiIiIiIiIiEgjBc1FRERERERERERERBopaC4iIiIiIiIiIiIi0khBcxERERERERERERGRRgqai4iIiIiIiIiIiIg0UtBcRERERERERERERKSRguYiIiIiIiIiIiIiIo0UNBcRERERERERERERaaSguYiIiIiIiIiIiIhIIwXNRUREREREREREREQaKWguIiIiIiIiIiIiItLo/wAlcFUptrTwSAAAAABJRU5ErkJggg==", 776 | "text/plain": [ 777 | "
" 778 | ] 779 | }, 780 | "metadata": {}, 781 | "output_type": "display_data" 782 | } 783 | ], 784 | "source": [ 785 | "import matplotlib.pyplot as plt\n", 786 | " \n", 787 | "n, bins = np.histogram(results, bins=np.arange(0, 1.1, 0.1))\n", 788 | "plt.figure(figsize=(10, 6), dpi=150)\n", 789 | "plt.bar(bins[:-1], n, width=0.1, align='edge', edgecolor='black')\n", 790 | "plt.xticks(np.arange(0, 1.1, 0.1))\n", 791 | " \n", 792 | "plt.xlabel('Cosine Similarity Score')\n", 793 | "plt.ylabel('Frequency')\n", 794 | "\n", 795 | "#plt.title('Similarity Score Distribution between Generated and Reference Output ', fontweight = \"bold\")\n", 796 | "plt.tight_layout()\n", 797 | "plt.savefig('similarity_score_distribution_140samples.png')\n", 798 | "plt.show()\n" 799 | ] 800 | }, 801 | { 802 | "cell_type": "code", 803 | "execution_count": 145, 804 | "metadata": {}, 805 | "outputs": [ 806 | { 807 | "data": { 808 | "image/png": "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qswuo8FiwoIcwbc7FRcX69prr1Vpaanmz5+v2267zfHZvHnzdM899+iaa67R9u3bHWcmzpkzRzabTatWrVL//v1rzbdq1SolJCQ4xrNmzVJMTIw2bNjgCNIl+/+XpUuX1nr3/fff19NPP61+/frpo48+cjxfWVmpO+64Qy+99JJmzJihOXPmSJKWL1+uFStW6K9//as++uijWuFyYWGhtm/fbsRvkV9r9jvNly1bpqFDh+rkk0/W6tWra/0hslqtGjhwoNatW6evv/5a5513XqPra+pPNwAAAAAAAID6Ot6u3MLSSvWZ+T8zSmuSDdPPU2x4cKPfr+9O89dff1033nijhgwZou+///6ozwcMGKA1a9bo3Xff1VVXXSVJ6tmzp/bu3auDBw8et46IiAh169ZN69evP+6zffv21YYNG7RlyxZ179691mdlZWVKTU1VWVmZ8vPzFRAQoPfff19XXnml5s2bpwkTJhx3fl/hyZ3mzf7fZbz55puSpFGjRh31Gx0YGKhRo0ZJ0lE/4QEAAAAAAADgn5YvXy5Juvbaa+v8fMyYMbWek6T+/furoKBAN910k3799dc/nb9///7asGGDJk+erB07dhzzuf3792vDhg064YQTjgrMJSksLEwDBgxQQUGBtm3bJskesgcEBGjOnDn6z3/+o6Kioj//xeIozT4037VrlyQpJiamzs9r7h84cMBjNQEAAAAAAAAwz549eySpVusUVzX3a56TpMcff1x9+vTRa6+9ppNOOkktW7bUX//6V73++usqLy+v9f5zzz2n1NRUzZ49W126dFFSUpKuuuoqLVy4UNXV1Y7nsrKyJEm//fabLBZLnV+ff/65JDnOauzWrZvmzJmj3NxcXX311YqPj1ffvn01ceJEumDUU7Pvad6mTRtJUlpaWp2fr169WtKxv0FwbLlF5XpvdbZWZhzQ4fIqRYUG6dROCRo9IFkto0PNLg8AAAAAAKDZigkL0obpjW9FbJaYMM/Gmcfrn+76eXJystLS0vTdd9/p888/17Jly/TZZ5/p008/1ZNPPqkVK1YoPj5ektS7d29t3rxZX331lb744gstW7ZM7733nt577z2dccYZWrx4sUJCQmS1WiVJbdu2PW7raNee6ffcc4+uuOIK/fe//9U333yj5cuX66mnntK8efP0zDPP6Pbbb2/sb0mz0GxC82ef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5MiRatOmjUJCQpSQkKCePXvq2muv1csvv6yKigqzS3SrzMxMWSwWDR061NQ6hg4dKovFoszMTFPr+CNCc3hMeEigBndKcIyXpu+XrFZpwQKpWzdp1izzigMAAAAAAECzMH36dJ133nn65JNP1LJlS11yySUaPny4goOD9e677+pvf/ubDhw4YHaZTbJ06VJZLBaNHTvW7FJ8UpDZBaB5Gda9pZZtzZUkLUnfrynbv5Huusv+4VNPSbfdJiUlmVghAAAAAAAA/FVaWpoefvhhhYSE6OOPP9aFF15Y6/Pdu3fr5ZdfVmhoqEkVwhuw0xweNfTIYaCStPX3w9o98kqpdWv7jdJSado0kyoDAAAAAACAv/v4448lSaNHjz4qMJekpKQkzZgxQ/Hx8Z4uDV6E0BwelZIYqU6JkY7xkj1l0syZzgcWLJA2bPB8YQAAAAAAAPB7ubn2DggtW7as9zsWi0UpKSmqqqrSI488oi5duig8PFwnnHCCXn/9dcdz3333nYYNG6aYmBjFx8fruuuuU35+fp1z5ufna9KkSeratavCwsLUokULnX/++frf//53zDo2b96sa6+9Vm3btlVISIiSkpJ03XXXKT09vdZzY8eO1bBhwyRJb7zxhiwWi+NrxowZR81bWlqqyZMnq2PHjgoNDVWXLl00e/Zs2Wy2OuvIzc3VxIkT1b17d4WFhSk+Pl4XXHCBvv/++2PW/tJLL+mkk05SWFiYkpKSNH78eBUWFh7zebMRmsPjXHebL03fL910k3TCCfYbNpt0330mVQYAAAAAAAB/1r59e0nShx9+6AjQ62v06NGaM2eOOnfurDPPPFMZGRm68cYb9frrr2vhwoUaMWKEioqKdO655yoyMlL//ve/NXLkyKPC5927d2vQoEGaO3euKioqNHLkSPXr10/ffvutRowYoXnz5h219uLFizVgwAC98847ateunS677DK1atVK//73vzVgwAAtX77c8ewZZ5yhESNGSJI6d+6s66+/3vHVt2/fWvNWVFTovPPO00svvaQTTjhBw4YN0+7duzV58mRNq6MjxJYtW9SvXz899dRTslqtuvDCC9W7d2/HDwzeeeedo96ZOHGibr31Vm3btk1nn322Bg8erLffflvDhg1TeXl5g/4feIrFdqwfGcBQvXr1kiRt2rTJ5ErMt3xbrv7v1VWSpPDgQK176FyFff2ldMklzoe++ko68s0NAAAAAACAhqmurnbsQO7evbsCAtg7K0k7duzQiSeeqLKyMsXExGjkyJEaMmSIBg8erJ49e8pisRz1Ts29E088UV9++aUjeF+yZInOPvtstW3bVhUVFXrxxRd12WWXSZIOHTqk0047TZs2bXIEyjUuueQSff755/q///s/vfrqqwoODpYk/fDDDxoxYoTKy8u1du1a9e7dW5JUXFyszp076/fff9f8+fN12223OeaaN2+e7rnnHrVv317bt2939GJfunSphg0bpuuvv14LFiw46teUmZmp1NRUSdKQIUP00UcfKTExUZK97/vgwYMVEhKi33//XVFRUZIkq9Wqvn376tdff9U///lPjR8/3vF7s27dOp177rkqKyvTzp071aqVfdPsihUrdPrpp6tFixb6/vvvHRlpfn6+zj77bG3cuFGSlJGRoZSUlD/9f9eQP9NNzWL5boHHDUptofDgQElSaaVVqzIOSBddJA0d6nxo0iTJajWnQAAAAAAAgOairEwqKKj/V137bwsL6/9+ScnR71dUHP+9sjJDfrmdO3fWJ598onbt2unQoUN68803dcstt+jEE09UmzZtdN9996mgoKDOd5955hlHYC5Jw4YN08knn6y9e/fqoosucgTmkhQTE6O//e1vkqRly5Y57u/cuVOff/65YmJi9MwzzzgCc8m+Q/y2226T1WrV888/77j//vvv6/fff9eQIUNqBeaSdPfdd6t///7atWuXo197QwQEBOiVV15xBOaSNGDAAF1wwQUqKSlRWlqa4/5nn32mX3/9VVdffbXuvPPOWj9g6Nevn6ZNm6bi4mK99dZbjvsvvPCCJOnee+91BNmSlJCQoDlz5jS4Xk8hNIfHhQYF6vQuzm/EJen7JYtFmjvX+dAvv0hvvmlCdQAAAAAAAM3IrFlSfHz9v+rqQ92xY/3fHzfu6Pffeef4782aZdgv+bzzztPOnTv1/vvv65ZbblHv3r0VEBCg/fv3a86cORo4cOBRrVtCQkJ01llnHTVXp06dJEnnnnvuUZ917txZkrR3717HvR9++EGSdOGFFyouLu6od/7v//5Pkmq1W6m5vvbaa+v89YwZM+aod+orJSVF3bp1O+p+zT3X2r/55htJ0siRI+uc64wzzpAkrV692nGv5tc7evToo54/77zz1KJFiwbX7AmE5jDFsB7OwxaWph/5S6h/f8n1m3/qVKm42MOVAQAAAAAAwN+Fhobqiiuu0EsvvaQNGzZo3759evLJJxUREaHt27frgQceqPV8mzZt6mwHEhkZKUlKSko65meufbv37NkjScdsRVJzv+a5xr5TX647513VtGRxrT0zM1OSdOWVV9Y6XLTma8CAAZKkvLy8WrVbLBYlJyfXuU6HDh0aXLMnBJldAJon18NAM/KKlZFXrNTESOmxx6SFC6XycmnPHunZZ6X77zexUgAAAAAAAPi7li1batKkSQoPD9f48eO1aNGiWp/X1eu8IZ/X9/ma+3/WW92oGhr6jvVIK+ULLrjA0bO8Lj169GhwHd6G0BymSIoLV/fW0Ur/vUiStDR9v1ITU+3/nOeuu6RnnpHuvlv6Q58mAAAAAAAAGGjyZGnChPo/Hxt79L2srLp7ndclJOToe9dcIx2j5YdDWFj95m+ioUfO3HPdLW2kdu3aSbIffFmXmt3cbdu2rfc7WVlZR73jDjW70m+77Tb95S9/qdc7bdu2VWZmpnJyctSlS5ejPs/Ozja0RqPQngWmGerSomVJukufqAcekLZulR5/vO6/iAEAAAAAAGCMsDApLq7+X3XtTI6Nrf/7ERFHvx8Scvz3DArNbccJ93fs2CHJGVQbrabv96JFi+o8cLTmEM0hQ4Y47tVcv/3223XOWXPf9Z2QIz+cqKqqanrRR5xzzjmSpP/+97/1fqfm1/vBBx8c9dk333yjAwcOGFKb0QjNYZphLi1aft6Zr5KKI9/EsbHSMfocAQAAAAAAAI01bdo03XfffXXu2t62bZvuvfdeSdKoUaPcsn6nTp100UUXqaioSHfddZcqKysdn/3000+aP3++AgMDNc7lwNTRo0erdevWWr58uV566aVa8z3zzDNavXq12rdvr0svvdRxvyb0T09PN6z2yy+/XD169NCCBQs0e/bsWrVLUkVFhT766CP98ssvjnu33nqrJOnpp5/Wb7/95rh/4MAB3XfffYbVZjRCc5imf8d4RYfaOwRVVFXrpx35JlcEAAAAAAAAf3b48GHNmTNHnTt31gknnKBRo0bpyiuv1ODBg9WjRw/t2LFD/fv31/Tp091Ww4svvqjU1FS9+eab6tq1q66++mqdc845GjJkiIqLi/Xkk0+qd+/ejucjIyP19ttvKzw8XLfeeqsGDBiga665RieffLLuuusuRUZG6p133lFoaKjjnZSUFPXu3VtpaWkaNGiQbrjhBt1888369NNPG113UFCQPv74YyUnJ2vy5Mnq2LGjzj//fI0ePVqDBw9W69atddlllzl260v2neYTJkxQXl6e+vXrp4svvlhXXHGFunbtKkk69dRTG12POxGawzTBgQEa0i3RMV6Svr/uBysqpH/9S1q+3EOVAQAAAAAAwB9NnTpVb775pq655hoFBQVp2bJl+uijj7R9+3adddZZeu6557RixQrFurFlcFJSklavXq17771XQUFB+uijj7RmzRoNHz5cX3/9te65556j3hk+fLhWr16tq6++Wrt27dLChQu1b98+jRkzRmvWrKnVmqXGhx9+qJEjR2rnzp1688039eqrr2rt2rVNqr1Hjx5av369ZsyYoVatWumHH37QokWLlJubqzPPPFOvv/66o41Ljaefflrz589Xly5d9M033+jHH3/U6NGjtWTJklpBvzex2I7XyAeG6NWrlyRp06ZNJlfiXd5Py9F9CzdKsh8O+sP9w2qf2rt0qXTLLdL27VL//tKqVVIAP+sBAAAAAAD4M9XV1Y7WHN27d1cAeQp8XEP+TDc1i+W7BaYa2s15GOjuglJt33+49gOhofbAXJLWrJH+8x8PVgcAAAAAAACguSE0h6laxYTpxKQYx/ioFi2DB0uXX+4cP/CAVFbmoeoAAAAAAAAANDeE5jDdsO6tHNdLtuQe/cATT0jBwfbrrCx7f3MAAAAAAAAAcANCc5huqEtovjrzgIrKKms/0KWLNG6cc/zYY1J+voeqAwAAAAAAANCcEJrDdH2T4xQXYd9JXlVt04/b845+aNo0qebU4sJC6dFHPVghAAAAAAAAgOaC0BymCwyw6CyXA0G/27L/6IcSEqQHH3SOn3tO2rHDA9UBAAAAAAAAaE4IzeEVavU1T8+VzWY7+qHx46WOHe3XlZXSlCkeqg4AAAAAAABAc0FoDq9wZreWsljs17lF5dq059DRD4WF2fuZ1/jgA+mnnzxTIAAAAAAAgA+x1AQtUt2bEwEfU11d7bh2/fPtDoTm8AotIkPULznOMV6aXkeLFkm6+mqpf3/7dXS0lJHh/uIAAAAAAAB8jMViUWBgoCSpvLzc5GqApisrK5MkBQUFEZqj+fhji5Y6BQRITz0l3X67tH27dM01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AAAAAAAaxbDQfOrUqerRo4cefPBBBQQcPa3FYtEDDzygHj16aNq0aZKk8ePHq1OnTlq6dKlRZQBeLTXxz3ear3HpZ96zbYwiQgz7xyDNnusPIH7ZXahKa7VnFr7wQunss53jiRPtfc4BAAAAAADglQwLzX/++Wf17NnzuM/17NlTK1eudIxPPPFE7d+/36gyAK/mutN8f1G5io/sKq+R5tLPnNYsxurZNkbBgfbzFMqrqpW+r8gzC1ss0ty59v9K0q+/SgsWeGZtAAAAAAAANJhhobkkpaenN/iZwMBAhYeHG1kG4LXaxoQpNMj5bZf5hxYtawjN3SYsOFA928Y4xus81aJFkvr1k/7v/5zjadOkw4c9tz4AAAAAAADqzbDQfPDgwVq3bp2efvrpYz4zb948rV27Vqeddprj3s6dO9WunQcO5AO8QECARR0TIhzjzLwSx/Xvh8q062CpYzwghdDcaP06OH9P17scuOoRjz4qhYXZr/fulZ56yrPrAwAAAAAAoF4Ma5j8+OOP6/vvv9ekSZP02muv6bLLLlNycrIsFouys7P14Ycf6rffflN4eLgee+wxSVJ2drY2btyov//970aVAXi9jgmR2vq7fZex607ztEznLvOkuHC1jeVfYBit9mGgB4/9oDskJ0t33y098YR9/OST0t/+JrVt69k6AAAAAAAA8KcMC8379eunb775RjfccIM2b96szZs3y3Kkh6/NZpMkdenSRa+//rr69esnSYqOjtaKFSvUqVMno8oAvN6xDgNNczkElNYs7uEamu/ILVZhaaViw4M9V8DkydIrr0i5uVJJifTQQ9LLL3tufQAAAAAAAByXYaG5JJ122mnasmWLvvvuO61YsUJ79uyRJLVt21annXaazj77bAUEODvCxMfH65RTTjGyBMDrpSS4hOYuO83XuvQzpzWLe3RMiFB8RLAOllRKkjbuKtCQri09V0BMjDRjhnT77fZWLW3aSDab85BQAAAAAAAAmM7Q0FySLBaLhg8fruHDhxs9NeAXUhKdPc0zjvQ0L62watOeQ477J3cgNHcHi8WiPslxWpqeK8ne19yjobkk3XKLlJkpjR9vb9kCAAAAAAAAr2LYQaAA6se1PUve4XIVlVVqfU6BqqrtbYwiQwLVo020WeX5PdcWLetyCjxfQHCwvZ85gTkAAAAAAIBXMnyneUZG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5+Y7FxERERERERGRibBoTkTUiQwJ7wJ/DycAgEqtwdazeeY7mYMDMHSotv3f/wJFReY7HxERERERERGRCbBoTkTUiUilElwbEyi2zR7R8uqrgKen8Ly0VCicExERERERERHZMBbNiYg6mRk6ueZ7UwtRpqg138n8/ICXXtK2ly4F0tLMdz4iIiIiIiIionZi0ZyIqJMZ3sMHXVzlAIAalRo7zuab94SPPgqEhwvPa2uBF14w7/mIiIiIiIiIiNqBRXMiok7GQSbF1L7aBUE3nc4x7wmdnYG339a2V60C9u837zmJiIiIiIiIiNqIRXMiok5oeqy2aL4ruQCVyjrznvCmm/QXBX3qKUCjMe85iYiIiIiIiIjagEVzIqJOaFSkHzycHQAAyjo1diUXmPeEUinw/vva9sGDwoxzIiIiIiIiIiIbw6I5EVEn5OggxZQ+gWLb7BEtADBuHDBnjrb9/POAUmn+8xIRERERERERtQKL5kREndT02CDx+c5z+VDUqsx/0nffBWQywNERuP56oM7MsTBERERERERERK3EojkRUSc1tqcf3BxlAIDKGhX+TTFzRAsA9OoFfP89kJwM/O9/gJub+c9JRERERERERNQKLJoTEXVSznIZJvQOENubT+da5sR33gl0726ZcxERERERERERtRKL5kREndj0ftqIlq1n81BTp7biaIiIiIiIiIiIrI9FcyKiTmx8L384y4UfBeWKOuw/X2j5QdTVAVu2WP68REREREREREQGsGhORNSJuTk5YFy0v9jelGihiBYA0GiAdeuA2Fjg2muBhATLnZuIiIiIiIiIqBksmhMRdXK6ES1bzuSiTmWhiBaNBli8GDh3Tmg//bSwjYiIiIiIiIjIilg0JyLq5Cb2CYCjTPhxcKWqFocuFFvmxFIp8P772vbevcDq1ZY5NxERERERERFRM1g0JyLq5Dyd5RjT009sbzydY7mTT5wIzJypbT/7LFBTY7nzExERERERERE1wqI5ERFhWr+u4vN/kvKgVlswJuV//xNmnQNAWhrw9deWOzcRERERERERUSMsmhMREab2DYSDVAIAKChX4mjGFcudvG9f4N57te0lS4CSEsudn4iIiIiIiIhIB4vmREQEb1dHjIz0FdsbEy0Y0QIAr70GuLsLz4uKgLfftuz5iYiIiIiIiIjqsWhOREQAGkW0nM6F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", 809 | "text/plain": [ 810 | "
" 811 | ] 812 | }, 813 | "metadata": {}, 814 | "output_type": "display_data" 815 | } 816 | ], 817 | "source": [ 818 | "logs = [\n", 819 | " {\"current_steps\": 1, \"total_steps\": 36, \"loss\": 1.7841, \"learning_rate\": 0.0004990486745229364, \"epoch\": 0.1, \"percentage\": 2.78, \"elapsed_time\": \"0:00:18\", \"remaining_time\": \"0:11:00\"},\n", 820 | "{\"current_steps\": 2, \"total_steps\": 36, \"loss\": 1.6008, \"learning_rate\": 0.000496201938253052, \"epoch\": 0.2, \"percentage\": 5.56, \"elapsed_time\": \"0:00:35\", \"remaining_time\": \"0:09:59\"},\n", 821 | "{\"current_steps\": 3, \"total_steps\": 36, \"loss\": 1.2327, \"learning_rate\": 0.0004914814565722671, \"epoch\": 0.3, \"percentage\": 8.33, \"elapsed_time\": \"0:00:56\", \"remaining_time\": \"0:10:26\"},\n", 822 | "{\"current_steps\": 4, \"total_steps\": 36, \"loss\": 1.4636, \"learning_rate\": 0.0004849231551964771, \"epoch\": 0.41, \"percentage\": 11.11, \"elapsed_time\": \"0:01:08\", \"remaining_time\": \"0:09:09\"},\n", 823 | "{\"current_steps\": 5, \"total_steps\": 36, \"loss\": 1.4043, \"learning_rate\": 0.00047657694675916254, \"epoch\": 0.51, \"percentage\": 13.89, \"elapsed_time\": \"0:01:22\", \"remaining_time\": \"0:08:31\"},\n", 824 | "{\"current_steps\": 6, \"total_steps\": 36, \"loss\": 1.1577, \"learning_rate\": 0.00046650635094610973, \"epoch\": 0.61, \"percentage\": 16.67, \"elapsed_time\": \"0:01:51\", \"remaining_time\": \"0:09:18\"},\n", 825 | "{\"current_steps\": 7, \"total_steps\": 36, \"loss\": 1.1639, \"learning_rate\": 0.00045478801107224796, \"epoch\": 0.71, \"percentage\": 19.44, \"elapsed_time\": \"0:02:05\", \"remaining_time\": \"0:08:40\"},\n", 826 | "{\"current_steps\": 8, \"total_steps\": 36, \"loss\": 1.001, \"learning_rate\": 0.0004415111107797445, \"epoch\": 0.81, \"percentage\": 22.22, \"elapsed_time\": \"0:02:22\", \"remaining_time\": \"0:08:18\"},\n", 827 | "{\"current_steps\": 9, \"total_steps\": 36, \"loss\": 1.0497, \"learning_rate\": 0.00042677669529663686, \"epoch\": 0.91, \"percentage\": 25.0, \"elapsed_time\": \"0:02:37\", \"remaining_time\": \"0:07:53\"},\n", 828 | "{\"current_steps\": 10, \"total_steps\": 36, \"loss\": 0.9004, \"learning_rate\": 0.0004106969024216348, \"epoch\": 1.01, \"percentage\": 27.78, \"elapsed_time\": \"0:03:00\", \"remaining_time\": \"0:07:49\"},\n", 829 | "{\"current_steps\": 11, \"total_steps\": 36, \"loss\": 0.9483, \"learning_rate\": 0.00039339410908776154, \"epoch\": 1.11, \"percentage\": 30.56, \"elapsed_time\": \"0:03:13\", \"remaining_time\": \"0:07:19\"},\n", 830 | "{\"current_steps\": 12, \"total_steps\": 36, \"loss\": 0.8806, \"learning_rate\": 0.000375, \"epoch\": 1.22, \"percentage\": 33.33, \"elapsed_time\": \"0:03:28\", \"remaining_time\": \"0:06:57\"},\n", 831 | "{\"current_steps\": 13, \"total_steps\": 36, \"loss\": 1.0342, \"learning_rate\": 0.00035565456543517487, \"epoch\": 1.32, \"percentage\": 36.11, \"elapsed_time\": \"0:03:43\", \"remaining_time\": \"0:06:35\"},\n", 832 | "{\"current_steps\": 14, \"total_steps\": 36, \"loss\": 0.8794, \"learning_rate\": 0.0003355050358314172, \"epoch\": 1.42, \"percentage\": 38.89, \"elapsed_time\": \"0:04:06\", \"remaining_time\": \"0:06:26\"},\n", 833 | "{\"current_steps\": 15, \"total_steps\": 36, \"loss\": 0.767, \"learning_rate\": 0.00031470476127563017, \"epoch\": 1.52, \"percentage\": 41.67, \"elapsed_time\": \"0:04:27\", \"remaining_time\": \"0:06:14\"},\n", 834 | "{\"current_steps\": 16, \"total_steps\": 36, \"loss\": 0.8725, \"learning_rate\": 0.00029341204441673266, \"epoch\": 1.62, \"percentage\": 44.44, \"elapsed_time\": \"0:04:41\", \"remaining_time\": \"0:05:51\"},\n", 835 | "{\"current_steps\": 17, \"total_steps\": 36, \"loss\": 0.7652, \"learning_rate\": 0.0002717889356869146, \"epoch\": 1.72, \"percentage\": 47.22, \"elapsed_time\": \"0:05:09\", \"remaining_time\": \"0:05:45\"},\n", 836 | "{\"current_steps\": 18, \"total_steps\": 36, \"loss\": 0.9222, \"learning_rate\": 0.00025, \"epoch\": 1.82, \"percentage\": 50.0, \"elapsed_time\": \"0:05:34\", \"remaining_time\": \"0:05:34\"},\n", 837 | "{\"current_steps\": 19, \"total_steps\": 36, \"loss\": 0.8331, \"learning_rate\": 0.00022821106431308543, \"epoch\": 1.92, \"percentage\": 52.78, \"elapsed_time\": \"0:05:49\", \"remaining_time\": \"0:05:12\"},\n", 838 | "{\"current_steps\": 20, \"total_steps\": 36, \"loss\": 0.9051, \"learning_rate\": 0.00020658795558326743, \"epoch\": 2.03, \"percentage\": 55.56, \"elapsed_time\": \"0:06:02\", \"remaining_time\": \"0:04:49\"},\n", 839 | "{\"current_steps\": 21, \"total_steps\": 36, \"loss\": 0.7643, \"learning_rate\": 0.0001852952387243698, \"epoch\": 2.13, \"percentage\": 58.33, \"elapsed_time\": \"0:06:16\", \"remaining_time\": \"0:04:28\"},\n", 840 | "{\"current_steps\": 22, \"total_steps\": 36, \"loss\": 0.7853, \"learning_rate\": 0.00016449496416858284, \"epoch\": 2.23, \"percentage\": 61.11, \"elapsed_time\": \"0:06:29\", \"remaining_time\": \"0:04:07\"},\n", 841 | "{\"current_steps\": 23, \"total_steps\": 36, \"loss\": 0.8496, \"learning_rate\": 0.0001443454345648252, \"epoch\": 2.33, \"percentage\": 63.89, \"elapsed_time\": \"0:06:53\", \"remaining_time\": \"0:03:53\"},\n", 842 | "{\"current_steps\": 24, \"total_steps\": 36, \"loss\": 0.8802, \"learning_rate\": 0.00012500000000000006, \"epoch\": 2.43, \"percentage\": 66.67, \"elapsed_time\": \"0:07:07\", \"remaining_time\": \"0:03:33\"},\n", 843 | "{\"current_steps\": 25, \"total_steps\": 36, \"loss\": 0.8165, \"learning_rate\": 0.00010660589091223854, \"epoch\": 2.53, \"percentage\": 69.44, \"elapsed_time\": \"0:07:21\", \"remaining_time\": \"0:03:14\"},\n", 844 | "{\"current_steps\": 26, \"total_steps\": 36, \"loss\": 0.9055, \"learning_rate\": 8.930309757836516e-05, \"epoch\": 2.63, \"percentage\": 72.22, \"elapsed_time\": \"0:07:38\", \"remaining_time\": \"0:02:56\"},\n", 845 | "{\"current_steps\": 27, \"total_steps\": 36, \"loss\": 0.7184, \"learning_rate\": 7.322330470336314e-05, \"epoch\": 2.73, \"percentage\": 75.0, \"elapsed_time\": \"0:08:09\", \"remaining_time\": \"0:02:43\"},\n", 846 | "{\"current_steps\": 28, \"total_steps\": 36, \"loss\": 0.8326, \"learning_rate\": 5.848888922025553e-05, \"epoch\": 2.84, \"percentage\": 77.78, \"elapsed_time\": \"0:08:30\", \"remaining_time\": \"0:02:25\"},\n", 847 | "{\"current_steps\": 29, \"total_steps\": 36, \"loss\": 0.8122, \"learning_rate\": 4.521198892775202e-05, \"epoch\": 2.94, \"percentage\": 80.56, \"elapsed_time\": \"0:08:52\", \"remaining_time\": \"0:02:08\"},\n", 848 | "{\"current_steps\": 30, \"total_steps\": 36, \"loss\": 0.8105, \"learning_rate\": 3.3493649053890325e-05, \"epoch\": 3.04, \"percentage\": 83.33, \"elapsed_time\": \"0:09:07\", \"remaining_time\": \"0:01:49\"},\n", 849 | "{\"current_steps\": 31, \"total_steps\": 36, \"loss\": 0.7703, \"learning_rate\": 2.3423053240837516e-05, \"epoch\": 3.14, \"percentage\": 86.11, \"elapsed_time\": \"0:09:22\", \"remaining_time\": \"0:01:30\"},\n", 850 | "{\"current_steps\": 32, \"total_steps\": 36, \"loss\": 0.8548, \"learning_rate\": 1.5076844803522921e-05, \"epoch\": 3.24, \"percentage\": 88.89, \"elapsed_time\": \"0:09:37\", \"remaining_time\": \"0:01:12\"},\n", 851 | "{\"current_steps\": 33, \"total_steps\": 36, \"loss\": 0.8, \"learning_rate\": 8.51854342773295e-06, \"epoch\": 3.34, \"percentage\": 91.67, \"elapsed_time\": \"0:09:59\", \"remaining_time\": \"0:00:54\"},\n", 852 | "{\"current_steps\": 34, \"total_steps\": 36, \"loss\": 0.7628, \"learning_rate\": 3.798061746947995e-06, \"epoch\": 3.44, \"percentage\": 94.44, \"elapsed_time\": \"0:10:17\", \"remaining_time\": \"0:00:36\"},\n", 853 | "{\"current_steps\": 35, \"total_steps\": 36, \"loss\": 0.7972, \"learning_rate\": 9.513254770636137e-07, \"epoch\": 3.54, \"percentage\": 97.22, \"elapsed_time\": \"0:10:31\", \"remaining_time\": \"0:00:18\"},\n", 854 | "{\"current_steps\": 36, \"total_steps\": 36, \"loss\": 0.7941, \"learning_rate\": 0.0, \"epoch\": 3.65, \"percentage\": 100.0, \"elapsed_time\": \"0:10:45\", \"remaining_time\": \"0:00:00\"}\n", 855 | "]\n", 856 | "\n", 857 | "import numpy as np\n", 858 | "import matplotlib.pyplot as plt\n", 859 | "from scipy.interpolate import interp1d\n", 860 | "\n", 861 | "\n", 862 | "plt.figure(figsize=(10, 6), dpi=150)\n", 863 | "losses = np.array([x[\"loss\"] for x in logs])\n", 864 | "steps = range(1, len(logs)+1)\n", 865 | "\n", 866 | "plt.plot(steps, losses, label='Losses')\n", 867 | "plt.scatter(steps, losses)\n", 868 | "\n", 869 | "f_cubic = interp1d(steps, losses)\n", 870 | "xnew = np.linspace(1, 36, num=10, endpoint=True)\n", 871 | "plt.plot(xnew, f_cubic(xnew), '--', label='Smoothed', c='r')\n", 872 | "\n", 873 | "\n", 874 | "plt.xlabel('Steps')\n", 875 | "plt.ylabel('Training Loss')\n", 876 | "plt.legend(loc='best')\n", 877 | "plt.tight_layout()\n", 878 | "plt.savefig('training_loss.png')\n", 879 | "plt.show()\n" 880 | ] 881 | }, 882 | { 883 | "cell_type": "code", 884 | "execution_count": null, 885 | "metadata": {}, 886 | "outputs": [], 887 | "source": [] 888 | } 889 | ], 890 | "metadata": { 891 | "kernelspec": { 892 | "display_name": "python3-11", 893 | "language": "python", 894 | "name": "python3" 895 | }, 896 | "language_info": { 897 | "codemirror_mode": { 898 | "name": "ipython", 899 | "version": 3 900 | }, 901 | "file_extension": ".py", 902 | "mimetype": "text/x-python", 903 | "name": "python", 904 | "nbconvert_exporter": "python", 905 | "pygments_lexer": "ipython3", 906 | "version": "3.11.8" 907 | } 908 | }, 909 | "nbformat": 4, 910 | "nbformat_minor": 2 911 | } 912 | --------------------------------------------------------------------------------