Ubuntu
commited on
Commit
•
ad4c3bb
1
Parent(s):
2fb2dc0
added wikigpt
Browse files- .gitignore +1 -1
- gpt3_finetuned_model/runs/Oct09_08-16-50_ip-172-31-95-165/events.out.tfevents.1696839410.ip-172-31-95-165.74908.0 +0 -0
- wiki_gpt/.gitignore +9 -0
- wiki_gpt/README.md +27 -0
- wiki_gpt/download_openai.ipynb +309 -0
- wiki_gpt/process_results.ipynb +181 -0
- wiki_gpt/process_wiki_data.ipynb +520 -0
- wiki_gpt/requirements.txt +92 -0
.gitignore
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
keys.py
|
2 |
-
wiki_gpt/
|
|
|
1 |
keys.py
|
2 |
+
# wiki_gpt/
|
gpt3_finetuned_model/runs/Oct09_08-16-50_ip-172-31-95-165/events.out.tfevents.1696839410.ip-172-31-95-165.74908.0
CHANGED
Binary files a/gpt3_finetuned_model/runs/Oct09_08-16-50_ip-172-31-95-165/events.out.tfevents.1696839410.ip-172-31-95-165.74908.0 and b/gpt3_finetuned_model/runs/Oct09_08-16-50_ip-172-31-95-165/events.out.tfevents.1696839410.ip-172-31-95-165.74908.0 differ
|
|
wiki_gpt/.gitignore
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
venv
|
2 |
+
wiki_intro.csv
|
3 |
+
wiki_intro_processed.csv
|
4 |
+
config.py
|
5 |
+
data/*
|
6 |
+
__pycache__/*
|
7 |
+
_archive/*
|
8 |
+
# GPT-wiki-intro.csv
|
9 |
+
GPT-wiki-intro.csv.zip
|
wiki_gpt/README.md
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Wiki GPT
|
2 |
+
|
3 |
+
Code to generate [GPT-wiki-intro dataset](https://huggingface.co/datasets/aadityaubhat/GPT-wiki-intro#overview).
|
4 |
+
This dataset can be used to train and evaluate mdoels to classify text as human written or GPT generated.
|
5 |
+
|
6 |
+
To run the code -
|
7 |
+
1. Install requirements from requirements.txt
|
8 |
+
2. Create config.py and add your `OPENAI_API_KEY`
|
9 |
+
3. Create a `data` folder
|
10 |
+
4. Run `process_wiki_data.ipynb`
|
11 |
+
5. Run `download_openai.ipynb`
|
12 |
+
6. Run `process_results.ipynb`
|
13 |
+
|
14 |
+
## Citation
|
15 |
+
|
16 |
+
Please cite as following
|
17 |
+
|
18 |
+
```
|
19 |
+
@misc {aaditya_bhat_2023,
|
20 |
+
author = { {Aaditya Bhat} },
|
21 |
+
title = { GPT-wiki-intro (Revision 0e458f5) },
|
22 |
+
year = 2023,
|
23 |
+
url = { https://huggingface.co/datasets/aadityaubhat/GPT-wiki-intro },
|
24 |
+
doi = { 10.57967/hf/0326 },
|
25 |
+
publisher = { Hugging Face }
|
26 |
+
}
|
27 |
+
```
|
wiki_gpt/download_openai.ipynb
ADDED
@@ -0,0 +1,309 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 25,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import pickle\n",
|
10 |
+
"from tqdm import tqdm\n",
|
11 |
+
"import pandas as pd\n",
|
12 |
+
"import re\n",
|
13 |
+
"import openai\n",
|
14 |
+
"from config import OPENAI_API_KEY\n",
|
15 |
+
"import dask"
|
16 |
+
]
|
17 |
+
},
|
18 |
+
{
|
19 |
+
"cell_type": "code",
|
20 |
+
"execution_count": 55,
|
21 |
+
"metadata": {},
|
22 |
+
"outputs": [],
|
23 |
+
"source": [
|
24 |
+
"openai.api_key = OPENAI_API_KEY"
|
25 |
+
]
|
26 |
+
},
|
27 |
+
{
|
28 |
+
"cell_type": "code",
|
29 |
+
"execution_count": 8,
|
30 |
+
"metadata": {},
|
31 |
+
"outputs": [],
|
32 |
+
"source": [
|
33 |
+
"data_df = pd.read_csv('wiki_intro_processed.csv')"
|
34 |
+
]
|
35 |
+
},
|
36 |
+
{
|
37 |
+
"cell_type": "code",
|
38 |
+
"execution_count": 44,
|
39 |
+
"metadata": {},
|
40 |
+
"outputs": [],
|
41 |
+
"source": [
|
42 |
+
"def chunkify(lst, n):\n",
|
43 |
+
" return [lst[i:i + n] for i in range(0, len(lst), n)]"
|
44 |
+
]
|
45 |
+
},
|
46 |
+
{
|
47 |
+
"cell_type": "code",
|
48 |
+
"execution_count": 5,
|
49 |
+
"metadata": {},
|
50 |
+
"outputs": [],
|
51 |
+
"source": [
|
52 |
+
"def create_prompt(title, starter_text):\n",
|
53 |
+
" return f'''200 word wikipedia style introduction on '{title}'\n",
|
54 |
+
" {starter_text}'''"
|
55 |
+
]
|
56 |
+
},
|
57 |
+
{
|
58 |
+
"cell_type": "code",
|
59 |
+
"execution_count": 33,
|
60 |
+
"metadata": {},
|
61 |
+
"outputs": [],
|
62 |
+
"source": [
|
63 |
+
"def get_openai_response(dct): \n",
|
64 |
+
" title = dct['title']\n",
|
65 |
+
" starter_text = dct['starter_text']\n",
|
66 |
+
"\n",
|
67 |
+
" prompt = create_prompt(title, starter_text)\n",
|
68 |
+
"\n",
|
69 |
+
" return {title: openai.Completion.create(\n",
|
70 |
+
" model=\"text-curie-001\",\n",
|
71 |
+
" prompt=prompt,\n",
|
72 |
+
" temperature=0.7,\n",
|
73 |
+
" max_tokens=300,\n",
|
74 |
+
" top_p=1,\n",
|
75 |
+
" frequency_penalty=0.4,\n",
|
76 |
+
" presence_penalty=0.1\n",
|
77 |
+
" )}"
|
78 |
+
]
|
79 |
+
},
|
80 |
+
{
|
81 |
+
"cell_type": "code",
|
82 |
+
"execution_count": 35,
|
83 |
+
"metadata": {},
|
84 |
+
"outputs": [],
|
85 |
+
"source": [
|
86 |
+
"def fake_get_openai_response(dct):\n",
|
87 |
+
" title = dct['title']\n",
|
88 |
+
" starter_text = dct['starter_text']\n",
|
89 |
+
"\n",
|
90 |
+
" prompt = create_prompt(title, starter_text)\n",
|
91 |
+
"\n",
|
92 |
+
" return {title: f'{prompt} blah blah blah'}"
|
93 |
+
]
|
94 |
+
},
|
95 |
+
{
|
96 |
+
"cell_type": "code",
|
97 |
+
"execution_count": 54,
|
98 |
+
"metadata": {},
|
99 |
+
"outputs": [],
|
100 |
+
"source": [
|
101 |
+
"def run_dask(lst_dct):\n",
|
102 |
+
" delayed_calls = [dask.delayed(get_openai_response)(dct) for dct in lst_dct]\n",
|
103 |
+
" results = dask.compute(*delayed_calls)\n",
|
104 |
+
" return results"
|
105 |
+
]
|
106 |
+
},
|
107 |
+
{
|
108 |
+
"cell_type": "code",
|
109 |
+
"execution_count": 70,
|
110 |
+
"metadata": {},
|
111 |
+
"outputs": [
|
112 |
+
{
|
113 |
+
"name": "stdout",
|
114 |
+
"output_type": "stream",
|
115 |
+
"text": [
|
116 |
+
"1\n",
|
117 |
+
"2\n",
|
118 |
+
"3\n",
|
119 |
+
"4\n",
|
120 |
+
"5\n",
|
121 |
+
"6\n",
|
122 |
+
"7\n",
|
123 |
+
"8\n",
|
124 |
+
"9\n",
|
125 |
+
"10\n",
|
126 |
+
"11\n",
|
127 |
+
"12\n",
|
128 |
+
"13\n",
|
129 |
+
"14\n",
|
130 |
+
"15\n",
|
131 |
+
"16\n",
|
132 |
+
"17\n",
|
133 |
+
"18\n",
|
134 |
+
"19\n",
|
135 |
+
"20\n",
|
136 |
+
"21\n",
|
137 |
+
"22\n",
|
138 |
+
"23\n",
|
139 |
+
"24\n",
|
140 |
+
"25\n",
|
141 |
+
"26\n",
|
142 |
+
"27\n",
|
143 |
+
"28\n",
|
144 |
+
"29\n",
|
145 |
+
"30\n",
|
146 |
+
"31\n",
|
147 |
+
"32\n",
|
148 |
+
"33\n",
|
149 |
+
"34\n",
|
150 |
+
"35\n",
|
151 |
+
"36\n",
|
152 |
+
"37\n",
|
153 |
+
"38\n",
|
154 |
+
"39\n",
|
155 |
+
"40\n",
|
156 |
+
"41\n",
|
157 |
+
"42\n",
|
158 |
+
"43\n",
|
159 |
+
"44\n",
|
160 |
+
"45\n",
|
161 |
+
"46\n",
|
162 |
+
"47\n",
|
163 |
+
"48\n",
|
164 |
+
"49\n",
|
165 |
+
"50\n",
|
166 |
+
"51\n",
|
167 |
+
"52\n",
|
168 |
+
"53\n",
|
169 |
+
"54\n",
|
170 |
+
"55\n",
|
171 |
+
"56\n",
|
172 |
+
"57\n",
|
173 |
+
"58\n",
|
174 |
+
"59\n",
|
175 |
+
"60\n",
|
176 |
+
"61\n",
|
177 |
+
"62\n",
|
178 |
+
"63\n",
|
179 |
+
"64\n",
|
180 |
+
"65\n",
|
181 |
+
"66\n",
|
182 |
+
"67\n",
|
183 |
+
"68\n",
|
184 |
+
"69\n",
|
185 |
+
"70\n",
|
186 |
+
"71\n",
|
187 |
+
"72\n",
|
188 |
+
"73\n",
|
189 |
+
"74\n",
|
190 |
+
"75\n",
|
191 |
+
"76\n",
|
192 |
+
"77\n",
|
193 |
+
"78\n",
|
194 |
+
"79\n",
|
195 |
+
"80\n",
|
196 |
+
"81\n",
|
197 |
+
"82\n",
|
198 |
+
"83\n",
|
199 |
+
"84\n",
|
200 |
+
"85\n",
|
201 |
+
"86\n",
|
202 |
+
"87\n",
|
203 |
+
"88\n",
|
204 |
+
"89\n",
|
205 |
+
"90\n",
|
206 |
+
"91\n",
|
207 |
+
"92\n",
|
208 |
+
"93\n",
|
209 |
+
"94\n",
|
210 |
+
"95\n",
|
211 |
+
"96\n",
|
212 |
+
"97\n",
|
213 |
+
"98\n",
|
214 |
+
"99\n",
|
215 |
+
"100\n",
|
216 |
+
"101\n",
|
217 |
+
"102\n",
|
218 |
+
"103\n",
|
219 |
+
"104\n",
|
220 |
+
"105\n",
|
221 |
+
"106\n",
|
222 |
+
"107\n",
|
223 |
+
"108\n",
|
224 |
+
"109\n",
|
225 |
+
"110\n",
|
226 |
+
"111\n",
|
227 |
+
"112\n",
|
228 |
+
"113\n",
|
229 |
+
"114\n",
|
230 |
+
"115\n",
|
231 |
+
"116\n",
|
232 |
+
"117\n",
|
233 |
+
"118\n",
|
234 |
+
"119\n",
|
235 |
+
"120\n",
|
236 |
+
"121\n",
|
237 |
+
"122\n",
|
238 |
+
"123\n",
|
239 |
+
"124\n",
|
240 |
+
"125\n",
|
241 |
+
"126\n",
|
242 |
+
"127\n",
|
243 |
+
"128\n",
|
244 |
+
"129\n",
|
245 |
+
"130\n",
|
246 |
+
"131\n",
|
247 |
+
"132\n",
|
248 |
+
"133\n",
|
249 |
+
"134\n",
|
250 |
+
"135\n",
|
251 |
+
"136\n",
|
252 |
+
"137\n",
|
253 |
+
"138\n",
|
254 |
+
"139\n",
|
255 |
+
"140\n",
|
256 |
+
"141\n",
|
257 |
+
"142\n",
|
258 |
+
"143\n",
|
259 |
+
"144\n",
|
260 |
+
"145\n",
|
261 |
+
"146\n",
|
262 |
+
"147\n",
|
263 |
+
"148\n",
|
264 |
+
"149\n"
|
265 |
+
]
|
266 |
+
}
|
267 |
+
],
|
268 |
+
"source": [
|
269 |
+
"chunk_n = 0\n",
|
270 |
+
"for chunk in chunkify(data_df[['title', 'starter_text']].to_dict('records'), 1000):\n",
|
271 |
+
" if chunk_n == 0:\n",
|
272 |
+
" chunk_n += 1\n",
|
273 |
+
" continue\n",
|
274 |
+
" print(chunk_n)\n",
|
275 |
+
" result = run_dask(chunk)\n",
|
276 |
+
" with open(f'data/result-{chunk_n}.pkl', 'wb') as file:\n",
|
277 |
+
" pickle.dump(result, file)\n",
|
278 |
+
" chunk_n += 1\n"
|
279 |
+
]
|
280 |
+
}
|
281 |
+
],
|
282 |
+
"metadata": {
|
283 |
+
"kernelspec": {
|
284 |
+
"display_name": "venv",
|
285 |
+
"language": "python",
|
286 |
+
"name": "python3"
|
287 |
+
},
|
288 |
+
"language_info": {
|
289 |
+
"codemirror_mode": {
|
290 |
+
"name": "ipython",
|
291 |
+
"version": 3
|
292 |
+
},
|
293 |
+
"file_extension": ".py",
|
294 |
+
"mimetype": "text/x-python",
|
295 |
+
"name": "python",
|
296 |
+
"nbconvert_exporter": "python",
|
297 |
+
"pygments_lexer": "ipython3",
|
298 |
+
"version": "3.10.6 (main, Aug 30 2022, 05:12:36) [Clang 13.1.6 (clang-1316.0.21.2.5)]"
|
299 |
+
},
|
300 |
+
"orig_nbformat": 4,
|
301 |
+
"vscode": {
|
302 |
+
"interpreter": {
|
303 |
+
"hash": "3f100d68d9cf80676b1a4c3ace5430b03ae266a1d88e3f101eb196b64b263632"
|
304 |
+
}
|
305 |
+
}
|
306 |
+
},
|
307 |
+
"nbformat": 4,
|
308 |
+
"nbformat_minor": 2
|
309 |
+
}
|
wiki_gpt/process_results.ipynb
ADDED
@@ -0,0 +1,181 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import pandas as pd\n",
|
10 |
+
"import pickle\n",
|
11 |
+
"import os; os.chdir('..')"
|
12 |
+
]
|
13 |
+
},
|
14 |
+
{
|
15 |
+
"cell_type": "code",
|
16 |
+
"execution_count": 2,
|
17 |
+
"metadata": {},
|
18 |
+
"outputs": [],
|
19 |
+
"source": [
|
20 |
+
"data_df = pd.read_csv('wiki_intro_processed.csv')"
|
21 |
+
]
|
22 |
+
},
|
23 |
+
{
|
24 |
+
"cell_type": "code",
|
25 |
+
"execution_count": 18,
|
26 |
+
"metadata": {},
|
27 |
+
"outputs": [],
|
28 |
+
"source": [
|
29 |
+
"def create_prompt(title, starter_text):\n",
|
30 |
+
" return f'''200 word wikipedia style introduction on '{title}'\n",
|
31 |
+
" {starter_text}'''"
|
32 |
+
]
|
33 |
+
},
|
34 |
+
{
|
35 |
+
"cell_type": "code",
|
36 |
+
"execution_count": 4,
|
37 |
+
"metadata": {},
|
38 |
+
"outputs": [],
|
39 |
+
"source": [
|
40 |
+
"results = []\n",
|
41 |
+
"\n",
|
42 |
+
"for i in range(150):\n",
|
43 |
+
" with open(f'data/result-{i}.pkl', 'rb') as file:\n",
|
44 |
+
" temp = pickle.load(file)\n",
|
45 |
+
" results += list(temp)"
|
46 |
+
]
|
47 |
+
},
|
48 |
+
{
|
49 |
+
"cell_type": "code",
|
50 |
+
"execution_count": 5,
|
51 |
+
"metadata": {},
|
52 |
+
"outputs": [
|
53 |
+
{
|
54 |
+
"data": {
|
55 |
+
"text/plain": [
|
56 |
+
"150000"
|
57 |
+
]
|
58 |
+
},
|
59 |
+
"execution_count": 5,
|
60 |
+
"metadata": {},
|
61 |
+
"output_type": "execute_result"
|
62 |
+
}
|
63 |
+
],
|
64 |
+
"source": [
|
65 |
+
"len(results)"
|
66 |
+
]
|
67 |
+
},
|
68 |
+
{
|
69 |
+
"cell_type": "code",
|
70 |
+
"execution_count": 9,
|
71 |
+
"metadata": {},
|
72 |
+
"outputs": [],
|
73 |
+
"source": [
|
74 |
+
"processed_results = []\n",
|
75 |
+
"for dct in results:\n",
|
76 |
+
" for key in dct:\n",
|
77 |
+
" processed_results.append({\n",
|
78 |
+
" 'title': key, \n",
|
79 |
+
" 'generated_text': dct[key]['choices'][0]['text'],\n",
|
80 |
+
" 'prompt_tokens' : dct[key]['usage']['prompt_tokens'],\n",
|
81 |
+
" 'completion_tokens' : dct[key]['usage']['completion_tokens'],\n",
|
82 |
+
" })"
|
83 |
+
]
|
84 |
+
},
|
85 |
+
{
|
86 |
+
"cell_type": "code",
|
87 |
+
"execution_count": 12,
|
88 |
+
"metadata": {},
|
89 |
+
"outputs": [],
|
90 |
+
"source": [
|
91 |
+
"processed_results_df = pd.DataFrame(processed_results)"
|
92 |
+
]
|
93 |
+
},
|
94 |
+
{
|
95 |
+
"cell_type": "code",
|
96 |
+
"execution_count": 16,
|
97 |
+
"metadata": {},
|
98 |
+
"outputs": [],
|
99 |
+
"source": [
|
100 |
+
"# Create final df\n",
|
101 |
+
"final_df = pd.merge(data_df, processed_results_df, on=['title'])"
|
102 |
+
]
|
103 |
+
},
|
104 |
+
{
|
105 |
+
"cell_type": "code",
|
106 |
+
"execution_count": 19,
|
107 |
+
"metadata": {},
|
108 |
+
"outputs": [],
|
109 |
+
"source": [
|
110 |
+
"# Create new columns\n",
|
111 |
+
"final_df['prompt'] = final_df.apply(lambda row: create_prompt(row['title'], row['starter_text']), axis=1)\n",
|
112 |
+
"\n",
|
113 |
+
"final_df['generated_text_complete'] = final_df['starter_text'] + final_df['generated_text']\n",
|
114 |
+
"\n",
|
115 |
+
"final_df['generated_text_len'] = final_df['generated_text_complete'].apply(lambda x: len(x.split(' ')))"
|
116 |
+
]
|
117 |
+
},
|
118 |
+
{
|
119 |
+
"cell_type": "code",
|
120 |
+
"execution_count": 38,
|
121 |
+
"metadata": {},
|
122 |
+
"outputs": [],
|
123 |
+
"source": [
|
124 |
+
"# Rename columns\n",
|
125 |
+
"final_df = final_df.rename(columns={\n",
|
126 |
+
" 'intro': 'wiki_intro', 'intro_len': 'wiki_intro_len',\n",
|
127 |
+
" 'generated_text_complete': 'generated_intro', 'generated_text_len' : 'generated_intro_len'})"
|
128 |
+
]
|
129 |
+
},
|
130 |
+
{
|
131 |
+
"cell_type": "code",
|
132 |
+
"execution_count": 40,
|
133 |
+
"metadata": {},
|
134 |
+
"outputs": [],
|
135 |
+
"source": [
|
136 |
+
"# Reorder columns\n",
|
137 |
+
"final_df = final_df[[ \n",
|
138 |
+
" 'id', 'url', 'title', 'wiki_intro', 'generated_intro', 'title_len',\n",
|
139 |
+
" 'wiki_intro_len', 'generated_intro_len', 'prompt', 'generated_text',\n",
|
140 |
+
" 'prompt_tokens', 'generated_text_tokens']]"
|
141 |
+
]
|
142 |
+
},
|
143 |
+
{
|
144 |
+
"cell_type": "code",
|
145 |
+
"execution_count": 42,
|
146 |
+
"metadata": {},
|
147 |
+
"outputs": [],
|
148 |
+
"source": [
|
149 |
+
"# Write csv file\n",
|
150 |
+
"final_df.to_csv('GPT-wiki-intro.csv', index=False)"
|
151 |
+
]
|
152 |
+
}
|
153 |
+
],
|
154 |
+
"metadata": {
|
155 |
+
"kernelspec": {
|
156 |
+
"display_name": "venv",
|
157 |
+
"language": "python",
|
158 |
+
"name": "python3"
|
159 |
+
},
|
160 |
+
"language_info": {
|
161 |
+
"codemirror_mode": {
|
162 |
+
"name": "ipython",
|
163 |
+
"version": 3
|
164 |
+
},
|
165 |
+
"file_extension": ".py",
|
166 |
+
"mimetype": "text/x-python",
|
167 |
+
"name": "python",
|
168 |
+
"nbconvert_exporter": "python",
|
169 |
+
"pygments_lexer": "ipython3",
|
170 |
+
"version": "3.10.12"
|
171 |
+
},
|
172 |
+
"orig_nbformat": 4,
|
173 |
+
"vscode": {
|
174 |
+
"interpreter": {
|
175 |
+
"hash": "3f100d68d9cf80676b1a4c3ace5430b03ae266a1d88e3f101eb196b64b263632"
|
176 |
+
}
|
177 |
+
}
|
178 |
+
},
|
179 |
+
"nbformat": 4,
|
180 |
+
"nbformat_minor": 2
|
181 |
+
}
|
wiki_gpt/process_wiki_data.ipynb
ADDED
@@ -0,0 +1,520 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 4,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import os; os.chdir('..')"
|
10 |
+
]
|
11 |
+
},
|
12 |
+
{
|
13 |
+
"cell_type": "code",
|
14 |
+
"execution_count": 5,
|
15 |
+
"metadata": {},
|
16 |
+
"outputs": [],
|
17 |
+
"source": [
|
18 |
+
"# pip install apache-beam==2.43.0\n",
|
19 |
+
"# pip install --no-deps multiprocess==0.70.14"
|
20 |
+
]
|
21 |
+
},
|
22 |
+
{
|
23 |
+
"cell_type": "code",
|
24 |
+
"execution_count": 6,
|
25 |
+
"metadata": {},
|
26 |
+
"outputs": [
|
27 |
+
{
|
28 |
+
"ename": "ImportError",
|
29 |
+
"evalue": "cannot import name 'get_context' from 'multiprocess' (/home/ubuntu/SentenceStructureComparision/venv/lib/python3.10/site-packages/multiprocess/__init__.py)",
|
30 |
+
"output_type": "error",
|
31 |
+
"traceback": [
|
32 |
+
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
33 |
+
"\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)",
|
34 |
+
"\u001b[1;32m/home/ubuntu/SentenceStructureComparision/wiki_gpt/process_wiki_data.ipynb Cell 3\u001b[0m line \u001b[0;36m1\n\u001b[0;32m----> <a href='vscode-notebook-cell://ssh-remote%2B7b22686f73744e616d65223a22456d62656464696e6773227d/home/ubuntu/SentenceStructureComparision/wiki_gpt/process_wiki_data.ipynb#W1sdnNjb2RlLXJlbW90ZQ%3D%3D?line=0'>1</a>\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mdatasets\u001b[39;00m \u001b[39mimport\u001b[39;00m load_dataset\n\u001b[1;32m <a href='vscode-notebook-cell://ssh-remote%2B7b22686f73744e616d65223a22456d62656464696e6773227d/home/ubuntu/SentenceStructureComparision/wiki_gpt/process_wiki_data.ipynb#W1sdnNjb2RlLXJlbW90ZQ%3D%3D?line=1'>2</a>\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mtqdm\u001b[39;00m \u001b[39mimport\u001b[39;00m tqdm\n\u001b[1;32m <a href='vscode-notebook-cell://ssh-remote%2B7b22686f73744e616d65223a22456d62656464696e6773227d/home/ubuntu/SentenceStructureComparision/wiki_gpt/process_wiki_data.ipynb#W1sdnNjb2RlLXJlbW90ZQ%3D%3D?line=2'>3</a>\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mpandas\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mpd\u001b[39;00m\n",
|
35 |
+
"File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/__init__.py:22\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39m# flake8: noqa\u001b[39;00m\n\u001b[1;32m 2\u001b[0m \u001b[39m# Copyright 2020 The HuggingFace Datasets Authors and the TensorFlow Datasets Authors.\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[39m#\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[39m# pylint: enable=line-too-long\u001b[39;00m\n\u001b[1;32m 18\u001b[0m \u001b[39m# pylint: disable=g-import-not-at-top,g-bad-import-order,wrong-import-position\u001b[39;00m\n\u001b[1;32m 20\u001b[0m __version__ \u001b[39m=\u001b[39m \u001b[39m\"\u001b[39m\u001b[39m2.14.5\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m---> 22\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39marrow_dataset\u001b[39;00m \u001b[39mimport\u001b[39;00m Dataset\n\u001b[1;32m 23\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39marrow_reader\u001b[39;00m \u001b[39mimport\u001b[39;00m ReadInstruction\n\u001b[1;32m 24\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mbuilder\u001b[39;00m \u001b[39mimport\u001b[39;00m ArrowBasedBuilder, BeamBasedBuilder, BuilderConfig, DatasetBuilder, GeneratorBasedBuilder\n",
|
36 |
+
"File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/arrow_dataset.py:67\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m \u001b[39mimport\u001b[39;00m config\n\u001b[1;32m 66\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39marrow_reader\u001b[39;00m \u001b[39mimport\u001b[39;00m ArrowReader\n\u001b[0;32m---> 67\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39marrow_writer\u001b[39;00m \u001b[39mimport\u001b[39;00m ArrowWriter, OptimizedTypedSequence\n\u001b[1;32m 68\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mdata_files\u001b[39;00m \u001b[39mimport\u001b[39;00m sanitize_patterns\n\u001b[1;32m 69\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mdownload\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mdownload_config\u001b[39;00m \u001b[39mimport\u001b[39;00m DownloadConfig\n",
|
37 |
+
"File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/arrow_writer.py:27\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mpyarrow\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mparquet\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mpq\u001b[39;00m\n\u001b[1;32m 26\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m \u001b[39mimport\u001b[39;00m config\n\u001b[0;32m---> 27\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mfeatures\u001b[39;00m \u001b[39mimport\u001b[39;00m Features, Image, Value\n\u001b[1;32m 28\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mfeatures\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mfeatures\u001b[39;00m \u001b[39mimport\u001b[39;00m (\n\u001b[1;32m 29\u001b[0m FeatureType,\n\u001b[1;32m 30\u001b[0m _ArrayXDExtensionType,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 36\u001b[0m to_pyarrow_listarray,\n\u001b[1;32m 37\u001b[0m )\n\u001b[1;32m 38\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mfilesystems\u001b[39;00m \u001b[39mimport\u001b[39;00m is_remote_filesystem\n",
|
38 |
+
"File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/features/__init__.py:17\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39m# flake8: noqa\u001b[39;00m\n\u001b[1;32m 3\u001b[0m __all__ \u001b[39m=\u001b[39m [\n\u001b[1;32m 4\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mAudio\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 5\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mArray2D\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mTranslationVariableLanguages\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 16\u001b[0m ]\n\u001b[0;32m---> 17\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39maudio\u001b[39;00m \u001b[39mimport\u001b[39;00m Audio\n\u001b[1;32m 18\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mfeatures\u001b[39;00m \u001b[39mimport\u001b[39;00m Array2D, Array3D, Array4D, Array5D, ClassLabel, Features, Sequence, Value\n\u001b[1;32m 19\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mimage\u001b[39;00m \u001b[39mimport\u001b[39;00m Image\n",
|
39 |
+
"File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/features/audio.py:11\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m \u001b[39mimport\u001b[39;00m config\n\u001b[1;32m 10\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mdownload\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mdownload_config\u001b[39;00m \u001b[39mimport\u001b[39;00m DownloadConfig\n\u001b[0;32m---> 11\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mdownload\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mstreaming_download_manager\u001b[39;00m \u001b[39mimport\u001b[39;00m xopen, xsplitext\n\u001b[1;32m 12\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mtable\u001b[39;00m \u001b[39mimport\u001b[39;00m array_cast\n\u001b[1;32m 13\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mutils\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mpy_utils\u001b[39;00m \u001b[39mimport\u001b[39;00m no_op_if_value_is_null, string_to_dict\n",
|
40 |
+
"File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/download/__init__.py:9\u001b[0m\n\u001b[1;32m 1\u001b[0m __all__ \u001b[39m=\u001b[39m [\n\u001b[1;32m 2\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mDownloadConfig\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 3\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mDownloadManager\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 4\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mDownloadMode\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 5\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mStreamingDownloadManager\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 6\u001b[0m ]\n\u001b[1;32m 8\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mdownload_config\u001b[39;00m \u001b[39mimport\u001b[39;00m DownloadConfig\n\u001b[0;32m----> 9\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mdownload_manager\u001b[39;00m \u001b[39mimport\u001b[39;00m DownloadManager, DownloadMode\n\u001b[1;32m 10\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mstreaming_download_manager\u001b[39;00m \u001b[39mimport\u001b[39;00m StreamingDownloadManager\n",
|
41 |
+
"File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/download/download_manager.py:35\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mutils\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39minfo_utils\u001b[39;00m \u001b[39mimport\u001b[39;00m get_size_checksum_dict\n\u001b[1;32m 34\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mutils\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mlogging\u001b[39;00m \u001b[39mimport\u001b[39;00m get_logger, is_progress_bar_enabled, tqdm\n\u001b[0;32m---> 35\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mutils\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mpy_utils\u001b[39;00m \u001b[39mimport\u001b[39;00m NestedDataStructure, map_nested, size_str\n\u001b[1;32m 36\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mdownload_config\u001b[39;00m \u001b[39mimport\u001b[39;00m DownloadConfig\n\u001b[1;32m 39\u001b[0m logger \u001b[39m=\u001b[39m get_logger(\u001b[39m__name__\u001b[39m)\n",
|
42 |
+
"File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/utils/py_utils.py:41\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mdill\u001b[39;00m\n\u001b[1;32m 40\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mmultiprocess\u001b[39;00m\n\u001b[0;32m---> 41\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mmultiprocess\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mpool\u001b[39;00m\n\u001b[1;32m 42\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mnumpy\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mnp\u001b[39;00m\n\u001b[1;32m 43\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpackaging\u001b[39;00m \u001b[39mimport\u001b[39;00m version\n",
|
43 |
+
"File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/multiprocess/pool.py:29\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[39m# If threading is available then ThreadPool should be provided. Therefore\u001b[39;00m\n\u001b[1;32m 27\u001b[0m \u001b[39m# we avoid top-level imports which are liable to fail on some systems.\u001b[39;00m\n\u001b[1;32m 28\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m \u001b[39mimport\u001b[39;00m util\n\u001b[0;32m---> 29\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m \u001b[39mimport\u001b[39;00m get_context, \u001b[39mTimeoutError\u001b[39;00m\n\u001b[1;32m 30\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mconnection\u001b[39;00m \u001b[39mimport\u001b[39;00m wait\n\u001b[1;32m 32\u001b[0m \u001b[39m#\u001b[39;00m\n\u001b[1;32m 33\u001b[0m \u001b[39m# Constants representing the state of a pool\u001b[39;00m\n\u001b[1;32m 34\u001b[0m \u001b[39m#\u001b[39;00m\n",
|
44 |
+
"\u001b[0;31mImportError\u001b[0m: cannot import name 'get_context' from 'multiprocess' (/home/ubuntu/SentenceStructureComparision/venv/lib/python3.10/site-packages/multiprocess/__init__.py)"
|
45 |
+
]
|
46 |
+
}
|
47 |
+
],
|
48 |
+
"source": [
|
49 |
+
"from datasets import load_dataset\n",
|
50 |
+
"from tqdm import tqdm\n",
|
51 |
+
"import pandas as pd\n",
|
52 |
+
"import pyarrow as pa\n",
|
53 |
+
"import pyarrow.compute as pc\n",
|
54 |
+
"import re\n",
|
55 |
+
"import pyarrow.dataset as ds"
|
56 |
+
]
|
57 |
+
},
|
58 |
+
{
|
59 |
+
"cell_type": "code",
|
60 |
+
"execution_count": null,
|
61 |
+
"metadata": {},
|
62 |
+
"outputs": [
|
63 |
+
{
|
64 |
+
"name": "stderr",
|
65 |
+
"output_type": "stream",
|
66 |
+
"text": [
|
67 |
+
"Downloading: 100%|██████████| 15.3k/15.3k [00:00<00:00, 19.5MB/s]\n",
|
68 |
+
"Downloading: 3%|▎ | 703M/20.3G [00:11<05:19, 61.2MB/s] "
|
69 |
+
]
|
70 |
+
}
|
71 |
+
],
|
72 |
+
"source": [
|
73 |
+
"dataset = load_dataset(\"wikipedia\", \"20220301.en\", split=\"train\")"
|
74 |
+
]
|
75 |
+
},
|
76 |
+
{
|
77 |
+
"cell_type": "code",
|
78 |
+
"execution_count": 3,
|
79 |
+
"metadata": {},
|
80 |
+
"outputs": [],
|
81 |
+
"source": [
|
82 |
+
"data_df = dataset.to_pandas()"
|
83 |
+
]
|
84 |
+
},
|
85 |
+
{
|
86 |
+
"cell_type": "code",
|
87 |
+
"execution_count": 6,
|
88 |
+
"metadata": {},
|
89 |
+
"outputs": [],
|
90 |
+
"source": [
|
91 |
+
"def keep_intro(text):\n",
|
92 |
+
" return re.sub(r'\\(\\W*\\)', '', ' '.join(text.split('\\n\\n')[:2]))"
|
93 |
+
]
|
94 |
+
},
|
95 |
+
{
|
96 |
+
"cell_type": "code",
|
97 |
+
"execution_count": 7,
|
98 |
+
"metadata": {},
|
99 |
+
"outputs": [],
|
100 |
+
"source": [
|
101 |
+
"data_df['intro'] = data_df.apply(lambda row: keep_intro(row['text']), axis=1)"
|
102 |
+
]
|
103 |
+
},
|
104 |
+
{
|
105 |
+
"cell_type": "code",
|
106 |
+
"execution_count": 9,
|
107 |
+
"metadata": {},
|
108 |
+
"outputs": [],
|
109 |
+
"source": [
|
110 |
+
"data_df[['id', 'title', 'url', 'intro']].to_csv('wiki_intro.csv', index=False)"
|
111 |
+
]
|
112 |
+
},
|
113 |
+
{
|
114 |
+
"cell_type": "code",
|
115 |
+
"execution_count": 3,
|
116 |
+
"metadata": {},
|
117 |
+
"outputs": [],
|
118 |
+
"source": [
|
119 |
+
"data_df = pd.read_csv('wiki_intro.csv')"
|
120 |
+
]
|
121 |
+
},
|
122 |
+
{
|
123 |
+
"cell_type": "code",
|
124 |
+
"execution_count": 4,
|
125 |
+
"metadata": {},
|
126 |
+
"outputs": [
|
127 |
+
{
|
128 |
+
"data": {
|
129 |
+
"text/plain": [
|
130 |
+
"6458670"
|
131 |
+
]
|
132 |
+
},
|
133 |
+
"execution_count": 4,
|
134 |
+
"metadata": {},
|
135 |
+
"output_type": "execute_result"
|
136 |
+
}
|
137 |
+
],
|
138 |
+
"source": [
|
139 |
+
"len(data_df)"
|
140 |
+
]
|
141 |
+
},
|
142 |
+
{
|
143 |
+
"cell_type": "code",
|
144 |
+
"execution_count": 5,
|
145 |
+
"metadata": {},
|
146 |
+
"outputs": [
|
147 |
+
{
|
148 |
+
"data": {
|
149 |
+
"text/html": [
|
150 |
+
"<div>\n",
|
151 |
+
"<style scoped>\n",
|
152 |
+
" .dataframe tbody tr th:only-of-type {\n",
|
153 |
+
" vertical-align: middle;\n",
|
154 |
+
" }\n",
|
155 |
+
"\n",
|
156 |
+
" .dataframe tbody tr th {\n",
|
157 |
+
" vertical-align: top;\n",
|
158 |
+
" }\n",
|
159 |
+
"\n",
|
160 |
+
" .dataframe thead th {\n",
|
161 |
+
" text-align: right;\n",
|
162 |
+
" }\n",
|
163 |
+
"</style>\n",
|
164 |
+
"<table border=\"1\" class=\"dataframe\">\n",
|
165 |
+
" <thead>\n",
|
166 |
+
" <tr style=\"text-align: right;\">\n",
|
167 |
+
" <th></th>\n",
|
168 |
+
" <th>id</th>\n",
|
169 |
+
" <th>title</th>\n",
|
170 |
+
" <th>url</th>\n",
|
171 |
+
" <th>intro</th>\n",
|
172 |
+
" </tr>\n",
|
173 |
+
" </thead>\n",
|
174 |
+
" <tbody>\n",
|
175 |
+
" <tr>\n",
|
176 |
+
" <th>0</th>\n",
|
177 |
+
" <td>12</td>\n",
|
178 |
+
" <td>Anarchism</td>\n",
|
179 |
+
" <td>https://en.wikipedia.org/wiki/Anarchism</td>\n",
|
180 |
+
" <td>Anarchism is a political philosophy and moveme...</td>\n",
|
181 |
+
" </tr>\n",
|
182 |
+
" <tr>\n",
|
183 |
+
" <th>1</th>\n",
|
184 |
+
" <td>25</td>\n",
|
185 |
+
" <td>Autism</td>\n",
|
186 |
+
" <td>https://en.wikipedia.org/wiki/Autism</td>\n",
|
187 |
+
" <td>Autism is a neurodevelopmental disorder charac...</td>\n",
|
188 |
+
" </tr>\n",
|
189 |
+
" <tr>\n",
|
190 |
+
" <th>2</th>\n",
|
191 |
+
" <td>39</td>\n",
|
192 |
+
" <td>Albedo</td>\n",
|
193 |
+
" <td>https://en.wikipedia.org/wiki/Albedo</td>\n",
|
194 |
+
" <td>Albedo is the measure of the diffuse reflecti...</td>\n",
|
195 |
+
" </tr>\n",
|
196 |
+
" <tr>\n",
|
197 |
+
" <th>3</th>\n",
|
198 |
+
" <td>290</td>\n",
|
199 |
+
" <td>A</td>\n",
|
200 |
+
" <td>https://en.wikipedia.org/wiki/A</td>\n",
|
201 |
+
" <td>A, or a, is the first letter and the first vow...</td>\n",
|
202 |
+
" </tr>\n",
|
203 |
+
" <tr>\n",
|
204 |
+
" <th>4</th>\n",
|
205 |
+
" <td>303</td>\n",
|
206 |
+
" <td>Alabama</td>\n",
|
207 |
+
" <td>https://en.wikipedia.org/wiki/Alabama</td>\n",
|
208 |
+
" <td>Alabama is a state in the Southeastern region...</td>\n",
|
209 |
+
" </tr>\n",
|
210 |
+
" <tr>\n",
|
211 |
+
" <th>...</th>\n",
|
212 |
+
" <td>...</td>\n",
|
213 |
+
" <td>...</td>\n",
|
214 |
+
" <td>...</td>\n",
|
215 |
+
" <td>...</td>\n",
|
216 |
+
" </tr>\n",
|
217 |
+
" <tr>\n",
|
218 |
+
" <th>6458665</th>\n",
|
219 |
+
" <td>70201819</td>\n",
|
220 |
+
" <td>Bianca Fernandez</td>\n",
|
221 |
+
" <td>https://en.wikipedia.org/wiki/Bianca%20Fernandez</td>\n",
|
222 |
+
" <td>Bianca Jolie Fernandez (born 24 February 2004)...</td>\n",
|
223 |
+
" </tr>\n",
|
224 |
+
" <tr>\n",
|
225 |
+
" <th>6458666</th>\n",
|
226 |
+
" <td>70201882</td>\n",
|
227 |
+
" <td>Condons and Clangibbon</td>\n",
|
228 |
+
" <td>https://en.wikipedia.org/wiki/Condons%20and%20...</td>\n",
|
229 |
+
" <td>Condons and Clangibbon is a barony in County ...</td>\n",
|
230 |
+
" </tr>\n",
|
231 |
+
" <tr>\n",
|
232 |
+
" <th>6458667</th>\n",
|
233 |
+
" <td>70201886</td>\n",
|
234 |
+
" <td>2022 Chattanooga Red Wolves SC season</td>\n",
|
235 |
+
" <td>https://en.wikipedia.org/wiki/2022%20Chattanoo...</td>\n",
|
236 |
+
" <td>The 2022 Chattanooga Red Wolves SC season will...</td>\n",
|
237 |
+
" </tr>\n",
|
238 |
+
" <tr>\n",
|
239 |
+
" <th>6458668</th>\n",
|
240 |
+
" <td>70201947</td>\n",
|
241 |
+
" <td>Nkiko Prosper</td>\n",
|
242 |
+
" <td>https://en.wikipedia.org/wiki/Nkiko%20Prosper</td>\n",
|
243 |
+
" <td>Turatsinze Nkiko Prosper (born 1985) professio...</td>\n",
|
244 |
+
" </tr>\n",
|
245 |
+
" <tr>\n",
|
246 |
+
" <th>6458669</th>\n",
|
247 |
+
" <td>70201959</td>\n",
|
248 |
+
" <td>Michael O'Donnell (Missouri politician)</td>\n",
|
249 |
+
" <td>https://en.wikipedia.org/wiki/Michael%20O%27Do...</td>\n",
|
250 |
+
" <td>Michael A. O'Donnell (born June 17, 1968) is a...</td>\n",
|
251 |
+
" </tr>\n",
|
252 |
+
" </tbody>\n",
|
253 |
+
"</table>\n",
|
254 |
+
"<p>6458670 rows × 4 columns</p>\n",
|
255 |
+
"</div>"
|
256 |
+
],
|
257 |
+
"text/plain": [
|
258 |
+
" id title \\\n",
|
259 |
+
"0 12 Anarchism \n",
|
260 |
+
"1 25 Autism \n",
|
261 |
+
"2 39 Albedo \n",
|
262 |
+
"3 290 A \n",
|
263 |
+
"4 303 Alabama \n",
|
264 |
+
"... ... ... \n",
|
265 |
+
"6458665 70201819 Bianca Fernandez \n",
|
266 |
+
"6458666 70201882 Condons and Clangibbon \n",
|
267 |
+
"6458667 70201886 2022 Chattanooga Red Wolves SC season \n",
|
268 |
+
"6458668 70201947 Nkiko Prosper \n",
|
269 |
+
"6458669 70201959 Michael O'Donnell (Missouri politician) \n",
|
270 |
+
"\n",
|
271 |
+
" url \\\n",
|
272 |
+
"0 https://en.wikipedia.org/wiki/Anarchism \n",
|
273 |
+
"1 https://en.wikipedia.org/wiki/Autism \n",
|
274 |
+
"2 https://en.wikipedia.org/wiki/Albedo \n",
|
275 |
+
"3 https://en.wikipedia.org/wiki/A \n",
|
276 |
+
"4 https://en.wikipedia.org/wiki/Alabama \n",
|
277 |
+
"... ... \n",
|
278 |
+
"6458665 https://en.wikipedia.org/wiki/Bianca%20Fernandez \n",
|
279 |
+
"6458666 https://en.wikipedia.org/wiki/Condons%20and%20... \n",
|
280 |
+
"6458667 https://en.wikipedia.org/wiki/2022%20Chattanoo... \n",
|
281 |
+
"6458668 https://en.wikipedia.org/wiki/Nkiko%20Prosper \n",
|
282 |
+
"6458669 https://en.wikipedia.org/wiki/Michael%20O%27Do... \n",
|
283 |
+
"\n",
|
284 |
+
" intro \n",
|
285 |
+
"0 Anarchism is a political philosophy and moveme... \n",
|
286 |
+
"1 Autism is a neurodevelopmental disorder charac... \n",
|
287 |
+
"2 Albedo is the measure of the diffuse reflecti... \n",
|
288 |
+
"3 A, or a, is the first letter and the first vow... \n",
|
289 |
+
"4 Alabama is a state in the Southeastern region... \n",
|
290 |
+
"... ... \n",
|
291 |
+
"6458665 Bianca Jolie Fernandez (born 24 February 2004)... \n",
|
292 |
+
"6458666 Condons and Clangibbon is a barony in County ... \n",
|
293 |
+
"6458667 The 2022 Chattanooga Red Wolves SC season will... \n",
|
294 |
+
"6458668 Turatsinze Nkiko Prosper (born 1985) professio... \n",
|
295 |
+
"6458669 Michael A. O'Donnell (born June 17, 1968) is a... \n",
|
296 |
+
"\n",
|
297 |
+
"[6458670 rows x 4 columns]"
|
298 |
+
]
|
299 |
+
},
|
300 |
+
"execution_count": 5,
|
301 |
+
"metadata": {},
|
302 |
+
"output_type": "execute_result"
|
303 |
+
}
|
304 |
+
],
|
305 |
+
"source": [
|
306 |
+
"data_df"
|
307 |
+
]
|
308 |
+
},
|
309 |
+
{
|
310 |
+
"attachments": {},
|
311 |
+
"cell_type": "markdown",
|
312 |
+
"metadata": {},
|
313 |
+
"source": [
|
314 |
+
"## Data Cleaning"
|
315 |
+
]
|
316 |
+
},
|
317 |
+
{
|
318 |
+
"cell_type": "code",
|
319 |
+
"execution_count": 14,
|
320 |
+
"metadata": {},
|
321 |
+
"outputs": [],
|
322 |
+
"source": [
|
323 |
+
"data_df = data_df[data_df.apply(lambda x : len(str(x['title'])) > 1, axis = 1)]"
|
324 |
+
]
|
325 |
+
},
|
326 |
+
{
|
327 |
+
"cell_type": "code",
|
328 |
+
"execution_count": 15,
|
329 |
+
"metadata": {},
|
330 |
+
"outputs": [
|
331 |
+
{
|
332 |
+
"name": "stderr",
|
333 |
+
"output_type": "stream",
|
334 |
+
"text": [
|
335 |
+
"/var/folders/b5/qwcw21mn3973c1z_c12dw6hw0000gn/T/ipykernel_849/2014648341.py:1: SettingWithCopyWarning: \n",
|
336 |
+
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
|
337 |
+
"Try using .loc[row_indexer,col_indexer] = value instead\n",
|
338 |
+
"\n",
|
339 |
+
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
|
340 |
+
" data_df['intro_len'] = data_df.apply(lambda row: len(row['intro'].split(' ')), axis = 1)\n"
|
341 |
+
]
|
342 |
+
}
|
343 |
+
],
|
344 |
+
"source": [
|
345 |
+
"data_df['intro_len'] = data_df.apply(lambda row: len(row['intro'].split(' ')), axis = 1)"
|
346 |
+
]
|
347 |
+
},
|
348 |
+
{
|
349 |
+
"cell_type": "code",
|
350 |
+
"execution_count": 16,
|
351 |
+
"metadata": {},
|
352 |
+
"outputs": [
|
353 |
+
{
|
354 |
+
"data": {
|
355 |
+
"text/plain": [
|
356 |
+
"<AxesSubplot: >"
|
357 |
+
]
|
358 |
+
},
|
359 |
+
"execution_count": 16,
|
360 |
+
"metadata": {},
|
361 |
+
"output_type": "execute_result"
|
362 |
+
},
|
363 |
+
{
|
364 |
+
"data": {
|
365 |
+
"image/png": "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J3RcCgAAELfa9QbWuXPnau7cuS2uKy0tjXh811136a677mrP0wAAgMMA300DAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgijICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgijICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgijICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgijICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgKtF6AgAgScMWvKBAo896Gh3O38XpT2OtZwHENq6MAAAAU5QRAABgijICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgijICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgijICAABMUUYAAICpROsJAMDhYNiCFxRo9FlPo8P5uzj9aaz1LBDvuDICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU+36nJGlS5fq9ttvV01NjXJycnTPPfdo7NjWbzRftWqVbr75Zn300UcaMmSIbrvtNp1zzjntnjQAILZ49XNUJD5L5VCI+srIY489pvz8fM2fP19vvPGGcnJyNGnSJO3cubPF8a+88opmzJihyy67TJs3b9a0adM0bdo0bd269QdPHgAAxL+or4zceeedmj17ti655BJJ0rJly/TMM8/ooYce0g033NBs/N13363JkyfruuuukyQtWrRIxcXFuvfee7Vs2bIfOH0AAA4Nr179iYUrP1GVkf3796uiokIFBQXhZQkJCcrLy1NZWVmL25SVlSk/Pz9i2aRJk7RmzZpWnycQCCgQCIQf19XVSZJ27dqlYDAYzZQPKBgMqqGhQYnBBDWGvHeCSVJiyKmhIeTZjOSLf17PSL745/WMTfm+/PJLJSUldei+9+zZI0lyzh14DtHs9IsvvlBjY6PS09Mjlqenp+vdd99tcZuampoWx9fU1LT6PIWFhVq4cGGz5dnZ2dFMF//fTOsJdDLyxT+vZyRf/PN6xs7Ot2fPHvXs2bPV9TH5RXkFBQURV1NCoZB27dqlI488Uj5fx7XS+vp69evXT5988olSU1M7bL+xxOsZyRf/vJ6RfPHP6xk7M59zTnv27FFWVtYBx0VVRtLS0tSlSxfV1tZGLK+trVVGRkaL22RkZEQ1XpL8fr/8fn/Esl69ekUz1aikpqZ68gT7Lq9nJF/883pG8sU/r2fsrHwHuiLSJKq7aZKTkzV69GiVlJSEl4VCIZWUlCg3N7fFbXJzcyPGS1JxcXGr4wEAwOEl6pdp8vPzNWvWLI0ZM0Zjx47VkiVLtG/fvvDdNRdffLH69u2rwsJCSdK8efN05plnavHixZo6dapWrlyp8vJyPfDAAx2bBAAAxKWoy8j06dP1+eef65ZbblFNTY1OOukkPf/88+E3qVZXVysh4X8XXE499VStWLFCv/vd73TjjTdqyJAhWrNmjYYNG9ZxKdrJ7/dr/vz5zV4S8hKvZyRf/PN6RvLFP69njIV8Pnew+20AAAA6Ed9NAwAATFFGAACAKcoIAAAwRRkBAACmDusysnTpUg0cOFBdu3bVuHHj9Nprr1lPqV0WLFggn88X8XPccceF13/99deaM2eOjjzySHXv3l0//elPm30QXSzZsGGDzj33XGVlZcnn8zX7HiPnnG655RZlZmaqW7duysvL0/vvvx8xZteuXbrooouUmpqqXr166bLLLtPevXsPYYoDO1jGX/7yl82O6eTJkyPGxHLGwsJCnXzyyerRo4f69OmjadOmqaqqKmJMW87L6upqTZ06VSkpKerTp4+uu+46ffPNN4cySovakm/8+PHNjuGVV14ZMSZW891///0aMWJE+EOwcnNz9dxzz4XXx/Oxa3KwjPF8/Fpy6623yufz6eqrrw4vi6nj6A5TK1eudMnJye6hhx5yb731lps9e7br1auXq62ttZ5a1ObPn+9OPPFEt2PHjvDP559/Hl5/5ZVXun79+rmSkhJXXl7uTjnlFHfqqacazvjAnn32WXfTTTe5J5980klyq1evjlh/6623up49e7o1a9a4f//73+68885z2dnZ7quvvgqPmTx5ssvJyXGvvvqq+9e//uUGDx7sZsyYcYiTtO5gGWfNmuUmT54ccUx37doVMSaWM06aNMk9/PDDbuvWra6ystKdc845rn///m7v3r3hMQc7L7/55hs3bNgwl5eX5zZv3uyeffZZl5aW5goKCiwiRWhLvjPPPNPNnj074hjW1dWF18dyvn/84x/umWeece+9956rqqpyN954o0tKSnJbt251zsX3sWtysIzxfPy+77XXXnMDBw50I0aMcPPmzQsvj6XjeNiWkbFjx7o5c+aEHzc2NrqsrCxXWFhoOKv2mT9/vsvJyWlx3e7du11SUpJbtWpVeNk777zjJLmysrJDNMP2+/4v6lAo5DIyMtztt98eXrZ7927n9/vdo48+6pxz7u2333aS3Ouvvx4e89xzzzmfz+c+/fTTQzb3tmqtjJx//vmtbhNvGXfu3OkkufXr1zvn2nZePvvssy4hIcHV1NSEx9x///0uNTXVBQKBQxvgIL6fz7lvf5l99z/+74unfM45d8QRR7gHH3zQc8fuu5oyOued47dnzx43ZMgQV1xcHJEp1o7jYfkyzf79+1VRUaG8vLzwsoSEBOXl5amsrMxwZu33/vvvKysrS4MGDdJFF12k6upqSVJFRYWCwWBE1uOOO079+/ePy6zbt29XTU1NRJ6ePXtq3Lhx4TxlZWXq1auXxowZEx6Tl5enhIQEbdq06ZDPub1KS0vVp08fDR06VFdddZW+/PLL8Lp4y1hXVydJ6t27t6S2nZdlZWUaPnx4xLd+T5o0SfX19XrrrbcO4ewP7vv5mvz9739XWlqahg0bpoKCAjU0NITXxUu+xsZGrVy5Uvv27VNubq7njp3UPGMTLxy/OXPmaOrUqRHHS4q9f4Mx+a29ne2LL75QY2NjxF+wJKWnp+vdd981mlX7jRs3TkVFRRo6dKh27NihhQsX6vTTT9fWrVtVU1Oj5OTkZl80mJ6erpqaGpsJ/wBNc27p2DWtq6mpUZ8+fSLWJyYmqnfv3nGTefLkybrggguUnZ2tDz74QDfeeKOmTJmisrIydenSJa4yhkIhXX311TrttNPCn7zclvOypqamxePctC5WtJRPkmbOnKkBAwYoKytLb775pn7729+qqqpKTz75pKTYz7dlyxbl5ubq66+/Vvfu3bV69WqdcMIJqqys9Myxay2jFP/HT5JWrlypN954Q6+//nqzdbH2b/CwLCNeM2XKlPCfR4wYoXHjxmnAgAF6/PHH1a1bN8OZob1+/vOfh/88fPhwjRgxQsccc4xKS0s1YcIEw5lFb86cOdq6das2btxoPZVO0Vq+K664Ivzn4cOHKzMzUxMmTNAHH3ygY4455lBPM2pDhw5VZWWl6urq9MQTT2jWrFlav3699bQ6VGsZTzjhhLg/fp988onmzZun4uJide3a1Xo6B3VYvkyTlpamLl26NHvXcG1trTIyMoxm1XF69eqlY489Vtu2bVNGRob279+v3bt3R4yJ16xNcz7QscvIyNDOnTsj1n/zzTfatWtXXGaWpEGDBiktLU3btm2TFD8Z586dq6efflovvfSSjj766PDytpyXGRkZLR7npnWxoLV8LRk3bpwkRRzDWM6XnJyswYMHa/To0SosLFROTo7uvvtuzxw7qfWMLYm341dRUaGdO3dq1KhRSkxMVGJiotavX68///nPSkxMVHp6ekwdx8OyjCQnJ2v06NEqKSkJLwuFQiopKYl4vTBe7d27Vx988IEyMzM1evRoJSUlRWStqqpSdXV1XGbNzs5WRkZGRJ76+npt2rQpnCc3N1e7d+9WRUVFeMy6desUCoXC/6HEm//85z/68ssvlZmZKSn2MzrnNHfuXK1evVrr1q1TdnZ2xPq2nJe5ubnasmVLROkqLi5Wampq+FK6lYPla0llZaUkRRzDWM3XklAopEAgEPfH7kCaMrYk3o7fhAkTtGXLFlVWVoZ/xowZo4suuij855g6jh36dtg4snLlSuf3+11RUZF7++233RVXXOF69eoV8a7heHHNNde40tJSt337dvfyyy+7vLw8l5aW5nbu3Omc+/b2rf79+7t169a58vJyl5ub63Jzc41n3bo9e/a4zZs3u82bNztJ7s4773SbN292H3/8sXPu21t7e/Xq5Z566in35ptvuvPPP7/FW3tHjhzpNm3a5DZu3OiGDBkSM7e9OnfgjHv27HHXXnutKysrc9u3b3cvvviiGzVqlBsyZIj7+uuvw/uI5YxXXXWV69mzpystLY24NbKhoSE85mDnZdNthRMnTnSVlZXu+eefd0cddVRM3Dp5sHzbtm1zv//97115ebnbvn27e+qpp9ygQYPcGWecEd5HLOe74YYb3Pr169327dvdm2++6W644Qbn8/nc2rVrnXPxfeyaHChjvB+/1nz/DqFYOo6HbRlxzrl77rnH9e/f3yUnJ7uxY8e6V1991XpK7TJ9+nSXmZnpkpOTXd++fd306dPdtm3bwuu/+uor96tf/codccQRLiUlxf3kJz9xO3bsMJzxgb300ktOUrOfWbNmOee+vb335ptvdunp6c7v97sJEya4qqqqiH18+eWXbsaMGa579+4uNTXVXXLJJW7Pnj0GaVp2oIwNDQ1u4sSJ7qijjnJJSUluwIABbvbs2c2KcixnbCmbJPfwww+Hx7TlvPzoo4/clClTXLdu3VxaWpq75pprXDAYPMRpmjtYvurqanfGGWe43r17O7/f7wYPHuyuu+66iM+pcC5281166aVuwIABLjk52R111FFuwoQJ4SLiXHwfuyYHyhjvx6813y8jsXQcfc4517HXWgAAANrusHzPCAAAiB2UEQAAYIoyAgAATFFGAACAKcoIAAAwRRkBAACmKCMAAMAUZQQAAJiijAAAAFOUEQAAYIoyAgAATFFGAACAqf8Hc7Wzy0owsBoAAAAASUVORK5CYII=",
|
366 |
+
"text/plain": [
|
367 |
+
"<Figure size 640x480 with 1 Axes>"
|
368 |
+
]
|
369 |
+
},
|
370 |
+
"metadata": {},
|
371 |
+
"output_type": "display_data"
|
372 |
+
}
|
373 |
+
],
|
374 |
+
"source": [
|
375 |
+
"data_df['intro_len'].hist(bins=[0,50,100,150,200,250,300,350,400])"
|
376 |
+
]
|
377 |
+
},
|
378 |
+
{
|
379 |
+
"cell_type": "code",
|
380 |
+
"execution_count": 20,
|
381 |
+
"metadata": {},
|
382 |
+
"outputs": [],
|
383 |
+
"source": [
|
384 |
+
"data_df = data_df[data_df['intro_len'].between(150, 350)]"
|
385 |
+
]
|
386 |
+
},
|
387 |
+
{
|
388 |
+
"cell_type": "code",
|
389 |
+
"execution_count": 23,
|
390 |
+
"metadata": {},
|
391 |
+
"outputs": [],
|
392 |
+
"source": [
|
393 |
+
"data_df['title_len'] = data_df.apply(lambda row: len(row['title'].split(' ')), axis = 1)"
|
394 |
+
]
|
395 |
+
},
|
396 |
+
{
|
397 |
+
"cell_type": "code",
|
398 |
+
"execution_count": 26,
|
399 |
+
"metadata": {},
|
400 |
+
"outputs": [
|
401 |
+
{
|
402 |
+
"data": {
|
403 |
+
"text/plain": [
|
404 |
+
"<AxesSubplot: >"
|
405 |
+
]
|
406 |
+
},
|
407 |
+
"execution_count": 26,
|
408 |
+
"metadata": {},
|
409 |
+
"output_type": "execute_result"
|
410 |
+
},
|
411 |
+
{
|
412 |
+
"data": {
|
413 |
+
"image/png": "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bDNnztRTTz2lyZMna9CgQXrooYdUUFCgkpKSYLcGSYmJiZKkurq6gOV1dXXWuvZEEMI18fv9ysvL05tvvqktW7YoJSUl2C0ZbcyYMdq/f79qa2utn+HDh+vBBx9UbW2tIiIigt2iUe66666LPk7ib3/7m/r27Rukjsx29uxZhYcH/rqLiIhQc3NzkDrChVJSUpSYmKjKykprmcfj0c6dO+VwONr98Tk0hmuSm5urVatW6fe//726du1qHceNi4tTTExMkLszT9euXS86P6tz587q2bMn520FQUFBge6880795Cc/0b//+79r165devnll/Xyyy8HuzUj3XPPPXr++efVp08f3XrrrXr33Xe1cOFCPfLII8FuzRhnzpzRhx9+aN0+cuSIamtr1aNHD/Xp00f5+fl67rnndPPNNyslJUXPPPOMkpKSrCvL2pUfuAaSLvnz+uuvB7s1/H//9m//5n/iiSeC3Yax3nrrLf/AgQP9NpvN379/f//LL78c7JaM5fF4/E888YS/T58+/ujoaP83v/lN/49//GO/1+sNdmvG+NOf/nTJ3xk5OTl+v9/vb25u9j/zzDP+hIQEv81m848ZM8Z/+PDhf0lvfI4QAAAwFucIAQAAYxGEAACAsQhCAADAWAQhAABgLIIQAAAwFkEIAAAYiyAEAACMRRACAADGIggBAABjEYQAAICxCEIAAMBYBCEAAGCs/wdaTjD4nrBYpAAAAABJRU5ErkJggg==",
|
414 |
+
"text/plain": [
|
415 |
+
"<Figure size 640x480 with 1 Axes>"
|
416 |
+
]
|
417 |
+
},
|
418 |
+
"metadata": {},
|
419 |
+
"output_type": "display_data"
|
420 |
+
}
|
421 |
+
],
|
422 |
+
"source": [
|
423 |
+
"data_df.title_len.hist(bins=[1,2,3,4,5,6,7,8,9,10])"
|
424 |
+
]
|
425 |
+
},
|
426 |
+
{
|
427 |
+
"cell_type": "code",
|
428 |
+
"execution_count": 27,
|
429 |
+
"metadata": {},
|
430 |
+
"outputs": [],
|
431 |
+
"source": [
|
432 |
+
"data_df = data_df[data_df['title_len'] < 4]"
|
433 |
+
]
|
434 |
+
},
|
435 |
+
{
|
436 |
+
"cell_type": "code",
|
437 |
+
"execution_count": 34,
|
438 |
+
"metadata": {},
|
439 |
+
"outputs": [],
|
440 |
+
"source": [
|
441 |
+
"data_df = data_df.sample(n=150000, random_state=1111)"
|
442 |
+
]
|
443 |
+
},
|
444 |
+
{
|
445 |
+
"cell_type": "code",
|
446 |
+
"execution_count": 35,
|
447 |
+
"metadata": {},
|
448 |
+
"outputs": [
|
449 |
+
{
|
450 |
+
"data": {
|
451 |
+
"text/plain": [
|
452 |
+
"<AxesSubplot: >"
|
453 |
+
]
|
454 |
+
},
|
455 |
+
"execution_count": 35,
|
456 |
+
"metadata": {},
|
457 |
+
"output_type": "execute_result"
|
458 |
+
},
|
459 |
+
{
|
460 |
+
"data": {
|
461 |
+
"image/png": "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m19tx/iNN9642XFqaMzxGzNmTI21z5gxI2BMaz1+UsMZT5w4Ued5uGnTJntcaz2GL7/8soYOHWp/OZzT6dS7775r7w/l88+vvoyhfg5KDR/DVncOWmi0rVu3Wn//939v/fGPf7QkWZs3bw7Yn5GRYY0fP946deqU/efMmTMBY8aPH28NGzbM2rt3r/X+++9b/fv3tx5++OGbmKJuDeW7NtepU6es1atXW2FhYdYXX3xhj+nbt6+1cOHCgHEXLly4yUlq53K5rDVr1liHDx+2SktLrXvuucfq06dPwPpmzJhh9e7d2youLrb2799vjR492rrjjjvs/VevXrUGDx5spaamWgcPHrS2bt1qdevWzcrJyWmJSAEaynfo0CFr4sSJ1ttvv219/vnnVnFxsXX77bdbkyZNCphHkrVmzZqAY3j58uWWiBSgMcfvZz/7mTV9+vSAtZ87d87e35qPn2U1nPHq1as1zsMFCxZY7du3t86fP2/P01qP4dtvv20VFBRY//mf/2kdO3bMeu6556zIyEjr8OHDlmWF9vnnV1/GUD8HLavhY9jazkFKznWqq+Tcd999dd7nk08+sSRZH330kb3t3XfftcLCwqz/+Z//CdJKr09t+b7rvvvus8aOHRuwrW/fvtby5cuDt7BmdPr0aUuStWvXLsuyLOvs2bNWZGSktWnTJnvMp59+akmy3G63ZVl/LYLh4eGWx+Oxx7z88suWw+GwvF7vzQ3QgO/mq83GjRutqKgoy+fz2dsac+xbg9ry/exnP7OefvrpOu8TSsfPshp3DJOSkqzHHnssYFuoHEPLsqzOnTtbr776qnHn37X8GWsTyueg37X5Wts5yNtVzWznzp3q0aOHBgwYoJkzZ+qbb76x97ndbnXq1EkjR460t6Wmpio8PFwffvhhSyz3upWXl6ugoEDTpk2rsW/JkiXq2rWrhg8frueff75VvZR8Lf9LxF26dJEklZSUyOfzKTU11R4zcOBA9enTR263W9Jfj+GQIUMCvnDS5XKpoqJCR44cuYmrb9h389U1xuFwqE2bwO8FzczMVLdu3TRq1CitXr1aViv8Oq268r3++uvq1q2bBg8erJycHF26dMneF0rHT2r4GJaUlKi0tLTW87C1H8Oqqiq98cYbunjxopxOp3Hnn1QzY21C+RysK19rOgdD+huPW5vx48dr4sSJSkhI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",
|
462 |
+
"text/plain": [
|
463 |
+
"<Figure size 640x480 with 1 Axes>"
|
464 |
+
]
|
465 |
+
},
|
466 |
+
"metadata": {},
|
467 |
+
"output_type": "display_data"
|
468 |
+
}
|
469 |
+
],
|
470 |
+
"source": [
|
471 |
+
"data_df['intro_len'].hist()"
|
472 |
+
]
|
473 |
+
},
|
474 |
+
{
|
475 |
+
"cell_type": "code",
|
476 |
+
"execution_count": 4,
|
477 |
+
"metadata": {},
|
478 |
+
"outputs": [],
|
479 |
+
"source": [
|
480 |
+
"data_df['starter_text'] = data_df['intro'].apply(lambda x: ' '.join(str(x).split(' ')[:7]))"
|
481 |
+
]
|
482 |
+
},
|
483 |
+
{
|
484 |
+
"cell_type": "code",
|
485 |
+
"execution_count": 6,
|
486 |
+
"metadata": {},
|
487 |
+
"outputs": [],
|
488 |
+
"source": [
|
489 |
+
"data_df.to_csv('data/wiki_intro_processed.csv', index=False)"
|
490 |
+
]
|
491 |
+
}
|
492 |
+
],
|
493 |
+
"metadata": {
|
494 |
+
"kernelspec": {
|
495 |
+
"display_name": "venv",
|
496 |
+
"language": "python",
|
497 |
+
"name": "python3"
|
498 |
+
},
|
499 |
+
"language_info": {
|
500 |
+
"codemirror_mode": {
|
501 |
+
"name": "ipython",
|
502 |
+
"version": 3
|
503 |
+
},
|
504 |
+
"file_extension": ".py",
|
505 |
+
"mimetype": "text/x-python",
|
506 |
+
"name": "python",
|
507 |
+
"nbconvert_exporter": "python",
|
508 |
+
"pygments_lexer": "ipython3",
|
509 |
+
"version": "3.10.12"
|
510 |
+
},
|
511 |
+
"orig_nbformat": 4,
|
512 |
+
"vscode": {
|
513 |
+
"interpreter": {
|
514 |
+
"hash": "3f100d68d9cf80676b1a4c3ace5430b03ae266a1d88e3f101eb196b64b263632"
|
515 |
+
}
|
516 |
+
}
|
517 |
+
},
|
518 |
+
"nbformat": 4,
|
519 |
+
"nbformat_minor": 2
|
520 |
+
}
|
wiki_gpt/requirements.txt
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
aiohttp==3.8.3
|
2 |
+
aiosignal==1.3.1
|
3 |
+
apache-beam
|
4 |
+
appnope==0.1.3
|
5 |
+
asttokens==2.2.1
|
6 |
+
async-timeout==4.0.2
|
7 |
+
attrs==22.2.0
|
8 |
+
backcall==0.2.0
|
9 |
+
certifi==2022.12.7
|
10 |
+
charset-normalizer==2.1.1
|
11 |
+
click==8.1.3
|
12 |
+
cloudpickle==2.2.1
|
13 |
+
comm==0.1.2
|
14 |
+
contourpy==1.0.7
|
15 |
+
crcmod==1.7
|
16 |
+
cycler==0.11.0
|
17 |
+
dask==2023.1.1
|
18 |
+
datasets
|
19 |
+
debugpy==1.6.6
|
20 |
+
decorator==5.1.1
|
21 |
+
dill
|
22 |
+
docopt==0.6.2
|
23 |
+
executing==1.2.0
|
24 |
+
fastavro==1.7.1
|
25 |
+
fasteners==0.18
|
26 |
+
filelock==3.9.0
|
27 |
+
fonttools==4.38.0
|
28 |
+
frozenlist==1.3.3
|
29 |
+
fsspec==2023.1.0
|
30 |
+
grpcio==1.51.1
|
31 |
+
hdfs==2.7.0
|
32 |
+
httplib2==0.20.4
|
33 |
+
huggingface-hub==0.12.0
|
34 |
+
idna==3.4
|
35 |
+
install==1.3.5
|
36 |
+
ipykernel==6.20.2
|
37 |
+
ipython==8.9.0
|
38 |
+
jedi==0.18.2
|
39 |
+
jupyter_client==8.0.2
|
40 |
+
jupyter_core==5.2.0
|
41 |
+
kiwisolver==1.4.4
|
42 |
+
locket==1.0.0
|
43 |
+
matplotlib==3.6.3
|
44 |
+
matplotlib-inline==0.1.6
|
45 |
+
multidict==6.0.4
|
46 |
+
multiprocess
|
47 |
+
mwparserfromhell==0.6.4
|
48 |
+
nest-asyncio==1.5.6
|
49 |
+
numpy==1.22.4
|
50 |
+
objsize==0.6.1
|
51 |
+
openai==0.26.4
|
52 |
+
orjson==3.8.5
|
53 |
+
packaging==23.0
|
54 |
+
pandas==1.5.3
|
55 |
+
parso==0.8.3
|
56 |
+
partd==1.3.0
|
57 |
+
pexpect==4.8.0
|
58 |
+
pickleshare==0.7.5
|
59 |
+
Pillow==9.4.0
|
60 |
+
pip==23.0
|
61 |
+
platformdirs==2.6.2
|
62 |
+
prompt-toolkit==3.0.36
|
63 |
+
proto-plus==1.22.2
|
64 |
+
protobuf==3.19.4
|
65 |
+
psutil==5.9.4
|
66 |
+
ptyprocess==0.7.0
|
67 |
+
pure-eval==0.2.2
|
68 |
+
pyarrow==9.0.0
|
69 |
+
pydot==1.4.2
|
70 |
+
Pygments==2.14.0
|
71 |
+
pymongo==3.13.0
|
72 |
+
pyparsing==3.0.9
|
73 |
+
python-dateutil==2.8.2
|
74 |
+
pytz==2022.7.1
|
75 |
+
PyYAML==6.0
|
76 |
+
pyzmq==25.0.0
|
77 |
+
regex==2022.10.31
|
78 |
+
requests==2.28.2
|
79 |
+
responses==0.18.0
|
80 |
+
setuptools==63.4.3
|
81 |
+
six==1.16.0
|
82 |
+
stack-data==0.6.2
|
83 |
+
toolz==0.12.0
|
84 |
+
tornado==6.2
|
85 |
+
tqdm==4.64.1
|
86 |
+
traitlets==5.9.0
|
87 |
+
typing_extensions==4.4.0
|
88 |
+
urllib3==1.26.14
|
89 |
+
wcwidth==0.2.6
|
90 |
+
xxhash==3.2.0
|
91 |
+
yarl==1.8.2
|
92 |
+
zstandard==0.19.0
|