import%20marimo%0A%0A__generated_with%20%3D%20%220.19.2%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0Awith%20app.setup%3A%0A%20%20%20%20import%20importlib%0A%20%20%20%20import%20re%0A%20%20%20%20from%20importlib.metadata%20import%20version%0A%20%20%20%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20requests%0A%20%20%20%20import%20tiktoken%0A%20%20%20%20import%20torch%0A%20%20%20%20from%20torch.utils.data%20import%20DataLoader%2C%20Dataset%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20print(%22torch%20version%3A%22%2C%20version(%22torch%22))%0A%20%20%20%20print(%22tiktoken%20version%3A%22%2C%20version(%22tiktoken%22))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20%E7%AC%AC2%E7%AB%A0%3A%20%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%89%B1%E3%81%86%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.2%20%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8C%96%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%AD%A6%E7%BF%92%E3%81%AB%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%80%81%E7%9F%AD%E7%B7%A8%E5%B0%8F%E8%AA%AC%E3%80%8CThe%20Verdict%E3%80%8D%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B%E9%96%A2%E6%95%B0%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.function%0Adef%20download_verdict_data()%3A%0A%20%20%20%20project_root%20%3D%20Path(__file__).parent.parent.parent%0A%20%20%20%20data_root%20%3D%20project_root%20%2F%20%22data%22%0A%20%20%20%20data_root.mkdir(parents%3DTrue%2C%20exist_ok%3DTrue)%0A%0A%20%20%20%20file_path%20%3D%20data_root%20%2F%20%22the-verdict.txt%22%0A%20%20%20%20if%20file_path.exists()%3A%0A%20%20%20%20%20%20%20%20print(f%22Data%20file%20already%20exists%20at%20%7Bfile_path%7D.%20Skipping%20download.%22)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20data_url%20%3D%20%22https%3A%2F%2Fraw.githubusercontent.com%2Frasbt%2FLLMs-from-scratch%2Fmain%2Fch02%2F01_main-chapter-code%2Fthe-verdict.txt%22%0A%20%20%20%20%20%20%20%20response%20%3D%20requests.get(data_url%2C%20timeout%3D30)%0A%20%20%20%20%20%20%20%20response.raise_for_status()%0A%20%20%20%20%20%20%20%20text_data%20%3D%20response.text%0A%20%20%20%20%20%20%20%20with%20open(file_path%2C%20%22w%22%2C%20encoding%3D%22utf-8%22)%20as%20file%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20file.write(text_data)%0A%20%20%20%20return%20file_path%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%97%E3%81%A6%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20verdict_file_path%20%3D%20download_verdict_data()%0A%20%20%20%20with%20open(verdict_file_path%2C%20%22r%22%2C%20encoding%3D%22utf-8%22)%20as%20f%3A%0A%20%20%20%20%20%20%20%20raw_text%20%3D%20f.read()%0A%0A%20%20%20%20print(%22Total%20number%20of%20character%3A%22%2C%20len(raw_text))%0A%20%20%20%20print(raw_text%5B%3A99%5D)%0A%20%20%20%20return%20(raw_text%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%A9%BA%E7%99%BD%E3%81%A7%E5%8D%98%E8%AA%9E%E3%82%92%E5%88%86%E5%89%B2%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20text_1%20%3D%20%22Hello%2C%20world.%20This%2C%20is%20a%20test.%22%0A%20%20%20%20_result%20%3D%20re.split(r%22(%5Cs)%22%2C%20text_1)%0A%20%20%20%20print(_result)%0A%20%20%20%20return%20(text_1%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%95%E3%82%89%E3%81%AB%E3%83%94%E3%83%AA%E3%82%AA%E3%83%89%20(.)%20%E3%81%A8%E3%82%AB%E3%83%B3%E3%83%9E%20(%2C)%20%E3%82%92%E5%8C%BA%E5%88%87%E3%82%8A%E6%96%87%E5%AD%97%E3%81%A8%E3%81%97%E3%81%A6%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(text_1)%3A%0A%20%20%20%20result_1%20%3D%20re.split(r%22(%5B%2C.%5D%7C%5Cs)%22%2C%20text_1)%0A%20%20%20%20print(result_1)%0A%20%20%20%20return%20(result_1%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%8C%BA%E5%88%87%E3%82%8A%E6%96%87%E5%AD%97%E3%81%A8%E3%81%97%E3%81%A6%E8%AA%8D%E8%AD%98%E3%81%95%E3%82%8C%E3%81%9F%E7%A9%BA%E7%99%BD%E3%81%AF%E3%80%81%E5%BF%85%E8%A6%81%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%E5%90%84%E8%A6%81%E7%B4%A0%E3%81%8B%E3%82%89%E7%A9%BA%E7%99%BD%E3%82%92%E5%8F%96%E3%82%8A%E9%99%A4%E3%81%8D%E3%80%81%E7%A9%BA%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E9%99%A4%E5%A4%96%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(result_1)%3A%0A%20%20%20%20_result%20%3D%20%5Bitem%20for%20item%20in%20result_1%20if%20item.strip()%5D%0A%20%20%20%20print(_result)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%8F%E3%82%A4%E3%83%95%E3%83%B3%20(-)%20%E3%82%84%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%81%E3%83%A7%E3%83%B3%E3%83%9E%E3%83%BC%E3%82%AF%20(%3F)%20%E3%81%AA%E3%81%A9%E3%81%AE%E8%A8%98%E5%8F%B7%E3%82%92%E5%90%AB%E3%82%80%E5%88%A5%E3%81%AE%E4%BE%8B%E3%82%92%E8%A9%A6%E3%81%99%E3%80%82%E3%81%93%E3%82%8C%E3%82%89%E3%81%AE%E8%A8%98%E5%8F%B7%E3%82%82%E5%8C%BA%E5%88%87%E3%82%8A%E6%96%87%E5%AD%97%E3%81%A8%E3%81%97%E3%81%A6%E6%89%B1%E3%81%86%E3%81%93%E3%81%A8%E3%81%A7%E6%8A%BD%E5%87%BA%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20text_2%20%3D%20%22Hello%2C%20world.%20Is%20this--%20a%20test%3F%22%0A%0A%20%20%20%20_result%20%3D%20re.split(r'(%5B%2C.%3A%3B%3F_!%22()%5C'%5D%7C--%7C%5Cs)'%2C%20text_2)%0A%20%20%20%20_result%20%3D%20%5Bitem.strip()%20for%20item%20in%20_result%20if%20item.strip()%5D%0A%20%20%20%20print(_result)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20The%20Verdict%20%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E5%85%A8%E4%BD%93%E3%82%92%E5%88%86%E5%89%B2%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(raw_text)%3A%0A%20%20%20%20preprocessed%20%3D%20re.split(r'(%5B%2C.%3A%3B%3F_!%22()%5C'%5D%7C--%7C%5Cs)'%2C%20raw_text)%0A%20%20%20%20preprocessed%20%3D%20%5Bitem.strip()%20for%20item%20in%20preprocessed%20if%20item.strip()%5D%0A%20%20%20%20print(f%22%7Bpreprocessed%5B%3A30%5D%3D%7D%22)%0A%20%20%20%20print(f%22%7Blen(preprocessed)%3D%7D%22)%0A%20%20%20%20return%20(preprocessed%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.3%20%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3ID%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%60set%60%20%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E9%87%8D%E8%A4%87%E3%82%92%E9%99%A4%E3%81%84%E3%81%9F%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8A%E3%80%81%E3%81%9D%E3%82%8C%E3%82%92%E3%82%BD%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(preprocessed)%3A%0A%20%20%20%20all_words%20%3D%20sorted(set(preprocessed))%0A%20%20%20%20_vocab_size%20%3D%20len(all_words)%0A%20%20%20%20print(_vocab_size)%0A%20%20%20%20return%20(all_words%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%8B%E3%82%89%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3ID%E3%81%B8%E3%81%AE%E5%AF%BE%E5%BF%9C%EF%BC%88%E8%BE%9E%E6%9B%B8%EF%BC%89%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%80%81%E3%81%9D%E3%82%8C%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(all_words)%3A%0A%20%20%20%20vocab%20%3D%20%7Btoken%3A%20integer%20for%20integer%2C%20token%20in%20enumerate(all_words)%7D%0A%20%20%20%20for%20_i%2C%20_item%20in%20enumerate(vocab.items())%3A%0A%20%20%20%20%20%20%20%20print(_item)%0A%20%20%20%20%20%20%20%20if%20_i%20%3E%3D%2050%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20return%20(vocab%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%82%89%E3%82%92%E3%82%82%E3%81%A8%E3%81%AB%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%83%88%E3%83%BC%E3%82%AF%E3%83%8A%E3%82%A4%E3%82%B6%E3%83%BC%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E3%80%81%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC%E3%81%A0%E3%81%91%E3%81%A7%E3%81%AA%E3%81%8F%E9%80%86%E5%86%99%E5%83%8F%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%A6%E3%83%87%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC%E3%82%82%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.class_definition%0Aclass%20SimpleTokenizerV1%3A%0A%20%20%20%20def%20__init__(self%2C%20vocab)%3A%0A%20%20%20%20%20%20%20%20self.str_to_int%20%3D%20vocab%0A%20%20%20%20%20%20%20%20%23%20%E9%80%86%E5%86%99%E5%83%8F%0A%20%20%20%20%20%20%20%20self.int_to_str%20%3D%20%7Bi%3A%20s%20for%20s%2C%20i%20in%20vocab.items()%7D%0A%0A%20%20%20%20def%20encode(self%2C%20text)%3A%0A%20%20%20%20%20%20%20%20%23%20%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%E8%A8%98%E5%8F%B7%E3%81%A8%E7%A9%BA%E7%99%BD%E3%81%A7%E5%88%86%E5%89%B2%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20preprocessed%20%3D%20re.split(r'(%5B%2C.%3A%3B%3F_!%22()%5C'%5D%7C--%7C%5Cs)'%2C%20text)%0A%20%20%20%20%20%20%20%20%23%20%E7%A9%BA%E6%96%87%E5%AD%97%E5%88%97%E3%81%A8%E7%A9%BA%E7%99%BD%E3%81%AE%E3%81%BF%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E9%99%A4%E5%8E%BB%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20preprocessed%20%3D%20%5Bitem.strip()%20for%20item%20in%20preprocessed%20if%20item.strip()%5D%0A%20%20%20%20%20%20%20%20%23%20%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3ID%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20ids%20%3D%20%5Bself.str_to_int%5Bs%5D%20for%20s%20in%20preprocessed%5D%0A%20%20%20%20%20%20%20%20return%20ids%0A%0A%20%20%20%20def%20decode(self%2C%20ids)%3A%0A%20%20%20%20%20%20%20%20%23%20%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3ID%E3%82%92%E7%A9%BA%E7%99%BD%E3%81%A7%E9%80%A3%E7%B5%90%E3%81%97%E3%81%A6%E6%96%87%E5%AD%97%E5%88%97%E3%81%B8%E6%88%BB%E3%81%99%0A%20%20%20%20%20%20%20%20text%20%3D%20%22%20%22.join(%5Bself.int_to_str%5Bi%5D%20for%20i%20in%20ids%5D)%0A%20%20%20%20%20%20%20%20%23%20%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%E8%A8%98%E5%8F%B7%E3%81%AE%E5%89%8D%E3%81%AE%E7%A9%BA%E7%99%BD%E3%82%92%E9%99%A4%E5%8E%BB%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20text%20%3D%20re.sub(r'%5Cs%2B(%5B%2C.%3F!%22()%5C'%5D)'%2C%20r%22%5C1%22%2C%20text)%0A%20%20%20%20%20%20%20%20return%20text%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20The%20Verdict%20%E3%81%AE%E4%B8%80%E6%96%87%E3%81%AB%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E5%87%A6%E7%90%86%E3%82%92%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(vocab)%3A%0A%20%20%20%20simple_tokenizer%20%3D%20SimpleTokenizerV1(vocab)%0A%0A%20%20%20%20text_3%20%3D%20%22%22%22%22It's%20the%20last%20he%20painted%2C%20you%20know%2C%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Mrs.%20Gisburn%20said%20with%20pardonable%20pride.%22%22%22%0A%20%20%20%20token_ids_3%20%3D%20simple_tokenizer.encode(text_3)%0A%20%20%20%20print(token_ids_3)%0A%20%20%20%20return%20simple_tokenizer%2C%20text_3%2C%20token_ids_3%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%E3%81%97%E3%81%A6%E3%80%81%E5%8F%AF%E9%80%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(simple_tokenizer%2C%20token_ids_3)%3A%0A%20%20%20%20simple_tokenizer.decode(token_ids_3)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%82%89%E3%82%92%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(simple_tokenizer%2C%20text_3)%3A%0A%20%20%20%20simple_tokenizer.decode(simple_tokenizer.encode(text_3))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E8%AA%9E%E5%BD%99%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E6%9C%AA%E7%9F%A5%E8%AA%9E%E3%81%AF%E6%89%B1%E3%81%88%E3%81%AA%E3%81%84%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AB%E3%81%AA%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(simple_tokenizer)%3A%0A%20%20%20%20text_4%20%3D%20%22Hello%2C%20do%20you%20like%20tea.%20Is%20this--%20a%20test%3F%22%0A%0A%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20simple_tokenizer.encode(text_4)%0A%20%20%20%20except%20KeyError%20as%20error%3A%0A%20%20%20%20%20%20%20%20print(f%22%E8%AA%9E%E5%BD%99%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%AA%E3%81%84%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E3%81%9F%E3%82%81%E3%80%81%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%3A%20%7Berror%7D%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.4%20%E7%89%B9%E6%AE%8A%E3%81%AA%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E8%AA%9E%E5%BD%99%E3%81%AE%E5%95%8F%E9%A1%8C%E3%82%92%E8%A7%A3%E6%B1%BA%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E6%9C%AA%E7%9F%A5%E8%AA%9E%E7%94%A8%E3%81%AE%E7%89%B9%E6%AE%8A%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%20%60unk%60%20%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E3%80%82%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E9%80%A3%E7%B5%90%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E7%89%B9%E6%AE%8A%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%20%60endoftext%60%20%E3%82%82%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(preprocessed)%3A%0A%20%20%20%20all_tokens%20%3D%20sorted(list(set(preprocessed)))%0A%20%20%20%20all_tokens.extend(%5B%22%3C%7Cendoftext%7C%3E%22%2C%20%22%3C%7Cunk%7C%3E%22%5D)%0A%0A%20%20%20%20vocab_extended%20%3D%20%7Btoken%3A%20integer%20for%20integer%2C%20token%20in%20enumerate(all_tokens)%7D%0A%20%20%20%20return%20(vocab_extended%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E8%AA%9E%E5%BD%99%E3%81%AE%E7%B7%8F%E6%95%B0%E3%81%AF%20%241130%2B2%3D1132%24%20%E3%81%AB%E5%A2%97%E3%81%88%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(vocab_extended)%3A%0A%20%20%20%20len(vocab_extended.items())%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E6%9C%AB%E5%B0%BE%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(vocab_extended)%3A%0A%20%20%20%20for%20_i%2C%20_item%20in%20enumerate(list(vocab_extended.items())%5B-5%3A%5D)%3A%0A%20%20%20%20%20%20%20%20print(_item)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%AF%E7%89%B9%E6%AE%8A%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E5%90%AB%E3%82%80%E3%82%88%E3%81%86%E3%81%AB%E6%9B%B4%E6%96%B0%E3%81%97%E3%81%9F%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%83%88%E3%83%BC%E3%82%AF%E3%83%8A%E3%82%A4%E3%82%B6%E3%83%BC%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.class_definition%0Aclass%20SimpleTokenizerV2%3A%0A%20%20%20%20def%20__init__(self%2C%20vocab)%3A%0A%20%20%20%20%20%20%20%20self.str_to_int%20%3D%20vocab%0A%20%20%20%20%20%20%20%20self.int_to_str%20%3D%20%7Bi%3A%20s%20for%20s%2C%20i%20in%20vocab.items()%7D%0A%0A%20%20%20%20def%20encode(self%2C%20text)%3A%0A%20%20%20%20%20%20%20%20preprocessed%20%3D%20re.split(r'(%5B%2C.%3A%3B%3F_!%22()%5C'%5D%7C--%7C%5Cs)'%2C%20text)%0A%20%20%20%20%20%20%20%20preprocessed%20%3D%20%5Bitem.strip()%20for%20item%20in%20preprocessed%20if%20item.strip()%5D%0A%20%20%20%20%20%20%20%20%23%20%E6%9C%AA%E7%9F%A5%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E5%87%A6%E7%90%86%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20preprocessed%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20item%20if%20item%20in%20self.str_to_int%20else%20%22%3C%7Cunk%7C%3E%22%20for%20item%20in%20preprocessed%0A%20%20%20%20%20%20%20%20%5D%0A%0A%20%20%20%20%20%20%20%20ids%20%3D%20%5Bself.str_to_int%5Bs%5D%20for%20s%20in%20preprocessed%5D%0A%20%20%20%20%20%20%20%20return%20ids%0A%0A%20%20%20%20def%20decode(self%2C%20ids)%3A%0A%20%20%20%20%20%20%20%20text%20%3D%20%22%20%22.join(%5Bself.int_to_str%5Bi%5D%20for%20i%20in%20ids%5D)%0A%20%20%20%20%20%20%20%20%23%20%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%E8%A8%98%E5%8F%B7%E3%81%AE%E5%89%8D%E3%81%AE%E7%A9%BA%E7%99%BD%E3%82%92%E9%99%A4%E5%8E%BB%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20text%20%3D%20re.sub(r'%5Cs%2B(%5B%2C.%3A%3B%3F!%22()%5C'%5D)'%2C%20r%22%5C1%22%2C%20text)%0A%20%20%20%20%20%20%20%20return%20text%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E7%89%B9%E6%AE%8A%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%A7%E9%80%A3%E7%B5%90%E3%81%97%E3%81%9F%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8C%96%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(vocab_extended)%3A%0A%20%20%20%20tokenizer_extended%20%3D%20SimpleTokenizerV2(vocab_extended)%0A%0A%20%20%20%20_text1%20%3D%20%22Hello%2C%20do%20you%20like%20tea%3F%22%0A%20%20%20%20_text2%20%3D%20%22In%20the%20sunlit%20terraces%20of%20the%20palace.%22%0A%0A%20%20%20%20text_extended%20%3D%20%22%20%3C%7Cendoftext%7C%3E%20%22.join((_text1%2C%20_text2))%0A%0A%20%20%20%20print(text_extended)%0A%20%20%20%20return%20text_extended%2C%20tokenizer_extended%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E7%B6%9A%E3%81%84%E3%81%A6%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8C%96%E3%81%99%E3%82%8B%E3%80%82%E7%89%B9%E6%AE%8A%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AB%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%89%E3%82%8C%E3%81%9F%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3ID%201130%20%E3%81%A8%201131%20%E3%81%8C%E7%8F%BE%E3%82%8C%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(text_extended%2C%20tokenizer_extended)%3A%0A%20%20%20%20tokenizer_extended.encode(text_extended)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%E3%81%97%E3%81%A6%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8C%96%E3%81%AE%E7%B5%90%E6%9E%9C%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(text_extended%2C%20tokenizer_extended)%3A%0A%20%20%20%20tokenizer_extended.decode(tokenizer_extended.encode(text_extended))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.5%20%E3%83%90%E3%82%A4%E3%83%88%E3%83%9A%E3%82%A2%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E6%9C%AA%E7%9F%A5%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E9%81%BF%E3%81%91%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81tiktoken%20%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%90%E3%82%A4%E3%83%88%E3%83%9A%E3%82%A2%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%20(BPE)%20%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20print(%22tiktoken%20version%3A%22%2C%20importlib.metadata.version(%22tiktoken%22))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20GPT-2%20%E3%83%A2%E3%83%87%E3%83%AB%E7%94%A8%E3%81%AE%20tiktoken%20%E3%83%88%E3%83%BC%E3%82%AF%E3%83%8A%E3%82%A4%E3%82%B6%E3%83%BC%E3%82%92%E8%A9%A6%E3%81%99%E3%80%82%E6%9C%80%E5%A4%A7%E3%81%AE%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3ID%2050256%20%E3%81%AF%20%60endoftext%60%20%E3%81%AB%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%89%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20bpe_tokenizer%20%3D%20tiktoken.get_encoding(%22gpt2%22)%0A%0A%20%20%20%20text_5%20%3D%20(%0A%20%20%20%20%20%20%20%20%22Hello%2C%20do%20you%20like%20tea%3F%20%3C%7Cendoftext%7C%3E%20In%20the%20sunlit%20terraces%22%0A%20%20%20%20%20%20%20%20%20%22of%20someunknownPlace.%22%0A%20%20%20%20)%0A%0A%20%20%20%20bpe_token_id_5%20%3D%20bpe_tokenizer.encode(text_5%2C%20allowed_special%3D%7B%22%3C%7Cendoftext%7C%3E%22%7D)%0A%0A%20%20%20%20print(bpe_token_id_5)%0A%20%20%20%20return%20bpe_token_id_5%2C%20bpe_tokenizer%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%E3%81%97%E3%81%A6%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%80%82%E3%82%B5%E3%83%96%E3%83%AF%E3%83%BC%E3%83%89%E3%81%A8%E3%81%9D%E3%81%AE%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E4%B8%80%E6%84%8F%E3%81%AB%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E5%8F%AF%E9%80%86%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(bpe_token_id_5%2C%20bpe_tokenizer)%3A%0A%20%20%20%20_strings%20%3D%20bpe_tokenizer.decode(bpe_token_id_5)%0A%20%20%20%20print(_strings)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20BPE%20%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A9%B3%E3%81%97%E3%81%8F%E3%81%AF%5B%E3%81%93%E3%81%A1%E3%82%89%5D(..%2F..%2Fthird_party%2FLLMs-from-scratch%2Fch02%2F05_bpe-from-scratch%2Fbpe-from-scratch.ipynb)%E3%82%92%E5%8F%82%E7%85%A7%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.6%20%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%81%AB%E3%82%88%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B0%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20BPE%20%E3%83%88%E3%83%BC%E3%82%AF%E3%83%8A%E3%82%A4%E3%82%B6%E3%83%BC%E3%81%A7%20The%20Verdict%20%E3%82%92%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8C%96%E3%81%97%E3%80%81%E5%85%A8%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E6%95%B0%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(bpe_tokenizer%2C%20raw_text)%3A%0A%20%20%20%20enc_text%20%3D%20bpe_tokenizer.encode(raw_text)%0A%20%20%20%20print(len(enc_text))%0A%20%20%20%20return%20(enc_text%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%BE%8C%E3%81%AE%E8%AA%AC%E6%98%8E%E3%81%AE%E3%81%9F%E3%82%81%E3%80%81%E5%85%88%E9%A0%AD%E9%83%A8%E5%88%86%E3%82%92%E5%8F%96%E3%82%8A%E9%99%A4%E3%81%8F%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(enc_text)%3A%0A%20%20%20%20enc_sample%20%3D%20enc_text%5B50%3A%5D%0A%20%20%20%20return%20(enc_sample%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E4%BA%88%E6%B8%AC%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E5%AD%A6%E7%BF%92%E3%83%9A%E3%82%A2%E3%82%92%E4%BD%9C%E3%82%8B%E3%80%82%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%AF%20%60x%60%20%E3%81%8B%E3%82%89%20%60y%60%20%E3%82%92%E4%BA%88%E6%B8%AC%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(enc_sample)%3A%0A%20%20%20%20context_size%20%3D%204%0A%0A%20%20%20%20x%20%3D%20enc_sample%5B%3Acontext_size%5D%0A%20%20%20%20y%20%3D%20enc_sample%5B1%3Acontext_size%2B1%5D%0A%0A%20%20%20%20print(f%22x%3A%20%7Bx%7D%22)%0A%20%20%20%20print(f%22y%3A%20%20%20%20%20%20%7By%7D%22)%0A%20%20%20%20return%20(context_size%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%AD%A6%E7%BF%92%E3%81%95%E3%82%8C%E3%82%8B%E5%AF%BE%E5%BF%9C%E9%96%A2%E4%BF%82%E3%81%AF%E6%AC%A1%E3%81%AE%E9%80%9A%E3%82%8A%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(context_size%2C%20enc_sample)%3A%0A%20%20%20%20for%20_i%20in%20range(1%2C%20context_size%2B1)%3A%0A%20%20%20%20%20%20%20%20_context%20%3D%20enc_sample%5B%3A_i%5D%0A%20%20%20%20%20%20%20%20_desired%20%3D%20enc_sample%5B_i%5D%0A%0A%20%20%20%20%20%20%20%20print(_context%2C%20%22----%3E%22%2C%20_desired)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%82%89%E3%81%AE%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3ID%E3%82%92%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%E3%81%97%E3%81%A6%E5%8D%98%E8%AA%9E%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(bpe_tokenizer%2C%20context_size%2C%20enc_sample)%3A%0A%20%20%20%20for%20_i%20in%20range(1%2C%20context_size%2B1)%3A%0A%20%20%20%20%20%20%20%20_context%20%3D%20enc_sample%5B%3A_i%5D%0A%20%20%20%20%20%20%20%20_desired%20%3D%20enc_sample%5B_i%5D%0A%0A%20%20%20%20%20%20%20%20print(bpe_tokenizer.decode(_context)%2C%20%22----%3E%22%2C%20bpe_tokenizer.decode(%5B_desired%5D))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%20PyTorch%20%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20print(%22PyTorch%20version%3A%22%2C%20torch.__version__)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20PyTorch%20%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%80%81%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF%E3%83%BC%E3%81%A7%E4%BD%BF%E3%81%86%E7%89%B9%E6%AE%8A%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%20%60__len__%60%20%E3%81%A8%20%60__getitem__%60%20%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B%E3%80%82%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8C%96%E3%81%97%E3%81%9F%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E3%80%81%E3%82%B5%E3%82%A4%E3%82%BA%20%60max_length%60%20%E3%81%AE%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%82%92%20%60stride%60%20%E3%81%AE%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E5%B9%85%E3%81%A7%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%99%E3%82%8B%E5%87%A6%E7%90%86%EF%BC%88%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%EF%BC%89%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.class_definition%0Aclass%20GPTDatasetV1(Dataset)%3A%0A%20%20%20%20def%20__init__(self%2C%20txt%2C%20bpe_tokenizer%2C%20max_length%2C%20stride)%3A%0A%20%20%20%20%20%20%20%20self.input_ids%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20self.target_ids%20%3D%20%5B%5D%0A%0A%20%20%20%20%20%20%20%20%23%20%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E5%85%A8%E4%BD%93%E3%82%92%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8C%96%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20token_ids%20%3D%20bpe_tokenizer.encode(txt%2C%20allowed_special%3D%7B%22%3C%7Cendoftext%7C%3E%22%7D)%0A%20%20%20%20%20%20%20%20assert%20len(token_ids)%20%3E%20max_length%2C%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Number%20of%20tokenized%20inputs%20must%20at%20least%20be%20equal%20to%20max_length%2B1%22%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%81%A7%E3%80%81%E9%87%8D%E3%81%AA%E3%82%8A%E5%90%88%E3%81%86%20max_length%20%E3%81%AE%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9%E3%81%AB%E6%9B%B8%E7%B1%8D%E3%82%92%E5%88%86%E5%89%B2%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(0%2C%20len(token_ids)%20-%20max_length%2C%20stride)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20input_chunk%20%3D%20token_ids%5Bi%20%3A%20i%20%2B%20max_length%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20target_chunk%20%3D%20token_ids%5Bi%20%2B%201%20%3A%20i%20%2B%20max_length%20%2B%201%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20self.input_ids.append(torch.tensor(input_chunk))%0A%20%20%20%20%20%20%20%20%20%20%20%20self.target_ids.append(torch.tensor(target_chunk))%0A%0A%20%20%20%20def%20__len__(self)%3A%0A%20%20%20%20%20%20%20%20return%20len(self.input_ids)%0A%0A%20%20%20%20def%20__getitem__(self%2C%20idx)%3A%0A%20%20%20%20%20%20%20%20return%20self.input_ids%5Bidx%5D%2C%20self.target_ids%5Bidx%5D%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AD%E3%83%BC%E3%83%80%E3%83%BC%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E5%8C%96%E3%81%99%E3%82%8B%E9%96%A2%E6%95%B0%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.function%0Adef%20create_dataloader_v1(%0A%20%20%20%20txt%2C%0A%20%20%20%20batch_size%3D4%2C%0A%20%20%20%20max_length%3D256%2C%0A%20%20%20%20stride%3D128%2C%0A%20%20%20%20shuffle%3DTrue%2C%0A%20%20%20%20drop_last%3DTrue%2C%0A%20%20%20%20num_workers%3D0%2C%0A)%3A%0A%20%20%20%20%23%20%E3%83%88%E3%83%BC%E3%82%AF%E3%83%8A%E3%82%A4%E3%82%B6%E3%83%BC%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%99%E3%82%8B%0A%20%20%20%20bpe_tokenizer%20%3D%20tiktoken.get_encoding(%22gpt2%22)%0A%0A%20%20%20%20%23%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%0A%20%20%20%20dataset%20%3D%20GPTDatasetV1(txt%2C%20bpe_tokenizer%2C%20max_length%2C%20stride)%0A%0A%20%20%20%20%23%20%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AD%E3%83%BC%E3%83%80%E3%83%BC%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%0A%20%20%20%20dataloader%20%3D%20DataLoader(%0A%20%20%20%20%20%20%20%20dataset%2C%0A%20%20%20%20%20%20%20%20batch_size%3Dbatch_size%2C%0A%20%20%20%20%20%20%20%20shuffle%3Dshuffle%2C%0A%20%20%20%20%20%20%20%20drop_last%3Ddrop_last%2C%0A%20%20%20%20%20%20%20%20num_workers%3Dnum_workers%2C%0A%20%20%20%20)%0A%0A%20%20%20%20return%20dataloader%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E7%94%A8%E3%81%AB%E3%80%81%E3%83%90%E3%83%83%E3%83%81%E3%82%92%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B%E9%96%A2%E6%95%B0%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.function%0Adef%20decode_batch(batch%2C%20tokenizer)%3A%0A%20%20%20%20inputs%2C%20targets%20%3D%20batch%0A%20%20%20%20batch_size%2C%20seq_length%20%3D%20inputs.shape%0A%0A%20%20%20%20decoded_inputs%20%3D%20%5B%5D%0A%20%20%20%20decoded_targets%20%3D%20%5B%5D%0A%0A%20%20%20%20for%20i%20in%20range(batch_size)%3A%0A%20%20%20%20%20%20%20%20input_ids%20%3D%20inputs%5Bi%5D.tolist()%0A%20%20%20%20%20%20%20%20target_ids%20%3D%20targets%5Bi%5D.tolist()%0A%0A%20%20%20%20%20%20%20%20decoded_input%20%3D%20tokenizer.decode(input_ids)%0A%20%20%20%20%20%20%20%20decoded_target%20%3D%20tokenizer.decode(target_ids)%0A%0A%20%20%20%20%20%20%20%20decoded_inputs.append(decoded_input)%0A%20%20%20%20%20%20%20%20decoded_targets.append(decoded_target)%0A%0A%20%20%20%20return%20decoded_inputs%2C%20decoded_targets%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E9%96%A2%E6%95%B0%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%81%A6%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E3%83%90%E3%83%83%E3%83%81%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%80%82%E5%87%BA%E5%8A%9B%E3%81%AF%E5%85%A5%E5%8A%9BID%E3%81%A8%E3%82%BF%E3%83%BC%E3%82%B2%E3%83%83%E3%83%88ID%E3%81%AE%E3%83%9A%E3%82%A2%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%AF%E3%81%9A%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(bpe_tokenizer%2C%20raw_text)%3A%0A%20%20%20%20_dataloader_s1%20%3D%20create_dataloader_v1(%0A%20%20%20%20%20%20%20%20raw_text%2C%20batch_size%3D1%2C%20max_length%3D4%2C%20stride%3D1%2C%20shuffle%3DFalse%0A%20%20%20%20)%0A%0A%20%20%20%20data_iter_s1%20%3D%20iter(_dataloader_s1)%0A%20%20%20%20_first_batch%20%3D%20next(data_iter_s1)%0A%20%20%20%20print(f%22%7B_first_batch%3D%7D%22)%0A%0A%20%20%20%20_inputs_decoded%2C%20_targets_decoded%20%3D%20decode_batch(_first_batch%2C%20bpe_tokenizer)%0A%20%20%20%20print(f%22%7B_inputs_decoded%3D%7D%22)%0A%20%20%20%20print(f%22%7B_targets_decoded%3D%7D%22)%0A%20%20%20%20return%20(data_iter_s1%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%82%82%E3%81%86%E4%B8%80%E5%BA%A6%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%83%88%E3%81%97%E3%81%A6%E6%AC%A1%E3%81%AE%E3%83%90%E3%83%83%E3%83%81%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%80%82%60stride%3D1%60%20%E3%81%AE%E3%81%9F%E3%82%81%E3%80%81%E5%89%8D%E3%81%AE%E3%83%90%E3%83%83%E3%83%81%E3%81%8B%E3%82%891%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%A0%E3%81%91%E3%81%9A%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%8C%E5%88%86%E3%81%8B%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(bpe_tokenizer%2C%20data_iter_s1)%3A%0A%20%20%20%20_second_batch%20%3D%20next(data_iter_s1)%0A%20%20%20%20print(f%22%7B_second_batch%3D%7D%22)%0A%0A%20%20%20%20_inputs_decoded%2C%20_targets_decoded%20%3D%20decode_batch(_second_batch%2C%20bpe_tokenizer)%0A%20%20%20%20print(f%22%7B_inputs_decoded%3D%7D%22)%0A%20%20%20%20print(f%22%7B_targets_decoded%3D%7D%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E9%A0%91%E5%81%A5%E3%81%AA%E5%AD%A6%E7%BF%92%E3%81%AE%E3%81%9F%E3%82%81%E3%80%81%E3%82%88%E3%82%8A%E5%A4%A7%E3%81%8D%E3%81%AA%E3%83%90%E3%83%83%E3%83%81%E3%82%B5%E3%82%A4%E3%82%BA%20(%60batch_size%3D8%60)%20%E3%82%92%E8%A9%A6%E3%81%99%E3%80%82%E9%81%8E%E5%AD%A6%E7%BF%92%E3%82%92%E9%81%BF%E3%81%91%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%83%89%E3%82%82%E5%A4%A7%E3%81%8D%E3%81%8F%E3%81%99%E3%82%8B%20(%60stride%3D4%60)%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(bpe_tokenizer%2C%20raw_text)%3A%0A%20%20%20%20_dataloader_s4%20%3D%20create_dataloader_v1(%0A%20%20%20%20%20%20%20%20raw_text%2C%20batch_size%3D8%2C%20max_length%3D4%2C%20stride%3D4%2C%20shuffle%3DFalse%0A%20%20%20%20)%0A%0A%20%20%20%20data_iter_s4%20%3D%20iter(_dataloader_s4)%0A%20%20%20%20_inputs%2C%20_targets%20%3D%20next(data_iter_s4)%0A%20%20%20%20print(%22Inputs%3A%5Cn%22%2C%20_inputs)%0A%20%20%20%20print(%22%5CnTargets%3A%5Cn%22%2C%20_targets)%0A%0A%20%20%20%20_inputs_decoded%2C%20_targets_decoded%20%3D%20decode_batch((_inputs%2C%20_targets)%2C%20bpe_tokenizer)%0A%20%20%20%20print(f%22%7B_inputs_decoded%3D%7D%22)%0A%20%20%20%20print(f%22%7B_targets_decoded%3D%7D%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.7%20%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%AE%E4%BD%9C%E6%88%90%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%AF%E3%80%81%E8%AA%9E%E5%BD%99%E3%81%A8%E3%81%97%E3%81%A66%E6%AC%A1%E5%85%83%E3%81%AE%E5%85%A5%E5%8A%9B%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8A%E3%80%813%E6%AC%A1%E5%85%83%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%AE%E4%BE%8B%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%AF%E3%80%81%E5%90%84%E8%AA%9E%E5%BD%99%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%92%E8%A1%8C%E3%81%A8%E3%81%97%E3%81%A6%E6%8C%81%E3%81%A4%E8%A1%8C%E5%88%97%E3%81%A7%E8%A1%A8%E3%81%95%E3%82%8C%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E8%A1%A8%E7%8F%BE%E8%A1%8C%E5%88%97%E3%81%AF%E5%AD%A6%E7%BF%92%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20_vocab_size%20%3D%206%0A%20%20%20%20_output_dim%20%3D%203%0A%0A%20%20%20%20torch.manual_seed(123)%0A%20%20%20%20%23%20%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E5%B1%A4%E3%82%92%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%81%AB%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%99%E3%82%8B%0A%20%20%20%20embedding_layer%20%3D%20torch.nn.Embedding(_vocab_size%2C%20_output_dim)%0A%20%20%20%20print(embedding_layer.weight)%0A%20%20%20%20return%20(embedding_layer%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3ID%203%20%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%82%92%E8%A9%A6%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(embedding_layer)%3A%0A%20%20%20%20print(embedding_layer(torch.tensor(%5B3%5D)))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%95%E3%82%89%E3%81%AB%E8%A4%87%E6%95%B0%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%82%92%E8%A9%A6%E3%81%99%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E8%A1%8C%E5%88%97%E3%82%92%20LUT%20(Look%20Up%20Table)%20%E3%81%A8%E3%81%97%E3%81%A6%E5%8F%82%E7%85%A7%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%A0%E3%81%91%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(embedding_layer)%3A%0A%20%20%20%20_input_ids%20%3D%20torch.tensor(%5B2%2C%203%2C%205%2C%201%5D)%0A%20%20%20%20print(embedding_layer(_input_ids))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.8%20%E5%8D%98%E8%AA%9E%E4%BD%8D%E7%BD%AE%E3%81%AE%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AB%E3%82%82%E3%81%A8%E3%81%A5%E3%81%84%E3%81%A6%E4%BD%8D%E7%BD%AE%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%92%E8%A9%A6%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20_vocab_size%20%3D%2050257%0A%20%20%20%20output_dim%20%3D%20256%0A%0A%20%20%20%20token_embedding_layer%20%3D%20torch.nn.Embedding(_vocab_size%2C%20output_dim)%0A%20%20%20%20return%20output_dim%2C%20token_embedding_layer%0A%0A%0A%40app.cell%0Adef%20_(raw_text)%3A%0A%20%20%20%20max_length%20%3D%204%0A%20%20%20%20dataloader%20%3D%20create_dataloader_v1(%0A%20%20%20%20%20%20%20%20raw_text%2C%20batch_size%3D8%2C%20max_length%3Dmax_length%2C%0A%20%20%20%20%20%20%20%20stride%3Dmax_length%2C%20shuffle%3DFalse%0A%20%20%20%20)%0A%20%20%20%20data_iter%20%3D%20iter(dataloader)%0A%20%20%20%20inputs%2C%20targets%20%3D%20next(data_iter)%0A%20%20%20%20return%20inputs%2C%20max_length%0A%0A%0A%40app.cell%0Adef%20_(inputs)%3A%0A%20%20%20%20print(%22Token%20IDs%3A%5Cn%22%2C%20inputs)%0A%20%20%20%20print(%22%5CnInputs%20shape%3A%5Cn%22%2C%20inputs.shape)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E7%B6%9A%E3%81%84%E3%81%A6%E3%80%81%E3%81%93%E3%82%8C%E3%82%89%E3%81%AE%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92256%E6%AC%A1%E5%85%83%E3%81%AE%E5%A4%9A%E6%A7%98%E4%BD%93%E3%81%B8%E5%9F%8B%E3%82%81%E8%BE%BC%E3%82%80%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(inputs%2C%20token_embedding_layer)%3A%0A%20%20%20%20token_embeddings%20%3D%20token_embedding_layer(inputs)%0A%20%20%20%20print(token_embeddings.shape)%0A%0A%20%20%20%20%23%20%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A6%8B%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%E6%AC%A1%E3%81%AE%E8%A1%8C%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%92%E5%A4%96%E3%81%97%E3%81%A6%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%0A%20%20%20%20%23%20print(token_embeddings)%0A%20%20%20%20return%20(token_embeddings%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E7%B5%B6%E5%AF%BE%E4%BD%8D%E7%BD%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%82%82%E5%88%A5%E3%81%AE%20%60torch.nn.Embedding%60%20%E5%B1%A4%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E8%A1%8C%E3%81%86%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(max_length%2C%20output_dim)%3A%0A%20%20%20%20context_length%20%3D%20max_length%0A%20%20%20%20pos_embedding_layer%20%3D%20torch.nn.Embedding(context_length%2C%20output_dim)%0A%0A%20%20%20%20%23%20%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E5%B1%A4%E3%81%AE%E9%87%8D%E3%81%BF%E3%82%92%E8%A6%8B%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%E6%AC%A1%E3%81%AE%E8%A1%8C%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%92%E5%A4%96%E3%81%97%E3%81%A6%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%0A%20%20%20%20print(pos_embedding_layer.weight)%0A%20%20%20%20return%20(pos_embedding_layer%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E7%B6%9A%E3%81%84%E3%81%A6%E3%80%81%E7%B5%B6%E5%AF%BE%E4%BD%8D%E7%BD%AE%E3%82%92%E8%A1%A8%E3%81%99%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E3%81%9D%E3%81%93%E3%81%B8%E5%85%A5%E5%8A%9B%E3%81%99%E3%82%8B%E3%80%82%E3%81%93%E3%82%8C%E3%82%82%20LUT%20%E3%81%A8%E3%81%97%E3%81%A6%E8%A7%A3%E9%87%88%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(max_length%2C%20pos_embedding_layer)%3A%0A%20%20%20%20pos_embeddings%20%3D%20pos_embedding_layer(torch.arange(max_length))%0A%20%20%20%20print(pos_embeddings.shape)%0A%0A%20%20%20%20%23%20%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A6%8B%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%E6%AC%A1%E3%81%AE%E8%A1%8C%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%92%E5%A4%96%E3%81%97%E3%81%A6%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%0A%20%20%20%20print(pos_embeddings)%20%0A%20%20%20%20return%20(pos_embeddings%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E7%B5%B6%E5%AF%BE%E4%BD%8D%E7%BD%AE%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%81%AF%E3%80%81%E3%81%93%E3%82%8C%E3%82%89%E3%82%92%E8%B6%B3%E3%81%97%E5%90%88%E3%82%8F%E3%81%9B%E3%82%8B%E3%81%A0%E3%81%91%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pos_embeddings%2C%20token_embeddings)%3A%0A%20%20%20%20input_embeddings%20%3D%20token_embeddings%20%2B%20pos_embeddings%0A%20%20%20%20print(input_embeddings.shape)%0A%0A%20%20%20%20%23%20%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A6%8B%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%E6%AC%A1%E3%81%AE%E8%A1%8C%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%92%E5%A4%96%E3%81%97%E3%81%A6%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%0A%20%20%20%20print(input_embeddings)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
f68e77f80243f26b67792599889aa736