Skip to content

Instantly share code, notes, and snippets.

@jshirius
Last active January 17, 2020 00:42
Show Gist options
  • Save jshirius/40fe2b13b71b091dfb5eb5f232b47723 to your computer and use it in GitHub Desktop.
Save jshirius/40fe2b13b71b091dfb5eb5f232b47723 to your computer and use it in GitHub Desktop.
英語から日本語へ翻訳.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "英語から日本語へ翻訳.ipynb",
"provenance": [],
"collapsed_sections": [],
"machine_shape": "hm",
"authorship_tag": "ABX9TyMtw/ox+weVFEHtZsRQCmZb",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/jshirius/40fe2b13b71b091dfb5eb5f232b47723/.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "zwB_KU06WyOF",
"colab_type": "code",
"outputId": "0fcfe2b7-c175-485e-ce9f-ca799d21450c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 80
}
},
"source": [
"#概要\n",
"#英語の入力から翻訳を作成する\n",
"#colabで動かすことを想定しています。\n",
"\n",
"#参考にしたもの\n",
"#1. Udemy 「自然言語処理とチャットボット: AIによる文章生成と会話エンジン開発」より、文章生成・Seq2Seqの講座\n",
"#https://www.udemy.com/course/ai-nlp-bot/?deal_code=JPA8DEAL2PERCENTAGE&aEightID=s00000016735001\n",
"\n",
"\n",
"#2. tensorflowのチュートリアル\n",
"#https://www.tensorflow.org/tutorials\n",
"\n",
"from __future__ import absolute_import, division, print_function, unicode_literals\n",
"\n",
"#point\n",
"#kerasは、tensorflowの中のkerasを使う\n",
"import tensorflow as tf\n",
"from tensorflow import keras \n",
"\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.ticker as ticker\n",
"from sklearn.model_selection import train_test_split\n",
"#from keras.utils import plot_model\n",
"import unicodedata\n",
"import re\n",
"import numpy as np\n",
"import os\n",
"import io\n",
"import time\n",
"import zipfile"
],
"execution_count": 1,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": [
"<p style=\"color: red;\">\n",
"The default version of TensorFlow in Colab will soon switch to TensorFlow 2.x.<br>\n",
"We recommend you <a href=\"https://www.tensorflow.org/guide/migrate\" target=\"_blank\">upgrade</a> now \n",
"or ensure your notebook will continue to use TensorFlow 1.x via the <code>%tensorflow_version 1.x</code> magic:\n",
"<a href=\"https://colab.research.google.com/notebooks/tensorflow_version.ipynb\" target=\"_blank\">more info</a>.</p>\n"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "-nF9ufJUNTxJ",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "086041b5-44f8-4f10-b833-8bb78eafa26b"
},
"source": [
"tf.__version__"
],
"execution_count": 2,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"'1.15.0'"
]
},
"metadata": {
"tags": []
},
"execution_count": 2
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "z5czLTzzad6P",
"colab_type": "code",
"outputId": "3248a71f-2101-4792-ec89-7aa6d70fd858",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 122
}
},
"source": [
"from google.colab import drive\n",
"drive.mount('/content/drive')"
],
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"text": [
"Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3aietf%3awg%3aoauth%3a2.0%3aoob&response_type=code&scope=email%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdocs.test%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive.photos.readonly%20https%3a%2f%2fwww.googleapis.com%2fauth%2fpeopleapi.readonly\n",
"\n",
"Enter your authorization code:\n",
"··········\n",
"Mounted at /content/drive\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "_-2lMWl_94Pu",
"colab_type": "code",
"outputId": "d7040daa-9085-4313-e3c9-96e6d9458f46",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"!ls \"./drive/My Drive/ColabData/\"\n"
],
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"text": [
"model.h5 training_1\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "BcGy3ykaHeul",
"colab_type": "code",
"outputId": "b9734cc0-c7f9-443c-f350-bf2ba3f94297",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 241
}
},
"source": [
"#英語と日本語の翻訳の元になるデータのダウンロード\n",
"!wget http://www.manythings.org/anki/jpn-eng.zip\n",
"!ls\n",
"\n"
],
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"text": [
"--2020-01-17 00:10:26-- http://www.manythings.org/anki/jpn-eng.zip\n",
"Resolving www.manythings.org (www.manythings.org)... 104.24.109.196, 104.24.108.196, 2606:4700:3037::6818:6cc4, ...\n",
"Connecting to www.manythings.org (www.manythings.org)|104.24.109.196|:80... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 1995247 (1.9M) [application/zip]\n",
"Saving to: ‘jpn-eng.zip’\n",
"\n",
"jpn-eng.zip 100%[===================>] 1.90M 3.24MB/s in 0.6s \n",
"\n",
"2020-01-17 00:10:27 (3.24 MB/s) - ‘jpn-eng.zip’ saved [1995247/1995247]\n",
"\n",
"drive jpn-eng.zip sample_data\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "XxIKGQOAH0e_",
"colab_type": "code",
"colab": {}
},
"source": [
"repo = 'en_jp'\n",
"with zipfile.ZipFile(\"jpn-eng.zip\",\"r\") as zip_ref:\n",
" zip_ref.extractall(repo)\n",
" "
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Meib6_LhH9la",
"colab_type": "code",
"outputId": "79325247-2282-4b83-9a5f-84b383041924",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
}
},
"source": [
"!ls\n",
"!ls en_jp"
],
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"text": [
"drive en_jp jpn-eng.zip sample_data\n",
"_about.txt jpn.txt\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "IJPa38SvY05U",
"colab_type": "code",
"colab": {}
},
"source": [
"#英語と日本語のデータを取得する\n",
"path = \"./en_jp/jpn.txt\""
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ntJy__dtbCCr",
"colab_type": "code",
"outputId": "d2900e5c-50ba-47bd-bc8a-08033ed3bffe",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
}
},
"source": [
"#fileからデータを読み込む\n",
"def preprocess_sentence(w):\n",
" w = w.lower().strip()\n",
" return w\n",
"\n",
"def create_dataset(path, num_examples = None):\n",
" lines = io.open(path, encoding='UTF-8').read().strip().split('\\n')\n",
"\n",
" word_pairs = [[preprocess_sentence(w) for w in l.split('\\t')] for l in lines[:num_examples]]\n",
"\n",
" return zip(*word_pairs)\n",
"\n",
"#ファイルからデータを読み込む\n",
"en_datas , jp_datas ,_= create_dataset(path)\n",
"print(en_datas[:10])\n",
"print(jp_datas[:10])"
],
"execution_count": 9,
"outputs": [
{
"output_type": "stream",
"text": [
"('go.', 'go.', 'hi.', 'hi.', 'hi.', 'run.', 'run.', 'who?', 'wow!', 'wow!')\n",
"('行け。', '行きなさい。', 'こんにちは。', 'やっほー。', 'こんにちは!', '走れ。', '走って!', '誰?', 'すごい!', 'ワォ!')\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "d9jqS10m_tfa",
"colab_type": "code",
"outputId": "5e8584a3-caa5-4471-ed40-3d835d940e4a",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"len(en_datas), len(jp_datas)\n",
"\n",
"#訓練のため30000行を抽出\n",
"#本来は400000行以上のデータがあるが、すべてを読み込むとone-hot表現に変換するとき、colab環境ではメモリ不足で強制終了してしまう。\n",
"#よって、この例では30000行分のデータを読み込んでいる\n",
"\n",
"limit_data = 30000\n",
"en_datas = en_datas[0:limit_data]\n",
"jp_datas = jp_datas[0:limit_data]\n",
"jp_datas = list(jp_datas)\n",
"\n",
"#jp_datasに終わりと開始を追加する(翻訳のところで文章の開始を終わりを判定するため)\n",
"for i in range(len(jp_datas)):\n",
" #print(data)\n",
" a = jp_datas[i]\n",
" jp_datas[i] = \"\\t\" + a + \"\\n\"\n",
"\n",
"print(jp_datas[:5])\n",
"\n",
"jp_datas = tuple(jp_datas)"
],
"execution_count": 10,
"outputs": [
{
"output_type": "stream",
"text": [
"['\\t行け。\\n', '\\t行きなさい。\\n', '\\tこんにちは。\\n', '\\tやっほー。\\n', '\\tこんにちは!\\n']\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "ZpizWqs1-Vgd",
"colab_type": "code",
"outputId": "71950fbf-19f9-45aa-a52b-84a2e779b330",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"def max_length(tensor):\n",
" return max(len(t) for t in tensor)\n",
"\n",
"en_max_length = max_length(en_datas)\n",
"jp_max_length = max_length(jp_datas)\n",
"\n",
"en_max_length, jp_max_length"
],
"execution_count": 11,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(36, 40)"
]
},
"metadata": {
"tags": []
},
"execution_count": 11
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "BmG_-LTbxHaY",
"colab_type": "code",
"outputId": "463a8b38-7380-48fe-ecbd-c28a76d2d79f",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 105
}
},
"source": [
"#one-hotに置き換える\n",
"chars = []\n",
"for word in en_datas: # \n",
" chars +=word\n",
"\n",
"for word in jp_datas: # \n",
" chars +=word\n",
"\n",
"chars += \"\\t\\n\" # タブと改行を追加\n",
"chars_list = sorted(list(chars)) # 文字列をリストに変換してソートする\n",
"chars_list = set(chars_list)\n",
"print(chars_list)\n",
"print(len(chars_list))\n",
"\n",
"\n",
"# インデックスと文字で辞書を作成\n",
"char_indices = {} # 文字がキーでインデックスが値\n",
"for i, char in enumerate(chars_list):\n",
" char_indices[char] = i\n",
"indices_char = {} # インデックスがキーで文字が値\n",
"for i, char in enumerate(chars_list):\n",
" indices_char[i] = char\n",
" \n",
"print(char_indices)\n",
"print(indices_char)\n",
"\n",
"#one-hotの領域\n",
"n_char = len(chars_list) # 文字の種類の数\n",
"n_sample = len(jp_datas) - 1 # サンプル数\n",
"\n",
"\n",
"#初期化(ベクトル化する)\n",
"x_encoder = np.zeros((n_sample, en_max_length, n_char), dtype=np.bool) # encoderへの入力\n",
"x_decoder = np.zeros((n_sample, jp_max_length, n_char), dtype=np.bool) # decoderへの入力\n",
"t_decoder = np.zeros((n_sample, jp_max_length, n_char), dtype=np.bool) # decoderの正解\n",
"\n",
"\n",
"#one-hotに置き換える\n",
"#本当は単語埋め込み (Word embeddings)を使ったほうが、メモリ容量など抑えられるが、\n",
"#今回は、簡単に実装できそうなone-hotを選択した\n",
"#参考URL\n",
"#https://www.tensorflow.org/tutorials/text/word_embeddings\n",
"for i in range(n_sample):\n",
" x_sentence = en_datas[i]\n",
" t_sentence = jp_datas[i]\n",
" for j, char in enumerate(x_sentence):\n",
" x_encoder[i, j, char_indices[char]] = 1 # encoderへの入力をone-hot表現で表す\n",
"\n",
" for j, char in enumerate(t_sentence):\n",
" x_decoder[i, j, char_indices[char]] = 1 # decoderへの入力をone-hot表現で表す\n",
" if j > 0: # 正解は入力より1つ前の時刻のものにする\n",
" t_decoder[i, j-1, char_indices[char]] = 1\n",
" \n",
"\n",
"\n"
],
"execution_count": 12,
"outputs": [
{
"output_type": "stream",
"text": [
"{'択', '暢', '恐', '霊', '入', '鬼', '傲', 'j', '票', '絆', '宣', '窃', '王', '村', '競', '羊', '脱', '絞', 'r', '弦', '彫', '諦', '真', '解', 'ば', '番', '点', '株', '儀', '血', '為', '柔', '塔', '諾', '扇', '承', '農', '干', '祭', '病', '苗', '省', '像', '俺', '璧', '八', '異', '没', '球', '惨', '庭', '災', '拍', '誦', 'く', '奴', '己', '壁', 'ぶ', '海', '港', '狐', '賃', '蝠', '冠', '陰', '約', '顕', '板', '落', '尻', '賄', '達', '力', '方', '受', '太', '相', '麗', '暇', '文', 'ワ', '疑', '余', '秋', '打', '類', '肢', '吠', '捧', '封', '了', '崎', '熊', '役', '随', '雄', 'む', '息', 'ゴ', '冗', '種', '殴', 'ガ', '婦', '紹', 'f', 'g', '簡', '迷', '地', '懸', '徒', '奏', '幾', '乗', '遊', 'た', '帝', '爺', '針', 'と', '渋', '縫', '駆', '倍', '幽', 'あ', '猿', '悲', '獲', '需', '敬', '掲', '痛', '藁', '澄', 'ビ', '鋭', '女', '灯', '飽', '天', '汗', '挑', '煮', '執', '箸', '腱', 'ほ', '早', '蔑', '0', '況', '囲', 'か', '滴', '憧', '隷', '兼', '譲', '瘍', '乳', '私', '械', '変', 'フ', '就', '飯', '混', 'ゃ', '固', '肘', 'ゼ', '型', 't', '暗', '薄', 'i', '命', '唐', '割', '揺', '網', 'o', '敏', '略', '稿', '活', '喧', '管', '若', '詞', '同', '崇', '映', '都', '紐', 'チ', '躊', '努', '右', '龍', '与', '祉', '死', '脳', 'ベ', '校', '利', '隔', '準', '肩', '闘', '旨', '句', '溺', '発', '巨', 'ユ', '産', '侮', '持', '豪', '磁', '符', '壊', '法', 'i', '惜', '陶', '指', '癖', '教', '珠', '塩', '泳', '皮', '守', '潔', '叱', '乏', '腐', '凋', '筒', '起', 'a', '来', '昔', '対', '腕', '平', '勧', '導', 'j', '緊', '綱', '九', '環', '洪', '6', '夕', '狂', '暫', '痕', '培', '夫', '亡', '戴', '逸', '宅', '束', '立', '存', '現', '抵', '梅', '費', '蜃', '警', '超', '使', '描', '朝', '困', 'ー', '汚', '剥', '粧', '革', '。', '区', '治', '砂', '墜', '深', '₂', '親', '堅', 'る', '紛', '駅', 'ナ', '歴', '能', '勤', '露', '頓', 'v', 'ぴ', '忍', '録', '音', '嫌', '顔', '雰', '功', '険', '営', '色', '牲', '聞', '成', '決', '絡', 'そ', '陸', '€', '幼', '愛', '曖', '爪', '杖', '緩', '免', '台', '技', '至', '雨', '構', '損', '癌', '諜', '儂', '祝', '崩', '担', '膏', '個', '既', '捨', '豊', '鑑', '間', '憂', '洋', '叶', '竜', '団', '肖', '践', 'ょ', '医', '拶', '冷', '授', '丸', '採', 'び', '土', '載', 'z', '尚', '僕', '弘', 'ネ', '訪', '峠', '邪', '挨', '内', 'わ', '修', '振', '蝙', '詫', '蒲', '税', '乞', '律', '蛛', '誓', '笑', '曜', '柱', '毛', '氷', '資', '街', '髄', '逞', '梳', '足', '宮', '譜', '洗', '魔', '攻', '識', '娯', 'p', '器', '怪', 'を', '芸', '誘', '5', '次', '薔', '虚', '狩', '捻', '杯', '募', '防', '君', '鈍', '呟', '已', '週', '搾', '周', '大', '忙', '部', '脅', '浴', '計', '淋', '率', '卓', '激', '績', 'タ', '盆', '釈', 'お', '勃', '粗', '因', '金', '博', '面', '距', '福', '母', 'つ', '杭', '応', '練', 'ェ', '要', '企', '宇', '民', 'h', '任', '唸', '状', '挫', '1', '狭', '常', '湧', '接', '貼', '支', '嫉', '疎', '枯', '航', 'ぺ', '位', '代', '蓼', '議', '稲', '勉', '哺', '椒', '汁', 'ポ', '苛', '蠣', '仮', '敗', '秘', '誇', '帯', '錯', '靴', '令', '影', '胆', '課', '見', '唯', '盲', '声', '職', 'え', '事', '言', '話', '垣', '酷', '索', '小', '盗', '品', '舌', '猫', '優', 'ラ', '弱', '案', '撮', '棒', '瓦', '無', '浸', '田', '赤', '便', '栗', '社', '鼠', '谷', '得', '覆', '生', '畑', '威', '家', '以', '微', '包', 'じ', '日', '工', '検', '盟', '遠', '鎖', '儲', '蚊', '凝', '妬', '染', '沿', '済', '槍', '偽', '億', '煉', '偶', 'ぉ', '7', '虎', '散', 'り', '故', '味', '信', '兎', '補', '券', '枝', '貌', '跪', '示', 'グ', '続', 'キ', '棲', 'w', '填', '室', '者', '互', '列', 'ぁ', '把', '3', '窓', '研', '邸', '霜', '昼', '座', '戻', '順', '覧', '沼', '奇', '阪', 'e', '献', '健', '遭', '万', '希', '厄', '集', '牛', '嘩', '流', '積', '境', '皆', '紅', '銘', '実', '蒼', '奪', '造', 'd', '玄', '菜', '刀', '滑', '伸', '宝', '庫', '軍', 'ド', '諸', '築', '講', '臓', '寝', '伏', '戚', '慕', '員', '刺', '晩', '賂', '2', '評', '炭', '箋', '給', '患', '処', '候', '眼', 'l', '唇', '男', '騙', '叔', '典', '棄', '盤', '孫', '務', '療', '英', '然', '郷', '剣', '惰', '疲', '遅', '掃', '照', '園', '黙', '態', '作', '甘', '辞', '鮮', '神', '簿', '関', '危', '恵', '歌', '含', '段', '尋', 'ュ', '定', '悶', '症', '衰', '談', '巻', '熟', '摂', '如', '訓', '衆', '申', '我', '雹', '二', '害', '鍵', '据', '轢', '房', '踊', '何', '明', '肺', '蒸', '素', '原', '俳', '院', '懲', '貴', '情', '必', '8', 'ず', '兵', '遂', '各', '士', '敵', '及', '珍', '温', '稼', '掻', 'd', '趣', '程', '詰', '燃', '投', '歪', '馴', '燭', '章', '追', '撤', '剃', '旅', '印', '瀬', '特', '痣', '餅', '車', '悪', '卒', '.', '質', '刑', '潰', '跳', 'h', '景', '逐', '換', '床', '視', '押', '洞', '箇', '道', '呂', '縦', '単', '里', '沢', '到', '引', '芽', '徹', '摘', '震', '密', '心', '締', '帳', '喫', '覚', '請', '越', '5', '幅', '股', '只', '翼', '矯', '節', '頃', '月', '欲', '婚', '喉', '一', '配', '主', '唱', '席', '札', '秒', '躍', '逮', '選', '算', 'ゲ', '旋', '姿', '訝', 'バ', '鎮', '爬', 'ろ', '半', '今', 'シ', 'ん', '容', '批', '繊', '酎', '堤', '曇', '別', '笛', '遮', '側', '鞘', '贅', 'f', '迎', '確', '!', '薪', '胃', '缶', '那', '凧', '詐', '呆', '替', '加', '伝', '触', '栄', 'げ', '考', '西', '送', '頂', '揮', '払', '茹', '埠', 'せ', '債', '舎', '甲', '囀', '捜', '騒', '溝', 'が', '絹', '篤', '壌', '奥', '渉', '救', 'ら', '机', '察', '酔', '均', '児', '穏', '臭', '飛', '華', '春', '連', '辺', '刈', '拷', '窟', '友', '浜', '久', '寛', '蛙', '満', '賛', '高', '銭', '晴', '的', '閉', '狙', 'x', '傷', '爆', '弁', '携', '抜', '0', '握', '糖', '後', '突', '裸', '鳥', '六', '堂', '杳', '脚', '手', '寡', '枕', '貨', '判', '曲', 'ン', '蜜', '痴', '果', '併', '推', '覗', '旧', '拭', '輪', '減', '貸', '形', '辛', '長', '非', '〆', 's', '表', ' ', '比', 'だ', '%', '4', '断', '「', '瓶', '姪', '東', '書', '報', '慮', '拾', '撲', '昭', '虫', '鯉', '助', '額', '穴', '晰', '伺', '森', '滅', '聴', '第', '北', '訟', '勝', 'ゅ', 'ッ', '勇', '蓄', '充', '慎', '坂', '頷', '藤', 'ザ', 'オ', 'e', '語', '罠', '醤', '留', '恨', '’', '2', '展', '理', '号', '時', '京', '値', '泥', '直', '董', '—', '冒', '善', '討', '褒', '学', '係', 'ひ', '冥', '場', '項', '菊', 'ミ', '彙', '薦', '栓', 'm', '群', '畳', '偏', '仏', '最', '襟', '酸', '雛', '路', '則', '肥', '退', 'ギ', 'て', 'さ', '合', '夢', '辱', 'é', '清', '喜', '製', '図', 'u', '勢', '年', '揚', '鱠', '掘', '巣', '寮', '登', '怯', '暑', '硫', '℃', '蕉', '賭', 'q', '有', '眠', 'ど', '焚', '独', '重', '髭', '豚', '礼', '元', '幕', '扉', '端', '往', '橋', '銀', '崖', '協', '唖', '鼻', '-', '亀', '消', '湾', '破', '装', '論', '肉', '挟', '仔', '茶', '読', '軽', 'ィ', '青', '問', '悔', 'ペ', '験', '溶', '漫', '茎', 'や', '訴', '渇', '灰', '抱', '訛', '黄', '悩', '蝶', 'き', '漸', '潜', '遣', '懇', '運', '朗', '門', '7', '゜', '回', '淡', '迫', '四', 'ヤ', '桃', '漢', '慣', '窮', '少', '低', '司', '熱', '扁', '綴', 'サ', '燥', '洩', '隠', '労', '耳', '歓', '写', '差', 'ぷ', '宿', '戸', 'ズ', '墓', '殺', '説', '湯', '池', 'a', 'ぜ', '木', '般', '鞄', '歯', '業', '筋', '諺', '署', '昇', '袖', '休', '拒', '紳', '先', '根', '師', '科', '売', '史', '念', 'コ', '養', '編', '厚', '薇', '舞', '召', '汝', '隅', '又', '囚', '袋', '射', '歩', '楼', '瀕', '芝', '嵐', '町', 'ゾ', '等', '躾', '細', 'ス', '逆', 'p', '\"', '卯', '将', '記', '豹', 'ぐ', '睡', '妄', '通', '所', '宛', '雪', '黒', '控', '8', '贈', '外', 'み', '寿', '几', '蝋', '遥', '易', '綺', '改', 'ヘ', '盛', '当', '迅', '除', '搭', '叫', '惑', '暮', '聖', '鹸', '瞬', '拠', '翌', '凄', '梯', '備', '戯', '途', '蔵', '美', '新', '涯', '芭', '犬', '創', '範', 'o', '食', '共', '泉', '繁', '空', '上', '分', 'リ', '隊', '幻', '岩', '止', '米', '繋', '百', '薬', '目', '爽', '線', '敢', '件', '\\u3000', '用', '条', '羨', '楽', 'ロ', '延', 'ざ', '働', '厳', '衝', '政', '輸', '自', '沖', '風', '濯', '叩', '暖', '緒', '測', '許', '購', '闇', '尾', '初', '4', '勘', '嬉', 'の', '循', '鶏', '極', '慢', '全', '操', '伯', '称', '仰', '堪', '謝', '派', 'ャ', '午', 'デ', '身', 'エ', '擦', '漕', '監', '傾', '陳', '貯', '嗅', '速', 'ゥ', '荷', '猟', '羽', '噛', '国', '砕', '貰', '犠', '凡', '頬', '短', '惹', '塗', '結', '毒', '飴', '客', '仲', '祈', '妊', '放', '字', '戦', '殿', '鴎', '蜂', '効', '吉', 'は', '彼', 'め', '眉', '脇', '源', '感', '躇', '刷', '商', '専', '属', '詳', '貧', 'ウ', '渡', '画', '旗', 'テ', 'ヶ', '嘆', '狸', '張', 'ゆ', '純', 'な', '砲', '寂', '槌', '奮', '松', 'モ', '副', '始', '観', '沈', '兆', '鉛', 'ノ', '慈', '悟', 'ぇ', 'れ', '屈', '市', '格', '矢', '懐', 'し', '郊', '襲', '込', '誤', '在', '白', '背', '融', '舟', '倒', '会', '被', '喋', '莫', '違', '須', '巧', '雇', '腹', '氏', '裁', '失', '取', '虐', '娘', '告', '葬', '責', 'マ', '宙', '騰', '訂', '限', '罪', '疾', '植', '旺', '魅', '喀', '未', '川', '施', '期', '煩', '館', '殊', '由', '香', '拗', '腸', '思', '扱', '人', '雷', '買', '埋', '罰', 'へ', '硬', '診', '石', '添', '皿', '茸', '踏', 'づ', '暴', '住', '瞭', 'ヌ', '籠', '数', '世', '娠', '繰', '駐', '兄', '拝', '護', '公', '裏', '圧', 'っ', '腺', '欧', '履', '泡', '乱', '9', '具', '蛾', 'b', '界', '量', '猛', '残', '呻', '岸', '棚', '欺', '丈', '禁', '蛇', 'プ', '習', '円', '吐', '詩', '怒', '嫁', 'ブ', '湘', 'ピ', '徴', '匹', '囁', '跡', '寒', '斉', '並', '規', '魘', '噌', '痺', '削', '抑', '多', '鹿', 'よ', '鍛', '似', '浪', '1', '難', '塀', '絵', '冴', '怖', '斐', '嘘', '罵', '苦', '寺', 'k', '級', '醸', '慄', '軒', '継', '津', 'で', '喘', '餌', '痩', '液', '御', '蜘', '腫', '化', '濃', '進', '審', 'セ', '委', '臆', 'c', '康', '櫛', '介', '証', '組', '焦', '秀', '訳', '欄', '火', 'う', '誕', '党', '牧', '胡', 'ソ', '価', '偵', '滞', '拉', '物', '祟', '中', '貫', '漱', '枚', '剤', '膝', '荒', '他', '探', '尽', '正', '致', '冬', '徳', '寄', '動', '際', '縁', '麦', '祖', '双', '葉', '十', 'い', '?', '箱', '広', '逃', '鍮', '駄', '昧', '韓', 'も', '眺', 'カ', '七', '走', '波', '離', '煙', '想', '着', '茂', '刻', '掛', '稽', '陽', '訊', '象', '飼', '咳', '遵', '紙', '粉', '古', '片', '煌', '絶', '惚', '焼', 'r', '憎', '澹', '和', 's', '欠', '憩', '乾', '恥', '較', '泣', '紀', '腰', '弟', '磨', '醜', '捕', '妻', '翻', '意', '洒', '誠', '湖', ',', '才', '域', '呼', '泊', '様', '零', '出', '竹', 'ね', '復', 'ふ', '陥', '孤', '卵', '草', '衣', '弾', '題', '」', 'ョ', 't', '匂', '旦', '野', '終', '反', '不', '店', '届', '斬', '釘', '口', '遺', '魚', '冊', '伴', '雀', '繕', '鬱', '\\t', '丘', '千', '度', '式', '催', '劇', '椅', '切', '官', '涼', '建', '基', '汽', '返', '縛', '設', '鐘', 'ぬ', '再', '誌', '望', '栽', '牡', '犯', '霧', '強', '静', '適', '稀', '体', '停', 'u', '昨', '収', '撃', '星', '制', '両', 'ぎ', '整', '仕', 'メ', '向', '季', '更', '供', '歳', '借', '湿', '姓', '錨', 'ハ', '参', '忘', '輝', '光', '呵', '志', '究', '寸', '納', '財', '凍', '策', '々', '族', '塞', '旬', '鞭', '傘', '沸', '!', '交', '統', '賞', '著', '胸', '$', '虔', 'ダ', '妹', 'c', '夏', '骸', '偉', 'ホ', 'べ', '緑', '玩', ')', '良', '義', '老', '提', '服', '子', '開', '争', '綿', '術', '武', '夜', '去', '急', '麻', 'm', 'ケ', '山', 'n', '依', '安', ':', '帽', '甚', '油', '横', '奈', '総', '折', '答', '炊', '刊', 'ñ', 'b', '版', \"'\", '領', '試', '賊', '縄', '模', '予', '快', '頑', '涙', '脈', '?', '塁', '援', '濡', '島', '浮', '梨', '剰', '富', '屋', '五', '花', '侵', '興', '障', '響', '頼', '耐', '筆', '蹴', '首', '飾', '料', '角', '玉', '\\n', '昆', '齢', '階', 'ま', '獄', 'パ', '驚', 'け', '帰', '普', '例', '父', 'ぱ', 'ォ', '完', 'y', '廃', '負', '虜', 'ジ', '林', '販', 'す', '精', '銃', '瞳', '性', '電', '毎', 'ヒ', '従', '益', '髪', '預', '好', '幸', '永', '婆', 'ヨ', '名', '鯨', '局', '還', '移', 'ム', '近', '6', '抗', 'ボ', '水', '降', '~', '骨', '豆', '知', '鳴', '待', 'ぼ', '州', '棘', '忠', '左', '査', '愚', '注', 'ニ', '、', '岐', '認', '頁', '凶', 'ク', '恩', '敷', '付', '看', '糧', '岳', 'レ', '下', '3', '吸', '誉', '戒', 'k', '賢', '転', '肌', '雑', '鉄', '(', 'ァ', '頭', '標', '釣', '述', '育', '檎', '噂', '前', '鈴', '恋', '可', '経', '誰', '妙', '云', '却', '肝', 'ツ', '布', '城', '避', '馬', '郎', '過', '郵', '飲', '斎', '椎', '徐', '炎', '尊', '権', '飢', '底', '末', '隣', '本', '慰', '挙', '・', '行', '妖', 'ト', '憶', '怠', 'ア', '透', '南', '陣', '浅', 'ご', '狼', '巡', 'ぞ', '雲', '三', '占', '招', '複', '演', '鏡', '気', '慌', 'ぽ', '井', '願', ',', '撥', 'に', '漏', '坊', '頻', '材', '吹', 'ル', 'こ', '調', '置', '鮭', '船', '咲', '求', '僚', 'ち', 'イ', '酒', '増', '竄', '羹', '姉', '9', '贋', '丁', '機', '保', '居', '否', '裕'}\n",
"2080\n",
"{'択': 0, '暢': 1, '恐': 2, '霊': 3, '入': 4, '鬼': 5, '傲': 6, 'j': 7, '票': 8, '絆': 9, '宣': 10, '窃': 11, '王': 12, '村': 13, '競': 14, '羊': 15, '脱': 16, '絞': 17, 'r': 18, '弦': 19, '彫': 20, '諦': 21, '真': 22, '解': 23, 'ば': 24, '番': 25, '点': 26, '株': 27, '儀': 28, '血': 29, '為': 30, '柔': 31, '塔': 32, '諾': 33, '扇': 34, '承': 35, '農': 36, '干': 37, '祭': 38, '病': 39, '苗': 40, '省': 41, '像': 42, '俺': 43, '璧': 44, '八': 45, '異': 46, '没': 47, '球': 48, '惨': 49, '庭': 50, '災': 51, '拍': 52, '誦': 53, 'く': 54, '奴': 55, '己': 56, '壁': 57, 'ぶ': 58, '海': 59, '港': 60, '狐': 61, '賃': 62, '蝠': 63, '冠': 64, '陰': 65, '約': 66, '顕': 67, '板': 68, '落': 69, '尻': 70, '賄': 71, '達': 72, '力': 73, '方': 74, '受': 75, '太': 76, '相': 77, '麗': 78, '暇': 79, '文': 80, 'ワ': 81, '疑': 82, '余': 83, '秋': 84, '打': 85, '類': 86, '肢': 87, '吠': 88, '捧': 89, '封': 90, '了': 91, '崎': 92, '熊': 93, '役': 94, '随': 95, '雄': 96, 'む': 97, '息': 98, 'ゴ': 99, '冗': 100, '種': 101, '殴': 102, 'ガ': 103, '婦': 104, '紹': 105, 'f': 106, 'g': 107, '簡': 108, '迷': 109, '地': 110, '懸': 111, '徒': 112, '奏': 113, '幾': 114, '乗': 115, '遊': 116, 'た': 117, '帝': 118, '爺': 119, '針': 120, 'と': 121, '渋': 122, '縫': 123, '駆': 124, '倍': 125, '幽': 126, 'あ': 127, '猿': 128, '悲': 129, '獲': 130, '需': 131, '敬': 132, '掲': 133, '痛': 134, '藁': 135, '澄': 136, 'ビ': 137, '鋭': 138, '女': 139, '灯': 140, '飽': 141, '天': 142, '汗': 143, '挑': 144, '煮': 145, '執': 146, '箸': 147, '腱': 148, 'ほ': 149, '早': 150, '蔑': 151, '0': 152, '況': 153, '囲': 154, 'か': 155, '滴': 156, '憧': 157, '隷': 158, '兼': 159, '譲': 160, '瘍': 161, '乳': 162, '私': 163, '械': 164, '変': 165, 'フ': 166, '就': 167, '飯': 168, '混': 169, 'ゃ': 170, '固': 171, '肘': 172, 'ゼ': 173, '型': 174, 't': 175, '暗': 176, '薄': 177, 'i': 178, '命': 179, '唐': 180, '割': 181, '揺': 182, '網': 183, 'o': 184, '敏': 185, '略': 186, '稿': 187, '活': 188, '喧': 189, '管': 190, '若': 191, '詞': 192, '同': 193, '崇': 194, '映': 195, '都': 196, '紐': 197, 'チ': 198, '躊': 199, '努': 200, '右': 201, '龍': 202, '与': 203, '祉': 204, '死': 205, '脳': 206, 'ベ': 207, '校': 208, '利': 209, '隔': 210, '準': 211, '肩': 212, '闘': 213, '旨': 214, '句': 215, '溺': 216, '発': 217, '巨': 218, 'ユ': 219, '産': 220, '侮': 221, '持': 222, '豪': 223, '磁': 224, '符': 225, '壊': 226, '法': 227, 'i': 228, '惜': 229, '陶': 230, '指': 231, '癖': 232, '教': 233, '珠': 234, '塩': 235, '泳': 236, '皮': 237, '守': 238, '潔': 239, '叱': 240, '乏': 241, '腐': 242, '凋': 243, '筒': 244, '起': 245, 'a': 246, '来': 247, '昔': 248, '対': 249, '腕': 250, '平': 251, '勧': 252, '導': 253, 'j': 254, '緊': 255, '綱': 256, '九': 257, '環': 258, '洪': 259, '6': 260, '夕': 261, '狂': 262, '暫': 263, '痕': 264, '培': 265, '夫': 266, '亡': 267, '戴': 268, '逸': 269, '宅': 270, '束': 271, '立': 272, '存': 273, '現': 274, '抵': 275, '梅': 276, '費': 277, '蜃': 278, '警': 279, '超': 280, '使': 281, '描': 282, '朝': 283, '困': 284, 'ー': 285, '汚': 286, '剥': 287, '粧': 288, '革': 289, '。': 290, '区': 291, '治': 292, '砂': 293, '墜': 294, '深': 295, '₂': 296, '親': 297, '堅': 298, 'る': 299, '紛': 300, '駅': 301, 'ナ': 302, '歴': 303, '能': 304, '勤': 305, '露': 306, '頓': 307, 'v': 308, 'ぴ': 309, '忍': 310, '録': 311, '音': 312, '嫌': 313, '顔': 314, '雰': 315, '功': 316, '険': 317, '営': 318, '色': 319, '牲': 320, '聞': 321, '成': 322, '決': 323, '絡': 324, 'そ': 325, '陸': 326, '€': 327, '幼': 328, '愛': 329, '曖': 330, '爪': 331, '杖': 332, '緩': 333, '免': 334, '台': 335, '技': 336, '至': 337, '雨': 338, '構': 339, '損': 340, '癌': 341, '諜': 342, '儂': 343, '祝': 344, '崩': 345, '担': 346, '膏': 347, '個': 348, '既': 349, '捨': 350, '豊': 351, '鑑': 352, '間': 353, '憂': 354, '洋': 355, '叶': 356, '竜': 357, '団': 358, '肖': 359, '践': 360, 'ょ': 361, '医': 362, '拶': 363, '冷': 364, '授': 365, '丸': 366, '採': 367, 'び': 368, '土': 369, '載': 370, 'z': 371, '尚': 372, '僕': 373, '弘': 374, 'ネ': 375, '訪': 376, '峠': 377, '邪': 378, '挨': 379, '内': 380, 'わ': 381, '修': 382, '振': 383, '蝙': 384, '詫': 385, '蒲': 386, '税': 387, '乞': 388, '律': 389, '蛛': 390, '誓': 391, '笑': 392, '曜': 393, '柱': 394, '毛': 395, '氷': 396, '資': 397, '街': 398, '髄': 399, '逞': 400, '梳': 401, '足': 402, '宮': 403, '譜': 404, '洗': 405, '魔': 406, '攻': 407, '識': 408, '娯': 409, 'p': 410, '器': 411, '怪': 412, 'を': 413, '芸': 414, '誘': 415, '5': 416, '次': 417, '薔': 418, '虚': 419, '狩': 420, '捻': 421, '杯': 422, '募': 423, '防': 424, '君': 425, '鈍': 426, '呟': 427, '已': 428, '週': 429, '搾': 430, '周': 431, '大': 432, '忙': 433, '部': 434, '脅': 435, '浴': 436, '計': 437, '淋': 438, '率': 439, '卓': 440, '激': 441, '績': 442, 'タ': 443, '盆': 444, '釈': 445, 'お': 446, '勃': 447, '粗': 448, '因': 449, '金': 450, '博': 451, '面': 452, '距': 453, '福': 454, '母': 455, 'つ': 456, '杭': 457, '応': 458, '練': 459, 'ェ': 460, '要': 461, '企': 462, '宇': 463, '民': 464, 'h': 465, '任': 466, '唸': 467, '状': 468, '挫': 469, '1': 470, '狭': 471, '常': 472, '湧': 473, '接': 474, '貼': 475, '支': 476, '嫉': 477, '疎': 478, '枯': 479, '航': 480, 'ぺ': 481, '位': 482, '代': 483, '蓼': 484, '議': 485, '稲': 486, '勉': 487, '哺': 488, '椒': 489, '汁': 490, 'ポ': 491, '苛': 492, '蠣': 493, '仮': 494, '敗': 495, '秘': 496, '誇': 497, '帯': 498, '錯': 499, '靴': 500, '令': 501, '影': 502, '胆': 503, '課': 504, '見': 505, '唯': 506, '盲': 507, '声': 508, '職': 509, 'え': 510, '事': 511, '言': 512, '話': 513, '垣': 514, '酷': 515, '索': 516, '小': 517, '盗': 518, '品': 519, '舌': 520, '猫': 521, '優': 522, 'ラ': 523, '弱': 524, '案': 525, '撮': 526, '棒': 527, '瓦': 528, '無': 529, '浸': 530, '田': 531, '赤': 532, '便': 533, '栗': 534, '社': 535, '鼠': 536, '谷': 537, '得': 538, '覆': 539, '生': 540, '畑': 541, '威': 542, '家': 543, '以': 544, '微': 545, '包': 546, 'じ': 547, '日': 548, '工': 549, '検': 550, '盟': 551, '遠': 552, '鎖': 553, '儲': 554, '蚊': 555, '凝': 556, '妬': 557, '染': 558, '沿': 559, '済': 560, '槍': 561, '偽': 562, '億': 563, '煉': 564, '偶': 565, 'ぉ': 566, '7': 567, '虎': 568, '散': 569, 'り': 570, '故': 571, '味': 572, '信': 573, '兎': 574, '補': 575, '券': 576, '枝': 577, '貌': 578, '跪': 579, '示': 580, 'グ': 581, '続': 582, 'キ': 583, '棲': 584, 'w': 585, '填': 586, '室': 587, '者': 588, '互': 589, '列': 590, 'ぁ': 591, '把': 592, '3': 593, '窓': 594, '研': 595, '邸': 596, '霜': 597, '昼': 598, '座': 599, '戻': 600, '順': 601, '覧': 602, '沼': 603, '奇': 604, '阪': 605, 'e': 606, '献': 607, '健': 608, '遭': 609, '万': 610, '希': 611, '厄': 612, '集': 613, '牛': 614, '嘩': 615, '流': 616, '積': 617, '境': 618, '皆': 619, '紅': 620, '銘': 621, '実': 622, '蒼': 623, '奪': 624, '造': 625, 'd': 626, '玄': 627, '菜': 628, '刀': 629, '滑': 630, '伸': 631, '宝': 632, '庫': 633, '軍': 634, 'ド': 635, '諸': 636, '築': 637, '講': 638, '臓': 639, '寝': 640, '伏': 641, '戚': 642, '慕': 643, '員': 644, '刺': 645, '晩': 646, '賂': 647, '2': 648, '評': 649, '炭': 650, '箋': 651, '給': 652, '患': 653, '処': 654, '候': 655, '眼': 656, 'l': 657, '唇': 658, '男': 659, '騙': 660, '叔': 661, '典': 662, '棄': 663, '盤': 664, '孫': 665, '務': 666, '療': 667, '英': 668, '然': 669, '郷': 670, '剣': 671, '惰': 672, '疲': 673, '遅': 674, '掃': 675, '照': 676, '園': 677, '黙': 678, '態': 679, '作': 680, '甘': 681, '辞': 682, '鮮': 683, '神': 684, '簿': 685, '関': 686, '危': 687, '恵': 688, '歌': 689, '含': 690, '段': 691, '尋': 692, 'ュ': 693, '定': 694, '悶': 695, '症': 696, '衰': 697, '談': 698, '巻': 699, '熟': 700, '摂': 701, '如': 702, '訓': 703, '衆': 704, '申': 705, '我': 706, '雹': 707, '二': 708, '害': 709, '鍵': 710, '据': 711, '轢': 712, '房': 713, '踊': 714, '何': 715, '明': 716, '肺': 717, '蒸': 718, '素': 719, '原': 720, '俳': 721, '院': 722, '懲': 723, '貴': 724, '情': 725, '必': 726, '8': 727, 'ず': 728, '兵': 729, '遂': 730, '各': 731, '士': 732, '敵': 733, '及': 734, '珍': 735, '温': 736, '稼': 737, '掻': 738, 'd': 739, '趣': 740, '程': 741, '詰': 742, '燃': 743, '投': 744, '歪': 745, '馴': 746, '燭': 747, '章': 748, '追': 749, '撤': 750, '剃': 751, '旅': 752, '印': 753, '瀬': 754, '特': 755, '痣': 756, '餅': 757, '車': 758, '悪': 759, '卒': 760, '.': 761, '質': 762, '刑': 763, '潰': 764, '跳': 765, 'h': 766, '景': 767, '逐': 768, '換': 769, '床': 770, '視': 771, '押': 772, '洞': 773, '箇': 774, '道': 775, '呂': 776, '縦': 777, '単': 778, '里': 779, '沢': 780, '到': 781, '引': 782, '芽': 783, '徹': 784, '摘': 785, '震': 786, '密': 787, '心': 788, '締': 789, '帳': 790, '喫': 791, '覚': 792, '請': 793, '越': 794, '5': 795, '幅': 796, '股': 797, '只': 798, '翼': 799, '矯': 800, '節': 801, '頃': 802, '月': 803, '欲': 804, '婚': 805, '喉': 806, '一': 807, '配': 808, '主': 809, '唱': 810, '席': 811, '札': 812, '秒': 813, '躍': 814, '逮': 815, '選': 816, '算': 817, 'ゲ': 818, '旋': 819, '姿': 820, '訝': 821, 'バ': 822, '鎮': 823, '爬': 824, 'ろ': 825, '半': 826, '今': 827, 'シ': 828, 'ん': 829, '容': 830, '批': 831, '繊': 832, '酎': 833, '堤': 834, '曇': 835, '別': 836, '笛': 837, '遮': 838, '側': 839, '鞘': 840, '贅': 841, 'f': 842, '迎': 843, '確': 844, '!': 845, '薪': 846, '胃': 847, '缶': 848, '那': 849, '凧': 850, '詐': 851, '呆': 852, '替': 853, '加': 854, '伝': 855, '触': 856, '栄': 857, 'げ': 858, '考': 859, '西': 860, '送': 861, '頂': 862, '揮': 863, '払': 864, '茹': 865, '埠': 866, 'せ': 867, '債': 868, '舎': 869, '甲': 870, '囀': 871, '捜': 872, '騒': 873, '溝': 874, 'が': 875, '絹': 876, '篤': 877, '壌': 878, '奥': 879, '渉': 880, '救': 881, 'ら': 882, '机': 883, '察': 884, '酔': 885, '均': 886, '児': 887, '穏': 888, '臭': 889, '飛': 890, '華': 891, '春': 892, '連': 893, '辺': 894, '刈': 895, '拷': 896, '窟': 897, '友': 898, '浜': 899, '久': 900, '寛': 901, '蛙': 902, '満': 903, '賛': 904, '高': 905, '銭': 906, '晴': 907, '的': 908, '閉': 909, '狙': 910, 'x': 911, '傷': 912, '爆': 913, '弁': 914, '携': 915, '抜': 916, '0': 917, '握': 918, '糖': 919, '後': 920, '突': 921, '裸': 922, '鳥': 923, '六': 924, '堂': 925, '杳': 926, '脚': 927, '手': 928, '寡': 929, '枕': 930, '貨': 931, '判': 932, '曲': 933, 'ン': 934, '蜜': 935, '痴': 936, '果': 937, '併': 938, '推': 939, '覗': 940, '旧': 941, '拭': 942, '輪': 943, '減': 944, '貸': 945, '形': 946, '辛': 947, '長': 948, '非': 949, '〆': 950, 's': 951, '表': 952, ' ': 953, '比': 954, 'だ': 955, '%': 956, '4': 957, '断': 958, '「': 959, '瓶': 960, '姪': 961, '東': 962, '書': 963, '報': 964, '慮': 965, '拾': 966, '撲': 967, '昭': 968, '虫': 969, '鯉': 970, '助': 971, '額': 972, '穴': 973, '晰': 974, '伺': 975, '森': 976, '滅': 977, '聴': 978, '第': 979, '北': 980, '訟': 981, '勝': 982, 'ゅ': 983, 'ッ': 984, '勇': 985, '蓄': 986, '充': 987, '慎': 988, '坂': 989, '頷': 990, '藤': 991, 'ザ': 992, 'オ': 993, 'e': 994, '語': 995, '罠': 996, '醤': 997, '留': 998, '恨': 999, '’': 1000, '2': 1001, '展': 1002, '理': 1003, '号': 1004, '時': 1005, '京': 1006, '値': 1007, '泥': 1008, '直': 1009, '董': 1010, '—': 1011, '冒': 1012, '善': 1013, '討': 1014, '褒': 1015, '学': 1016, '係': 1017, 'ひ': 1018, '冥': 1019, '場': 1020, '項': 1021, '菊': 1022, 'ミ': 1023, '彙': 1024, '薦': 1025, '栓': 1026, 'm': 1027, '群': 1028, '畳': 1029, '偏': 1030, '仏': 1031, '最': 1032, '襟': 1033, '酸': 1034, '雛': 1035, '路': 1036, '則': 1037, '肥': 1038, '退': 1039, 'ギ': 1040, 'て': 1041, 'さ': 1042, '合': 1043, '夢': 1044, '辱': 1045, 'é': 1046, '清': 1047, '喜': 1048, '製': 1049, '図': 1050, 'u': 1051, '勢': 1052, '年': 1053, '揚': 1054, '鱠': 1055, '掘': 1056, '巣': 1057, '寮': 1058, '登': 1059, '怯': 1060, '暑': 1061, '硫': 1062, '℃': 1063, '蕉': 1064, '賭': 1065, 'q': 1066, '有': 1067, '眠': 1068, 'ど': 1069, '焚': 1070, '独': 1071, '重': 1072, '髭': 1073, '豚': 1074, '礼': 1075, '元': 1076, '幕': 1077, '扉': 1078, '端': 1079, '往': 1080, '橋': 1081, '銀': 1082, '崖': 1083, '協': 1084, '唖': 1085, '鼻': 1086, '-': 1087, '亀': 1088, '消': 1089, '湾': 1090, '破': 1091, '装': 1092, '論': 1093, '肉': 1094, '挟': 1095, '仔': 1096, '茶': 1097, '読': 1098, '軽': 1099, 'ィ': 1100, '青': 1101, '問': 1102, '悔': 1103, 'ペ': 1104, '験': 1105, '溶': 1106, '漫': 1107, '茎': 1108, 'や': 1109, '訴': 1110, '渇': 1111, '灰': 1112, '抱': 1113, '訛': 1114, '黄': 1115, '悩': 1116, '蝶': 1117, 'き': 1118, '漸': 1119, '潜': 1120, '遣': 1121, '懇': 1122, '運': 1123, '朗': 1124, '門': 1125, '7': 1126, '゜': 1127, '回': 1128, '淡': 1129, '迫': 1130, '四': 1131, 'ヤ': 1132, '桃': 1133, '漢': 1134, '慣': 1135, '窮': 1136, '少': 1137, '低': 1138, '司': 1139, '熱': 1140, '扁': 1141, '綴': 1142, 'サ': 1143, '燥': 1144, '洩': 1145, '隠': 1146, '労': 1147, '耳': 1148, '歓': 1149, '写': 1150, '差': 1151, 'ぷ': 1152, '宿': 1153, '戸': 1154, 'ズ': 1155, '墓': 1156, '殺': 1157, '説': 1158, '湯': 1159, '池': 1160, 'a': 1161, 'ぜ': 1162, '木': 1163, '般': 1164, '鞄': 1165, '歯': 1166, '業': 1167, '筋': 1168, '諺': 1169, '署': 1170, '昇': 1171, '袖': 1172, '休': 1173, '拒': 1174, '紳': 1175, '先': 1176, '根': 1177, '師': 1178, '科': 1179, '売': 1180, '史': 1181, '念': 1182, 'コ': 1183, '養': 1184, '編': 1185, '厚': 1186, '薇': 1187, '舞': 1188, '召': 1189, '汝': 1190, '隅': 1191, '又': 1192, '囚': 1193, '袋': 1194, '射': 1195, '歩': 1196, '楼': 1197, '瀕': 1198, '芝': 1199, '嵐': 1200, '町': 1201, 'ゾ': 1202, '等': 1203, '躾': 1204, '細': 1205, 'ス': 1206, '逆': 1207, 'p': 1208, '\"': 1209, '卯': 1210, '将': 1211, '記': 1212, '豹': 1213, 'ぐ': 1214, '睡': 1215, '妄': 1216, '通': 1217, '所': 1218, '宛': 1219, '雪': 1220, '黒': 1221, '控': 1222, '8': 1223, '贈': 1224, '外': 1225, 'み': 1226, '寿': 1227, '几': 1228, '蝋': 1229, '遥': 1230, '易': 1231, '綺': 1232, '改': 1233, 'ヘ': 1234, '盛': 1235, '当': 1236, '迅': 1237, '除': 1238, '搭': 1239, '叫': 1240, '惑': 1241, '暮': 1242, '聖': 1243, '鹸': 1244, '瞬': 1245, '拠': 1246, '翌': 1247, '凄': 1248, '梯': 1249, '備': 1250, '戯': 1251, '途': 1252, '蔵': 1253, '美': 1254, '新': 1255, '涯': 1256, '芭': 1257, '犬': 1258, '創': 1259, '範': 1260, 'o': 1261, '食': 1262, '共': 1263, '泉': 1264, '繁': 1265, '空': 1266, '上': 1267, '分': 1268, 'リ': 1269, '隊': 1270, '幻': 1271, '岩': 1272, '止': 1273, '米': 1274, '繋': 1275, '百': 1276, '薬': 1277, '目': 1278, '爽': 1279, '線': 1280, '敢': 1281, '件': 1282, '\\u3000': 1283, '用': 1284, '条': 1285, '羨': 1286, '楽': 1287, 'ロ': 1288, '延': 1289, 'ざ': 1290, '働': 1291, '厳': 1292, '衝': 1293, '政': 1294, '輸': 1295, '自': 1296, '沖': 1297, '風': 1298, '濯': 1299, '叩': 1300, '暖': 1301, '緒': 1302, '測': 1303, '許': 1304, '購': 1305, '闇': 1306, '尾': 1307, '初': 1308, '4': 1309, '勘': 1310, '嬉': 1311, 'の': 1312, '循': 1313, '鶏': 1314, '極': 1315, '慢': 1316, '全': 1317, '操': 1318, '伯': 1319, '称': 1320, '仰': 1321, '堪': 1322, '謝': 1323, '派': 1324, 'ャ': 1325, '午': 1326, 'デ': 1327, '身': 1328, 'エ': 1329, '擦': 1330, '漕': 1331, '監': 1332, '傾': 1333, '陳': 1334, '貯': 1335, '嗅': 1336, '速': 1337, 'ゥ': 1338, '荷': 1339, '猟': 1340, '羽': 1341, '噛': 1342, '国': 1343, '砕': 1344, '貰': 1345, '犠': 1346, '凡': 1347, '頬': 1348, '短': 1349, '惹': 1350, '塗': 1351, '結': 1352, '毒': 1353, '飴': 1354, '客': 1355, '仲': 1356, '祈': 1357, '妊': 1358, '放': 1359, '字': 1360, '戦': 1361, '殿': 1362, '鴎': 1363, '蜂': 1364, '効': 1365, '吉': 1366, 'は': 1367, '彼': 1368, 'め': 1369, '眉': 1370, '脇': 1371, '源': 1372, '感': 1373, '躇': 1374, '刷': 1375, '商': 1376, '専': 1377, '属': 1378, '詳': 1379, '貧': 1380, 'ウ': 1381, '渡': 1382, '画': 1383, '旗': 1384, 'テ': 1385, 'ヶ': 1386, '嘆': 1387, '狸': 1388, '張': 1389, 'ゆ': 1390, '純': 1391, 'な': 1392, '砲': 1393, '寂': 1394, '槌': 1395, '奮': 1396, '松': 1397, 'モ': 1398, '副': 1399, '始': 1400, '観': 1401, '沈': 1402, '兆': 1403, '鉛': 1404, 'ノ': 1405, '慈': 1406, '悟': 1407, 'ぇ': 1408, 'れ': 1409, '屈': 1410, '市': 1411, '格': 1412, '矢': 1413, '懐': 1414, 'し': 1415, '郊': 1416, '襲': 1417, '込': 1418, '誤': 1419, '在': 1420, '白': 1421, '背': 1422, '融': 1423, '舟': 1424, '倒': 1425, '会': 1426, '被': 1427, '喋': 1428, '莫': 1429, '違': 1430, '須': 1431, '巧': 1432, '雇': 1433, '腹': 1434, '氏': 1435, '裁': 1436, '失': 1437, '取': 1438, '虐': 1439, '娘': 1440, '告': 1441, '葬': 1442, '責': 1443, 'マ': 1444, '宙': 1445, '騰': 1446, '訂': 1447, '限': 1448, '罪': 1449, '疾': 1450, '植': 1451, '旺': 1452, '魅': 1453, '喀': 1454, '未': 1455, '川': 1456, '施': 1457, '期': 1458, '煩': 1459, '館': 1460, '殊': 1461, '由': 1462, '香': 1463, '拗': 1464, '腸': 1465, '思': 1466, '扱': 1467, '人': 1468, '雷': 1469, '買': 1470, '埋': 1471, '罰': 1472, 'へ': 1473, '硬': 1474, '診': 1475, '石': 1476, '添': 1477, '皿': 1478, '茸': 1479, '踏': 1480, 'づ': 1481, '暴': 1482, '住': 1483, '瞭': 1484, 'ヌ': 1485, '籠': 1486, '数': 1487, '世': 1488, '娠': 1489, '繰': 1490, '駐': 1491, '兄': 1492, '拝': 1493, '護': 1494, '公': 1495, '裏': 1496, '圧': 1497, 'っ': 1498, '腺': 1499, '欧': 1500, '履': 1501, '泡': 1502, '乱': 1503, '9': 1504, '具': 1505, '蛾': 1506, 'b': 1507, '界': 1508, '量': 1509, '猛': 1510, '残': 1511, '呻': 1512, '岸': 1513, '棚': 1514, '欺': 1515, '丈': 1516, '禁': 1517, '蛇': 1518, 'プ': 1519, '習': 1520, '円': 1521, '吐': 1522, '詩': 1523, '怒': 1524, '嫁': 1525, 'ブ': 1526, '湘': 1527, 'ピ': 1528, '徴': 1529, '匹': 1530, '囁': 1531, '跡': 1532, '寒': 1533, '斉': 1534, '並': 1535, '規': 1536, '魘': 1537, '噌': 1538, '痺': 1539, '削': 1540, '抑': 1541, '多': 1542, '鹿': 1543, 'よ': 1544, '鍛': 1545, '似': 1546, '浪': 1547, '1': 1548, '難': 1549, '塀': 1550, '絵': 1551, '冴': 1552, '怖': 1553, '斐': 1554, '嘘': 1555, '罵': 1556, '苦': 1557, '寺': 1558, 'k': 1559, '級': 1560, '醸': 1561, '慄': 1562, '軒': 1563, '継': 1564, '津': 1565, 'で': 1566, '喘': 1567, '餌': 1568, '痩': 1569, '液': 1570, '御': 1571, '蜘': 1572, '腫': 1573, '化': 1574, '濃': 1575, '進': 1576, '審': 1577, 'セ': 1578, '委': 1579, '臆': 1580, 'c': 1581, '康': 1582, '櫛': 1583, '介': 1584, '証': 1585, '組': 1586, '焦': 1587, '秀': 1588, '訳': 1589, '欄': 1590, '火': 1591, 'う': 1592, '誕': 1593, '党': 1594, '牧': 1595, '胡': 1596, 'ソ': 1597, '価': 1598, '偵': 1599, '滞': 1600, '拉': 1601, '物': 1602, '祟': 1603, '中': 1604, '貫': 1605, '漱': 1606, '枚': 1607, '剤': 1608, '膝': 1609, '荒': 1610, '他': 1611, '探': 1612, '尽': 1613, '正': 1614, '致': 1615, '冬': 1616, '徳': 1617, '寄': 1618, '動': 1619, '際': 1620, '縁': 1621, '麦': 1622, '祖': 1623, '双': 1624, '葉': 1625, '十': 1626, 'い': 1627, '?': 1628, '箱': 1629, '広': 1630, '逃': 1631, '鍮': 1632, '駄': 1633, '昧': 1634, '韓': 1635, 'も': 1636, '眺': 1637, 'カ': 1638, '七': 1639, '走': 1640, '波': 1641, '離': 1642, '煙': 1643, '想': 1644, '着': 1645, '茂': 1646, '刻': 1647, '掛': 1648, '稽': 1649, '陽': 1650, '訊': 1651, '象': 1652, '飼': 1653, '咳': 1654, '遵': 1655, '紙': 1656, '粉': 1657, '古': 1658, '片': 1659, '煌': 1660, '絶': 1661, '惚': 1662, '焼': 1663, 'r': 1664, '憎': 1665, '澹': 1666, '和': 1667, 's': 1668, '欠': 1669, '憩': 1670, '乾': 1671, '恥': 1672, '較': 1673, '泣': 1674, '紀': 1675, '腰': 1676, '弟': 1677, '磨': 1678, '醜': 1679, '捕': 1680, '妻': 1681, '翻': 1682, '意': 1683, '洒': 1684, '誠': 1685, '湖': 1686, ',': 1687, '才': 1688, '域': 1689, '呼': 1690, '泊': 1691, '様': 1692, '零': 1693, '出': 1694, '竹': 1695, 'ね': 1696, '復': 1697, 'ふ': 1698, '陥': 1699, '孤': 1700, '卵': 1701, '草': 1702, '衣': 1703, '弾': 1704, '題': 1705, '」': 1706, 'ョ': 1707, 't': 1708, '匂': 1709, '旦': 1710, '野': 1711, '終': 1712, '反': 1713, '不': 1714, '店': 1715, '届': 1716, '斬': 1717, '釘': 1718, '口': 1719, '遺': 1720, '魚': 1721, '冊': 1722, '伴': 1723, '雀': 1724, '繕': 1725, '鬱': 1726, '\\t': 1727, '丘': 1728, '千': 1729, '度': 1730, '式': 1731, '催': 1732, '劇': 1733, '椅': 1734, '切': 1735, '官': 1736, '涼': 1737, '建': 1738, '基': 1739, '汽': 1740, '返': 1741, '縛': 1742, '設': 1743, '鐘': 1744, 'ぬ': 1745, '再': 1746, '誌': 1747, '望': 1748, '栽': 1749, '牡': 1750, '犯': 1751, '霧': 1752, '強': 1753, '静': 1754, '適': 1755, '稀': 1756, '体': 1757, '停': 1758, 'u': 1759, '昨': 1760, '収': 1761, '撃': 1762, '星': 1763, '制': 1764, '両': 1765, 'ぎ': 1766, '整': 1767, '仕': 1768, 'メ': 1769, '向': 1770, '季': 1771, '更': 1772, '供': 1773, '歳': 1774, '借': 1775, '湿': 1776, '姓': 1777, '錨': 1778, 'ハ': 1779, '参': 1780, '忘': 1781, '輝': 1782, '光': 1783, '呵': 1784, '志': 1785, '究': 1786, '寸': 1787, '納': 1788, '財': 1789, '凍': 1790, '策': 1791, '々': 1792, '族': 1793, '塞': 1794, '旬': 1795, '鞭': 1796, '傘': 1797, '沸': 1798, '!': 1799, '交': 1800, '統': 1801, '賞': 1802, '著': 1803, '胸': 1804, '$': 1805, '虔': 1806, 'ダ': 1807, '妹': 1808, 'c': 1809, '夏': 1810, '骸': 1811, '偉': 1812, 'ホ': 1813, 'べ': 1814, '緑': 1815, '玩': 1816, ')': 1817, '良': 1818, '義': 1819, '老': 1820, '提': 1821, '服': 1822, '子': 1823, '開': 1824, '争': 1825, '綿': 1826, '術': 1827, '武': 1828, '夜': 1829, '去': 1830, '急': 1831, '麻': 1832, 'm': 1833, 'ケ': 1834, '山': 1835, 'n': 1836, '依': 1837, '安': 1838, ':': 1839, '帽': 1840, '甚': 1841, '油': 1842, '横': 1843, '奈': 1844, '総': 1845, '折': 1846, '答': 1847, '炊': 1848, '刊': 1849, 'ñ': 1850, 'b': 1851, '版': 1852, \"'\": 1853, '領': 1854, '試': 1855, '賊': 1856, '縄': 1857, '模': 1858, '予': 1859, '快': 1860, '頑': 1861, '涙': 1862, '脈': 1863, '?': 1864, '塁': 1865, '援': 1866, '濡': 1867, '島': 1868, '浮': 1869, '梨': 1870, '剰': 1871, '富': 1872, '屋': 1873, '五': 1874, '花': 1875, '侵': 1876, '興': 1877, '障': 1878, '響': 1879, '頼': 1880, '耐': 1881, '筆': 1882, '蹴': 1883, '首': 1884, '飾': 1885, '料': 1886, '角': 1887, '玉': 1888, '\\n': 1889, '昆': 1890, '齢': 1891, '階': 1892, 'ま': 1893, '獄': 1894, 'パ': 1895, '驚': 1896, 'け': 1897, '帰': 1898, '普': 1899, '例': 1900, '父': 1901, 'ぱ': 1902, 'ォ': 1903, '完': 1904, 'y': 1905, '廃': 1906, '負': 1907, '虜': 1908, 'ジ': 1909, '林': 1910, '販': 1911, 'す': 1912, '精': 1913, '銃': 1914, '瞳': 1915, '性': 1916, '電': 1917, '毎': 1918, 'ヒ': 1919, '従': 1920, '益': 1921, '髪': 1922, '預': 1923, '好': 1924, '幸': 1925, '永': 1926, '婆': 1927, 'ヨ': 1928, '名': 1929, '鯨': 1930, '局': 1931, '還': 1932, '移': 1933, 'ム': 1934, '近': 1935, '6': 1936, '抗': 1937, 'ボ': 1938, '水': 1939, '降': 1940, '~': 1941, '骨': 1942, '豆': 1943, '知': 1944, '鳴': 1945, '待': 1946, 'ぼ': 1947, '州': 1948, '棘': 1949, '忠': 1950, '左': 1951, '査': 1952, '愚': 1953, '注': 1954, 'ニ': 1955, '、': 1956, '岐': 1957, '認': 1958, '頁': 1959, '凶': 1960, 'ク': 1961, '恩': 1962, '敷': 1963, '付': 1964, '看': 1965, '糧': 1966, '岳': 1967, 'レ': 1968, '下': 1969, '3': 1970, '吸': 1971, '誉': 1972, '戒': 1973, 'k': 1974, '賢': 1975, '転': 1976, '肌': 1977, '雑': 1978, '鉄': 1979, '(': 1980, 'ァ': 1981, '頭': 1982, '標': 1983, '釣': 1984, '述': 1985, '育': 1986, '檎': 1987, '噂': 1988, '前': 1989, '鈴': 1990, '恋': 1991, '可': 1992, '経': 1993, '誰': 1994, '妙': 1995, '云': 1996, '却': 1997, '肝': 1998, 'ツ': 1999, '布': 2000, '城': 2001, '避': 2002, '馬': 2003, '郎': 2004, '過': 2005, '郵': 2006, '飲': 2007, '斎': 2008, '椎': 2009, '徐': 2010, '炎': 2011, '尊': 2012, '権': 2013, '飢': 2014, '底': 2015, '末': 2016, '隣': 2017, '本': 2018, '慰': 2019, '挙': 2020, '・': 2021, '行': 2022, '妖': 2023, 'ト': 2024, '憶': 2025, '怠': 2026, 'ア': 2027, '透': 2028, '南': 2029, '陣': 2030, '浅': 2031, 'ご': 2032, '狼': 2033, '巡': 2034, 'ぞ': 2035, '雲': 2036, '三': 2037, '占': 2038, '招': 2039, '複': 2040, '演': 2041, '鏡': 2042, '気': 2043, '慌': 2044, 'ぽ': 2045, '井': 2046, '願': 2047, ',': 2048, '撥': 2049, 'に': 2050, '漏': 2051, '坊': 2052, '頻': 2053, '材': 2054, '吹': 2055, 'ル': 2056, 'こ': 2057, '調': 2058, '置': 2059, '鮭': 2060, '船': 2061, '咲': 2062, '求': 2063, '僚': 2064, 'ち': 2065, 'イ': 2066, '酒': 2067, '増': 2068, '竄': 2069, '羹': 2070, '姉': 2071, '9': 2072, '贋': 2073, '丁': 2074, '機': 2075, '保': 2076, '居': 2077, '否': 2078, '裕': 2079}\n",
"{0: '択', 1: '暢', 2: '恐', 3: '霊', 4: '入', 5: '鬼', 6: '傲', 7: 'j', 8: '票', 9: '絆', 10: '宣', 11: '窃', 12: '王', 13: '村', 14: '競', 15: '羊', 16: '脱', 17: '絞', 18: 'r', 19: '弦', 20: '彫', 21: '諦', 22: '真', 23: '解', 24: 'ば', 25: '番', 26: '点', 27: '株', 28: '儀', 29: '血', 30: '為', 31: '柔', 32: '塔', 33: '諾', 34: '扇', 35: '承', 36: '農', 37: '干', 38: '祭', 39: '病', 40: '苗', 41: '省', 42: '像', 43: '俺', 44: '璧', 45: '八', 46: '異', 47: '没', 48: '球', 49: '惨', 50: '庭', 51: '災', 52: '拍', 53: '誦', 54: 'く', 55: '奴', 56: '己', 57: '壁', 58: 'ぶ', 59: '海', 60: '港', 61: '狐', 62: '賃', 63: '蝠', 64: '冠', 65: '陰', 66: '約', 67: '顕', 68: '板', 69: '落', 70: '尻', 71: '賄', 72: '達', 73: '力', 74: '方', 75: '受', 76: '太', 77: '相', 78: '麗', 79: '暇', 80: '文', 81: 'ワ', 82: '疑', 83: '余', 84: '秋', 85: '打', 86: '類', 87: '肢', 88: '吠', 89: '捧', 90: '封', 91: '了', 92: '崎', 93: '熊', 94: '役', 95: '随', 96: '雄', 97: 'む', 98: '息', 99: 'ゴ', 100: '冗', 101: '種', 102: '殴', 103: 'ガ', 104: '婦', 105: '紹', 106: 'f', 107: 'g', 108: '簡', 109: '迷', 110: '地', 111: '懸', 112: '徒', 113: '奏', 114: '幾', 115: '乗', 116: '遊', 117: 'た', 118: '帝', 119: '爺', 120: '針', 121: 'と', 122: '渋', 123: '縫', 124: '駆', 125: '倍', 126: '幽', 127: 'あ', 128: '猿', 129: '悲', 130: '獲', 131: '需', 132: '敬', 133: '掲', 134: '痛', 135: '藁', 136: '澄', 137: 'ビ', 138: '鋭', 139: '女', 140: '灯', 141: '飽', 142: '天', 143: '汗', 144: '挑', 145: '煮', 146: '執', 147: '箸', 148: '腱', 149: 'ほ', 150: '早', 151: '蔑', 152: '0', 153: '況', 154: '囲', 155: 'か', 156: '滴', 157: '憧', 158: '隷', 159: '兼', 160: '譲', 161: '瘍', 162: '乳', 163: '私', 164: '械', 165: '変', 166: 'フ', 167: '就', 168: '飯', 169: '混', 170: 'ゃ', 171: '固', 172: '肘', 173: 'ゼ', 174: '型', 175: 't', 176: '暗', 177: '薄', 178: 'i', 179: '命', 180: '唐', 181: '割', 182: '揺', 183: '網', 184: 'o', 185: '敏', 186: '略', 187: '稿', 188: '活', 189: '喧', 190: '管', 191: '若', 192: '詞', 193: '同', 194: '崇', 195: '映', 196: '都', 197: '紐', 198: 'チ', 199: '躊', 200: '努', 201: '右', 202: '龍', 203: '与', 204: '祉', 205: '死', 206: '脳', 207: 'ベ', 208: '校', 209: '利', 210: '隔', 211: '準', 212: '肩', 213: '闘', 214: '旨', 215: '句', 216: '溺', 217: '発', 218: '巨', 219: 'ユ', 220: '産', 221: '侮', 222: '持', 223: '豪', 224: '磁', 225: '符', 226: '壊', 227: '法', 228: 'i', 229: '惜', 230: '陶', 231: '指', 232: '癖', 233: '教', 234: '珠', 235: '塩', 236: '泳', 237: '皮', 238: '守', 239: '潔', 240: '叱', 241: '乏', 242: '腐', 243: '凋', 244: '筒', 245: '起', 246: 'a', 247: '来', 248: '昔', 249: '対', 250: '腕', 251: '平', 252: '勧', 253: '導', 254: 'j', 255: '緊', 256: '綱', 257: '九', 258: '環', 259: '洪', 260: '6', 261: '夕', 262: '狂', 263: '暫', 264: '痕', 265: '培', 266: '夫', 267: '亡', 268: '戴', 269: '逸', 270: '宅', 271: '束', 272: '立', 273: '存', 274: '現', 275: '抵', 276: '梅', 277: '費', 278: '蜃', 279: '警', 280: '超', 281: '使', 282: '描', 283: '朝', 284: '困', 285: 'ー', 286: '汚', 287: '剥', 288: '粧', 289: '革', 290: '。', 291: '区', 292: '治', 293: '砂', 294: '墜', 295: '深', 296: '₂', 297: '親', 298: '堅', 299: 'る', 300: '紛', 301: '駅', 302: 'ナ', 303: '歴', 304: '能', 305: '勤', 306: '露', 307: '頓', 308: 'v', 309: 'ぴ', 310: '忍', 311: '録', 312: '音', 313: '嫌', 314: '顔', 315: '雰', 316: '功', 317: '険', 318: '営', 319: '色', 320: '牲', 321: '聞', 322: '成', 323: '決', 324: '絡', 325: 'そ', 326: '陸', 327: '€', 328: '幼', 329: '愛', 330: '曖', 331: '爪', 332: '杖', 333: '緩', 334: '免', 335: '台', 336: '技', 337: '至', 338: '雨', 339: '構', 340: '損', 341: '癌', 342: '諜', 343: '儂', 344: '祝', 345: '崩', 346: '担', 347: '膏', 348: '個', 349: '既', 350: '捨', 351: '豊', 352: '鑑', 353: '間', 354: '憂', 355: '洋', 356: '叶', 357: '竜', 358: '団', 359: '肖', 360: '践', 361: 'ょ', 362: '医', 363: '拶', 364: '冷', 365: '授', 366: '丸', 367: '採', 368: 'び', 369: '土', 370: '載', 371: 'z', 372: '尚', 373: '僕', 374: '弘', 375: 'ネ', 376: '訪', 377: '峠', 378: '邪', 379: '挨', 380: '内', 381: 'わ', 382: '修', 383: '振', 384: '蝙', 385: '詫', 386: '蒲', 387: '税', 388: '乞', 389: '律', 390: '蛛', 391: '誓', 392: '笑', 393: '曜', 394: '柱', 395: '毛', 396: '氷', 397: '資', 398: '街', 399: '髄', 400: '逞', 401: '梳', 402: '足', 403: '宮', 404: '譜', 405: '洗', 406: '魔', 407: '攻', 408: '識', 409: '娯', 410: 'p', 411: '器', 412: '怪', 413: 'を', 414: '芸', 415: '誘', 416: '5', 417: '次', 418: '薔', 419: '虚', 420: '狩', 421: '捻', 422: '杯', 423: '募', 424: '防', 425: '君', 426: '鈍', 427: '呟', 428: '已', 429: '週', 430: '搾', 431: '周', 432: '大', 433: '忙', 434: '部', 435: '脅', 436: '浴', 437: '計', 438: '淋', 439: '率', 440: '卓', 441: '激', 442: '績', 443: 'タ', 444: '盆', 445: '釈', 446: 'お', 447: '勃', 448: '粗', 449: '因', 450: '金', 451: '博', 452: '面', 453: '距', 454: '福', 455: '母', 456: 'つ', 457: '杭', 458: '応', 459: '練', 460: 'ェ', 461: '要', 462: '企', 463: '宇', 464: '民', 465: 'h', 466: '任', 467: '唸', 468: '状', 469: '挫', 470: '1', 471: '狭', 472: '常', 473: '湧', 474: '接', 475: '貼', 476: '支', 477: '嫉', 478: '疎', 479: '枯', 480: '航', 481: 'ぺ', 482: '位', 483: '代', 484: '蓼', 485: '議', 486: '稲', 487: '勉', 488: '哺', 489: '椒', 490: '汁', 491: 'ポ', 492: '苛', 493: '蠣', 494: '仮', 495: '敗', 496: '秘', 497: '誇', 498: '帯', 499: '錯', 500: '靴', 501: '令', 502: '影', 503: '胆', 504: '課', 505: '見', 506: '唯', 507: '盲', 508: '声', 509: '職', 510: 'え', 511: '事', 512: '言', 513: '話', 514: '垣', 515: '酷', 516: '索', 517: '小', 518: '盗', 519: '品', 520: '舌', 521: '猫', 522: '優', 523: 'ラ', 524: '弱', 525: '案', 526: '撮', 527: '棒', 528: '瓦', 529: '無', 530: '浸', 531: '田', 532: '赤', 533: '便', 534: '栗', 535: '社', 536: '鼠', 537: '谷', 538: '得', 539: '覆', 540: '生', 541: '畑', 542: '威', 543: '家', 544: '以', 545: '微', 546: '包', 547: 'じ', 548: '日', 549: '工', 550: '検', 551: '盟', 552: '遠', 553: '鎖', 554: '儲', 555: '蚊', 556: '凝', 557: '妬', 558: '染', 559: '沿', 560: '済', 561: '槍', 562: '偽', 563: '億', 564: '煉', 565: '偶', 566: 'ぉ', 567: '7', 568: '虎', 569: '散', 570: 'り', 571: '故', 572: '味', 573: '信', 574: '兎', 575: '補', 576: '券', 577: '枝', 578: '貌', 579: '跪', 580: '示', 581: 'グ', 582: '続', 583: 'キ', 584: '棲', 585: 'w', 586: '填', 587: '室', 588: '者', 589: '互', 590: '列', 591: 'ぁ', 592: '把', 593: '3', 594: '窓', 595: '研', 596: '邸', 597: '霜', 598: '昼', 599: '座', 600: '戻', 601: '順', 602: '覧', 603: '沼', 604: '奇', 605: '阪', 606: 'e', 607: '献', 608: '健', 609: '遭', 610: '万', 611: '希', 612: '厄', 613: '集', 614: '牛', 615: '嘩', 616: '流', 617: '積', 618: '境', 619: '皆', 620: '紅', 621: '銘', 622: '実', 623: '蒼', 624: '奪', 625: '造', 626: 'd', 627: '玄', 628: '菜', 629: '刀', 630: '滑', 631: '伸', 632: '宝', 633: '庫', 634: '軍', 635: 'ド', 636: '諸', 637: '築', 638: '講', 639: '臓', 640: '寝', 641: '伏', 642: '戚', 643: '慕', 644: '員', 645: '刺', 646: '晩', 647: '賂', 648: '2', 649: '評', 650: '炭', 651: '箋', 652: '給', 653: '患', 654: '処', 655: '候', 656: '眼', 657: 'l', 658: '唇', 659: '男', 660: '騙', 661: '叔', 662: '典', 663: '棄', 664: '盤', 665: '孫', 666: '務', 667: '療', 668: '英', 669: '然', 670: '郷', 671: '剣', 672: '惰', 673: '疲', 674: '遅', 675: '掃', 676: '照', 677: '園', 678: '黙', 679: '態', 680: '作', 681: '甘', 682: '辞', 683: '鮮', 684: '神', 685: '簿', 686: '関', 687: '危', 688: '恵', 689: '歌', 690: '含', 691: '段', 692: '尋', 693: 'ュ', 694: '定', 695: '悶', 696: '症', 697: '衰', 698: '談', 699: '巻', 700: '熟', 701: '摂', 702: '如', 703: '訓', 704: '衆', 705: '申', 706: '我', 707: '雹', 708: '二', 709: '害', 710: '鍵', 711: '据', 712: '轢', 713: '房', 714: '踊', 715: '何', 716: '明', 717: '肺', 718: '蒸', 719: '素', 720: '原', 721: '俳', 722: '院', 723: '懲', 724: '貴', 725: '情', 726: '必', 727: '8', 728: 'ず', 729: '兵', 730: '遂', 731: '各', 732: '士', 733: '敵', 734: '及', 735: '珍', 736: '温', 737: '稼', 738: '掻', 739: 'd', 740: '趣', 741: '程', 742: '詰', 743: '燃', 744: '投', 745: '歪', 746: '馴', 747: '燭', 748: '章', 749: '追', 750: '撤', 751: '剃', 752: '旅', 753: '印', 754: '瀬', 755: '特', 756: '痣', 757: '餅', 758: '車', 759: '悪', 760: '卒', 761: '.', 762: '質', 763: '刑', 764: '潰', 765: '跳', 766: 'h', 767: '景', 768: '逐', 769: '換', 770: '床', 771: '視', 772: '押', 773: '洞', 774: '箇', 775: '道', 776: '呂', 777: '縦', 778: '単', 779: '里', 780: '沢', 781: '到', 782: '引', 783: '芽', 784: '徹', 785: '摘', 786: '震', 787: '密', 788: '心', 789: '締', 790: '帳', 791: '喫', 792: '覚', 793: '請', 794: '越', 795: '5', 796: '幅', 797: '股', 798: '只', 799: '翼', 800: '矯', 801: '節', 802: '頃', 803: '月', 804: '欲', 805: '婚', 806: '喉', 807: '一', 808: '配', 809: '主', 810: '唱', 811: '席', 812: '札', 813: '秒', 814: '躍', 815: '逮', 816: '選', 817: '算', 818: 'ゲ', 819: '旋', 820: '姿', 821: '訝', 822: 'バ', 823: '鎮', 824: '爬', 825: 'ろ', 826: '半', 827: '今', 828: 'シ', 829: 'ん', 830: '容', 831: '批', 832: '繊', 833: '酎', 834: '堤', 835: '曇', 836: '別', 837: '笛', 838: '遮', 839: '側', 840: '鞘', 841: '贅', 842: 'f', 843: '迎', 844: '確', 845: '!', 846: '薪', 847: '胃', 848: '缶', 849: '那', 850: '凧', 851: '詐', 852: '呆', 853: '替', 854: '加', 855: '伝', 856: '触', 857: '栄', 858: 'げ', 859: '考', 860: '西', 861: '送', 862: '頂', 863: '揮', 864: '払', 865: '茹', 866: '埠', 867: 'せ', 868: '債', 869: '舎', 870: '甲', 871: '囀', 872: '捜', 873: '騒', 874: '溝', 875: 'が', 876: '絹', 877: '篤', 878: '壌', 879: '奥', 880: '渉', 881: '救', 882: 'ら', 883: '机', 884: '察', 885: '酔', 886: '均', 887: '児', 888: '穏', 889: '臭', 890: '飛', 891: '華', 892: '春', 893: '連', 894: '辺', 895: '刈', 896: '拷', 897: '窟', 898: '友', 899: '浜', 900: '久', 901: '寛', 902: '蛙', 903: '満', 904: '賛', 905: '高', 906: '銭', 907: '晴', 908: '的', 909: '閉', 910: '狙', 911: 'x', 912: '傷', 913: '爆', 914: '弁', 915: '携', 916: '抜', 917: '0', 918: '握', 919: '糖', 920: '後', 921: '突', 922: '裸', 923: '鳥', 924: '六', 925: '堂', 926: '杳', 927: '脚', 928: '手', 929: '寡', 930: '枕', 931: '貨', 932: '判', 933: '曲', 934: 'ン', 935: '蜜', 936: '痴', 937: '果', 938: '併', 939: '推', 940: '覗', 941: '旧', 942: '拭', 943: '輪', 944: '減', 945: '貸', 946: '形', 947: '辛', 948: '長', 949: '非', 950: '〆', 951: 's', 952: '表', 953: ' ', 954: '比', 955: 'だ', 956: '%', 957: '4', 958: '断', 959: '「', 960: '瓶', 961: '姪', 962: '東', 963: '書', 964: '報', 965: '慮', 966: '拾', 967: '撲', 968: '昭', 969: '虫', 970: '鯉', 971: '助', 972: '額', 973: '穴', 974: '晰', 975: '伺', 976: '森', 977: '滅', 978: '聴', 979: '第', 980: '北', 981: '訟', 982: '勝', 983: 'ゅ', 984: 'ッ', 985: '勇', 986: '蓄', 987: '充', 988: '慎', 989: '坂', 990: '頷', 991: '藤', 992: 'ザ', 993: 'オ', 994: 'e', 995: '語', 996: '罠', 997: '醤', 998: '留', 999: '恨', 1000: '’', 1001: '2', 1002: '展', 1003: '理', 1004: '号', 1005: '時', 1006: '京', 1007: '値', 1008: '泥', 1009: '直', 1010: '董', 1011: '—', 1012: '冒', 1013: '善', 1014: '討', 1015: '褒', 1016: '学', 1017: '係', 1018: 'ひ', 1019: '冥', 1020: '場', 1021: '項', 1022: '菊', 1023: 'ミ', 1024: '彙', 1025: '薦', 1026: '栓', 1027: 'm', 1028: '群', 1029: '畳', 1030: '偏', 1031: '仏', 1032: '最', 1033: '襟', 1034: '酸', 1035: '雛', 1036: '路', 1037: '則', 1038: '肥', 1039: '退', 1040: 'ギ', 1041: 'て', 1042: 'さ', 1043: '合', 1044: '夢', 1045: '辱', 1046: 'é', 1047: '清', 1048: '喜', 1049: '製', 1050: '図', 1051: 'u', 1052: '勢', 1053: '年', 1054: '揚', 1055: '鱠', 1056: '掘', 1057: '巣', 1058: '寮', 1059: '登', 1060: '怯', 1061: '暑', 1062: '硫', 1063: '℃', 1064: '蕉', 1065: '賭', 1066: 'q', 1067: '有', 1068: '眠', 1069: 'ど', 1070: '焚', 1071: '独', 1072: '重', 1073: '髭', 1074: '豚', 1075: '礼', 1076: '元', 1077: '幕', 1078: '扉', 1079: '端', 1080: '往', 1081: '橋', 1082: '銀', 1083: '崖', 1084: '協', 1085: '唖', 1086: '鼻', 1087: '-', 1088: '亀', 1089: '消', 1090: '湾', 1091: '破', 1092: '装', 1093: '論', 1094: '肉', 1095: '挟', 1096: '仔', 1097: '茶', 1098: '読', 1099: '軽', 1100: 'ィ', 1101: '青', 1102: '問', 1103: '悔', 1104: 'ペ', 1105: '験', 1106: '溶', 1107: '漫', 1108: '茎', 1109: 'や', 1110: '訴', 1111: '渇', 1112: '灰', 1113: '抱', 1114: '訛', 1115: '黄', 1116: '悩', 1117: '蝶', 1118: 'き', 1119: '漸', 1120: '潜', 1121: '遣', 1122: '懇', 1123: '運', 1124: '朗', 1125: '門', 1126: '7', 1127: '゜', 1128: '回', 1129: '淡', 1130: '迫', 1131: '四', 1132: 'ヤ', 1133: '桃', 1134: '漢', 1135: '慣', 1136: '窮', 1137: '少', 1138: '低', 1139: '司', 1140: '熱', 1141: '扁', 1142: '綴', 1143: 'サ', 1144: '燥', 1145: '洩', 1146: '隠', 1147: '労', 1148: '耳', 1149: '歓', 1150: '写', 1151: '差', 1152: 'ぷ', 1153: '宿', 1154: '戸', 1155: 'ズ', 1156: '墓', 1157: '殺', 1158: '説', 1159: '湯', 1160: '池', 1161: 'a', 1162: 'ぜ', 1163: '木', 1164: '般', 1165: '鞄', 1166: '歯', 1167: '業', 1168: '筋', 1169: '諺', 1170: '署', 1171: '昇', 1172: '袖', 1173: '休', 1174: '拒', 1175: '紳', 1176: '先', 1177: '根', 1178: '師', 1179: '科', 1180: '売', 1181: '史', 1182: '念', 1183: 'コ', 1184: '養', 1185: '編', 1186: '厚', 1187: '薇', 1188: '舞', 1189: '召', 1190: '汝', 1191: '隅', 1192: '又', 1193: '囚', 1194: '袋', 1195: '射', 1196: '歩', 1197: '楼', 1198: '瀕', 1199: '芝', 1200: '嵐', 1201: '町', 1202: 'ゾ', 1203: '等', 1204: '躾', 1205: '細', 1206: 'ス', 1207: '逆', 1208: 'p', 1209: '\"', 1210: '卯', 1211: '将', 1212: '記', 1213: '豹', 1214: 'ぐ', 1215: '睡', 1216: '妄', 1217: '通', 1218: '所', 1219: '宛', 1220: '雪', 1221: '黒', 1222: '控', 1223: '8', 1224: '贈', 1225: '外', 1226: 'み', 1227: '寿', 1228: '几', 1229: '蝋', 1230: '遥', 1231: '易', 1232: '綺', 1233: '改', 1234: 'ヘ', 1235: '盛', 1236: '当', 1237: '迅', 1238: '除', 1239: '搭', 1240: '叫', 1241: '惑', 1242: '暮', 1243: '聖', 1244: '鹸', 1245: '瞬', 1246: '拠', 1247: '翌', 1248: '凄', 1249: '梯', 1250: '備', 1251: '戯', 1252: '途', 1253: '蔵', 1254: '美', 1255: '新', 1256: '涯', 1257: '芭', 1258: '犬', 1259: '創', 1260: '範', 1261: 'o', 1262: '食', 1263: '共', 1264: '泉', 1265: '繁', 1266: '空', 1267: '上', 1268: '分', 1269: 'リ', 1270: '隊', 1271: '幻', 1272: '岩', 1273: '止', 1274: '米', 1275: '繋', 1276: '百', 1277: '薬', 1278: '目', 1279: '爽', 1280: '線', 1281: '敢', 1282: '件', 1283: '\\u3000', 1284: '用', 1285: '条', 1286: '羨', 1287: '楽', 1288: 'ロ', 1289: '延', 1290: 'ざ', 1291: '働', 1292: '厳', 1293: '衝', 1294: '政', 1295: '輸', 1296: '自', 1297: '沖', 1298: '風', 1299: '濯', 1300: '叩', 1301: '暖', 1302: '緒', 1303: '測', 1304: '許', 1305: '購', 1306: '闇', 1307: '尾', 1308: '初', 1309: '4', 1310: '勘', 1311: '嬉', 1312: 'の', 1313: '循', 1314: '鶏', 1315: '極', 1316: '慢', 1317: '全', 1318: '操', 1319: '伯', 1320: '称', 1321: '仰', 1322: '堪', 1323: '謝', 1324: '派', 1325: 'ャ', 1326: '午', 1327: 'デ', 1328: '身', 1329: 'エ', 1330: '擦', 1331: '漕', 1332: '監', 1333: '傾', 1334: '陳', 1335: '貯', 1336: '嗅', 1337: '速', 1338: 'ゥ', 1339: '荷', 1340: '猟', 1341: '羽', 1342: '噛', 1343: '国', 1344: '砕', 1345: '貰', 1346: '犠', 1347: '凡', 1348: '頬', 1349: '短', 1350: '惹', 1351: '塗', 1352: '結', 1353: '毒', 1354: '飴', 1355: '客', 1356: '仲', 1357: '祈', 1358: '妊', 1359: '放', 1360: '字', 1361: '戦', 1362: '殿', 1363: '鴎', 1364: '蜂', 1365: '効', 1366: '吉', 1367: 'は', 1368: '彼', 1369: 'め', 1370: '眉', 1371: '脇', 1372: '源', 1373: '感', 1374: '躇', 1375: '刷', 1376: '商', 1377: '専', 1378: '属', 1379: '詳', 1380: '貧', 1381: 'ウ', 1382: '渡', 1383: '画', 1384: '旗', 1385: 'テ', 1386: 'ヶ', 1387: '嘆', 1388: '狸', 1389: '張', 1390: 'ゆ', 1391: '純', 1392: 'な', 1393: '砲', 1394: '寂', 1395: '槌', 1396: '奮', 1397: '松', 1398: 'モ', 1399: '副', 1400: '始', 1401: '観', 1402: '沈', 1403: '兆', 1404: '鉛', 1405: 'ノ', 1406: '慈', 1407: '悟', 1408: 'ぇ', 1409: 'れ', 1410: '屈', 1411: '市', 1412: '格', 1413: '矢', 1414: '懐', 1415: 'し', 1416: '郊', 1417: '襲', 1418: '込', 1419: '誤', 1420: '在', 1421: '白', 1422: '背', 1423: '融', 1424: '舟', 1425: '倒', 1426: '会', 1427: '被', 1428: '喋', 1429: '莫', 1430: '違', 1431: '須', 1432: '巧', 1433: '雇', 1434: '腹', 1435: '氏', 1436: '裁', 1437: '失', 1438: '取', 1439: '虐', 1440: '娘', 1441: '告', 1442: '葬', 1443: '責', 1444: 'マ', 1445: '宙', 1446: '騰', 1447: '訂', 1448: '限', 1449: '罪', 1450: '疾', 1451: '植', 1452: '旺', 1453: '魅', 1454: '喀', 1455: '未', 1456: '川', 1457: '施', 1458: '期', 1459: '煩', 1460: '館', 1461: '殊', 1462: '由', 1463: '香', 1464: '拗', 1465: '腸', 1466: '思', 1467: '扱', 1468: '人', 1469: '雷', 1470: '買', 1471: '埋', 1472: '罰', 1473: 'へ', 1474: '硬', 1475: '診', 1476: '石', 1477: '添', 1478: '皿', 1479: '茸', 1480: '踏', 1481: 'づ', 1482: '暴', 1483: '住', 1484: '瞭', 1485: 'ヌ', 1486: '籠', 1487: '数', 1488: '世', 1489: '娠', 1490: '繰', 1491: '駐', 1492: '兄', 1493: '拝', 1494: '護', 1495: '公', 1496: '裏', 1497: '圧', 1498: 'っ', 1499: '腺', 1500: '欧', 1501: '履', 1502: '泡', 1503: '乱', 1504: '9', 1505: '具', 1506: '蛾', 1507: 'b', 1508: '界', 1509: '量', 1510: '猛', 1511: '残', 1512: '呻', 1513: '岸', 1514: '棚', 1515: '欺', 1516: '丈', 1517: '禁', 1518: '蛇', 1519: 'プ', 1520: '習', 1521: '円', 1522: '吐', 1523: '詩', 1524: '怒', 1525: '嫁', 1526: 'ブ', 1527: '湘', 1528: 'ピ', 1529: '徴', 1530: '匹', 1531: '囁', 1532: '跡', 1533: '寒', 1534: '斉', 1535: '並', 1536: '規', 1537: '魘', 1538: '噌', 1539: '痺', 1540: '削', 1541: '抑', 1542: '多', 1543: '鹿', 1544: 'よ', 1545: '鍛', 1546: '似', 1547: '浪', 1548: '1', 1549: '難', 1550: '塀', 1551: '絵', 1552: '冴', 1553: '怖', 1554: '斐', 1555: '嘘', 1556: '罵', 1557: '苦', 1558: '寺', 1559: 'k', 1560: '級', 1561: '醸', 1562: '慄', 1563: '軒', 1564: '継', 1565: '津', 1566: 'で', 1567: '喘', 1568: '餌', 1569: '痩', 1570: '液', 1571: '御', 1572: '蜘', 1573: '腫', 1574: '化', 1575: '濃', 1576: '進', 1577: '審', 1578: 'セ', 1579: '委', 1580: '臆', 1581: 'c', 1582: '康', 1583: '櫛', 1584: '介', 1585: '証', 1586: '組', 1587: '焦', 1588: '秀', 1589: '訳', 1590: '欄', 1591: '火', 1592: 'う', 1593: '誕', 1594: '党', 1595: '牧', 1596: '胡', 1597: 'ソ', 1598: '価', 1599: '偵', 1600: '滞', 1601: '拉', 1602: '物', 1603: '祟', 1604: '中', 1605: '貫', 1606: '漱', 1607: '枚', 1608: '剤', 1609: '膝', 1610: '荒', 1611: '他', 1612: '探', 1613: '尽', 1614: '正', 1615: '致', 1616: '冬', 1617: '徳', 1618: '寄', 1619: '動', 1620: '際', 1621: '縁', 1622: '麦', 1623: '祖', 1624: '双', 1625: '葉', 1626: '十', 1627: 'い', 1628: '?', 1629: '箱', 1630: '広', 1631: '逃', 1632: '鍮', 1633: '駄', 1634: '昧', 1635: '韓', 1636: 'も', 1637: '眺', 1638: 'カ', 1639: '七', 1640: '走', 1641: '波', 1642: '離', 1643: '煙', 1644: '想', 1645: '着', 1646: '茂', 1647: '刻', 1648: '掛', 1649: '稽', 1650: '陽', 1651: '訊', 1652: '象', 1653: '飼', 1654: '咳', 1655: '遵', 1656: '紙', 1657: '粉', 1658: '古', 1659: '片', 1660: '煌', 1661: '絶', 1662: '惚', 1663: '焼', 1664: 'r', 1665: '憎', 1666: '澹', 1667: '和', 1668: 's', 1669: '欠', 1670: '憩', 1671: '乾', 1672: '恥', 1673: '較', 1674: '泣', 1675: '紀', 1676: '腰', 1677: '弟', 1678: '磨', 1679: '醜', 1680: '捕', 1681: '妻', 1682: '翻', 1683: '意', 1684: '洒', 1685: '誠', 1686: '湖', 1687: ',', 1688: '才', 1689: '域', 1690: '呼', 1691: '泊', 1692: '様', 1693: '零', 1694: '出', 1695: '竹', 1696: 'ね', 1697: '復', 1698: 'ふ', 1699: '陥', 1700: '孤', 1701: '卵', 1702: '草', 1703: '衣', 1704: '弾', 1705: '題', 1706: '」', 1707: 'ョ', 1708: 't', 1709: '匂', 1710: '旦', 1711: '野', 1712: '終', 1713: '反', 1714: '不', 1715: '店', 1716: '届', 1717: '斬', 1718: '釘', 1719: '口', 1720: '遺', 1721: '魚', 1722: '冊', 1723: '伴', 1724: '雀', 1725: '繕', 1726: '鬱', 1727: '\\t', 1728: '丘', 1729: '千', 1730: '度', 1731: '式', 1732: '催', 1733: '劇', 1734: '椅', 1735: '切', 1736: '官', 1737: '涼', 1738: '建', 1739: '基', 1740: '汽', 1741: '返', 1742: '縛', 1743: '設', 1744: '鐘', 1745: 'ぬ', 1746: '再', 1747: '誌', 1748: '望', 1749: '栽', 1750: '牡', 1751: '犯', 1752: '霧', 1753: '強', 1754: '静', 1755: '適', 1756: '稀', 1757: '体', 1758: '停', 1759: 'u', 1760: '昨', 1761: '収', 1762: '撃', 1763: '星', 1764: '制', 1765: '両', 1766: 'ぎ', 1767: '整', 1768: '仕', 1769: 'メ', 1770: '向', 1771: '季', 1772: '更', 1773: '供', 1774: '歳', 1775: '借', 1776: '湿', 1777: '姓', 1778: '錨', 1779: 'ハ', 1780: '参', 1781: '忘', 1782: '輝', 1783: '光', 1784: '呵', 1785: '志', 1786: '究', 1787: '寸', 1788: '納', 1789: '財', 1790: '凍', 1791: '策', 1792: '々', 1793: '族', 1794: '塞', 1795: '旬', 1796: '鞭', 1797: '傘', 1798: '沸', 1799: '!', 1800: '交', 1801: '統', 1802: '賞', 1803: '著', 1804: '胸', 1805: '$', 1806: '虔', 1807: 'ダ', 1808: '妹', 1809: 'c', 1810: '夏', 1811: '骸', 1812: '偉', 1813: 'ホ', 1814: 'べ', 1815: '緑', 1816: '玩', 1817: ')', 1818: '良', 1819: '義', 1820: '老', 1821: '提', 1822: '服', 1823: '子', 1824: '開', 1825: '争', 1826: '綿', 1827: '術', 1828: '武', 1829: '夜', 1830: '去', 1831: '急', 1832: '麻', 1833: 'm', 1834: 'ケ', 1835: '山', 1836: 'n', 1837: '依', 1838: '安', 1839: ':', 1840: '帽', 1841: '甚', 1842: '油', 1843: '横', 1844: '奈', 1845: '総', 1846: '折', 1847: '答', 1848: '炊', 1849: '刊', 1850: 'ñ', 1851: 'b', 1852: '版', 1853: \"'\", 1854: '領', 1855: '試', 1856: '賊', 1857: '縄', 1858: '模', 1859: '予', 1860: '快', 1861: '頑', 1862: '涙', 1863: '脈', 1864: '?', 1865: '塁', 1866: '援', 1867: '濡', 1868: '島', 1869: '浮', 1870: '梨', 1871: '剰', 1872: '富', 1873: '屋', 1874: '五', 1875: '花', 1876: '侵', 1877: '興', 1878: '障', 1879: '響', 1880: '頼', 1881: '耐', 1882: '筆', 1883: '蹴', 1884: '首', 1885: '飾', 1886: '料', 1887: '角', 1888: '玉', 1889: '\\n', 1890: '昆', 1891: '齢', 1892: '階', 1893: 'ま', 1894: '獄', 1895: 'パ', 1896: '驚', 1897: 'け', 1898: '帰', 1899: '普', 1900: '例', 1901: '父', 1902: 'ぱ', 1903: 'ォ', 1904: '完', 1905: 'y', 1906: '廃', 1907: '負', 1908: '虜', 1909: 'ジ', 1910: '林', 1911: '販', 1912: 'す', 1913: '精', 1914: '銃', 1915: '瞳', 1916: '性', 1917: '電', 1918: '毎', 1919: 'ヒ', 1920: '従', 1921: '益', 1922: '髪', 1923: '預', 1924: '好', 1925: '幸', 1926: '永', 1927: '婆', 1928: 'ヨ', 1929: '名', 1930: '鯨', 1931: '局', 1932: '還', 1933: '移', 1934: 'ム', 1935: '近', 1936: '6', 1937: '抗', 1938: 'ボ', 1939: '水', 1940: '降', 1941: '~', 1942: '骨', 1943: '豆', 1944: '知', 1945: '鳴', 1946: '待', 1947: 'ぼ', 1948: '州', 1949: '棘', 1950: '忠', 1951: '左', 1952: '査', 1953: '愚', 1954: '注', 1955: 'ニ', 1956: '、', 1957: '岐', 1958: '認', 1959: '頁', 1960: '凶', 1961: 'ク', 1962: '恩', 1963: '敷', 1964: '付', 1965: '看', 1966: '糧', 1967: '岳', 1968: 'レ', 1969: '下', 1970: '3', 1971: '吸', 1972: '誉', 1973: '戒', 1974: 'k', 1975: '賢', 1976: '転', 1977: '肌', 1978: '雑', 1979: '鉄', 1980: '(', 1981: 'ァ', 1982: '頭', 1983: '標', 1984: '釣', 1985: '述', 1986: '育', 1987: '檎', 1988: '噂', 1989: '前', 1990: '鈴', 1991: '恋', 1992: '可', 1993: '経', 1994: '誰', 1995: '妙', 1996: '云', 1997: '却', 1998: '肝', 1999: 'ツ', 2000: '布', 2001: '城', 2002: '避', 2003: '馬', 2004: '郎', 2005: '過', 2006: '郵', 2007: '飲', 2008: '斎', 2009: '椎', 2010: '徐', 2011: '炎', 2012: '尊', 2013: '権', 2014: '飢', 2015: '底', 2016: '末', 2017: '隣', 2018: '本', 2019: '慰', 2020: '挙', 2021: '・', 2022: '行', 2023: '妖', 2024: 'ト', 2025: '憶', 2026: '怠', 2027: 'ア', 2028: '透', 2029: '南', 2030: '陣', 2031: '浅', 2032: 'ご', 2033: '狼', 2034: '巡', 2035: 'ぞ', 2036: '雲', 2037: '三', 2038: '占', 2039: '招', 2040: '複', 2041: '演', 2042: '鏡', 2043: '気', 2044: '慌', 2045: 'ぽ', 2046: '井', 2047: '願', 2048: ',', 2049: '撥', 2050: 'に', 2051: '漏', 2052: '坊', 2053: '頻', 2054: '材', 2055: '吹', 2056: 'ル', 2057: 'こ', 2058: '調', 2059: '置', 2060: '鮭', 2061: '船', 2062: '咲', 2063: '求', 2064: '僚', 2065: 'ち', 2066: 'イ', 2067: '酒', 2068: '増', 2069: '竄', 2070: '羹', 2071: '姉', 2072: '9', 2073: '贋', 2074: '丁', 2075: '機', 2076: '保', 2077: '居', 2078: '否', 2079: '裕'}\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "yq19JnH20C8R",
"colab_type": "code",
"outputId": "5855c3c3-ca11-4609-8f2a-66577942a3c2",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"x_encoder.shape, x_decoder.shape, t_decoder.shape"
],
"execution_count": 13,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"((29999, 36, 2080), (29999, 40, 2080), (29999, 40, 2080))"
]
},
"metadata": {
"tags": []
},
"execution_count": 13
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "4L7CARqQT5QG",
"colab_type": "code",
"colab": {}
},
"source": [
"batch_size = 32\n",
"#epochs = 1000\n",
"epochs = 10 #本来は1000くらいにしたいが、colab環境(GPUあり)で1epochs動かすだけでも2分くらいかかる。 よって、epochsを10とした。訓練は不十分である。\n",
"n_mid = 256 # 中間層のニューロン数"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "68gr9xNWJa2D",
"colab_type": "code",
"outputId": "66dfbdf9-9443-48b4-c291-31af371a091d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 996
}
},
"source": [
"#モデルの構築\n",
"from tensorflow.keras.models import Model\n",
"from tensorflow.keras.layers import Dense, GRU, Input, Masking\n",
"\n",
"\n",
"encoder_input = Input(shape=(None,n_char),name=\"encoder_input\")\n",
"encoder_mask = Masking(mask_value=0,name=\"encoder_mask\")\n",
"encoder_masked = encoder_mask(encoder_input)\n",
"encoder_lstm = GRU(n_mid, dropout=0.2, recurrent_dropout=0.2, return_state=True,name=\"encoder_gru\") # 過学習を抑えるためdropoutを設定し、ニューロンをランダムに無効にする\n",
"encoder_output, encoder_state_h = encoder_lstm(encoder_masked)\n",
"\n",
"#デコーダの作成\n",
"decoder_input = Input(shape=(None,n_char),name=\"decoder_input\")\n",
"decoder_mask = Masking(mask_value = 0,name=\"decoder_mask\")\n",
"decoder_masked = decoder_mask(decoder_input)\n",
"decoder_lstm = GRU(n_mid, dropout=0.2, recurrent_dropout=0.2, return_sequences=True, return_state=True,name=\"decoder_gru\") # dropoutを設定\n",
"\n",
"decoder_output, _ = decoder_lstm(decoder_masked, initial_state=encoder_state_h) # encoderの状態を初期状態にする\n",
"decoder_dense = Dense(n_char, activation='softmax',name=\"decoder_dense\")\n",
"decoder_output = decoder_dense(decoder_output)\n",
"\n",
"#モデル生成\n",
"model = Model([encoder_input, decoder_input], decoder_output)\n",
"model.compile(loss=\"categorical_crossentropy\", optimizer=\"rmsprop\", metrics=['accuracy'])\n",
"print(model.summary())\n",
"\n",
"#作成したモデルを可視化する\n",
"tf.keras.utils.plot_model(model, to_file='model.png')"
],
"execution_count": 15,
"outputs": [
{
"output_type": "stream",
"text": [
"WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/resource_variable_ops.py:1630: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"If using Keras pass *_constraint arguments to layers.\n",
"WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/backend.py:3994: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use tf.where in 2.0, which has the same broadcast rule as np.where\n",
"Model: \"model\"\n",
"__________________________________________________________________________________________________\n",
"Layer (type) Output Shape Param # Connected to \n",
"==================================================================================================\n",
"encoder_input (InputLayer) [(None, None, 2080)] 0 \n",
"__________________________________________________________________________________________________\n",
"decoder_input (InputLayer) [(None, None, 2080)] 0 \n",
"__________________________________________________________________________________________________\n",
"encoder_mask (Masking) (None, None, 2080) 0 encoder_input[0][0] \n",
"__________________________________________________________________________________________________\n",
"decoder_mask (Masking) (None, None, 2080) 0 decoder_input[0][0] \n",
"__________________________________________________________________________________________________\n",
"encoder_gru (GRU) [(None, 256), (None, 1794816 encoder_mask[0][0] \n",
"__________________________________________________________________________________________________\n",
"decoder_gru (GRU) [(None, None, 256), 1794816 decoder_mask[0][0] \n",
" encoder_gru[0][1] \n",
"__________________________________________________________________________________________________\n",
"decoder_dense (Dense) (None, None, 2080) 534560 decoder_gru[0][0] \n",
"==================================================================================================\n",
"Total params: 4,124,192\n",
"Trainable params: 4,124,192\n",
"Non-trainable params: 0\n",
"__________________________________________________________________________________________________\n",
"None\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"image/png": "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\nlmo0midPnjx79qzptcRicWRk5OnTp8PCwp4+fVpXV1dWVnbz5k2JRLJo0aK9e/fu2LGjtLT0xo0b\nc+fO7dKlS0hICCHEyspq8uTJycnJW7duLS0tTU9P170FsnVJGjV//nwHB4fy8vJmLt+9e/fCwsKU\nlBS1Wp2fn//w4UPduYcOHWriJqcBAwYkJCRcuXLFx8fn8OHDz549q62tffjwYUJCQmFhYdP7pSjq\n+++/pygqLCysqKhIO3358uVmZmZTpkz59ddfKyoqqqurr1+/HhgYWFtbO3PmzGY+KXa17lhzfFw1\nn4ODAyHk2LFjVVVVd+7cYa6VE0JycnJCQ0MzMzNramquXr368OHDhjdoTpgwISgoKCYm5sqVK8yU\npkdgPVOnTrW0tJw0aZKzs7MBsrVIS1+Y+veabzLqHWnG7VDV1dUREREODg4CgYAZ6xkZGfHx8TKZ\njBDSo0eP7OzszZs3KxQKQki3bt1u377NrLh+/fo+ffpIJBKJRNKvX7/4+Hiapuvq6uLi4nr06CEU\nCs3NzSdNmpSVlaXdV1lZWXBwcKdOnUxMTLy9vaOjowkhdnZ2169ff1mSVatWSaVSQoi9vX1CQkJz\nnvWJEyc6deqkPShCodDDw2PPnj00TTe6tYKCguHDhzMfjvHxxx8zd9F279790aNHNE0fPHjQ1NR0\n+fLlTezx/v37CxYs6NWrl1wuZ7YzbNiwzz///PTp08wC586dc3V1ZfLY2tqGhoZq1w0KCiKEmJmZ\nxcbG6m7www8/dHJyEolEUqm0Z8+e0dHR5eXlzXn6DNZvs2vFsWZW5Oa4Wrt2LfOKcHR0PHPmzMqV\nK5VKJSHE2tr6l19+2bVrl7W1NSHE3Nx8586dNE1HRERYWFgw/9Eytwm7uLicOXPGy8vL3Nycz+fb\n2tpGRUXV1tbu2bOHOZF0dHTMy8srLS1lLmSZmJj8/PPPdJMjcO/evcytQZaWlvPnz2cmfvbZZ+fP\nn2f+vWTJEuYefx6P17NnzzNnzugx27p165iNy2SyCRMmvLI0mnhhvlIHvc2uXYqPj9e9G7S6unrh\nwoVisZi5/aiDYL2gAep5nRemXsZz/T/2BcPLzc0NCwvTveYoEokcHBzUarVarWZOmgDAwLjwwjS+\na9BGJzMzk3q5gIAAqVQqFAq3bt36/PlztVqdk5OzZcuW6OjogIAA5hcugIZeOa7YDmj0uPDCxBl0\n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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {
"tags": []
},
"execution_count": 15
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "1Z0rqREjVz3w",
"colab_type": "code",
"outputId": "5ba74658-ffd6-4698-84c1-f293b8dcece1",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"source": [
"from tensorflow.keras.callbacks import EarlyStopping ,ModelCheckpoint\n",
"\n",
"\n",
"# val_lossに改善が見られなくなってから、30エポックで学習は終了\n",
"early_stopping = EarlyStopping(monitor=\"val_loss\", patience=30) \n",
"\n",
"# チェックポイントコールバックを作る\n",
"checkpoint_path = \"./drive/My Drive/ColabData/training_1/cp.ckpt\"\n",
"checkpoint_dir = os.path.dirname(checkpoint_path)\n",
"\n",
"\n",
"#訓練用とテスト用で分ける\n",
"x_encoder_train = x_encoder[0:25000]\n",
"x_decoder_train = x_decoder[0:25000]\n",
"t_decoder_train = t_decoder[0:25000]\n",
"\n",
"x_encoder_test = x_encoder[25001:]\n",
"x_decoder_test = x_decoder[25001:]\n",
"t_decoder_test = t_decoder[25001:]\n",
"\n",
"\n",
"#すでに作成済みのモデルが有るかチェックする\n",
"if(os.path.exists(checkpoint_dir) == True):\n",
" print(\"モデル読み込みを試みる:\" + checkpoint_path)\n",
" try:\n",
" model.load_weights(checkpoint_path)\n",
" model.summary();\n",
" loss, acc = model.evaluate([x_encoder_test, x_decoder_test], t_decoder_test, verbose=1)\n",
" print(\"重みの読み込み完了\")\n",
" print(loss, acc)\n",
" except Exception as e:\n",
" print(e)\n",
" \n",
"\n",
"cp_callback = ModelCheckpoint(checkpoint_path, \n",
" save_weights_only=True,\n",
" verbose=1)\n",
"\n",
"history = model.fit([x_encoder_train, x_decoder_train], t_decoder_train,\n",
" batch_size=batch_size,\n",
" epochs=epochs,\n",
" validation_split=0.1, # 10%は検証用\n",
" callbacks=[early_stopping, cp_callback])\n",
"\n",
"loss, acc = model.evaluate([x_encoder_test, x_decoder_test], t_decoder_test, verbose=2)\n",
"loss,acc"
],
"execution_count": 16,
"outputs": [
{
"output_type": "stream",
"text": [
"モデル読み込みを試みる:./drive/My Drive/ColabData/training_1/cp.ckpt\n",
"Model: \"model\"\n",
"__________________________________________________________________________________________________\n",
"Layer (type) Output Shape Param # Connected to \n",
"==================================================================================================\n",
"encoder_input (InputLayer) [(None, None, 2080)] 0 \n",
"__________________________________________________________________________________________________\n",
"decoder_input (InputLayer) [(None, None, 2080)] 0 \n",
"__________________________________________________________________________________________________\n",
"encoder_mask (Masking) (None, None, 2080) 0 encoder_input[0][0] \n",
"__________________________________________________________________________________________________\n",
"decoder_mask (Masking) (None, None, 2080) 0 decoder_input[0][0] \n",
"__________________________________________________________________________________________________\n",
"encoder_gru (GRU) [(None, 256), (None, 1794816 encoder_mask[0][0] \n",
"__________________________________________________________________________________________________\n",
"decoder_gru (GRU) [(None, None, 256), 1794816 decoder_mask[0][0] \n",
" encoder_gru[0][1] \n",
"__________________________________________________________________________________________________\n",
"decoder_dense (Dense) (None, None, 2080) 534560 decoder_gru[0][0] \n",
"==================================================================================================\n",
"Total params: 4,124,192\n",
"Trainable params: 4,124,192\n",
"Non-trainable params: 0\n",
"__________________________________________________________________________________________________\n",
"4998/4998 [==============================] - 13s 3ms/sample - loss: 5.1267 - acc: 6.5041e-04\n",
"重みの読み込み完了\n",
"5.1266661176876145 0.0006504065\n",
"Train on 22500 samples, validate on 2500 samples\n",
"Epoch 1/10\n",
"22496/22500 [============================>.] - ETA: 0s - loss: 1.2149 - acc: 0.2885\n",
"Epoch 00001: saving model to ./drive/My Drive/ColabData/training_1/cp.ckpt\n",
"22500/22500 [==============================] - 123s 5ms/sample - loss: 1.2149 - acc: 0.2885 - val_loss: 1.3402 - val_acc: 0.3458\n",
"Epoch 2/10\n",
"22496/22500 [============================>.] - ETA: 0s - loss: 0.9583 - acc: 0.3805\n",
"Epoch 00002: saving model to ./drive/My Drive/ColabData/training_1/cp.ckpt\n",
"22500/22500 [==============================] - 124s 6ms/sample - loss: 0.9583 - acc: 0.3805 - val_loss: 1.2170 - val_acc: 0.3900\n",
"Epoch 3/10\n",
"22496/22500 [============================>.] - ETA: 0s - loss: 0.8888 - acc: 0.4143\n",
"Epoch 00003: saving model to ./drive/My Drive/ColabData/training_1/cp.ckpt\n",
"22500/22500 [==============================] - 123s 5ms/sample - loss: 0.8888 - acc: 0.4144 - val_loss: 1.1643 - val_acc: 0.4115\n",
"Epoch 4/10\n",
"22496/22500 [============================>.] - ETA: 0s - loss: 0.8495 - acc: 0.4321\n",
"Epoch 00004: saving model to ./drive/My Drive/ColabData/training_1/cp.ckpt\n",
"22500/22500 [==============================] - 124s 5ms/sample - loss: 0.8495 - acc: 0.4321 - val_loss: 1.1245 - val_acc: 0.4278\n",
"Epoch 5/10\n",
"22496/22500 [============================>.] - ETA: 0s - loss: 0.8211 - acc: 0.4456\n",
"Epoch 00005: saving model to ./drive/My Drive/ColabData/training_1/cp.ckpt\n",
"22500/22500 [==============================] - 123s 5ms/sample - loss: 0.8211 - acc: 0.4456 - val_loss: 1.1007 - val_acc: 0.4401\n",
"Epoch 6/10\n",
"22496/22500 [============================>.] - ETA: 0s - loss: 0.7991 - acc: 0.4561\n",
"Epoch 00006: saving model to ./drive/My Drive/ColabData/training_1/cp.ckpt\n",
"22500/22500 [==============================] - 124s 6ms/sample - loss: 0.7992 - acc: 0.4561 - val_loss: 1.0813 - val_acc: 0.4462\n",
"Epoch 7/10\n",
"22496/22500 [============================>.] - ETA: 0s - loss: 0.7812 - acc: 0.4640\n",
"Epoch 00007: saving model to ./drive/My Drive/ColabData/training_1/cp.ckpt\n",
"22500/22500 [==============================] - 125s 6ms/sample - loss: 0.7812 - acc: 0.4640 - val_loss: 1.0677 - val_acc: 0.4527\n",
"Epoch 8/10\n",
"22496/22500 [============================>.] - ETA: 0s - loss: 0.7653 - acc: 0.4722\n",
"Epoch 00008: saving model to ./drive/My Drive/ColabData/training_1/cp.ckpt\n",
"22500/22500 [==============================] - 124s 6ms/sample - loss: 0.7653 - acc: 0.4721 - val_loss: 1.0549 - val_acc: 0.4592\n",
"Epoch 9/10\n",
"22496/22500 [============================>.] - ETA: 0s - loss: 0.7530 - acc: 0.4786\n",
"Epoch 00009: saving model to ./drive/My Drive/ColabData/training_1/cp.ckpt\n",
"22500/22500 [==============================] - 124s 6ms/sample - loss: 0.7530 - acc: 0.4786 - val_loss: 1.0491 - val_acc: 0.4595\n",
"Epoch 10/10\n",
"22496/22500 [============================>.] - ETA: 0s - loss: 0.7415 - acc: 0.4837\n",
"Epoch 00010: saving model to ./drive/My Drive/ColabData/training_1/cp.ckpt\n",
"22500/22500 [==============================] - 123s 5ms/sample - loss: 0.7415 - acc: 0.4837 - val_loss: 1.0319 - val_acc: 0.4666\n",
"4998/4998 - 11s - loss: 1.1330 - acc: 0.4526\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(1.1330023331850134, 0.45261565)"
]
},
"metadata": {
"tags": []
},
"execution_count": 16
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Jbe3Xq2929Vg",
"colab_type": "code",
"colab": {}
},
"source": [
"#model = Model([encoder_input, decoder_input], decoder_output)\n",
"#model.compile(loss=\"categorical_crossentropy\", optimizer=\"rmsprop\", metrics=['accuracy'])\n",
"#loss, acc = model.evaluate([x_encoder_test, x_decoder_test], t_decoder_test, verbose=2)\n",
"\n",
"#model = Model([encoder_input, decoder_input], decoder_output)\n",
"#model.load_weights(checkpoint_path)\n",
"#model.compile(loss=\"categorical_crossentropy\", optimizer=\"rmsprop\", metrics=['accuracy'])\n",
"#loss, acc = model.evaluate([x_encoder_test, x_decoder_test], t_decoder_test, verbose=2)\n",
"#print(loss, acc)\n",
"\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "iYvh1p4aEngz",
"colab_type": "code",
"colab": {}
},
"source": [
"#モデルを保存しておく\n",
"model.save('./drive/My Drive/ColabData/model.h5')\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "6Qb_UNsIWTx1",
"colab_type": "code",
"outputId": "ae539128-8cfc-49e2-f7f7-3d1394c55d05",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 265
}
},
"source": [
"#学習のグラフを描画する\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"\n",
"loss = history.history['loss']\n",
"val_loss = history.history['val_loss']\n",
"\n",
"plt.plot(np.arange(len(loss)), loss)\n",
"plt.plot(np.arange(len(val_loss)), val_loss)\n",
"plt.show()"
],
"execution_count": 18,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\nCQW6iEiY+H+n4wzaKOv4KwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Z7XHZVr4ZFio",
"colab_type": "code",
"outputId": "c9f3c7c8-1b7d-4b1e-fa67-7b13e8354cee",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 326
}
},
"source": [
"#こちらでは翻訳のためのモデルを作成する\n",
"#ポイントは、すでに作成済みのモデルを使用するため\n",
"\n",
"# encoderのモデル\n",
"encoder_model = Model(encoder_input, encoder_state_h)\n",
"\n",
"# decoderのモデル\n",
"decoder_state_in_h = Input(shape=(n_mid,))\n",
"decoder_state_in = [decoder_state_in_h]\n",
"\n",
"decoder_output, decoder_state_h = decoder_lstm(decoder_input,\n",
" initial_state=decoder_state_in_h)\n",
"decoder_output = decoder_dense(decoder_output)\n",
"\n",
"decoder_model = Model([decoder_input] + decoder_state_in,\n",
" [decoder_output, decoder_state_h])\n",
"\n",
"# モデルの保存\n",
"encoder_model.save('encoder_model.h5')\n",
"decoder_model.save('decoder_model.h5')\n",
"\n",
"\n",
"tf.keras.utils.plot_model(encoder_model, to_file='model1.png')\n",
"tf.keras.utils.plot_model(decoder_model, to_file='model2.png')\n",
"\n",
"decoder_model.summary()"
],
"execution_count": 19,
"outputs": [
{
"output_type": "stream",
"text": [
"Model: \"model_2\"\n",
"__________________________________________________________________________________________________\n",
"Layer (type) Output Shape Param # Connected to \n",
"==================================================================================================\n",
"decoder_input (InputLayer) [(None, None, 2080)] 0 \n",
"__________________________________________________________________________________________________\n",
"input_1 (InputLayer) [(None, 256)] 0 \n",
"__________________________________________________________________________________________________\n",
"decoder_gru (GRU) [(None, None, 256), 1794816 decoder_input[0][0] \n",
" input_1[0][0] \n",
"__________________________________________________________________________________________________\n",
"decoder_dense (Dense) (None, None, 2080) 534560 decoder_gru[1][0] \n",
"==================================================================================================\n",
"Total params: 2,329,376\n",
"Trainable params: 2,329,376\n",
"Non-trainable params: 0\n",
"__________________________________________________________________________________________________\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "hcasUCGqZvaG",
"colab_type": "code",
"colab": {}
},
"source": [
"def respond(input_data, beta=5):\n",
" state_value = encoder_model.predict(input_data)\n",
" y_decoder = np.zeros((1, 1, n_char)) # decoderの出力を格納する配列\n",
" y_decoder[0][0][char_indices[\"\\t\"]] = 1 # decoderの最初の入力はタブ。one-hot表現にする。\n",
"\n",
" respond_sentence = \"\" # 返答の文字列\n",
" while True:\n",
" y, h = decoder_model.predict([y_decoder, state_value])\n",
" p_power = y[0][0] ** beta # 確率分布の調整\n",
" next_index = np.random.choice(len(p_power), p=p_power/np.sum(p_power)) \n",
" next_char = indices_char[next_index] # 次の文字\n",
"\n",
" if (next_char == \"\\n\" or len(respond_sentence) >= jp_max_length): \n",
" break # 次の文字が改行のとき、もしくは最大文字数を超えたときは終了\n",
" \n",
" respond_sentence += next_char\n",
" y_decoder = np.zeros((1, 1, n_char)) # 次の時刻の入力\n",
" y_decoder[0][0][next_index] = 1\n",
"\n",
" state_value = h # 次の時刻(文字)の状態\n",
"\n",
" return respond_sentence"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "svCgGPU9agJw",
"colab_type": "code",
"outputId": "e50feb5d-97ac-4c4e-9244-e66920d914b3",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"source": [
"#実際に英語から日本語に翻訳をしてみる\n",
"#10回ほどのエポック数だと、訓練が少ないのか意味不明な日本語に翻訳されてしまうようだ。\n",
"for i in range(50): \n",
" x_in = x_encoder[i:i+1] # 入力。英文のx_inはone-hot表現になっている\n",
" responce = respond(x_in,10) # 返答\n",
" print(\"Input:\", en_datas[i])\n",
" print(\"Response:\", responce)\n",
" print()"
],
"execution_count": 21,
"outputs": [
{
"output_type": "stream",
"text": [
"Input: go.\n",
"Response: お願いします。\n",
"\n",
"Input: go.\n",
"Response: お願いします。\n",
"\n",
"Input: hi.\n",
"Response: はいつものがある。\n",
"\n",
"Input: hi.\n",
"Response: はありません。\n",
"\n",
"Input: hi.\n",
"Response: はいつものがある。\n",
"\n",
"Input: run.\n",
"Response: 私には私には私には私に。\n",
"\n",
"Input: run.\n",
"Response: 私には私には私には私に。\n",
"\n",
"Input: who?\n",
"Response: あなたのお父さんは何ですか。\n",
"\n",
"Input: wow!\n",
"Response: お願いします。\n",
"\n",
"Input: wow!\n",
"Response: お願いします。\n",
"\n",
"Input: wow!\n",
"Response: おいで。\n",
"\n",
"Input: fire!\n",
"Response: お願いします。\n",
"\n",
"Input: fire!\n",
"Response: お願いします。\n",
"\n",
"Input: fire!\n",
"Response: お願いします。\n",
"\n",
"Input: help!\n",
"Response: おい、おいで。\n",
"\n",
"Input: jump!\n",
"Response: 起きなさい。\n",
"\n",
"Input: jump!\n",
"Response: 起きなさい。\n",
"\n",
"Input: jump!\n",
"Response: 起きなさい。\n",
"\n",
"Input: jump!\n",
"Response: 起きなさい。\n",
"\n",
"Input: jump!\n",
"Response: 起きなさい。\n",
"\n",
"Input: jump.\n",
"Response: ちょっと待って。\n",
"\n",
"Input: jump.\n",
"Response: ちょっと待って。\n",
"\n",
"Input: jump.\n",
"Response: ちょっと待って。\n",
"\n",
"Input: stop!\n",
"Response: やめろ!\n",
"\n",
"Input: stop!\n",
"Response: やめろ!\n",
"\n",
"Input: wait!\n",
"Response: 起きなさい。\n",
"\n",
"Input: go on.\n",
"Response: お願いします。\n",
"\n",
"Input: go on.\n",
"Response: お願いします。\n",
"\n",
"Input: go on.\n",
"Response: お願いします。\n",
"\n",
"Input: go on.\n",
"Response: お願いします。\n",
"\n",
"Input: hello!\n",
"Response: おいついて。\n",
"\n",
"Input: hello!\n",
"Response: おいついて。\n",
"\n",
"Input: hello!\n",
"Response: あなたはおいで。\n",
"\n",
"Input: hurry!\n",
"Response: おいついて!\n",
"\n",
"Input: i see.\n",
"Response: 私はあなたを見た。\n",
"\n",
"Input: i see.\n",
"Response: 私はあなたのが好きだ。\n",
"\n",
"Input: i see.\n",
"Response: 私はあなたが好きです。\n",
"\n",
"Input: i see.\n",
"Response: 私は一人できます。\n",
"\n",
"Input: i see.\n",
"Response: 私はあなたを見た。\n",
"\n",
"Input: i see.\n",
"Response: 私はあなたを見た。\n",
"\n",
"Input: i see.\n",
"Response: 私はあなたのが好きだ。\n",
"\n",
"Input: i try.\n",
"Response: 私は大きな。\n",
"\n",
"Input: i try.\n",
"Response: 私は気が悪い。\n",
"\n",
"Input: i try.\n",
"Response: 私は大きな。\n",
"\n",
"Input: i try.\n",
"Response: 私は大きな。\n",
"\n",
"Input: i try.\n",
"Response: 私は気が悪い。\n",
"\n",
"Input: i won!\n",
"Response: 私は!\n",
"\n",
"Input: i won!\n",
"Response: 私は!\n",
"\n",
"Input: i won!\n",
"Response: 私は!\n",
"\n",
"Input: i won!\n",
"Response: 私は!\n",
"\n"
],
"name": "stdout"
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment