Showing preview only (6,445K chars total). Download the full file or copy to clipboard to get everything.
Repository: jacobdunefsky/transcoder_circuits
Branch: master
Commit: 8721ff06b648
Files: 43
Total size: 16.6 MB
Directory structure:
gitextract_3wd5og0z/
├── .gitignore
├── README.md
├── __init__.py
├── case_study_caught.ipynb
├── case_study_citations.ipynb
├── case_study_local_context.ipynb
├── greaterthan.ipynb
├── interp-comparison.ipynb
├── requirements.txt
├── restricted blind case studies.ipynb
├── sae_training/
│ ├── __init__.py
│ ├── activations_store.py
│ ├── config.py
│ ├── geom_median/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── pyproject.toml
│ │ ├── setup.py
│ │ └── src/
│ │ └── geom_median/
│ │ ├── __init__.py
│ │ ├── numpy/
│ │ │ ├── __init__.py
│ │ │ ├── main.py
│ │ │ ├── utils.py
│ │ │ ├── weiszfeld_array.py
│ │ │ └── weiszfeld_list_of_array.py
│ │ └── torch/
│ │ ├── __init__.py
│ │ ├── main.py
│ │ ├── utils.py
│ │ ├── weiszfeld_array.py
│ │ └── weiszfeld_list_of_array.py
│ ├── optim.py
│ ├── requirements.txt
│ ├── sparse_autoencoder.py
│ ├── train_sae_on_language_model.py
│ └── utils.py
├── setup.sh
├── sweep.ipynb
├── train_transcoder.py
├── transcoder_circuits/
│ ├── __init__.py
│ ├── circuit_analysis.py
│ ├── feature_dashboards.py
│ └── replacement_ctx.py
└── walkthrough.ipynb
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
**/*gpt-2-small-transcoders
**/*.ipynb_checkpoints
**/*__pycache__
================================================
FILE: README.md
================================================
# Transcoder-circuits: reverse-engineering LLM circuits with transcoders
This repository contains tools for understanding what's going on inside large language models by using a tool called "transcoders". Transcoders decompose MLP sublayers in transformer models into a sparse linear combination of interpretable features. By using transcoders, we can reverse-engineer fine-grained circuits of features within the model.
To get started, first run `bash setup.sh` to install dependencies and [download transcoder weights](https://huggingface.co/pchlenski/gpt2-transcoders). Then, to learn how to use `transcoder_circuits`, we recommend working through the `walkthrough.ipynb` notebook. The full structure of the repository is as follows:
* Installation tools:
* `setup.sh`: A shell script for installing dependencies and downloading transcoder weights.
* `requirements.txt`: The standard Python dependencies list.
* Examples:
* `walkthrough.ipynb`: A walkthrough notebook that demonstrates how to use the tools provided in this repository for reverse-engineering LLM circuits with transcoders.
* `train_transcoder.py`: An example script for training a transcoder.
* Experimental results;
* `sweep.ipynb`: An evaluation of transcoders and SAEs trained on Pythia-410M (weights not provided).
* `interp-comparison.ipynb`: Code for performing a blind comparison of SAE and transcoder feature interpretability
* Case studies:
* `case_study_citations.ipynb`: An example of a reverse-engineering case study that we carried out, in which we investigated a transcoder feature that activates on semicolons in parenthetical citations.
* `case_study_caught.ipynb`: An example of a reverse-engineering case study that we carried out, in which we investigated a transcoder feature that activates on the verb "caught".
* `case_study_local_context.ipynb`: An example of a reverse-engineering case study that we carried out, in which we attempted to reverse-engineer a circuit that computes a harder-to-interpret transcoder feature. (We were less successful in this case study, but are including it in the interest of transparency.)
* `restricted blind case studies.ipynb`: A notebook containing a set of "restricted blind case studies" that reverse-engineer random GPT2-small transcoder features *without looking at MLP0 transcoder feature activations*.
* Libraries:
* `sae_training/`: Code for training and using transcoders. The code is largely based on an older version of [Joseph Bloom's excellent SAE repository](https://github.com/jbloomAus/SAELens) -- **shoutouts to him!**. (The misnomer `sae_training` is a vestige of this origin of the code.)
* `transcoder_circuits/`: Code for reverse-engineering and analyzing circuits with transcoders. These are the tools that we use in the walkthrough notebook and in the case studies.
================================================
FILE: __init__.py
================================================
================================================
FILE: case_study_caught.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"id": "85b8a651-baa3-4772-85ec-a3bb10d1851a",
"metadata": {},
"source": [
"# Blind case study: \"caught\" feature"
]
},
{
"cell_type": "markdown",
"id": "9b0845aa-18c6-4bb5-88be-6d8181fdac8d",
"metadata": {},
"source": [
"# Setup"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "fe44ab3a-14ff-4ec5-b3f8-070a7ad3d21a",
"metadata": {},
"outputs": [],
"source": [
"from transcoder_circuits.circuit_analysis import *\n",
"from transcoder_circuits.feature_dashboards import *\n",
"from transcoder_circuits.replacement_ctx import *"
]
},
{
"cell_type": "markdown",
"id": "b112aadf-0e92-440e-80a0-a3217751a81d",
"metadata": {},
"source": [
"## Load model"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "1845441e-479b-43f9-9bfa-b03636741045",
"metadata": {},
"outputs": [],
"source": [
"from sae_training.sparse_autoencoder import SparseAutoencoder"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e9996a62-57c5-48a4-a980-b378a00d39fd",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"from transformer_lens import HookedTransformer, utils\n",
"model = HookedTransformer.from_pretrained('gpt2')"
]
},
{
"cell_type": "markdown",
"id": "bd405cee-8f23-4a85-bf74-b3dd547fb6d1",
"metadata": {
"id": "N3D_0qDmBY5K"
},
"source": [
"## Loading data"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "529c4b1b-d53e-4101-bed1-f5dc474d09cc",
"metadata": {},
"outputs": [],
"source": [
"# This function was stolen from one of Neel Nanda's exploratory notebooks\n",
"# Thanks, Neel!\n",
"import einops\n",
"def tokenize_and_concatenate(\n",
" dataset,\n",
" tokenizer,\n",
" streaming = False,\n",
" max_length = 1024,\n",
" column_name = \"text\",\n",
" add_bos_token = True,\n",
"):\n",
" \"\"\"Helper function to tokenizer and concatenate a dataset of text. This converts the text to tokens, concatenates them (separated by EOS tokens) and then reshapes them into a 2D array of shape (____, sequence_length), dropping the last batch. Tokenizers are much faster if parallelised, so we chop the string into 20, feed it into the tokenizer, in parallel with padding, then remove padding at the end.\n",
"\n",
" This tokenization is useful for training language models, as it allows us to efficiently train on a large corpus of text of varying lengths (without, eg, a lot of truncation or padding). Further, for models with absolute positional encodings, this avoids privileging early tokens (eg, news articles often begin with CNN, and models may learn to use early positional encodings to predict these)\n",
"\n",
" Args:\n",
" dataset (Dataset): The dataset to tokenize, assumed to be a HuggingFace text dataset.\n",
" tokenizer (AutoTokenizer): The tokenizer. Assumed to have a bos_token_id and an eos_token_id.\n",
" streaming (bool, optional): Whether the dataset is being streamed. If True, avoids using parallelism. Defaults to False.\n",
" max_length (int, optional): The length of the context window of the sequence. Defaults to 1024.\n",
" column_name (str, optional): The name of the text column in the dataset. Defaults to 'text'.\n",
" add_bos_token (bool, optional): . Defaults to True.\n",
"\n",
" Returns:\n",
" Dataset: Returns the tokenized dataset, as a dataset of tensors, with a single column called \"tokens\"\n",
"\n",
" Note: There is a bug when inputting very small datasets (eg, <1 batch per process) where it just outputs nothing. I'm not super sure why\n",
" \"\"\"\n",
" for key in dataset.features:\n",
" if key != column_name:\n",
" dataset = dataset.remove_columns(key)\n",
"\n",
" if tokenizer.pad_token is None:\n",
" # We add a padding token, purely to implement the tokenizer. This will be removed before inputting tokens to the model, so we do not need to increment d_vocab in the model.\n",
" tokenizer.add_special_tokens({\"pad_token\": \"<PAD>\"})\n",
" # Define the length to chop things up into - leaving space for a bos_token if required\n",
" if add_bos_token:\n",
" seq_len = max_length - 1\n",
" else:\n",
" seq_len = max_length\n",
"\n",
" def tokenize_function(examples):\n",
" text = examples[column_name]\n",
" # Concatenate it all into an enormous string, separated by eos_tokens\n",
" full_text = tokenizer.eos_token.join(text)\n",
" # Divide into 20 chunks of ~ equal length\n",
" num_chunks = 20\n",
" chunk_length = (len(full_text) - 1) // num_chunks + 1\n",
" chunks = [\n",
" full_text[i * chunk_length : (i + 1) * chunk_length]\n",
" for i in range(num_chunks)\n",
" ]\n",
" # Tokenize the chunks in parallel. Uses NumPy because HuggingFace map doesn't want tensors returned\n",
" tokens = tokenizer(chunks, return_tensors=\"np\", padding=True)[\n",
" \"input_ids\"\n",
" ].flatten()\n",
" # Drop padding tokens\n",
" tokens = tokens[tokens != tokenizer.pad_token_id]\n",
" num_tokens = len(tokens)\n",
" num_batches = num_tokens // (seq_len)\n",
" # Drop the final tokens if not enough to make a full sequence\n",
" tokens = tokens[: seq_len * num_batches]\n",
" tokens = einops.rearrange(\n",
" tokens, \"(batch seq) -> batch seq\", batch=num_batches, seq=seq_len\n",
" )\n",
" if add_bos_token:\n",
" prefix = np.full((num_batches, 1), tokenizer.bos_token_id)\n",
" tokens = np.concatenate([prefix, tokens], axis=1)\n",
" return {\"tokens\": tokens}\n",
"\n",
" tokenized_dataset = dataset.map(\n",
" tokenize_function,\n",
" batched=True,\n",
" remove_columns=[column_name],\n",
" )\n",
" #tokenized_dataset.set_format(type=\"torch\", columns=[\"tokens\"])\n",
" return tokenized_dataset\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "ceaa36a0-7f48-4578-8096-2a7d1b0a52cf",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Token indices sequence length is longer than the specified maximum sequence length for this model (73252 > 1024). Running this sequence through the model will result in indexing errors\n"
]
}
],
"source": [
"from datasets import load_dataset\n",
"from huggingface_hub import HfApi\n",
"\n",
"dataset = load_dataset('Skylion007/openwebtext', split='train', streaming=True)\n",
"dataset = dataset.shuffle(seed=42, buffer_size=10_000)\n",
"tokenized_owt = tokenize_and_concatenate(dataset, model.tokenizer, max_length=128, streaming=True)\n",
"tokenized_owt = tokenized_owt.shuffle(42)\n",
"tokenized_owt = tokenized_owt.take(12800*2)\n",
"owt_tokens = np.stack([x['tokens'] for x in tokenized_owt])"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "e0f0c9b6-b9c4-49a6-9010-1da084394d4b",
"metadata": {},
"outputs": [],
"source": [
"owt_tokens_torch = torch.from_numpy(owt_tokens).cuda()"
]
},
{
"cell_type": "markdown",
"id": "80d2b740-685d-48ce-9447-82fd95eaef9d",
"metadata": {},
"source": [
"# Load transcoders"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "c41039eb-f23a-4f50-9fa4-8c8d2acb7da0",
"metadata": {},
"outputs": [],
"source": [
"transcoder_template = \"./gpt-2-small-transcoders/final_sparse_autoencoder_gpt2-small_blocks.{}.ln2.hook_normalized_24576\"\n",
"transcoders = []\n",
"sparsities = []\n",
"for i in range(12):\n",
" transcoders.append(SparseAutoencoder.load_from_pretrained(f\"{transcoder_template.format(i)}.pt\").eval())\n",
" sparsities.append(torch.load(f\"{transcoder_template.format(i)}_log_feature_sparsity.pt\"))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "e132f002-2a79-43c1-be56-9d99bd6306f3",
"metadata": {},
"outputs": [],
"source": [
"import gc\n",
"gc.collect()\n",
"torch.cuda.empty_cache()"
]
},
{
"cell_type": "markdown",
"id": "1e994b6a-441d-415f-9f22-0304d77c65c2",
"metadata": {},
"source": [
"## Load transcoder 8 feature frequency info"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "184024c2-34c4-4665-8682-143504a0083a",
"metadata": {},
"outputs": [],
"source": [
"live_features = np.arange(len(sparsities[8]))[utils.to_numpy(sparsities[8] > -4)]"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3bb3a311-bc60-4d38-b01d-a45592909a29",
"metadata": {},
"outputs": [],
"source": [
"np.mean(transcoders_losses['real_losses']),\\\n",
" np.mean(transcoders_losses['transcoder_losses']),\\\n",
" np.mean(transcoders_losses['ablated_losses'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9e386c34-0f88-4a56-8895-9d31f8288d06",
"metadata": {},
"outputs": [],
"source": [
"transcoders_losses = eval_transcoders_cross_entropy(model, transcoders[1:11], only_get_transcoder_loss=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "50507a1f-e8b9-454e-b4aa-be8d66988bf9",
"metadata": {},
"outputs": [],
"source": [
"np.mean(transcoders_losses['transcoder_losses'])"
]
},
{
"cell_type": "markdown",
"id": "6a3c60b1-ef53-4728-8e89-0be0d4f25aed",
"metadata": {},
"source": [
"# Blind feature case study! (`live_features[200]`)\n",
"\n",
"In a blind feature case study, we try to begin by reverse-engineering a transcoder feature *without looking at the top-activating examples*. We then form a hypothesis about what the transcoder feature is computing, and only after having done so do we look at the top-activating examples to see if our hypothesis is supported."
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "3ae596cd-f8db-43d1-8be2-21e3de61bc21",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"mlp8tc[235]@-1\n"
]
}
],
"source": [
"feature_idx = live_features[200]\n",
"my_feature = make_sae_feature_vector(transcoders[8], feature_idx, use_encoder=True, token=-1)\n",
"print(my_feature)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "b5f38c87-c783-4b34-a35e-ee7e8eb15573",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 100/100 [00:33<00:00, 2.97it/s]\n"
]
}
],
"source": [
"# get scores\n",
"scores = get_feature_scores(model, transcoders[8], owt_tokens_torch[:128*100], feature_idx, batch_size=128, use_raw_scores=False)\n",
"uniform_samples = sample_uniform(scores, num_samples=50)"
]
},
{
"cell_type": "markdown",
"id": "441d7f24-6771-40e4-9013-fd46a799a2c7",
"metadata": {},
"source": [
"Let's get the indices of sufficiently-highly activating examples."
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "63e40f89-6691-4b5e-812f-253653a95110",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0. 0.4524 0.9155 1.369 1.837 2.318 2.746 3.064 3.65\n",
" 4.14 4.58 5.06 5.414 5.965 6.156 6.66 7.348 7.85\n",
" 8.68 10.414 10.664 11.77 12.6 12.83 13.12 13.96 14.98\n",
" 15.55 15.766 16.45 17.14 17.44 17.73 18.36 18.75 19.38\n",
" 19.64 20.17 20.64 21.19 21.4 21.88 22.4 ]\n"
]
}
],
"source": [
"uniform_scores, uniform_idxs = uniform_samples[0], uniform_samples[1]\n",
"print(uniform_scores)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "6dda5490-7d40-4e88-9453-335ff02ce2cf",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 9687 105]\n",
" [ 837 13]\n",
" [ 1399 123]\n",
" [11713 34]\n",
" [ 4644 86]\n",
" [ 6801 70]\n",
" [ 1417 46]\n",
" [ 817 63]\n",
" [ 8531 111]\n",
" [ 755 73]\n",
" [ 6299 39]\n",
" [ 1077 112]\n",
" [11390 41]]\n"
]
}
],
"source": [
"threshold = 17.0\n",
"uniform_idxs = uniform_idxs[uniform_scores>threshold]\n",
"uniform_scores = uniform_scores[uniform_scores>threshold]\n",
"print(uniform_idxs)"
]
},
{
"cell_type": "markdown",
"id": "9f8c1dca-44d0-48c8-b272-d6b9d3e6bb40",
"metadata": {},
"source": [
"## Input 8531, 111"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "eaa5f87b-5c37-41e3-b2fd-8bea10de6e6c",
"metadata": {},
"outputs": [],
"source": [
"prompt = owt_tokens_torch[8531, :111+1]\n",
"_, cache = model.run_with_cache(prompt)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "524d31b0-4871-4c9d-b949-f8898154d7f9",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- Paths of size 2 ---\n",
"Path [0][0]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01\n",
"Path [0][1]: mlp8tc[235]@-1 <- mlp0tc[1636]@111: 1.5e+01\n",
"Path [0][2]: mlp8tc[235]@-1 <- mlp6tc[22733]@111: 7.9\n",
"Path [0][3]: mlp8tc[235]@-1 <- mlp3tc[7628]@111: 6.9\n",
"Path [0][4]: mlp8tc[235]@-1 <- mlp5tc[11575]@111: 5.7\n",
"Path [0][5]: mlp8tc[235]@-1 <- mlp4tc[21770]@111: 5.6\n",
"Path [0][6]: mlp8tc[235]@-1 <- mlp2tc[17511]@111: 4.8\n",
"Path [0][7]: mlp8tc[235]@-1 <- mlp1tc[4598]@111: 4.4\n",
"Path [0][8]: mlp8tc[235]@-1 <- attn5[7]@111: 3.6\n",
"Path [0][9]: mlp8tc[235]@-1 <- attn0[4]@111: 2.5\n",
"Path [0][10]: mlp8tc[235]@-1 <- attn0[1]@111: 2.2\n",
"Path [0][11]: mlp8tc[235]@-1 <- attn0[5]@111: 1.6\n",
"Path [0][12]: mlp8tc[235]@-1 <- mlp7tc[760]@111: 1.4\n",
"Path [0][13]: mlp8tc[235]@-1 <- attn8[4]@111: 1.4\n",
"Path [0][14]: mlp8tc[235]@-1 <- embed0@111: 1.3\n",
"--- Paths of size 3 ---\n",
"Path [1][0]: mlp8tc[235]@-1 <- mlp0tc[1636]@111: 1.5e+01 <- attn0[1]@111: 6.1\n",
"Path [1][1]: mlp8tc[235]@-1 <- mlp0tc[1636]@111: 1.5e+01 <- attn0[4]@111: 5.6\n",
"Path [1][2]: mlp8tc[235]@-1 <- mlp0tc[1636]@111: 1.5e+01 <- embed0@111: 5.5\n",
"Path [1][3]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp0tc[1636]@111: 5.3\n",
"Path [1][4]: mlp8tc[235]@-1 <- mlp0tc[1636]@111: 1.5e+01 <- attn0[3]@111: 5.0\n",
"Path [1][5]: mlp8tc[235]@-1 <- mlp1tc[4598]@111: 4.4 <- mlp0tc[1636]@111: 4.4\n",
"Path [1][6]: mlp8tc[235]@-1 <- mlp3tc[7628]@111: 6.9 <- mlp0tc[1636]@111: 4.3\n",
"Path [1][7]: mlp8tc[235]@-1 <- mlp2tc[17511]@111: 4.8 <- mlp0tc[1636]@111: 3.6\n",
"Path [1][8]: mlp8tc[235]@-1 <- mlp0tc[1636]@111: 1.5e+01 <- attn0[5]@111: 3.1\n",
"Path [1][9]: mlp8tc[235]@-1 <- mlp4tc[21770]@111: 5.6 <- mlp0tc[1636]@111: 3.0\n",
"Path [1][10]: mlp8tc[235]@-1 <- mlp6tc[22733]@111: 7.9 <- mlp0tc[1636]@111: 2.9\n",
"Path [1][11]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp6tc[22733]@111: 2.8\n",
"Path [1][12]: mlp8tc[235]@-1 <- mlp5tc[11575]@111: 5.7 <- mlp0tc[1636]@111: 2.6\n",
"Path [1][13]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp5tc[11575]@111: 2.2\n",
"Path [1][14]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1\n",
"--- Paths of size 4 ---\n",
"Path [2][0]: mlp8tc[235]@-1 <- mlp1tc[4598]@111: 4.4 <- mlp0tc[1636]@111: 4.4 <- attn0[1]@111: 2.3\n",
"Path [2][1]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp0tc[1636]@111: 5.3 <- attn0[1]@111: 2.1\n",
"Path [2][2]: mlp8tc[235]@-1 <- mlp1tc[4598]@111: 4.4 <- mlp0tc[1636]@111: 4.4 <- attn0[4]@111: 2.0\n",
"Path [2][3]: mlp8tc[235]@-1 <- mlp1tc[4598]@111: 4.4 <- mlp0tc[1636]@111: 4.4 <- embed0@111: 2.0\n",
"Path [2][4]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp0tc[1636]@111: 5.3 <- attn0[4]@111: 1.9\n",
"Path [2][5]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp0tc[1636]@111: 5.3 <- embed0@111: 1.9\n",
"Path [2][6]: mlp8tc[235]@-1 <- mlp1tc[4598]@111: 4.4 <- mlp0tc[1636]@111: 4.4 <- attn0[3]@111: 1.8\n",
"Path [2][7]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp0tc[1636]@111: 5.3 <- attn0[3]@111: 1.7\n",
"Path [2][8]: mlp8tc[235]@-1 <- mlp3tc[7628]@111: 6.9 <- mlp0tc[1636]@111: 4.3 <- attn0[1]@111: 1.7\n",
"Path [2][9]: mlp8tc[235]@-1 <- mlp3tc[7628]@111: 6.9 <- mlp0tc[1636]@111: 4.3 <- attn0[4]@111: 1.6\n",
"Path [2][10]: mlp8tc[235]@-1 <- mlp3tc[7628]@111: 6.9 <- mlp0tc[1636]@111: 4.3 <- embed0@111: 1.6\n",
"Path [2][11]: mlp8tc[235]@-1 <- mlp2tc[17511]@111: 4.8 <- mlp0tc[1636]@111: 3.6 <- attn0[1]@111: 1.5\n",
"Path [2][12]: mlp8tc[235]@-1 <- mlp3tc[7628]@111: 6.9 <- mlp0tc[1636]@111: 4.3 <- attn0[3]@111: 1.4\n",
"Path [2][13]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3\n",
"Path [2][14]: mlp8tc[235]@-1 <- mlp2tc[17511]@111: 4.8 <- mlp0tc[1636]@111: 3.6 <- attn0[4]@111: 1.3\n",
"--- Paths of size 5 ---\n",
"Path [3][0]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3 <- attn0[1]@111: 0.53\n",
"Path [3][1]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3 <- attn0[4]@111: 0.48\n",
"Path [3][2]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3 <- embed0@111: 0.48\n",
"Path [3][3]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3 <- attn0[3]@111: 0.43\n",
"Path [3][4]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3 <- attn0[5]@111: 0.27\n",
"Path [3][5]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3 <- attn0[10]@111: 0.039\n",
"Path [3][6]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3 <- attn0[7]@110: 0.026\n",
"Path [3][7]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3 <- attn0[7]@109: 0.022\n",
"Path [3][8]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3 <- attn0[7]@111: 0.011\n",
"Path [3][9]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3 <- attn0[0]@111: 0.011\n",
"Path [3][10]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3 <- attn0[7]@108: 0.0059\n",
"Path [3][11]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3 <- attn0[9]@105: 0.0057\n",
"Path [3][12]: mlp8tc[235]@-1 <- mlp7tc[14382]@111: 2.1e+01 <- mlp3tc[7628]@111: 2.1 <- mlp0tc[1636]@111: 1.3 <- attn0[6]@111: 0.0055\n"
]
}
],
"source": [
"all_paths = greedy_get_top_paths(model, transcoders, cache, my_feature, num_iters=5, num_branches=15)\n",
"print_all_paths(all_paths)"
]
},
{
"cell_type": "markdown",
"id": "8c5484b6-6fbb-48ea-9f6f-14d80aa6b706",
"metadata": {},
"source": [
"Looks like almost all of our importance comes from the final token in the input. "
]
},
{
"cell_type": "markdown",
"id": "38350afb-c6b3-4da3-99cb-ca3147880d9f",
"metadata": {},
"source": [
"### Input-independent information\n",
"\n",
"Let's look at `mlp7tc[14382]@-1`. Which MLP0 transcoder features is it -- input-indepedently -- most connected to?"
]
},
{
"cell_type": "code",
"execution_count": 153,
"id": "e32b5995-22ac-459d-881b-2c41b83d4312",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"mlp7tc[14382]@-1: 2.1e+01\n"
]
}
],
"source": [
"cur_feature = all_paths[2][1][1]\n",
"print(cur_feature)"
]
},
{
"cell_type": "code",
"execution_count": 160,
"id": "bcc84359-62fe-494a-a5cd-91c6f53697a7",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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ICIrrK6uLuY8evfuHZNwjxe9e/cGYEzeLKqqqqS43bp1Q1lZWcx8qOqloqICI0eOtOgBwPz58/Gzn/0sDq6d0bt3b8nDAMjlMfO+4oor8Oc//7lV8o4X3bp1w4EDB6LGAeT2McMGDBhwPFgDYChmPp8P+fn5eOeddxzjufF4LOjWrZuSZnl5OQBIFn8s6N27Nx5//HE8+uij+Pjjj/HAAw/gmmuuQa9evTBz5sxj5tnDyYPnxvdw3LF161ZOiJeVlaGwsBBnnnmmFZaVlQWAnxC3b9+upJeYmGjRq6+vx7vvvns82AYATJkyBT6fD2vWrOHCVbvm58yZg6qqKutEgYk9e/bgiiuuQCgUcqWxadMmBAIBq17OPPNMpKenKz0gDzzwAN566624y3PWWWehsbERW7dudeXF3Pmvyvu5557D3/72t7jzBvi2O3r0KBYvXuwYd86cOWhqasLmzZu58Oeffx633347AGD27Nnw+XyS92HDhg0IBAKYM2dOi/iMBampqZg2bRo2bdoEXde5dwsWLMB9990HwK7L1atXSzS+/e1vc+fqExISrPopLi52XeqaM2cOCgoKuJMZgLE0kJGRgalTp8ZVni1btlgu+4SEBFxwwQV4//33AYA79tfc3GwpFB7aDjxh7+G4o6amBk899RQAQNd13HnnnfD5fLj77rutOJMmTUJ6ejr+/e9/AwCCwSCee+45Jb2cnBwcPHgQRITly5fjtttuO268DxkyBHPnzsU//vEPS+iUlpZa5WFx2223YdCgQfjJT35ieSWqqqrw4x//GP369UNCAu9I27p1KxYuXAgACAQCuPPOO5GZmYl58+YBADIyMvDggw/i9ddfx6JFi6x07777Lp5++mnlGnA0zJs3D5mZmfjlL3+JQCAAwHDVi4JI0zQ88cQT+OKLL/Diiy9a4atWrcJvf/vbFuUNGG1nWutvv/02/vCHPzjGNevz9ttvR0NDAwBg7969+N3vfmcJ8YEDB2LevHl48cUXLYWsvr4et99+OwYPHnxc+wYAPPLIIygpKcH9999vCemdO3fitttus5ZzzLrctGkTnn/+eSvts88+ix07dmDKlClWGFs/zzzzDF544QXHvO+991507NgR8+fPtxTJ999/H//73//w4IMPIiMjI66ylJeX47HHHsPXX39thS1ZsgQJCQmYPn26FXbhhReib9++klLr4RTHydsb6OFURUNDA+Xm5lrHsUaMGGHtfv7Rj35E/fr1s8LfeOMN+vLLLyk3N5cAUFZWFl166aUWLXP39WOPPUaTJ0+mrKwsGjdunHXcjcXChQtp+PDhNHToUDrvvPNow4YNFs3p06db8Xbu3EkTJ06k4cOH06hRo+j99993LMuvfvUrGjRoEAGgQYMG0e23304fffQRx++VV15JRMaO9C5dulBiYiLl5ubStm3biIiosbGRfvrTn1K3bt1o5MiRNHPmTOvIVr9+/ejyyy+38ispKaHrrruO+vbtS2PGjKGxY8fSww8/TOFwmOMLAP3mN7+hO++8kyZOnEhdu3al/Px82rx5s1SGf/3rXzR27FjKycmhsWPH0kUXXcTFi7dNNm/eTPn5+ZSZmUnjxo2jH/3oR3TnnXcSAMrNzaV//vOfVtyPP/6YzjrrLOrfvz+NGzeOZs6cScuWLbPeP/DAA1z9/ulPf6LCwkLKzc2lxMRE6tKlC02dOtWKv2LFCho5ciSdccYZNHbsWPrqq68c246IqLS0lK6//nrq168fjRkzhiZPnmwdV2Tx1FNP0ciRI2no0KHUr18/uv7666m0tLRFfE6aNInrB3v27KEnnniCS28eYSMydrGfd9551KdPHxo3bhydffbZtHDhQonHTz75hM4++2waMGAAjRkzhi677DIqLi7m4ixcuJAGDhxIY8aMoalTp9Lu3bvp6aefphEjRlj9zeyvRES7d++m73znO9SvXz8aNGgQjR07ljvmWVZWRrm5uZSWlkZpaWmUm5tLDQ0N9Mtf/pLrMy+//DIdPXqU7rjjDhozZgzl5eXRmDFj6Mwzz6T//e9/HI/XXnst9e7dm0pKSlzbzsOpBY2I8a968NDKGDBgAKZPn94uPhjTmtA0Dffcc491YZAHDx48HE94bnwPHjx48OChncMT9h48ePDgwUM7hyfsPRwXmHd9s3ehNzc3n2y2TjrMu/EBYwPWrFmzTi5DHjx4OC3grdl78ODBgwcP7RyeZe/BgwcPHjy0c3jC3oMHDx48eGjnOC2E/SOPPOL4PehTDUVFRdA0Df3790deXh7uv/9+Kc6BAwdw3nnncR+XcUNTUxMGDhwYc/wTiVtuuQV5eXno2bPnCedvxYoVGDx4MHdhyMlGU1MT5s2bB5/Px92sdirjWHguKSnBJZdcghEjRmD48OGYNm2adztbG8K1116L/v37Q9O0E3rJTk1NDW644QYMHz4cI0eOxMSJE7Fjx44Tln9bxGkh7O+44w588MEHx0Rj+vTpGDx4MPLy8rh/Q4cOhaZpWL9+vRX3pZdeOmal4v7778fGjRvx29/+lgt/7bXXcOaZZ8Y1sB5++GEUFhYq35WXl+N3v/sdzjrrLIwbNw6jRo3CyJEjcf/991s3rLF47733MG3aNIwaNQpjxozBpEmT8Oqrr3JxGhoa8I9//AMzZ87EhAkTMGrUKOTl5eHxxx+XNuk988wz2LhxI2655RbXMhw+fBgPPfQQZs2ahVGjRmH8+PE499xz8dBDD1kfq4kVzc3NuOuuu3DddddJV422FCUlJXjggQcwZcoUjBs3DiNGjEB+fn5cV/muW7cO48ePx9KlS3Gyt9KsWrUK55xzDs444wwMHToUt9xyi/Iu/2Pl+Uc/+hFKS0uxZcsWbN26FbW1taitrW2NIhw33HvvvW1GETveeOWVV5QGyfHGPffcgyVLlmDdunX4+uuv0bNnz2P6wqIKRUVFuPfee9vPTYEn80afEwnV96DjQX5+vvQ9dCKiRx99lEaMGCHFjed76yzc+KyqqqJp06bR3r17re9tR8O+ffuoe/fuNGvWLGX8JUuWkN/vp3fffdcKW7VqFXXo0IG+//3vc3HN73n/+c9/tsLeeust0jSNHn/8cSvs9ddfp4SEBI7mp59+SklJSdxNbizMb5er8Kc//Ym6d+9O99xzD23fvp10XSciourqavrXv/5FU6dOpb/+9a9R68LEggUL6KabbqLa2lrKzs5ucVux+MEPfkD9+vWzvnWu6zo98MADBICeeuqpmGhcdNFFtHjxYuvb9Kr+dqy45557qLCw0DXO+vXrqUOHDhbfdXV1NG3aNDrzzDMpFAq1Ks+dO3emX/7yl9ZzU1OT1b6nKuDwzfnTFWbbR+tXrYm8vDz67ne/az0HAgGpbx4rlixZctzG4cnAaWHZtwZ+/etfY8SIEVL4c889hx/+8IcnhIeMjAwsXboUAwcOjDnN/Pnzcdttt3FfmGPRuXNn3HTTTbjwwgutsMmTJ2P27NnSh1b++c9/omPHjtx945dccglGjRoleTIuuOACjuaMGTNw2WWX4a233kJBQUFc/D/77LNYsWIF7r33XgwfPtxy93fs2BFXXHEFli1bho0bN+Lxxx+PieY3v/lNPPfcc9InP48V8+bNw5AhQwAYN+T96le/Qt++ffHwww/HlP6tt9467l8Wu++++6JaKvPnz0d2djZ+8pOfADA+afvwww9jxYoV+Ne//sXFPVaeq6qquG/BJycnn5LLTR5OLVRWVnL9Jikpyfpypgc12oSw37lzJ/Ly8pCeno7p06fjjTfeQH5+Pnr37o1vfvObOHLkCPbs2YP/+7//w+DBgzFu3DjlF6ZYmOfAk5KSMHfuXNx7772YNGkSsrKyMGHCBHz++edc/NmzZ1tfZmNpHDhwANdeey0AoLa2Fnl5eVi7di3Wrl1rufofeughK82ePXtw+eWXo3///sjNzUVubi5uv/12Rzc7C5/PZ32DOhYsXboU69atw/z58x3j5OXlKb9gVlNTI30iMyMjA6FQSPrCV3NzM5KSkqznyy+/XPlFNlPhqKysjIn/t99+Gy+88AIWLlyIwYMHK+OUlpZC13U888wz+PTTT2NatxM/SNMaePrpp6XP0Gqaht69e8dc3nj4eu2115Cbm2t9Ue3GG29slSWJI0eOYOnSpdL5/0mTJiEjIwNvvvlmi3lmId43kJeXh1mzZnHj8rrrrsNf/vIXnH322ejevTs0TbM+xcuOoyFDhmD8+PEcb8dzzmB5zsvLw+LFi7l9Qc888wx+9rOfYfLkyejQoYOVZunSpfi///s/jB07Fnl5eRg3bhz++te/cuNp3rx5GDx4MDRNw9tvv41rr70WY8aMwYABA/DAAw9w/ITDYdx9990YPXo0xo4dizFjxuC6666TPrG8ePFiTJs2DQMHDkRubi6mTJmChx9+mPuE9OHDh3HjjTciOzsbw4YNwxlnnIGnn35aqoPi4mJcdNFF6Nq1K8aPH49bbrnF+kiRiDVr1mD27NnIyclBTk4Ozj//fI63WOrMqQ3Y+zvYOzxKSkowd+5cZGdnY+jQoRg3bhz++9//cjQKCwtx0003ITc3F+PGjUNubi7mzZuHmpoajrfvf//7AIDvf//7Vj5VVVWYPHkyunbtyn0++c9//rPVbuYSj9gH//Of/+Ccc85Bv379oGmaVRex8FxaWmr1hbFjx2Ls2LG44447cPToUWU9KXGyXQvxID8/n3r06EGPPfYYERlu3IEDB9K3vvUt+sUvfkHBYJB0XadLL72UBg0axLl1nNzj2dnZlJqaSk888QQREYXDYbrhhhsoJSXFcsk64bvf/a7k6jb5VLmGi4qKKDMzk6699loKBoNERLRlyxbq3Lmz5RqPdbkhmhs/FArR6NGj6Z133okpvommpiZ68sknKSMjgz788EPu3YYNG6hLly505513UnNzM4XDYfrLX/5CPp+P/vWvf0WlfdFFF1GPHj2oqalJeie68XVdpyFDhnAu3jVr1tA3vvENGjlyJJ133nn05Zdfcm62lStX0q233hqVDxbR3Ph1dXVUVVUVF00TwWCQunbtShdddFFc6aK5xJ9++mnSNM1aJqmtraVzzjmHcnNzKRAIuNJ2o0tkfPgGAP3pT3+S3o0ePZr69OnTIp7d+FG5xLOzs6lXr1709NNPExFRZWUlderUiSorK61xdNVVV1njaOHCheT3+634Jo5lzoiXZ3PsDh482PrAz5IlSyg3N5eIjKWe22+/3foo0v79+2nQoEH05JNPcnRM9/HUqVPpwIEDVvkA0KeffmrF+/3vf08jR46kmpoaq2xnn302x9vChQvJ5/PRc889Z4W9+uqrBIA2bNhg1e3gwYNp5syZVFdXR0TGWMrIyLA+gEVk9Odhw4bR+PHjqbKy0oo3YMAAyY2/Zs0aSklJ4dLPnz+fMjIyaPfu3THXmRPMD2yxqKqqokGDBlF+fr5VjoULF5KmadzHgV5//XU655xzrDh1dXV08cUX0yWXXMLRc3Pjz507l7Kzs2OKb/bBO++8k4iMJYchQ4bQhg0bYuZ59uzZdN1111l9Z+fOndStW7e4xlubE/Zdu3al5uZmK+wnP/kJAaC1a9daYf/+978JgLJTqYT94MGDuXXCo0ePUlJSEl1zzTWOvBw5coSSkpJo3bp1Sj5VAmTu3LmUlJRER48e5cLvuOMOa320tYT9k08+SbNmzYo5PhHReeedR8nJydSvXz/lV7uIiNauXUujR4+mtLQ06ty5M2VnZ0tKgQp79+6lxMREeuGFF5TvRWG/evVqAkA7duwgIqLt27dTcnIyPfDAAxQKhaimpoauuuoqbnDpuh73+ns0YT9kyBDq2rUr1dbWxkWXyJhUU1JSaMuWLXGlcxOcNTU1lJGRQRdccAEXvmzZMgJAr7zyiivtaAL5tddeIwDKdjrrrLMoKSkpbp6j8eMk7IcOHcqF7dmzh8LhMM2dO5cSExPpyJEj3PsLL7yQMjIyLOFHdGxzRrw8m2P35ptvtsLC4TDt2bOHiIiKi4upvr6eS/PLX/6SRo4cyYWZQuORRx6xwnRdp7S0NPrVr35lhX3zm9/kxjiR0Q/M8ajrOg0YMIDGjh0r8Tp58mTatGkTEdljb+PGjVycn/70p+Tz+Wjv3r1ERPT3v/+dAEhfmbzxxhslYW/We2NjoxVWX19P6enpdMMNN8RcZ05QCXuzHKtXr+bCZ8yYQQMHDrSeKyoquC8iEhF9+OGHBIDrU60p7Dt27MjVRXFxMTU2NsbMc1paGj3wwANcnH/84x8x9VcTbcKNz2LgwIFITEy0nrt27QoAGD58uBWWmZkJwHCPxILRo0dz64TdunVDTk4OVqxY4ZjmxRdftFxxsWLRokXIyclBt27duPCHH37YWh9tDZSVleF3v/sdnnjiibjSLVq0CPX19XjqqadwzTXX4NZbb+Xev/feezjnnHNwxRVXoLKy0srn8ssvl9xOLJqamnDNNdfguuuuw4033hgTL+vWrUNiYqK1Bv70008jMzMTd911F/x+PzIyMrjlEcBwm4tLDMeK3r17o0ePHlyfiwWFhYX4+c9/jueffx6jRo1qNX5WrFiB2tpanH322Vz46NGjAQCfffaZFfbb3/5WOj0C8G7JvLw8y10ZDUR0QtfTxXobNGgQfD4fFi1ahIEDB0rLTFOnTkVtbS1WrlzJhR+POSNWvn0+HwYNGgTA2GPy+9//HpMnT8bo0aORl5eHl156CXv27FHSYfnTNA1du3bldpzPnDkTixcvxpw5c/Dmm2+ipqYG06ZNw/nnnw8A2LVrF4qKijBp0iSJ9qpVqzBmzBgAxrhPSUlBbm4uF2fq1KnQdR2LFy8GAHz55ZcAgIkTJ3LxzL5noqGhAcuXL8eECRO4dfXU1FQMGjSI66PR6iwemOUYP368xF9BQQGKi4sBGO2wcOFC5OfnWyeFzPnXqS2OFYMHD+bqon///khJSYmZ55kzZ+K+++7D97//fXz22WcIBoO4/vrrHZc3VWj9xcvjjLS0NO7ZnHzYcHNdOxwOx0SzY8eOUljXrl2xYcMGZXwiwvPPP49f//rXMdE3UVZWhpycnLjStAS/+tWvcOWVV2LkyJFxp/X7/fj2t7+NX/ziF/jNb36DSy65xDqHfvPNN2Po0KG46667rPjXXHMN3nrrLdxwww2YM2cOMjIyOHrNzc347ne/i0GDBuGZZ56JmY+Kigp0797dasvCwkL079+f27PQt29fLk1tbS06dOgAAFi7di0nxHr37t2i45ctOWJ18OBBzJkzBw888ACuvvrquNO7wVyX/9vf/iatn2dlZaGpqcl6vv/++6VjUZqm4YUXXnC8W8BURNn1SxO1tbWSono8IfYlE07jyBTY4jrm8Zgz3KDim4hw0UUXoaSkBB999JElzO69917cd999SjriBlKfz8fxN2/ePPTt2xdPP/00rrjiCiQmJuKyyy7Do48+ip49e1p9xVRunFBWVoYuXbpI4WJ9mkdcxbidOnXinisrKxEOh7FmzRpp7b2iokKpMDq1dTwoKytDOByWDLC6ujpkZWWhrKwM2dnZuOeee/DII4/gf//7n7U3ZenSpTj33HOVx41bA259ORae//3vf+PJJ5/E3//+d/z9739HZmYmfvjDH+Luu+/m9ku5oc0J++MB1fnh8vJyxx3sn376KcrLy/Hd7343rny6deuGioqKFvEYDz7//HMkJCRwA23fvn0AYIU9+uijmDVrFgKBAPx+v7TRyoy3Zs0aTJ8+HYcPH0ZpaSny8/Ol/IYNG4aFCxdix44dnNYfCARw6aWXonfv3njmmWfi2lzYpUsXTuAMGDAAGzZsgK7rFp39+/dzaZ599lmrTSZMmCBtVDoRKC4uxuzZs/HrX/8ac+fObXX6prCdP3++tCGwNZCbmwtN06QTE0SEoqIiTJs2rdXzjBdO48i8jEe0+E8F7NmzB1988QUeeeSRFlmtTrjssstw2WWXYf/+/fjHP/6Bhx56CMXFxfjiiy+svhJtzunWrRsOHDgghYv12bt3b4seu1nZ3DRpokuXLvD5fMjPz8c777zT4rLFi27duqGsrCzquH/xxRcxe/bsY/oIld/vl+6VYDc8xopYeU5OTsYdd9yBO+64A+vXr8cTTzxhbdj83e9+F1Nebc6NfzywdetWruHKyspQWFiIM888Uxn/2WefxXXXXWdZkSISExMtevX19dbFKnPmzEFhYaG0a/r+++/HY4891hpFAWDsAt22bRs2btxo/bvooosAwHo2O/oPfvADPPLIIxIN031kThidOnVCcnKy8tiWGcZafQ0NDfjWt76FQYMG4dlnn7UE9H333Yf3338/ahnGjh2Luro6y632k5/8BOXl5fjDH/6AcDiMuro6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",
"text/plain": [
"<Figure size 500x300 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"</style>\n",
"<table>\n",
" <thead>\n",
" <tr>\n",
" <th colspan=2 style='text-align:center'>Most-negative transcoder features</th>\n",
" <th colspan=2 style='text-align:center'>Most-positive transcoder features</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
"<tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffa3a3'>7663</span></td>\n",
" <td style='text-align:right'>-0.134</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #7f7fff'>1636</span></td>\n",
" <td style='text-align:right'>+0.240</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffa5a5'>12244</span></td>\n",
" <td style='text-align:right'>-0.126</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #9595ff'>5637</span></td>\n",
" <td style='text-align:right'>+0.174</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffa6a6'>17940</span></td>\n",
" <td style='text-align:right'>-0.124</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #9b9bff'>3981</span></td>\n",
" <td style='text-align:right'>+0.157</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffa7a7'>20252</span></td>\n",
" <td style='text-align:right'>-0.123</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #a2a2ff'>14013</span></td>\n",
" <td style='text-align:right'>+0.135</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffa7a7'>733</span></td>\n",
" <td style='text-align:right'>-0.122</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #a6a6ff'>11383</span></td>\n",
" <td style='text-align:right'>+0.124</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffa7a7'>10149</span></td>\n",
" <td style='text-align:right'>-0.122</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #a8a8ff'>6881</span></td>\n",
" <td style='text-align:right'>+0.120</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffa7a7'>1232</span></td>\n",
" <td style='text-align:right'>-0.122</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #a8a8ff'>18968</span></td>\n",
" <td style='text-align:right'>+0.118</td>\n",
"</tr></tbody></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display_transcoder_pullback_features(model, cur_feature, transcoders[0])"
]
},
{
"cell_type": "code",
"execution_count": 161,
"id": "560b0951-8a85-41dd-9ffb-62f6ef86233f",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"</style>\n",
"<b>Direct path</b>\n",
"<table>\n",
" <thead>\n",
" <tr>\n",
" <th colspan=2 style='text-align:center'>Most-negative de-embedding tokens</th>\n",
" <th colspan=2 style='text-align:center'>Most-positive de-embedding tokens</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
"<tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffb7b7'> SG</span></td>\n",
" <td style='text-align:right'>-3.597</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #7f7fff'> caught</span></td>\n",
" <td style='text-align:right'>+9.371</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffb8b8'>naires</span></td>\n",
" <td style='text-align:right'>-3.568</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #a2a2ff'>aught</span></td>\n",
" <td style='text-align:right'>+5.743</td>\n",
"</tr></tbody></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display_deembeddings_for_transcoder_feature(model, transcoders[0], 1636, k=2)"
]
},
{
"cell_type": "code",
"execution_count": 162,
"id": "bee4eb20-376b-452a-8cb5-b50ec0ec6324",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"</style>\n",
"<b>Direct path</b>\n",
"<table>\n",
" <thead>\n",
" <tr>\n",
" <th colspan=2 style='text-align:center'>Most-negative de-embedding tokens</th>\n",
" <th colspan=2 style='text-align:center'>Most-positive de-embedding tokens</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
"<tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffabab'> appell</span></td>\n",
" <td style='text-align:right'>-2.925</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #7f7fff'> captured</span></td>\n",
" <td style='text-align:right'>+6.070</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffadad'>choice</span></td>\n",
" <td style='text-align:right'>-2.823</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #9696ff'> caught</span></td>\n",
" <td style='text-align:right'>+4.444</td>\n",
"</tr></tbody></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display_deembeddings_for_transcoder_feature(model, transcoders[0], 5637, k=2)"
]
},
{
"cell_type": "code",
"execution_count": 163,
"id": "628941cd-a191-44fc-afce-cbd109319e15",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"</style>\n",
"<b>Direct path</b>\n",
"<table>\n",
" <thead>\n",
" <tr>\n",
" <th colspan=2 style='text-align:center'>Most-negative de-embedding tokens</th>\n",
" <th colspan=2 style='text-align:center'>Most-positive de-embedding tokens</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
"<tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffbaba'> Ukrain</span></td>\n",
" <td style='text-align:right'>-2.887</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #7f7fff'>catch</span></td>\n",
" <td style='text-align:right'>+7.825</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffbaba'> pawn</span></td>\n",
" <td style='text-align:right'>-2.868</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #8080ff'> catch</span></td>\n",
" <td style='text-align:right'>+7.719</td>\n",
"</tr></tbody></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display_deembeddings_for_transcoder_feature(model, transcoders[0], 3981, k=2)"
]
},
{
"cell_type": "code",
"execution_count": 166,
"id": "07dd5350-fc80-4e0e-91d4-d20119f57228",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"</style>\n",
"<b>Direct path</b>\n",
"<table>\n",
" <thead>\n",
" <tr>\n",
" <th colspan=2 style='text-align:center'>Most-negative de-embedding tokens</th>\n",
" <th colspan=2 style='text-align:center'>Most-positive de-embedding tokens</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
"<tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffa5a5'> Unic</span></td>\n",
" <td style='text-align:right'>-3.806</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #7f7fff'> Avery</span></td>\n",
" <td style='text-align:right'>+7.084</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffa7a7'>inary</span></td>\n",
" <td style='text-align:right'>-3.615</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #8080ff'> Bundy</span></td>\n",
" <td style='text-align:right'>+6.977</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffabab'> Stra</span></td>\n",
" <td style='text-align:right'>-3.266</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #8282ff'>endez</span></td>\n",
" <td style='text-align:right'>+6.754</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffacac'> Engineers</span></td>\n",
" <td style='text-align:right'>-3.222</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #8484ff'> Dah</span></td>\n",
" <td style='text-align:right'>+6.612</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffacac'> Churchill</span></td>\n",
" <td style='text-align:right'>-3.217</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #8484ff'> meth</span></td>\n",
" <td style='text-align:right'>+6.583</td>\n",
"</tr></tbody></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display_deembeddings_for_transcoder_feature(model, transcoders[0], 14013, k=5)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "066ee07a-6939-43ad-b690-efc32d85f778",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"</style>\n",
"<b>Direct path</b>\n",
"<table>\n",
" <thead>\n",
" <tr>\n",
" <th colspan=2 style='text-align:center'>Most-negative de-embedding tokens</th>\n",
" <th colspan=2 style='text-align:center'>Most-positive de-embedding tokens</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
"<tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffbdbd'> JJ</span></td>\n",
" <td style='text-align:right'>-2.986</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #7f7fff'> uncovered</span></td>\n",
" <td style='text-align:right'>+8.767</td>\n",
"</tr><tr>\n",
" <td style='text-align:left'><span class='token' style='background-color: #ffc0c0'>quit</span></td>\n",
" <td style='text-align:right'>-2.789</td>\n",
" <td style='text-align:left'><span class='token' style='background-color: #9292ff'> uncover</span></td>\n",
" <td style='text-align:right'>+7.013</td>\n",
"</tr></tbody></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display_deembeddings_for_transcoder_feature(model, transcoders[0], 11383, k=2)"
]
},
{
"cell_type": "markdown",
"id": "e3d2e651-86fa-47b6-aace-237e05035014",
"metadata": {},
"source": [
"*Current hypothesis*: feature fires on forms of the verb \"catch\", \"captured\". Probably news articles about criminals?"
]
},
{
"cell_type": "markdown",
"id": "542408ff-8a54-4c94-a9a0-d90388462088",
"metadata": {},
"source": [
"## Input 6299, 39"
]
},
{
"cell_type": "code",
"execution_count": 171,
"id": "b28703d8-fbb9-4c87-8501-f09ce6c3bdf5",
"metadata": {},
"outputs": [],
"source": [
"prompt = owt_tokens_torch[6299, :39+1]\n",
"_, cache = model.run_with_cache(prompt)"
]
},
{
"cell_type": "code",
"execution_count": 172,
"id": "5e0f15d6-d64b-4d8c-a64c-c3a5e2e47e73",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- Paths of size 2 ---\n",
"Path [0][0]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01\n",
"Path [0][1]: mlp8tc[235]@-1 <- mlp0tc[1636]@-1: 1.7e+01\n",
"Path [0][2]: mlp8tc[235]@-1 <- mlp6tc[22733]@-1: 8.3\n",
"Path [0][3]: mlp8tc[235]@-1 <- mlp3tc[7628]@-1: 7.1\n",
"Path [0][4]: mlp8tc[235]@-1 <- mlp5tc[11575]@-1: 6.3\n",
"Path [0][5]: mlp8tc[235]@-1 <- mlp4tc[21770]@-1: 6.0\n",
"Path [0][6]: mlp8tc[235]@-1 <- mlp2tc[17511]@-1: 4.8\n",
"Path [0][7]: mlp8tc[235]@-1 <- mlp1tc[4598]@-1: 4.6\n",
"Path [0][8]: mlp8tc[235]@-1 <- attn8[4]@39: 3.0\n",
"Path [0][9]: mlp8tc[235]@-1 <- attn0[4]@39: 2.4\n",
"Path [0][10]: mlp8tc[235]@-1 <- attn5[7]@39: 2.3\n",
"Path [0][11]: mlp8tc[235]@-1 <- attn0[1]@39: 2.0\n",
"Path [0][12]: mlp8tc[235]@-1 <- attn0[5]@39: 1.6\n",
"Path [0][13]: mlp8tc[235]@-1 <- mlp2tc[6202]@-1: 1.6\n",
"Path [0][14]: mlp8tc[235]@-1 <- mlp7tc[18519]@-1: 1.4\n",
"--- Paths of size 3 ---\n",
"Path [1][0]: mlp8tc[235]@-1 <- mlp0tc[1636]@-1: 1.7e+01 <- embed0@-1: 6.1\n",
"Path [1][1]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp0tc[1636]@-1: 5.9\n",
"Path [1][2]: mlp8tc[235]@-1 <- mlp0tc[1636]@-1: 1.7e+01 <- attn0[1]@39: 5.7\n",
"Path [1][3]: mlp8tc[235]@-1 <- mlp0tc[1636]@-1: 1.7e+01 <- attn0[4]@39: 5.4\n",
"Path [1][4]: mlp8tc[235]@-1 <- mlp0tc[1636]@-1: 1.7e+01 <- attn0[3]@39: 5.2\n",
"Path [1][5]: mlp8tc[235]@-1 <- mlp3tc[7628]@-1: 7.1 <- mlp0tc[1636]@-1: 4.7\n",
"Path [1][6]: mlp8tc[235]@-1 <- mlp1tc[4598]@-1: 4.6 <- mlp0tc[1636]@-1: 4.6\n",
"Path [1][7]: mlp8tc[235]@-1 <- mlp2tc[17511]@-1: 4.8 <- mlp0tc[1636]@-1: 3.9\n",
"Path [1][8]: mlp8tc[235]@-1 <- mlp0tc[1636]@-1: 1.7e+01 <- attn0[5]@39: 3.4\n",
"Path [1][9]: mlp8tc[235]@-1 <- mlp4tc[21770]@-1: 6.0 <- mlp0tc[1636]@-1: 3.3\n",
"Path [1][10]: mlp8tc[235]@-1 <- mlp6tc[22733]@-1: 8.3 <- mlp0tc[1636]@-1: 3.1\n",
"Path [1][11]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp6tc[22733]@-1: 2.9\n",
"Path [1][12]: mlp8tc[235]@-1 <- mlp5tc[11575]@-1: 6.3 <- mlp0tc[1636]@-1: 2.8\n",
"Path [1][13]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp5tc[11575]@-1: 2.4\n",
"Path [1][14]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2\n",
"--- Paths of size 4 ---\n",
"Path [2][0]: mlp8tc[235]@-1 <- mlp1tc[4598]@-1: 4.6 <- mlp0tc[1636]@-1: 4.6 <- embed0@-1: 2.2\n",
"Path [2][1]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp0tc[1636]@-1: 5.9 <- embed0@-1: 2.1\n",
"Path [2][2]: mlp8tc[235]@-1 <- mlp1tc[4598]@-1: 4.6 <- mlp0tc[1636]@-1: 4.6 <- attn0[1]@39: 2.1\n",
"Path [2][3]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp0tc[1636]@-1: 5.9 <- attn0[1]@39: 2.0\n",
"Path [2][4]: mlp8tc[235]@-1 <- mlp1tc[4598]@-1: 4.6 <- mlp0tc[1636]@-1: 4.6 <- attn0[4]@39: 2.0\n",
"Path [2][5]: mlp8tc[235]@-1 <- mlp1tc[4598]@-1: 4.6 <- mlp0tc[1636]@-1: 4.6 <- attn0[3]@39: 1.9\n",
"Path [2][6]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp0tc[1636]@-1: 5.9 <- attn0[4]@39: 1.9\n",
"Path [2][7]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp0tc[1636]@-1: 5.9 <- attn0[3]@39: 1.8\n",
"Path [2][8]: mlp8tc[235]@-1 <- mlp3tc[7628]@-1: 7.1 <- mlp0tc[1636]@-1: 4.7 <- embed0@-1: 1.7\n",
"Path [2][9]: mlp8tc[235]@-1 <- mlp3tc[7628]@-1: 7.1 <- mlp0tc[1636]@-1: 4.7 <- attn0[1]@39: 1.6\n",
"Path [2][10]: mlp8tc[235]@-1 <- mlp3tc[7628]@-1: 7.1 <- mlp0tc[1636]@-1: 4.7 <- attn0[4]@39: 1.5\n",
"Path [2][11]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5\n",
"Path [2][12]: mlp8tc[235]@-1 <- mlp3tc[7628]@-1: 7.1 <- mlp0tc[1636]@-1: 4.7 <- attn0[3]@39: 1.4\n",
"Path [2][13]: mlp8tc[235]@-1 <- mlp2tc[17511]@-1: 4.8 <- mlp0tc[1636]@-1: 3.9 <- embed0@-1: 1.4\n",
"Path [2][14]: mlp8tc[235]@-1 <- mlp2tc[17511]@-1: 4.8 <- mlp0tc[1636]@-1: 3.9 <- attn0[1]@39: 1.3\n",
"--- Paths of size 5 ---\n",
"Path [3][0]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5 <- embed0@-1: 0.53\n",
"Path [3][1]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5 <- attn0[1]@39: 0.49\n",
"Path [3][2]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5 <- attn0[4]@39: 0.46\n",
"Path [3][3]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5 <- attn0[3]@39: 0.45\n",
"Path [3][4]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5 <- attn0[5]@39: 0.29\n",
"Path [3][5]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5 <- attn0[10]@39: 0.039\n",
"Path [3][6]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5 <- attn0[7]@38: 0.039\n",
"Path [3][7]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5 <- attn0[7]@36: 0.022\n",
"Path [3][8]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5 <- attn0[6]@29: 0.021\n",
"Path [3][9]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5 <- attn0[7]@35: 0.016\n",
"Path [3][10]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5 <- attn0[0]@39: 0.015\n",
"Path [3][11]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5 <- attn0[6]@33: 0.01\n",
"Path [3][12]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 2.2e+01 <- mlp3tc[7628]@-1: 2.2 <- mlp0tc[1636]@-1: 1.5 <- attn0[6]@39: 0.0095\n"
]
}
],
"source": [
"all_paths = greedy_get_top_paths(model, transcoders, cache, my_feature, num_iters=5, num_branches=15)\n",
"print_all_paths(all_paths)"
]
},
{
"cell_type": "markdown",
"id": "4d5449b7-4e58-4c75-a523-fcc7f53f386b",
"metadata": {},
"source": [
"Again, almost all computational paths depend on last token; again, `mlp7tc[14382]` and `mlp0tc[1636]` are the main players."
]
},
{
"cell_type": "markdown",
"id": "fd2ab57e-14ec-478a-9938-c23c6249457e",
"metadata": {},
"source": [
"## Input 817, 63"
]
},
{
"cell_type": "code",
"execution_count": 173,
"id": "dac49238-09bd-4066-81e7-0e82fe0b500a",
"metadata": {},
"outputs": [],
"source": [
"prompt = owt_tokens_torch[817, :63+1]\n",
"_, cache = model.run_with_cache(prompt)"
]
},
{
"cell_type": "code",
"execution_count": 174,
"id": "2180b21a-fa09-447d-be8f-382be8922a99",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- Paths of size 2 ---\n",
"Path [0][0]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01\n",
"Path [0][1]: mlp8tc[235]@-1 <- mlp0tc[1636]@-1: 1.6e+01\n",
"Path [0][2]: mlp8tc[235]@-1 <- mlp6tc[22733]@-1: 6.4\n",
"Path [0][3]: mlp8tc[235]@-1 <- mlp3tc[7628]@-1: 6.1\n",
"Path [0][4]: mlp8tc[235]@-1 <- mlp5tc[11575]@-1: 4.4\n",
"Path [0][5]: mlp8tc[235]@-1 <- mlp4tc[21770]@-1: 4.3\n",
"Path [0][6]: mlp8tc[235]@-1 <- mlp2tc[17511]@-1: 4.0\n",
"Path [0][7]: mlp8tc[235]@-1 <- mlp1tc[4598]@-1: 4.0\n",
"Path [0][8]: mlp8tc[235]@-1 <- attn8[4]@63: 2.7\n",
"Path [0][9]: mlp8tc[235]@-1 <- attn0[4]@63: 2.4\n",
"Path [0][10]: mlp8tc[235]@-1 <- attn0[1]@63: 2.1\n",
"Path [0][11]: mlp8tc[235]@-1 <- attn0[5]@63: 1.6\n",
"Path [0][12]: mlp8tc[235]@-1 <- attn1[0]@62: 1.4\n",
"Path [0][13]: mlp8tc[235]@-1 <- mlp7tc[18519]@-1: 1.3\n",
"Path [0][14]: mlp8tc[235]@-1 <- mlp7tc[23744]@-1: 1.3\n",
"--- Paths of size 3 ---\n",
"Path [1][0]: mlp8tc[235]@-1 <- mlp0tc[1636]@-1: 1.6e+01 <- embed0@-1: 5.7\n",
"Path [1][1]: mlp8tc[235]@-1 <- mlp0tc[1636]@-1: 1.6e+01 <- attn0[1]@63: 5.7\n",
"Path [1][2]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp0tc[1636]@-1: 5.4\n",
"Path [1][3]: mlp8tc[235]@-1 <- mlp0tc[1636]@-1: 1.6e+01 <- attn0[4]@63: 5.3\n",
"Path [1][4]: mlp8tc[235]@-1 <- mlp0tc[1636]@-1: 1.6e+01 <- attn0[3]@63: 5.0\n",
"Path [1][5]: mlp8tc[235]@-1 <- mlp3tc[7628]@-1: 6.1 <- mlp0tc[1636]@-1: 4.3\n",
"Path [1][6]: mlp8tc[235]@-1 <- mlp1tc[4598]@-1: 4.0 <- mlp0tc[1636]@-1: 4.0\n",
"Path [1][7]: mlp8tc[235]@-1 <- mlp2tc[17511]@-1: 4.0 <- mlp0tc[1636]@-1: 3.6\n",
"Path [1][8]: mlp8tc[235]@-1 <- mlp0tc[1636]@-1: 1.6e+01 <- attn0[5]@63: 3.2\n",
"Path [1][9]: mlp8tc[235]@-1 <- mlp4tc[21770]@-1: 4.3 <- mlp0tc[1636]@-1: 3.0\n",
"Path [1][10]: mlp8tc[235]@-1 <- mlp6tc[22733]@-1: 6.4 <- mlp0tc[1636]@-1: 3.0\n",
"Path [1][11]: mlp8tc[235]@-1 <- mlp5tc[11575]@-1: 4.4 <- mlp0tc[1636]@-1: 2.7\n",
"Path [1][12]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp6tc[22733]@-1: 2.3\n",
"Path [1][13]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp3tc[7628]@-1: 1.9\n",
"Path [1][14]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp1tc[4598]@-1: 1.8\n",
"--- Paths of size 4 ---\n",
"Path [2][0]: mlp8tc[235]@-1 <- mlp1tc[4598]@-1: 4.0 <- mlp0tc[1636]@-1: 4.0 <- embed0@-1: 2.0\n",
"Path [2][1]: mlp8tc[235]@-1 <- mlp1tc[4598]@-1: 4.0 <- mlp0tc[1636]@-1: 4.0 <- attn0[1]@63: 2.0\n",
"Path [2][2]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp0tc[1636]@-1: 5.4 <- embed0@-1: 2.0\n",
"Path [2][3]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp0tc[1636]@-1: 5.4 <- attn0[1]@63: 2.0\n",
"Path [2][4]: mlp8tc[235]@-1 <- mlp1tc[4598]@-1: 4.0 <- mlp0tc[1636]@-1: 4.0 <- attn0[4]@63: 1.9\n",
"Path [2][5]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp0tc[1636]@-1: 5.4 <- attn0[4]@63: 1.9\n",
"Path [2][6]: mlp8tc[235]@-1 <- mlp1tc[4598]@-1: 4.0 <- mlp0tc[1636]@-1: 4.0 <- attn0[3]@63: 1.8\n",
"Path [2][7]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp0tc[1636]@-1: 5.4 <- attn0[3]@63: 1.8\n",
"Path [2][8]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp1tc[4598]@-1: 1.8 <- mlp0tc[1636]@-1: 1.8\n",
"Path [2][9]: mlp8tc[235]@-1 <- mlp3tc[7628]@-1: 6.1 <- mlp0tc[1636]@-1: 4.3 <- embed0@-1: 1.6\n",
"Path [2][10]: mlp8tc[235]@-1 <- mlp3tc[7628]@-1: 6.1 <- mlp0tc[1636]@-1: 4.3 <- attn0[1]@63: 1.6\n",
"Path [2][11]: mlp8tc[235]@-1 <- mlp3tc[7628]@-1: 6.1 <- mlp0tc[1636]@-1: 4.3 <- attn0[4]@63: 1.5\n",
"Path [2][12]: mlp8tc[235]@-1 <- mlp3tc[7628]@-1: 6.1 <- mlp0tc[1636]@-1: 4.3 <- attn0[3]@63: 1.4\n",
"Path [2][13]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp3tc[7628]@-1: 1.9 <- mlp0tc[1636]@-1: 1.3\n",
"Path [2][14]: mlp8tc[235]@-1 <- mlp2tc[17511]@-1: 4.0 <- mlp0tc[1636]@-1: 3.6 <- embed0@-1: 1.3\n",
"--- Paths of size 5 ---\n",
"Path [3][0]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp1tc[4598]@-1: 1.8 <- mlp0tc[1636]@-1: 1.8 <- embed0@-1: 0.9\n",
"Path [3][1]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp1tc[4598]@-1: 1.8 <- mlp0tc[1636]@-1: 1.8 <- attn0[1]@63: 0.89\n",
"Path [3][2]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp1tc[4598]@-1: 1.8 <- mlp0tc[1636]@-1: 1.8 <- attn0[4]@63: 0.83\n",
"Path [3][3]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp1tc[4598]@-1: 1.8 <- mlp0tc[1636]@-1: 1.8 <- attn0[3]@63: 0.79\n",
"Path [3][4]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp1tc[4598]@-1: 1.8 <- mlp0tc[1636]@-1: 1.8 <- attn0[5]@63: 0.51\n",
"Path [3][5]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp3tc[7628]@-1: 1.9 <- mlp0tc[1636]@-1: 1.3 <- embed0@-1: 0.5\n",
"Path [3][6]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp3tc[7628]@-1: 1.9 <- mlp0tc[1636]@-1: 1.3 <- attn0[1]@63: 0.49\n",
"Path [3][7]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp3tc[7628]@-1: 1.9 <- mlp0tc[1636]@-1: 1.3 <- attn0[4]@63: 0.46\n",
"Path [3][8]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp3tc[7628]@-1: 1.9 <- mlp0tc[1636]@-1: 1.3 <- attn0[3]@63: 0.44\n",
"Path [3][9]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp3tc[7628]@-1: 1.9 <- mlp0tc[1636]@-1: 1.3 <- attn0[5]@63: 0.28\n",
"Path [3][10]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp1tc[4598]@-1: 1.8 <- mlp0tc[1636]@-1: 1.8 <- attn0[10]@63: 0.065\n",
"Path [3][11]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp1tc[4598]@-1: 1.8 <- mlp0tc[1636]@-1: 1.8 <- attn0[7]@61: 0.04\n",
"Path [3][12]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp3tc[7628]@-1: 1.9 <- mlp0tc[1636]@-1: 1.3 <- attn0[10]@63: 0.036\n",
"Path [3][13]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp1tc[4598]@-1: 1.8 <- mlp0tc[1636]@-1: 1.8 <- attn0[7]@62: 0.031\n",
"Path [3][14]: mlp8tc[235]@-1 <- mlp7tc[14382]@-1: 1.8e+01 <- mlp1tc[4598]@-1: 1.8 <- mlp0tc[1636]@-1: 1.8 <- attn0[0]@63: 0.025\n"
]
}
],
"source": [
"all_paths = greedy_get_top_paths(model, transcoders, cache, my_feature, num_iters=5, num_branches=15)\n",
"print_all_paths(all_paths)"
]
},
{
"cell_type": "markdown",
"id": "dcbbce5a-2a7e-42fc-99a6-62b7ee58de31",
"metadata": {},
"source": [
"Same pattern as before."
]
},
{
"cell_type": "markdown",
"id": "f8981450-1540-49e7-b02d-5effff72af00",
"metadata": {},
"source": [
"## Moment of truth: confirming/denying our hypothesis\n",
"\n",
"**Final hypothesis**: largely single-token feature that fires on \"caught\", \"captured\", \"uncovered\", and similar (particularly past-tense) forms of the verb \"to catch\"."
]
},
{
"cell_type": "code",
"execution_count": 175,
"id": "07b7cf70-bcf4-4a99-874c-2c1cc86203b6",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<h3 style='font-family: serif'>Sparsity: 0.0203%</h3>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<details><summary><h3 style='display: inline; font-family: serif'>Between 22.41 and 26.89: 0.0001%</h3></summary>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> for<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> Sugar<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> Man<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>,<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> is<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ff8c00'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (22.41)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> in<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> a<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> battle<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> over<span class='feature_val'> (0.00)</span></span><span> Example 11390, token 41</span><br/></details>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<details><summary><h3 style='display: inline; font-family: serif'>Between 17.93 and 22.41: 0.0013%</h3></summary>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>If<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> you<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>'re<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> not<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> all<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffa02e'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (18.36)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> up<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> with<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> the<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> current<span class='feature_val'> (0.00)</span></span><span> Example 11713, token 34</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> "<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>The<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> players<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> can<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> get<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ff9e29'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (18.75)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> up<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> in<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> the<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> treadmill<span class='feature_val'> (0.00)</span></span><span> Example 4644, token 86</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> of<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> individuals<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> who<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> have<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> been<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ff9b22'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (19.38)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> in<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> this<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> web<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>."<span class='feature_val'> (0.00)</span></span><span> Example 6801, token 70</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> who<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> str<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>ays<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> eventually<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> gets<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ff9a1f'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (19.64)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>.<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> The<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> woman<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> who<span class='feature_val'> (0.00)</span></span><span> Example 1417, token 46</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> the<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> only<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> issue<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> was<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> getting<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ff9719'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (20.17)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>.<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> Which<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> pretty<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> much<span class='feature_val'> (0.00)</span></span><span> Example 817, token 63</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>hall<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> initially<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> appeared<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> to<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> be<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ff9514'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (20.64)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> flat<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>-<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>footed<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> by<span class='feature_val'> (0.00)</span></span><span> Example 8531, token 111</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> Electric<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> Utilities<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> Board<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>,<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> are<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ff920d'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (21.19)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> in<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> the<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> middle<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>.<span class='feature_val'> (0.00)</span></span><span> Example 755, token 73</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>.<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>\n",
"<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>\n",
"<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>He<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> was<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ff910b'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (21.41)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> in<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> Malaysia<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> and<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> was<span class='feature_val'> (0.00)</span></span><span> Example 6299, token 39</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>\n",
"<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>Found<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>ers<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> sometimes<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> get<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ff8e06'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (21.88)</span></span><span class='token'\n",
" style='background-color: #fefbf6'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> up<span class='feature_val'> (0.76)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> with<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> trying<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> to<span class='feature_val'> (0.00)</span></span><span> Example 1077, token 112</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> for<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> Sugar<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> Man<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>,<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> is<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ff8c00'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (22.41)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> in<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> a<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> battle<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> over<span class='feature_val'> (0.00)</span></span><span> Example 11390, token 41</span><br/></details>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<details><summary><h3 style='display: inline; font-family: serif'>Between 13.44 and 17.93: 0.0010%</h3></summary>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> into<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> brutal<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> atrocities<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>,<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> often<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffb760'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (13.96)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> on<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> video<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> and<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> in<span class='feature_val'> (0.00)</span></span><span> Example 3463, token 90</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>-<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>day<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> chase<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> has<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> been<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffb254'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (14.98)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>.<span class='feature_val'> (0.00)</span></span><span> Example 3089, token 126</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> and<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> the<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> horrific<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> incident<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> was<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffaf4e'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (15.55)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> on<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> tape<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>.<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>\n",
"<span class='feature_val'> (0.00)</span></span><span> Example 2769, token 36</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>pers<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>isted<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> until<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> he<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> was<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffae4b'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (15.77)</span></span><span class='token'\n",
" style='background-color: #ffedd8'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> red<span class='feature_val'> (3.35)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>-<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>handed<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> by<span class='feature_val'> (0.00)</span></span><span> Example 791, token 71</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> and<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> the<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> whole<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> assault<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> is<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffaa43'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (16.45)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> on<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> tape<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>.<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>\n",
"<span class='feature_val'> (0.00)</span></span><span> Example 10607, token 83</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>off<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>ending<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>\n",
"<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>\n",
"<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>Once<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffa73b'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'><b> caught</b><span class='feature_val'> (17.14)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>,<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> most<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> repeat<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'> offenders<span class='feature_val'> (0.00)</span></span><span> Example 9687, token 105</span><br/>\n",
"<script>\n",
" function showTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='inline'\n",
" }\n",
"\n",
" function hideTooltip(element) {\n",
" feature_val = element.querySelector('.feature_val')\n",
" feature_val.style.display='none'\n",
" }\n",
"</script>\n",
"<style>\n",
" span.token {\n",
" font-family: monospace;\n",
" \n",
" border-style: solid;\n",
" border-width: 1px;\n",
" border-color: #dddddd;\n",
" }\n",
"\n",
" .feature_val {\n",
" display: none;\n",
" font-family: serif;\n",
" }\n",
"\n",
" #tooltip {\n",
" display: none;\n",
" }\n",
"</style>\n",
"<span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>\n",
"<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>\n",
"<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='background-color: #ffffff'\n",
" onMouseOver='showTooltip(this)'\n",
" onMouseOut='hideTooltip(this)'>People<span class='feature_val'> (0.00)</span></span><span class='token'\n",
" style='ba
gitextract_3wd5og0z/ ├── .gitignore ├── README.md ├── __init__.py ├── case_study_caught.ipynb ├── case_study_citations.ipynb ├── case_study_local_context.ipynb ├── greaterthan.ipynb ├── interp-comparison.ipynb ├── requirements.txt ├── restricted blind case studies.ipynb ├── sae_training/ │ ├── __init__.py │ ├── activations_store.py │ ├── config.py │ ├── geom_median/ │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __init__.py │ │ ├── pyproject.toml │ │ ├── setup.py │ │ └── src/ │ │ └── geom_median/ │ │ ├── __init__.py │ │ ├── numpy/ │ │ │ ├── __init__.py │ │ │ ├── main.py │ │ │ ├── utils.py │ │ │ ├── weiszfeld_array.py │ │ │ └── weiszfeld_list_of_array.py │ │ └── torch/ │ │ ├── __init__.py │ │ ├── main.py │ │ ├── utils.py │ │ ├── weiszfeld_array.py │ │ └── weiszfeld_list_of_array.py │ ├── optim.py │ ├── requirements.txt │ ├── sparse_autoencoder.py │ ├── train_sae_on_language_model.py │ └── utils.py ├── setup.sh ├── sweep.ipynb ├── train_transcoder.py ├── transcoder_circuits/ │ ├── __init__.py │ ├── circuit_analysis.py │ ├── feature_dashboards.py │ └── replacement_ctx.py └── walkthrough.ipynb
SYMBOL INDEX (136 symbols across 17 files)
FILE: sae_training/activations_store.py
class ActivationsStore (line 11) | class ActivationsStore:
method __init__ (line 16) | def __init__(
method get_batch_tokens (line 62) | def get_batch_tokens(self):
method get_activations (line 139) | def get_activations(self, batch_tokens, get_loss=False):
method get_buffer (line 172) | def get_buffer(self, n_batches_in_buffer):
method get_data_loader (line 278) | def get_data_loader(self,) -> DataLoader:
method next_batch (line 339) | def next_batch(self):
FILE: sae_training/config.py
class RunnerConfig (line 11) | class RunnerConfig(ABC):
method __post_init__ (line 54) | def __post_init__(self):
class LanguageModelSAERunnerConfig (line 63) | class LanguageModelSAERunnerConfig(RunnerConfig):
method __post_init__ (line 113) | def __post_init__(self):
class CacheActivationsRunnerConfig (line 187) | class CacheActivationsRunnerConfig(RunnerConfig):
method __post_init__ (line 198) | def __post_init__(self):
FILE: sae_training/geom_median/src/geom_median/numpy/main.py
function compute_geometric_median (line 7) | def compute_geometric_median(
FILE: sae_training/geom_median/src/geom_median/numpy/utils.py
function check_list_of_array_format (line 4) | def check_list_of_array_format(points):
function check_list_of_list_of_array_format (line 7) | def check_list_of_list_of_array_format(points):
function check_shapes_compatibility (line 13) | def check_shapes_compatibility(list_of_arrays, i):
FILE: sae_training/geom_median/src/geom_median/numpy/weiszfeld_array.py
function geometric_median_array (line 4) | def geometric_median_array(points, weights, eps=1e-6, maxiter=100, ftol=...
function geometric_median_per_component (line 42) | def geometric_median_per_component(points, weights, eps=1e-6, maxiter=10...
function weighted_average (line 67) | def weighted_average(points, weights):
function geometric_median_objective (line 77) | def geometric_median_objective(median, points, weights):
FILE: sae_training/geom_median/src/geom_median/numpy/weiszfeld_list_of_array.py
function geometric_median_list_of_array (line 4) | def geometric_median_list_of_array(points, weights, eps=1e-6, maxiter=10...
function weighted_average (line 42) | def weighted_average(points, weights):
function geometric_median_objective (line 45) | def geometric_median_objective(median, points, weights):
function l2distance (line 49) | def l2distance(p1, p2):
function subtract (line 52) | def subtract(p1, p2):
FILE: sae_training/geom_median/src/geom_median/torch/main.py
function compute_geometric_median (line 7) | def compute_geometric_median(
FILE: sae_training/geom_median/src/geom_median/torch/utils.py
function check_list_of_array_format (line 4) | def check_list_of_array_format(points):
function check_list_of_list_of_array_format (line 7) | def check_list_of_list_of_array_format(points):
function check_shapes_compatibility (line 13) | def check_shapes_compatibility(list_of_arrays, i):
FILE: sae_training/geom_median/src/geom_median/torch/weiszfeld_array.py
function geometric_median_array (line 8) | def geometric_median_array(points, weights, eps=1e-6, maxiter=100, ftol=...
function geometric_median_per_component (line 53) | def geometric_median_per_component(points, weights, eps=1e-6, maxiter=10...
function weighted_average (line 81) | def weighted_average(points, weights):
function geometric_median_objective (line 89) | def geometric_median_objective(median, points, weights):
FILE: sae_training/geom_median/src/geom_median/torch/weiszfeld_list_of_array.py
function geometric_median_list_of_array (line 5) | def geometric_median_list_of_array(points, weights, eps=1e-6, maxiter=10...
function weighted_average_component (line 49) | def weighted_average_component(points, weights):
function weighted_average (line 55) | def weighted_average(points, weights):
function geometric_median_objective (line 60) | def geometric_median_objective(median, points, weights):
function l2distance (line 64) | def l2distance(p1, p2):
FILE: sae_training/optim.py
function get_scheduler (line 15) | def get_scheduler(
FILE: sae_training/sparse_autoencoder.py
class SparseAutoencoder (line 23) | class SparseAutoencoder(HookedRootModule):
method __init__ (line 27) | def __init__(
method forward (line 107) | def forward(self, x, dead_neuron_mask = None, mse_target=None):
method get_sparse_connection_loss (line 183) | def get_sparse_connection_loss(self):
method initialize_b_dec (line 190) | def initialize_b_dec(self, activation_store):
method initialize_b_dec_with_geometric_median (line 202) | def initialize_b_dec_with_geometric_median(self, activation_store):
method initialize_b_dec_with_mean (line 245) | def initialize_b_dec_with_mean(self, activation_store):
method resample_neurons_l2 (line 278) | def resample_neurons_l2(
method resample_neurons_anthropic (line 367) | def resample_neurons_anthropic(
method collect_anthropic_resampling_losses (line 459) | def collect_anthropic_resampling_losses(self, model, activation_store):
method get_test_loss (line 512) | def get_test_loss(self, batch_tokens, model):
method set_decoder_norm_to_unit_norm (line 559) | def set_decoder_norm_to_unit_norm(self):
method remove_gradient_parallel_to_decoder_directions (line 563) | def remove_gradient_parallel_to_decoder_directions(self):
method save_model (line 581) | def save_model(self, path: str):
method load_from_pretrained (line 607) | def load_from_pretrained(cls, path: str):
method get_name (line 653) | def get_name(self):
FILE: sae_training/train_sae_on_language_model.py
function train_sae_on_language_model (line 16) | def train_sae_on_language_model(
function run_evals (line 293) | def run_evals(sparse_autoencoder: SparseAutoencoder, activation_store: A...
function get_recons_loss (line 410) | def get_recons_loss(sparse_autoencoder, model, activation_store, batch_t...
function mean_ablate_hook (line 441) | def mean_ablate_hook(mlp_post, hook):
function zero_ablate_hook (line 446) | def zero_ablate_hook(mlp_post, hook):
function kl_divergence_attention (line 451) | def kl_divergence_attention(y_true, y_pred):
FILE: sae_training/utils.py
class LMSparseAutoencoderSessionloader (line 11) | class LMSparseAutoencoderSessionloader():
method __init__ (line 19) | def __init__(self, cfg: LanguageModelSAERunnerConfig):
method load_session (line 23) | def load_session(self) -> Tuple[HookedTransformer, SparseAutoencoder, ...
method load_session_from_pretrained (line 36) | def load_session_from_pretrained(cls, path: str) -> Tuple[HookedTransf...
method get_model (line 53) | def get_model(self, model_name: str):
method initialize_sparse_autoencoder (line 64) | def initialize_sparse_autoencoder(self, cfg: LanguageModelSAERunnerCon...
method get_activations_loader (line 73) | def get_activations_loader(self, cfg: LanguageModelSAERunnerConfig, mo...
function shuffle_activations_pairwise (line 84) | def shuffle_activations_pairwise(datapath: str, buffer_idx_range: Tuple[...
FILE: transcoder_circuits/circuit_analysis.py
function get_attn_head_contribs (line 13) | def get_attn_head_contribs(model, cache, layer, range_normal):
function get_transcoder_ixg (line 37) | def get_transcoder_ixg(transcoder, cache, range_normal, input_layer, inp...
function get_mean_ixg (line 57) | def get_mean_ixg(model, tokens_arr, range_transcoder, range_feature_idx,...
function get_ln_constant (line 113) | def get_ln_constant(model, cache, vector, layer, token, is_ln2=False, re...
class ComponentType (line 134) | class ComponentType(enum.Enum):
class FeatureType (line 144) | class FeatureType(enum.Enum):
class ContribType (line 149) | class ContribType(enum.Enum):
class Component (line 155) | class Component:
method __str__ (line 166) | def __str__(self, show_token=True):
method __repr__ (line 184) | def __repr__(self):
class FeatureVector (line 190) | class FeatureVector:
method __post_init__ (line 208) | def __post_init__(self):
method __str__ (line 214) | def __str__(self, show_full=True, show_contrib=True, show_last_token=T...
method __repr__ (line 227) | def __repr__(self):
function make_sae_feature_vector (line 232) | def make_sae_feature_vector(sae, feature_idx, use_encoder=True, token=-1):
function get_top_transcoder_features (line 273) | def get_top_transcoder_features(model, transcoder, cache, feature_vector...
function get_top_contribs (line 317) | def get_top_contribs(model, transcoders, cache, feature_vector, k=5, ign...
function greedy_get_top_paths (line 399) | def greedy_get_top_paths(model, transcoders, cache, feature_vector, num_...
function print_all_paths (line 436) | def print_all_paths(paths):
function get_raw_top_features_among_paths (line 453) | def get_raw_top_features_among_paths(all_paths, use_tokens=True, top_k=5...
class FilterType (line 494) | class FilterType(enum.Enum):
class FeatureFilter (line 503) | class FeatureFilter:
method match (line 522) | def match(self, feature):
function flatten_nested_list (line 554) | def flatten_nested_list(x):
function get_paths_via_filter (line 557) | def get_paths_via_filter(all_paths, infix_path=None, not_infix_path=None...
function path_to_str (line 622) | def path_to_str(path, show_contrib=False, show_last_token=False):
function paths_to_graph (line 628) | def paths_to_graph(all_paths):
function add_error_nodes_to_graph (line 685) | def add_error_nodes_to_graph(model, cache, transcoders, edges, nodes, do...
function sum_over_tokens (line 794) | def sum_over_tokens(edges, nodes):
function layer_to_float (line 817) | def layer_to_float(feature):
function nodes_to_coords (line 824) | def nodes_to_coords(nodes, y_jitter=0.3, y_mult=1.0):
function get_contribs_in_graph (line 844) | def get_contribs_in_graph(edges, nodes):
function plot_graph (line 859) | def plot_graph(edges, nodes, y_mult=1.0, width=800, height=600, arrow_wi...
FILE: transcoder_circuits/feature_dashboards.py
function get_feature_scores (line 12) | def get_feature_scores(model, encoder, tokens_arr, feature_idx, batch_si...
function sample_percentiles (line 39) | def sample_percentiles(arr, num_samples):
function sample_uniform (line 63) | def sample_uniform(arr, num_samples, unique=True, use_tqdm=False, only_m...
function make_sequence_html (line 103) | def make_sequence_html(token_strs, scores,
function get_uniform_band_examples (line 174) | def get_uniform_band_examples(scores, uniform_vals, uniform_idxs, num_ba...
function display_activating_examples_dash (line 193) | def display_activating_examples_dash(model, all_tokens, scores,
function get_logits_for_feature (line 221) | def get_logits_for_feature(model, sae, feature_idx, k=7):
function batch_color_interpolate (line 238) | def batch_color_interpolate(scores, max_color, zero_color, scores_min=No...
function display_logits_for_feature (line 250) | def display_logits_for_feature(model, sae, feature_idx, k=7):
function plot_pulledback_feature (line 301) | def plot_pulledback_feature(model, feature_vector, transcoder, size=None...
function get_transcoder_pullback_features (line 343) | def get_transcoder_pullback_features(model, feature_vector, transcoder, ...
function display_transcoder_pullback_features (line 361) | def display_transcoder_pullback_features(model, feature_vector, transcod...
function get_ov_norms_for_transcoder_feature (line 408) | def get_ov_norms_for_transcoder_feature(model, transcoder, feature_idx, ...
function get_deembeddings_for_transcoder_feature (line 427) | def get_deembeddings_for_transcoder_feature(model, transcoder, feature_i...
function get_deembeddings_for_feature_vector (line 449) | def get_deembeddings_for_feature_vector(model, feature_vector, k=7):
function plot_deembedding_for_transcoder_feature (line 468) | def plot_deembedding_for_transcoder_feature(model, transcoder, feature_i...
function display_deembeddings_for_transcoder_feature (line 483) | def display_deembeddings_for_transcoder_feature(model, transcoder, featu...
function display_deembeddings_for_feature_vector (line 528) | def display_deembeddings_for_feature_vector(model, feature_vector, k=7):
function display_analysis_for_transcoder_feature (line 573) | def display_analysis_for_transcoder_feature(model, transcoder, feature_i...
FILE: transcoder_circuits/replacement_ctx.py
class TranscoderWrapper (line 4) | class TranscoderWrapper(torch.nn.Module):
method __init__ (line 5) | def __init__(self, transcoder):
method forward (line 8) | def forward(self, x):
class TranscoderReplacementContext (line 11) | class TranscoderReplacementContext:
method __init__ (line 12) | def __init__(self, model, transcoders):
method __enter__ (line 20) | def __enter__(self):
method __exit__ (line 24) | def __exit__(self, exc_type, exc_value, exc_tb):
class ZeroAblationWrapper (line 28) | class ZeroAblationWrapper(torch.nn.Module):
method __init__ (line 29) | def __init__(self):
method forward (line 31) | def forward(self, x):
class ZeroAblationContext (line 34) | class ZeroAblationContext:
method __init__ (line 35) | def __init__(self, model, layers):
method __enter__ (line 41) | def __enter__(self):
method __exit__ (line 45) | def __exit__(self, exc_type, exc_value, exc_tb):
Condensed preview — 43 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,627K chars).
[
{
"path": ".gitignore",
"chars": 67,
"preview": "**/*gpt-2-small-transcoders\n**/*.ipynb_checkpoints\n**/*__pycache__\n"
},
{
"path": "README.md",
"chars": 2844,
"preview": "# Transcoder-circuits: reverse-engineering LLM circuits with transcoders\n\nThis repository contains tools for understandi"
},
{
"path": "__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "case_study_caught.ipynb",
"chars": 377288,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"85b8a651-baa3-4772-85ec-a3bb10d1851a\",\n \"metadata\": {},\n \"so"
},
{
"path": "case_study_citations.ipynb",
"chars": 662650,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"85b8a651-baa3-4772-85ec-a3bb10d1851a\",\n \"metadata\": {},\n \"so"
},
{
"path": "case_study_local_context.ipynb",
"chars": 2199621,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"85b8a651-baa3-4772-85ec-a3bb10d1851a\",\n \"metadata\": {},\n \"so"
},
{
"path": "greaterthan.ipynb",
"chars": 1307887,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"cd3ae05d-bb09-495d-8afe-fae52ed99d5f\",\n \"metadata\": {},\n \"so"
},
{
"path": "interp-comparison.ipynb",
"chars": 40376,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"677b961b-0971-43a7-9f9c-c8cdc7487864\",\n \"metadata\": {},\n \"so"
},
{
"path": "requirements.txt",
"chars": 154,
"preview": "matplotlib\nnumpy\nplotly\ntorch==2.2.0\ntqdm\ntransformer_lens==1.11.0\ndatasets==2.12.0\neinops==0.7.0\nsetuptools==67.7.2\nwan"
},
{
"path": "sae_training/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "sae_training/activations_store.py",
"chars": 15212,
"preview": "import os\n\nimport torch\nfrom datasets import load_dataset\nfrom torch.utils.data import DataLoader\nfrom tqdm import tqdm\n"
},
{
"path": "sae_training/config.py",
"chars": 7718,
"preview": "from abc import ABC\nfrom dataclasses import dataclass\nfrom typing import Optional\n\nimport torch\n\nimport wandb\n\n\n@datacla"
},
{
"path": "sae_training/geom_median/.gitignore",
"chars": 429,
"preview": "# pycharm\n.idea\n\n# compiled\n._pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\ne"
},
{
"path": "sae_training/geom_median/LICENSE",
"chars": 35058,
"preview": "The GNU General Public License, Version 3, 29 June 2007 (GPLv3)\n========================================================"
},
{
"path": "sae_training/geom_median/README.md",
"chars": 5310,
"preview": "# Differentiable and Fast Geometric Median in NumPy and PyTorch\n\nThis package implements a fast numerical algorithm to c"
},
{
"path": "sae_training/geom_median/__init__.py",
"chars": 42,
"preview": "from .src.geom_median import numpy, torch\n"
},
{
"path": "sae_training/geom_median/pyproject.toml",
"chars": 105,
"preview": "\n[build-system]\nrequires = [\n \"setuptools>=42\",\n \"wheel\"\n]\nbuild-backend = \"setuptools.build_meta\"\n"
},
{
"path": "sae_training/geom_median/setup.py",
"chars": 957,
"preview": "import setuptools\n\nwith open(\"README.md\", \"r\", encoding=\"utf-8\") as fh:\n long_description = fh.read()\n\nsetuptools.set"
},
{
"path": "sae_training/geom_median/src/geom_median/__init__.py",
"chars": 1,
"preview": "\n"
},
{
"path": "sae_training/geom_median/src/geom_median/numpy/__init__.py",
"chars": 80,
"preview": "from .main import compute_geometric_median\n\n__all__ = [compute_geometric_median]"
},
{
"path": "sae_training/geom_median/src/geom_median/numpy/main.py",
"chars": 1488,
"preview": "import numpy as np\n\nfrom .weiszfeld_array import geometric_median_array, geometric_median_per_component\nfrom .weiszfeld_"
},
{
"path": "sae_training/geom_median/src/geom_median/numpy/utils.py",
"chars": 1056,
"preview": "from itertools import zip_longest\nimport numpy as np\n\ndef check_list_of_array_format(points):\n\tcheck_shapes_compatibilit"
},
{
"path": "sae_training/geom_median/src/geom_median/numpy/weiszfeld_array.py",
"chars": 3883,
"preview": "import numpy as np\nfrom types import SimpleNamespace\n\ndef geometric_median_array(points, weights, eps=1e-6, maxiter=100,"
},
{
"path": "sae_training/geom_median/src/geom_median/numpy/weiszfeld_list_of_array.py",
"chars": 2464,
"preview": "import numpy as np\nfrom types import SimpleNamespace\n\ndef geometric_median_list_of_array(points, weights, eps=1e-6, maxi"
},
{
"path": "sae_training/geom_median/src/geom_median/torch/__init__.py",
"chars": 80,
"preview": "from .main import compute_geometric_median\n\n__all__ = [compute_geometric_median]"
},
{
"path": "sae_training/geom_median/src/geom_median/torch/main.py",
"chars": 1596,
"preview": "import torch\n\nfrom .weiszfeld_array import geometric_median_array, geometric_median_per_component\nfrom .weiszfeld_list_o"
},
{
"path": "sae_training/geom_median/src/geom_median/torch/utils.py",
"chars": 1055,
"preview": "from itertools import zip_longest\nimport torch\n\ndef check_list_of_array_format(points):\n\tcheck_shapes_compatibility(poin"
},
{
"path": "sae_training/geom_median/src/geom_median/torch/weiszfeld_array.py",
"chars": 4220,
"preview": "from types import SimpleNamespace\n\nimport numpy as np\nimport torch\nimport tqdm\n\n\ndef geometric_median_array(points, weig"
},
{
"path": "sae_training/geom_median/src/geom_median/torch/weiszfeld_list_of_array.py",
"chars": 2901,
"preview": "import numpy as np\nimport torch\nfrom types import SimpleNamespace\n\ndef geometric_median_list_of_array(points, weights, e"
},
{
"path": "sae_training/optim.py",
"chars": 3700,
"preview": "'''\nTook the LR scheduler from my previous work: https://github.com/jbloomAus/DecisionTransformerInterpretability/blob/e"
},
{
"path": "sae_training/requirements.txt",
"chars": 169,
"preview": "datasets==2.12.0\neinops==0.7.0\nipython==8.12.3\njaxtyping==0.2.28\nmatplotlib==3.7.1\nplotly==5.18.0\nsetuptools==67.7.2\ntqd"
},
{
"path": "sae_training/sparse_autoencoder.py",
"chars": 28275,
"preview": "\n\"\"\"Most of this is just copied over from Arthur's code and slightly simplified:\nhttps://github.com/ArthurConmy/sae/blob"
},
{
"path": "sae_training/train_sae_on_language_model.py",
"chars": 20807,
"preview": "from functools import partial\n\nimport numpy as np\nimport torch\nfrom torch.optim import Adam\nfrom tqdm import tqdm\nfrom t"
},
{
"path": "sae_training/utils.py",
"chars": 3870,
"preview": "from typing import Tuple\n\nimport torch\nfrom transformer_lens import HookedTransformer\n\nfrom sae_training.activations_sto"
},
{
"path": "setup.sh",
"chars": 675,
"preview": "echo \"Installing Python packages.\"\n\npip install -r requirements.txt\n\necho \"Package installation complete.\"\n\necho \"Checki"
},
{
"path": "sweep.ipynb",
"chars": 19973,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"6e3fe139-9140-487a-82d6-1b2efab1b269\",\n \"metadata\": {},\n \"so"
},
{
"path": "train_transcoder.py",
"chars": 4310,
"preview": "# Transcoder training sample code\n\n\"\"\"\nThis sample script can be used to train a transcoder on a model of your choice.\nT"
},
{
"path": "transcoder_circuits/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "transcoder_circuits/circuit_analysis.py",
"chars": 40377,
"preview": "# --- code for circuit analysis --- #\r\n\r\nimport torch\r\nimport numpy as np\r\nimport tqdm\r\n\r\nfrom transformer_lens.utils im"
},
{
"path": "transcoder_circuits/feature_dashboards.py",
"chars": 25556,
"preview": "# --- feature scores / feature dashboard functions --- #\r\n\r\nimport numpy as np\r\nimport tqdm\r\nimport torch\r\n\r\nimport matp"
},
{
"path": "transcoder_circuits/replacement_ctx.py",
"chars": 1637,
"preview": "# --- context manager for replacing MLP sublayers with transcoders ---\r\nimport torch\r\n\r\nclass TranscoderWrapper(torch.nn"
},
{
"path": "walkthrough.ipynb",
"chars": 1612113,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"6e3fe139-9140-487a-82d6-1b2efab1b269\",\n \"metadata\": {},\n \"so"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the jacobdunefsky/transcoder_circuits GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 43 files (16.6 MB), approximately 1.6M tokens, and a symbol index with 136 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.