358 lines
54 KiB
Plaintext
358 lines
54 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "ccfdbb24",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import os\n",
|
||
"import pandas as pd\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"\n",
|
||
"from datasets import load_dataset"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "e21fae62",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"OUTPUT_DIR = \"./dataset\"\n",
|
||
"FILE_PATH = os.path.join(OUTPUT_DIR, \"fineweb-6b.parquet\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"id": "bb9c37b2",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Generating train split: 8548517 examples [00:20, 417303.96 examples/s]\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Dataset({\n",
|
||
" features: ['text', 'meta', 'id'],\n",
|
||
" num_rows: 8548517\n",
|
||
"})"
|
||
]
|
||
},
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dataset = load_dataset(\"parquet\", data_files={\n",
|
||
" \"train\": FILE_PATH\n",
|
||
"}, split=\"train\")\n",
|
||
"dataset"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"id": "917999bb",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"{'text': Value('string'),\n",
|
||
" 'meta': {'url': Value('string'),\n",
|
||
" 'dump': Value('string'),\n",
|
||
" 's_cluster': Value('int64'),\n",
|
||
" 'token_count': Value('int64')},\n",
|
||
" 'id': Value('string')}"
|
||
]
|
||
},
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"dataset.features"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"id": "1f6addf9",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"{'id': '<urn:uuid:d66bc6fe-8477-4adf-b430-f6a558ccc8ff>',\n",
|
||
" 'meta': {'dump': None, 's_cluster': None, 'token_count': None, 'url': None},\n",
|
||
" 'text': 'How AP reported in all formats from tornado-stricken regionsMarch 8, '\n",
|
||
" '2012\\n'\n",
|
||
" 'When the first serious bout of tornadoes of 2012 blew through middle '\n",
|
||
" 'America in the middle of the night, they touched down in places '\n",
|
||
" 'hours from any AP bureau. Our closest video journalist was '\n",
|
||
" 'Chicago-based Robert Ray, who dropped his plans to travel to Georgia '\n",
|
||
" 'for Super Tuesday, booked several flights to the cities closest to '\n",
|
||
" 'the strikes and headed for the airport. He’d decide once there which '\n",
|
||
" 'flight to take.\\n'\n",
|
||
" 'He never got on board a plane. Instead, he ended up driving toward '\n",
|
||
" 'Harrisburg, Ill., where initial reports suggested a town was '\n",
|
||
" 'destroyed. That decision turned out to be a lucky break for the AP. '\n",
|
||
" 'Twice.\\n'\n",
|
||
" 'Ray was among the first journalists to arrive and he confirmed those '\n",
|
||
" 'reports -- in all formats. He shot powerful video, put victims on '\n",
|
||
" 'the phone with AP Radio and played back sound to an editor who '\n",
|
||
" 'transcribed the interviews and put the material on text wires. He '\n",
|
||
" 'then walked around the devastation with the Central Regional Desk on '\n",
|
||
" 'the line, talking to victims with the phone held so close that '\n",
|
||
" 'editors could transcribe his interviews in real time.\\n'\n",
|
||
" 'Ray also made a dramatic image of a young girl who found a man’s '\n",
|
||
" 'prosthetic leg in the rubble, propped it up next to her destroyed '\n",
|
||
" 'home and spray-painted an impromptu sign: “Found leg. Seriously.”\\n'\n",
|
||
" 'The following day, he was back on the road and headed for Georgia '\n",
|
||
" 'and a Super Tuesday date with Newt Gingrich’s campaign. The drive '\n",
|
||
" 'would take him through a stretch of the South that forecasters '\n",
|
||
" 'expected would suffer another wave of tornadoes.\\n'\n",
|
||
" 'To prevent running into THAT storm, Ray used his iPhone to monitor '\n",
|
||
" 'Doppler radar, zooming in on extreme cells and using Google maps to '\n",
|
||
" 'direct himself to safe routes. And then the journalist took over '\n",
|
||
" 'again.\\n'\n",
|
||
" '“When weather like that occurs, a reporter must seize the '\n",
|
||
" 'opportunity to get the news out and allow people to see, hear and '\n",
|
||
" 'read the power of nature so that they can take proper shelter,” Ray '\n",
|
||
" 'says.\\n'\n",
|
||
" 'So Ray now started to use his phone to follow the storms. He '\n",
|
||
" 'attached a small GoPro camera to his steering wheel in case a '\n",
|
||
" 'tornado dropped down in front of the car somewhere, and took video '\n",
|
||
" 'of heavy rain and hail with his iPhone. Soon, he spotted a tornado '\n",
|
||
" 'and the chase was on. He followed an unmarked emergency vehicle to '\n",
|
||
" \"Cleveland, Tenn., where he was first on the scene of the storm's \"\n",
|
||
" 'aftermath.\\n'\n",
|
||
" 'Again, the tornadoes had struck in locations that were hours from '\n",
|
||
" 'the nearest AP bureau. Damage and debris, as well as a wickedly '\n",
|
||
" 'violent storm that made travel dangerous, slowed our efforts to get '\n",
|
||
" 'to the news. That wasn’t a problem in Tennessee, where our customers '\n",
|
||
" 'were well served by an all-formats report that included this text '\n",
|
||
" 'story.\\n'\n",
|
||
" '“CLEVELAND, Tenn. (AP) _ Fierce wind, hail and rain lashed Tennessee '\n",
|
||
" 'for the second time in three days, and at least 15 people were '\n",
|
||
" 'hospitalized Friday in the Chattanooga area.”\\n'\n",
|
||
" 'The byline? Robert Ray.\\n'\n",
|
||
" 'For being adept with technology, chasing after news as it literally '\n",
|
||
" 'dropped from the sky and setting a standard for all-formats '\n",
|
||
" 'reporting that put the AP ahead on the most competitive news story '\n",
|
||
" 'of the day, Ray wins this week’s $300 Best of the States prize.\\n'\n",
|
||
" '© 2013 The Associated Press. All rights reserved. Terms and '\n",
|
||
" 'conditions apply. See AP.org for details.'}\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from pprint import pprint\n",
|
||
"pprint(dataset[0])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 23,
|
||
"id": "f3dbfcf5",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"728"
|
||
]
|
||
},
|
||
"execution_count": 23,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"len(tokenizer(dataset[0]['text'])['input_ids'])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "18bc69d9",
|
||
"metadata": {},
|
||
"source": [
|
||
"# **Document Length Analysis**\n",
|
||
"> Understanding length of the document is crucial for setting effective padding/truncation strategies during training."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1ef0cdc6",
|
||
"metadata": {},
|
||
"source": [
|
||
"**A. Apply tokenizer and map**\n",
|
||
"- We'll use `map` function to calculate the token count for every document\n",
|
||
"- We'll store it in a new column\n",
|
||
" - hf's `map` is highly optimized and works well with large datasets"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"id": "d83540a8",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from transformers import AutoTokenizer"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"id": "ea3aaf18",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Map (num_proc=24): 0%| | 57/8548517 [00:03<126:46:39, 18.73 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (8502 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 238/8548517 [00:03<24:01:39, 98.82 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (9849 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 1598/8548517 [00:03<2:03:15, 1155.63 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (9183 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 7328/8548517 [00:05<43:17, 3287.81 examples/s] Token indices sequence length is longer than the specified maximum sequence length for this model (11389 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 7680/8548517 [00:05<47:08, 3020.02 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (30422 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 9837/8548517 [00:06<34:08, 4169.10 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (10627 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 17071/8548517 [00:07<23:41, 6002.42 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (11265 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 17697/8548517 [00:07<23:45, 5986.02 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (9853 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 21964/8548517 [00:08<19:57, 7118.45 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (8480 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Token indices sequence length is longer than the specified maximum sequence length for this model (10483 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 23469/8548517 [00:08<19:39, 7228.23 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (12505 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Token indices sequence length is longer than the specified maximum sequence length for this model (8226 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 24209/8548517 [00:08<20:37, 6888.89 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (10808 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Token indices sequence length is longer than the specified maximum sequence length for this model (18963 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Token indices sequence length is longer than the specified maximum sequence length for this model (9103 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 24928/8548517 [00:08<20:34, 6906.48 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (8232 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Token indices sequence length is longer than the specified maximum sequence length for this model (18374 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 26669/8548517 [00:08<18:12, 7801.39 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (8793 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Token indices sequence length is longer than the specified maximum sequence length for this model (8551 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 28799/8548517 [00:08<15:50, 8964.52 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (11499 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 29717/8548517 [00:09<16:03, 8843.98 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (9902 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 30618/8548517 [00:09<16:39, 8519.71 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (11594 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 0%| | 33358/8548517 [00:09<17:05, 8304.62 examples/s]Token indices sequence length is longer than the specified maximum sequence length for this model (18832 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Token indices sequence length is longer than the specified maximum sequence length for this model (43572 > 8192). Running this sequence through the model will result in indexing errors\n",
|
||
"Map (num_proc=24): 100%|██████████| 8548517/8548517 [17:47<00:00, 8004.38 examples/s]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"TOKENIZER_NAME = \"HuggingFaceTB/SmolLM2-1.7B\"\n",
|
||
"tokenizer = AutoTokenizer.from_pretrained(TOKENIZER_NAME)\n",
|
||
"\n",
|
||
"def calculate_token_length(example) -> dict:\n",
|
||
" tokens = tokenizer(example[\"text\"], truncation=False, padding=False)[\"input_ids\"]\n",
|
||
" return { \"length\": len(tokens) }\n",
|
||
"\n",
|
||
"dataset_with_lengths = dataset.map(calculate_token_length, num_proc=24)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8e9d98bd",
|
||
"metadata": {},
|
||
"source": [
|
||
"**B. Analyze distribution**"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"id": "38094868",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"\n",
|
||
"---- Document Length Stats (Tokens) ---\n",
|
||
"count 8.548517e+06\n",
|
||
"mean 7.018761e+02\n",
|
||
"std 1.515926e+03\n",
|
||
"min 3.000000e+01\n",
|
||
"25% 2.010000e+02\n",
|
||
"50% 3.880000e+02\n",
|
||
"75% 7.560000e+02\n",
|
||
"max 1.534070e+05\n",
|
||
"dtype: float64\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"lengths = pd.Series(dataset_with_lengths[\"length\"])\n",
|
||
"\n",
|
||
"# descriptive stats\n",
|
||
"print(\"\\n---- Document Length Stats (Tokens) ---\")\n",
|
||
"print(lengths.describe())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 16,
|
||
"id": "03c77507",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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3//93z/weyt0LfHCcOxOiMP+xGUf/ehHs4uB8TW6OvHEE7MhiXobiq3DNddcE959991s3XiR8sc//nE46qijwvPPP/+BukBiV0v8HO+4445w3nnn9brO66+/nnW6xAvrcTiteNEzXrS/8cYbs8fj8rif4ns88sgjs7qiHXfcsdsF3bi/4r6M+ytehF2RGFLE99vQ0BDee++97AJ/vIAfh1GKnR591Zfaevq3f/u37CJy3DcxSIwXj3/0ox9l82bcdNNN3daNF4s79mH8XC+//PLs4vGuu+6ahR/Ls3jx4iwgy/e4veuuu7KL8TFoiaFXPDb7GjKkfp/ie4vhQgwi4r6Jn+W9996bdbfttttu2TpxH8f3G88N8eL7H/7wh/D1r389+w7EzzCKYd43vvGNbkOedXyW8bsWL8rHc0g8xmP4EIexi0Okxc6QuG3H+efwww/PQq04RFQcVi1+Jj2/U8sTvy8x2Pr85z+fhYSvvfZadj6Krx27uDbeeOPsOWNHRJzfI3aTxMC1UENqxfcXv08d+62rGJzE4bxWNAxZ7HKJIVEMqT7IsFgpx3jPkDfu9xh2xLC841iMx0Y85uOwgzFA7wjc4nES31dXX/jCF7J9H1/vkUceCf/5n/+ZBXPxnBvFEC4GUPE7Gj+HGADF71nPwCaKrxnPqXPnzs3CMgCAspMDAKCkNTQ0xLaUzvs333xzdv/cc8/ttt7nPve5XFVVVe7ZZ5/tXBbXi9tHp512Wm611VbLXXnllZ2Pv/vuu7m11lord/zxx3d7rtmzZ+dGjhzZbfmECROy5zvnnHO6rfvxj388t+uuu670fey333657bbbbrmP90ctN9xwQ7be1KlTO5ctWbIk96lPfSpbfsUVVyx3P3eYOXNmtnydddbJvfnmm53Lb7nllmz5H/7whxW+77vvvjtb7/rrr1/uOjvttFNu7bXX7rwf64rbxNeObrrppux+a2vrcp9jzpw52TpnnnnmMo917K/GxsZeH9t8882Xeb+rr7567uWXX+5c/uCDD2bLTz311G6fabyt7DlXVFtc1nW/z5gxI7v/b//2b93WO/3007Pld911V+ey+Bpx2T333NO57PXXX88NHTo0O95XJH5P4raXXnrpCteLx2zP9xi3i9+lJ554otfPOv63q4592vV46+sxHN9vXO/kk09epralS5d2/nvBggXL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b3wjt9566+Wqqqo6n2fmzJnZv+P+7Skuj6+5IvH9dH2v8fOKr/HJT34yd9555+Vef/31Zba54oorsnXja0ePPPJI7ktf+lJus802yw0dOjS3/vrr5z7zmc902yfRAw88kNt1111zQ4YM6Vbb8vZXx2Obb7555/2u7/fiiy/Obbrpptlr7rvvvrlHH310me3/67/+K7fllltmr7nzzjvnbr/99mWec0W19faZLV68OHf22Wfntthii2x/xRomT56ce++997qtF1+jvr6+12Mt3lbmtddey74Lv/3tb5e7znbbbbfMc/X2vep6vH32s5/NrbHGGrm11147d+KJJ+Yef/zxbJv4ueZzDMdjM34eH/3oR7P9F4+fgw8+OPfwww93rnPrrbfmdtxxx+w7U1NTk7vgggtyl19+ebfjKJo9e3a2z+L3IT7W9b3F80rcz1tvvXX2Ouuuu25ur732yl100UW5RYsWda73z3/+M/eVr3wlt+aaa2bfqfjvv/3tb8u8x97Ez/C0007LbbTRRrnVV189t/fee+f+8pe/9PqZxXNVbW1t9hn15bnj8bC8c0zXfRDFz2TMmDHZ57TWWmvlvvzlL2f7prfvYWtra+eyeM6M38VY080335zri/jZ9azhgxzjDz74YPb5xXPIggULsmVx/x911FG5ddZZJ/u+xu2+8IUv5KZNm7bMsRWP0d7eZ0d9cZvDDz88+/8v8TiI/43v+emnn+623Z/+9Kdsu2eeeaZP+wEAoBRVxf9T7JAHAAAGkti9E7tB4lwG8df4VK7YeROHhoodIUDfxW6b2KkVO/AAAMqVgAUAgIoW5yyIQ1R1iEN0xSGV4twbs2fP7vYYlScOQReHLYtzcAjboG/ifF5xSLUZM2bkPQwhAEApMAcLAAAVLc69EEOWPffcM5tLJM4X8cADD4Tzzz9fuELYbLPNsrlxgL772Mc+Ft5//327DAAoezpYAACoaNdcc024+OKLs0nu44X0OFF0nLg9Tg4OAAAAyyNgAQAAAAAASLRa6gYAAAAAAACVTsACAAAAAACQqOInuV+6dGl49dVXw4gRI0JVVVXq/gMAAAAAAMpILpcL7777bth4443Daqstv0+l4gOWGK5suummq/TDAQAAAAAABraXXnopbLLJJst9vOIDlti50rGj1lxzzVCpFi9eHO64444wZsyYMHjw4GKX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lIWaxpa8tmtvqi94LQAAAAAA/aliO1gAAAAAAADyJWABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIJGABAAAAAABIVJ26AUCh1TS25LVde1N9wWsBAAAAAOgLHSwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJBCwAAAAAAACJqlM3ABgoahpb8tquvam+4LUAAAAAAJVFBwsAAAAAAEAiAQsAAAAAAEAiAQsAAAAAAEAiAQsAAAAAAEAiAQsAAAAAAICABQAAAAAAoH/pYAEAAAAAAEgkYAEAAAAAAEgkYAEAAAAAAEgkYAEAAAAAAEgkYAEAAAAAAEgkYAEAAAAAAEgkYAEAAAAAAEgkYAEAAAAAAEgkYAEAAAAAAEgkYAEAAAAAAEgkYAEAAAAAAEgkYAEAAAAAAEgkYAEAAAAAAEhUHcpATU1NWHPNNcNqq60W1l577XD33XcXuyQAAAAAAKCMlUXAEj3wwAPhQx/6ULHLAEpATWNLXtu1N9UXvBYAAAAAoDQZIgwAAAAAAKDUApZ77rknHHrooWHjjTcOVVVV4eabb15mnebm5mwYsGHDhoU99tgjPPTQQ90ej9vtt99+oa6uLlx99dWrsHoAAAAAAKASFT1gmT9/fthpp52yEKU31113XZg0aVI488wzwyOPPJKtO3bs2PD66693rnPfffeFhx9+ONx6663h/PPPD4899tgqfAcAAAAAAEClKfocLAcffHB2W54pU6aE448/PkycODG7f9lll4WWlpZw+eWXh8bGxmzZ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AAAAAFBhAUuHbbfdNrsBAAAAAABUmuSAJc65cuWVV4Zp06aF119/PRserKs4HwsAAAAAAEA5Sw5Y4mT2MWCpr68P22+/faiqquqfygAAAAAAAMolYLn22mvDf//3f4dDDjmkfyoCAAAAAAAY4FbLZ5L7rbfeun+qAQAAAAAAKMeA5bTTTguXXHJJyOVy/VMRAAAAAABAuQ0Rdt9994W77747/OlPfwrbbbddGDx4cLfHb7zxxkLWBwAAAAAAUPoBy1prrRWOPPLI/qkGAAAAAACgHAOWK664on8qAQAAAAAAKNc5WKL3338//PnPfw6//OUvw7vvvpste/XVV8O8efMKXR8AAAAAAEDpd7C88MIL4aCDDgovvvhiWLhwYRg9enQYMWJEuOCCC7L7l112Wf9UCgBFUtPYktd27U31Ba8FAAAAgBLtYDnllFPCbrvtFt56662w+uqrdy6P87JMmzat0PUBAAAAAACUfgfLvffeGx544IEwZMiQbstramrCK6+8UsjaAAAAAAAAyqODZenSpWHJkiXLLH/55ZezocIAAAAAAADKXXLAMmbMmDB16tTO+1VVVdnk9meeeWY45JBDCl0fAAAAAABA6Q8RdvHFF4exY8eG2tra8N5774Xx48eHZ555Jqy77rrhd7/7Xf9UCQAAAAAAUMoByyabbBIeffTRcO2114bHHnss61457rjjwpe//OVuk94DAAAAAACUq+q8NqquDkcffXThqwEAAAAAACjHgOWqq65a4eNf/epXP0g9AAAAAAAA5RewnHLKKd3uL168OCxYsCAMGTIkrLHGGgIWAAAAAACg7K2WusFbb73V7RbnYHnqqafCPvvsY5J7AAAAAACgIiQHLL3ZZpttQlNT0zLdLQAAAAAAAOWoIAFLx8T3r776aigVzc3Noba2NtTV1RW7FAAAAAAAoNznYLn11lu73c/lcmHWrFnhZz/7Wdh7771DqWhoaMhuc+fODSNHjix2OQCUoZrGlry2a2+qL3gtAAAAABQ5YDniiCO63a+qqgrrrbde+NSnPhUuvvjiQtYGAAAAAABQHgHL0qVL+6cSAAAAAACASpuDBQAAAAAAoFIkd7BMmjSpz+tOmTIl9ekBAAAAAADKL2D529/+lt0WL14cPvKRj2TLnn766TBo0KCwyy67dJubBQAAAAAAoBwlByyHHnpoGDFi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HWA+ZawBjDPA/MAxDWCsAeYHjmkaF3Upn376aerSpUtq2bLxlVbqfoqw2DgzS6DqTYQrAhbAWAPM6xzTAMYaYH7huAYwzjSNDh06fG0bi9wDAAAAAADUSMACAAAAAABQIwELWZs2bdKQIUPyT4Bvi7EG+LYZZ4C5wVgDGGuA+YFjmtlX94vcAwAAAAAA1EoFCwAAAAAAQI0ELAAAAAAAADUSsAAAAAAAANRIwAIAAAAAAFAjAQtp2LBhaYUVVkgLLbRQ2mCDDdLjjz9uqwANOuWUU1Lv3r3ToosumpZeeum08847pxdffLGqzZdffpkGDBiQllhiibTIIoukXXfdNb3//vtVbcaOHZu233771K5du/w4gwYNSlOnTq1qc//996d11103tWnTJq288srp0ksvtVegDp166qmpRYsW6bDDDivfZpwB5oR33nkn/fSnP83HLG3btk1rrrlmeuKJJ8r3F0WRjj/++NS5c+d8/1ZbbZVefvnlqsf46KOP0l577ZXat2+fFltssbT//vunzz77rKrNs88+mzbddNP8eWvZZZdNp59+uh0IdWLatGlp8ODBqVu3bnkcWWmlldIJJ5yQx5cSYw1QqwceeCDtuOOOqUuXLvmz0g033FB1/9wcV0aMGJFWW2213CaOpW677ba626ECljp39dVXpyOOOCINGTIk/etf/0prr7122mabbdL48eObumtAMzRy5Mgcnjz66KPprrvuSlOmTElbb711+vzzz8ttDj/88HTzzTfnP7LR/t133019+/at+pAR4cp///vf9PDDD6fLLrsshyfxx7/k9ddfz2222GKL9PTTT+cTqwcccEC688475/prBprOqFGj0kUXXZTWWmutqtuNM8Ds+vjjj9PGG2+cWrdunW6//fY0evTodNZZZ6WOHTuW28RJhPPOOy/98Y9/TI899lhaeOGF82elCHlL4sTECy+8kI+LbrnllnzCo3///uX7J06cmI+Vll9++fTkk0+mM844Iw0dOjQNHz7cToQ6cNppp6ULL7wwXXDBBWnMmDH5eowt559/frmNsQaoVZyDiXO48aX5hsytcSXO6fTr1y+HM0899VT+Em5cnn/++fraqQV1rU+fPsWAAQPK16dNm1Z06dKlOOWUU5q0X8C8Yfz48fHVq2LkyJH5+oQJE4rWrVsXI0aMKLcZM2ZMbvPII4/k67fddlvRsmXLYty4ceU2F154YdG+ffti8uTJ+fpRRx1V9OzZs+q5fvKTnxTbbLPNXHplQFP79NNPi+7duxd33XVXsdlmmxUDBw7MtxtngDnh6KOPLjbZZJNG758+fXrRqVOn4owzzijfFuNPmzZtir///e/5+ujRo/MxzqhRo8ptbr/99qJFixbFO++8k6//4Q9/KDp27Fg+xik996qrrmpHQh3Yfvvti/3226/qtr59+xZ77bVX/rexBphdcSxy/fXXl6/PzXFl9913z+NcpQ022KA48MAD62rHqmCpY/Ht8Uggo0yspGXLlvn6I4880qR9A+YNn3zySf65+OKL558xpkRVS+W4EqWiyy23XHlciZ9RNrrMMsuU28Q3KeLbEfHtiVKbyscotTE2Qf2IarmoZJtxLDDOAHPCTTfdlNZff/2022675elKe/XqlS6++OKqatpx48ZVjUEdOnTIUypXHtPElBrxOCXRPj5TxbdFS22+973vpQUXXLDqmCamWI0qGmD+ttFGG6V77rknvfTSS/n6M888kx588MG03Xbb5evGGmBOm5vjinM3/yNgqWMffPBBnqqn8iRniOvxPyLAzEyfPj1P3RXTa6yxxhr5thg74o9v/KFubFyJnw2NO6X7ZtYmQpgvvvjCjoH53FVXXZWnLo11n2ZknAHmhNdeey1P29O9e/c8BelBBx2UDj300Dx1aWmsCTP7rBQ/I5yp1KpVq/zFk1qOe4D51zHHHJP22GOP/KWzmJIwwtz4DBVT8wRjDTCnzc1xpbE24+rsGKdVU3cAgHn32+Uxr2Z8AwtgTnnrrbfSwIED81zAsVAiwLf1RZH41ubJJ5+cr8dJzziuibnK99lnHxsdmCOuueaadMUVV6Qrr7wy9ezZs7y+ZCxMbawBmD+oYKljSy65ZFpggQXS+++/X3V7XO/UqVOT9Qto/g455JC8CNp9992XunbtWr49xo6YfnDChAmNjivxs6Fxp3TfzNq0b98+tW3b9lt7XUDTiynAxo8fn9Zdd938Laq4jBw5Mi/SGP+Ob0QZZ4DZ1blz59SjR4+q21ZfffU0duzYqmOSmX1Wip8xXlWaOnVq+uijj2o67gHmX4MGDSpXscQ0yXvvvXc6/PDDy1W6xhpgTpub40pjbTrV2TGOgKWOxTQ+6623Xp4PtPKbXHF9ww03bNK+Ac1TrJ8W4cr111+f7r333tStW7eq+2NMidL3ynEl5ueMkxWlcSV+Pvfcc1V/zOOb6hGelE50RJvKxyi1MTbB/G/LLbfMY0R8w7N0iW+Zx1QapX8bZ4DZFVOcxjFKpVgjYfnll8//jmOcODlQeTwSU5XGvOSVxzTxpZIIhkvi+Cg+U8U856U2DzzwQF6jrvKYZtVVV00dO3a0I2E+N2nSpLymQaX4omuME8FYA8xpc3Ncce7m/zWw8D115KqrriratGlTXHrppcXo0aOL/v37F4sttlgxbty4pu4a0AwddNBBRYcOHYr777+/eO+998qXSZMmldv88pe/LJZbbrni3nvvLZ544oliww03zJeSqVOnFmussUax9dZbF08//XRxxx13FEsttVRx7LHHltu89tprRbt27YpBgwYVY8aMKYYNG1YssMACuS1QfzbbbLNi4MCB5evGGWB2Pf7440WrVq2Kk046qXj55ZeLK664Ih97XH755eU2p556av5sdOONNxbPPvtssdNOOxXdunUrvvjii3KbbbfdtujVq1fx2GOPFQ8++GDRvXv3ol+/fuX7J0yYUCyzzDLF3nvvXTz//PP581c8z0UXXWQnQh3YZ599iu985zvFLbfcUrz++uvFddddVyy55JLFUUcdVW5jrAFq9emnnxZPPfVUvsTp/bPPPjv/+80335yr48pDDz2Uj6fOPPPMfO5myJAhRevWrYvnnnuurnaqgIXi/PPPzydDF1xwwaJPnz7Fo48+aqsADf/RSKnByyWXXFJuE3+wDz744KJjx475j+8uu+ySQ5hKb7zxRrHddtsVbdu2zR8wjjzyyGLKlClVbe67775inXXWyWPTiiuuWPUcQH0HLMYZYE64+eab85c+4gtnq622WjF8+PCq+6dPn14MHjw4n1yINltuuWXx4osvVrX58MMP88mIRRZZpGjfvn2x77775pMelZ555plik002yY8RJ1rjpAdQHyZOnJiPYeKcy0ILLZQ/1xx33HHF5MmTy22MNUCt4nxJQ+dmItSd2+PKNddcU6yyyir53E3Pnj2LW2+9te52aIv4T6maBQAAAAAAgK9nDRYAAAAAAIAaCVgAAAAAAABqJGABAAAAAACokYAFAAAAAACgRgIWAAAAAACAGglYAAAAAAAAaiRgAQAAAAAAqJGABQAAAAAAoEYCFgAAmEe98cYbqUWLFunpp59u6q7MMwYPHpz69++fmoPYdzfccENTd6PZ+OCDD9LSSy+d3n777abuCgAAzBIBCwAANPFJ9pldhg4d2iz3zyuvvJL23Xff1LVr19SmTZvUrVu31K9fv/TEE08025Bp3Lhx6dxzz03HHXdc+bb//Oc/6aCDDkrLLbdcfh2dOnVK22yzTXrooYdScwpc7r///nx/x44d05dffll136hRo8rvl8r2O+20U+rcuXNaeOGF0zrrrJOuuOKKr+3DAw88kHbcccfUpUuXWQ6Afv7znzf43u3Zs2ejbZZYYom07bbbpmeffbbcZskll0w/+9nP0pAhQ772OQEAoDkQsAAAQBN67733ypdzzjkntW/fvuq2X//6181u/0SIst5666WXXnopXXTRRWn06NHp+uuvT6uttlo68sgjm7p7jfrTn/6UNtpoo7T88suXb9t1113TU089lS677LL8em666aa0+eabpw8//DA1R4suumje1pX+/Oc/54Co0sMPP5zWWmutdO211+YQI8KwCC9uueWWmT7+559/ntZee+00bNiwWe5ThFaV79m33norLb744mm33XaraheBSqnNPffck1q1apV22GGHqjbRzwiCPvroo1l+fgAAaCoCFgAAaEJRMVG6dOjQIX+7v3Q9pks6++yzy1UiUYVwxx13NPpY06ZNS/vtt18OOsaOHZtvu/HGG9O6666bFlpoobTiiium3/72t2nq1Knl34nni+Bhl112Se3atUvdu3fPIUNjiqLI1QjR7p///Gfafvvt00orrZT7FpUH8Xwlzz33XPr+97+f2rZtmysWYmquzz77rHx/BBmHHXZY1ePvvPPO+fFLVlhhhXTyySfn1xXhQgQJw4cPL98flTOhV69e+bXEYzbmqquuytUZJRMmTMiv4bTTTktbbLFFDl769OmTjj322PSjH/2oahtFkBRhQGyj1VdfPT3yyCO5iieeLypEIrh59dVXq57vwgsvzNtmwQUXTKuuumr629/+lmbXPvvsk/7yl7+Ur3/xxRf5dcXtlX7zm9+kE044Ifcr+jBw4MAccFx33XUzffztttsunXjiifn9MKvifVv5Po4A7uOPP85hSaVShVBc4v1yzDHH5DAmqohKouolqmdmDJEAAKA5ErAAAEAzFZUBZ511VjrzzDNzFUJMXRUn/l9++eWvtJ08eXKuGIip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",
|
||
"text/plain": [
|
||
"<Figure size 2000x1200 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# plot distribution (use log scale for better viz of skew)\n",
|
||
"plt.figure(figsize=(20, 12))\n",
|
||
"\n",
|
||
"# zoom into bulk of the data eg. docs < 10K tokens\n",
|
||
"lengths[lengths < 10000].hist(bins=100, log=True)\n",
|
||
"plt.title('Token Length Distribution (Truncated at 10k Tokens)')\n",
|
||
"plt.xlabel('Token Count (SmolLM2-1.7B)')\n",
|
||
"plt.ylabel('Frequency (Log Scale)')\n",
|
||
"plt.show()"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "fineweb",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.12.12"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|