{"id":3164,"date":"2019-09-21T21:15:22","date_gmt":"2019-09-21T12:15:22","guid":{"rendered":"https:\/\/now0930.pe.kr\/wordpress\/?p=3164"},"modified":"2019-09-26T21:17:12","modified_gmt":"2019-09-26T12:17:12","slug":"keras%eb%a1%9c-%ed%82%a4%ec%9b%8c%eb%93%9c-%eb%b6%84%ec%84%9d4-4","status":"publish","type":"post","link":"https:\/\/now0930.pe.kr\/wordpress\/keras%eb%a1%9c-%ed%82%a4%ec%9b%8c%eb%93%9c-%eb%b6%84%ec%84%9d4-4\/","title":{"rendered":"keras\ub85c \ud0a4\uc6cc\ub4dc \ubd84\uc11d(4\/5)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\ub300\ubc15\uc774\ub2e4!! 1,000\ud68c\ub97c \ub3cc\ub838\ub294\ub370 0.87 \uc815\ud655\ub3c4\ub97c \ubcf4\uc600\ub294\ub370, verb\uae4c\uc9c0 \uac80\uc0ac\ud558\ub2c8 0.93\uc5d0\uc11c \uc2dc\uc791\ud55c\ub2e4!! kkma\uac00 \ub3d9\uc0ac\ub85c \ub05d\ub098\ub294 \uba85\uc0ac\ud615 \ub2e8\uc5b4\ub97c \ub3d9\uc0ac\ub85c \uc778\uc2dd\ud55c\ub2e4!! <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0ac\uc6a9\uc790 \uc785\ub825\uc744 \ubc1b\uc544\ub4e4\uc5ec \ub2e8\uc5b4\ub97c \ubd84\uc11d\ud558\ub294 \ubd80\ubd84\uc744 \uc544\ub798\uc640 \uac19\uc774 \ud588\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from konlpy.tag import Okt\nokt=Okt()\nfrom gensim.models import Word2Vec\nfrom keras.layers import Dense, Flatten, SimpleRNN, Dropout\nfrom keras.models import Sequential\nfrom keras.preprocessing.sequence import pad_sequences\nfrom keras.layers.embeddings import Embedding\nfrom keras.utils import to_categorical\nimport numpy as np\nfrom sklearn.cluster import KMeans\n\ndef main():\n    model=Word2Vec.load('.\/TagWord2VecModel')\n    print(model)\n    MAX_VOCAB=len(model.wv.vocab)\n    WV_SIZE=model.wv.vectors.shape[1]\n    WORD_MAX=6\n    CATEGORIY_SIZE=7\n    print(\"\ub85c\ub4dc\ud55c \ubaa8\ub378 vocab \ucd5c\ub300\uac12\uc740\", MAX_VOCAB)\n    print(\"\ub85c\ub4dc\ud55c \ubaa8\ub378 vectror \ud06c\uae30\ub294\", WV_SIZE)\n    #\ub2e8\uc5b4 \ud45c\uc2dc\n    showWord2VecClusters(Model=model)\n\n    #keras \ubaa8\ub378 \uc124\uc815.\n    model2= Sequential()\n    model2.add(Embedding(input_dim=MAX_VOCAB, output_dim=WV_SIZE, input_length=WORD_MAX, weights=[model.wv.vectors], trainable=False))\n    #model2.add(Flatten())\n    model2.add(SimpleRNN(256, input_shape=(4,4)))\n    model2.add(Dropout(0.2))\n    model2.add(Dense(128))\n    model2.add(Dropout(0.2))\n    model2.add(Dense(64, activation='relu'))\n    model2.add(Dropout(0.2))\n    model2.add(Dense(CATEGORIY_SIZE, activation='softmax'))\n\n    #load model \uacbd\ub85c.\n    weight_path = \".\/saved_network_weight.h5\"\n    model2.load_weights(weight_path)\n    print(\"\uc800\uc7a5\ub41c weights\ub97c \ubd88\ub984\")\n    model2.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n    model2.summary()\n    checkSentenceWord(Model=model)\n    userInput(Word2Vec=model, Networks=model2, Maxword=WORD_MAX)\n\n\ndef showWord2VecClusters(Model):\n    #\ud604\uc7ac \uc785\ub825\ub41c \ub2e8\uc5b4 \ud45c\uc2dc\n    #\ud074\ub7ec\uc2a4\ud130\ub9c1 \uc0ac\uc6a9.\n    word_vectors = Model.wv.syn0 # \uc5b4\ud718\uc758 feature vector\n    num_clusters = int(word_vectors.shape[0]\/50) # \uc5b4\ud718 \ud06c\uae30\uc758 1\/5\ub098 \ud3c9\uade0 5\ub2e8\uc5b4\n    print(num_clusters)\n    num_clusters = int(num_clusters)\n\n    kmeans_clustering = KMeans(n_clusters=num_clusters)\n    idx = kmeans_clustering.fit_predict(word_vectors)\n\n    idx = list(idx)\n    names = Model.wv.index2word\n    word_centroid_map = {names[i]: idx[i] for i in range(len(names))}\n\n\n    for c in range(num_clusters):\n        # \ud074\ub7ec\uc2a4\ud130 \ubc88\ud638\ub97c \ucd9c\ub825\n        print(\"\\ncluster {}\".format(c))\n\n        words = []\n        cluster_values = list(word_centroid_map.values())\n        for i in range(len(cluster_values)):\n            if (cluster_values[i] == c):\n                words.append(list(word_centroid_map.keys())[i])\n        print(words)\n\n\n\ndef userInput(Word2Vec, Networks, Maxword):\n    EndFlag=False\n    while True:\n        #\uc0ac\uc6a9\uc790 \uc785\ub825 \ud655\uc778\n        ErrorFlag=False\n        ZeroFlag=False\n        wordToPredictSentence = []\n        wordToPredictSentenceStr = []\n        index = 0\n        #\ucd1d MAX\uac1c\uc218\ub9cc\ud07c \uc785\ub825\uc744 \ubc1b\uc544\ub4e4\uc774\uace0, \n        #\ub2e8\uc5b4\ub97c \ud310\ub2e8\n        # \uc778\ub371\uc2a4\ub97c \uc99d\uac00\ud558\uc9c0 \ub9d0\uc9c0 \ud310\ub2e8\ud558\uae30 \uc704\ud574 while\ub8e8\ud504 \uc0ac\uc6a9\n        #print(\"WORD_MAX\ub294\",Maxword)\n        while (index &lt; Maxword):\n        #for index in range(Maxword):\n            print(\"%d\/6 \ub2e8\uc5b4 \uc785\ub825\"%(index+1))\n            print(\"\ub05d\ub0b4\ub824\uba74 END!!\ub97c \uc785\ub825\")\n            print(\"\ub9c8\uc9c0\ub9c9\uae4c\uc9c0 0\uc744 \ucc44\uc6b0\ub824\uba74 ZERO!!\ub97c \uc785\ub825\")\n            if(not ZeroFlag):\n                userInput=input()\n            #input_predict =model.wv.vocab.get(word[0]).index\n            #print(repr(userInput))\n\n            if(userInput == \"END!!\"):\n                EndFlag=True\n                break\n            if(userInput == \"ZERO!!\"):\n                ZeroFlag=True\n\n            try:\n                #Try\uc5d0\uc11c \uc5d0\ub7ec\ud50c\ub798\uadf8\ub97c \ub2e4\uc2dc \ucd08\uae30\ud654\n                ErrorFlag=False\n                num = Word2Vec.wv.vocab.get(userInput).index\n                print(num)\n            except AttributeError:\n                if(not ZeroFlag):\n                    print(\"\ub9ac\uc2a4\ud2b8\uc5d0 \uc5c6\ub294 \ub2e8\uc5b4 \uc785\ub825\ud568. \ub2e4\uc2dc \uc785\ub825\ud558\uc138\uc694\")\n                    ErrorFlag=True\n\n            #\uc804\uc5d0 \uc815\ud655\ud558\uac8c \uc785\ub825\ud588\ub294\uc9c0 \ud655\uc778\n            if(ErrorFlag == True):\n                continue\n            else:\n                index=index+1\n                if(not ZeroFlag):\n                    wordToPredictSentence.append(num)\n                    wordToPredictSentenceStr.append(userInput)\n                    print(wordToPredictSentence)\n                else:\n                    wordToPredictSentence.append(0)\n                    wordToPredictSentenceStr.append(userInput)\n                    print(wordToPredictSentence)\n\n            #input_predict = np.asarray([[num0, num1, num2, 0, 0, 0]])\n            input_predict = np.asarray([wordToPredictSentence])\n            #print(\"input_predict \ub294\",input_predict.shape)\n        if(EndFlag == False):\n            print(\"\uc785\ub825\ud55c \ub2e8\uc5b4\ub294\",wordToPredictSentenceStr)\n            myPrediction = Networks.predict_classes(input_predict, batch_size=100, verbose=0)\n            myPredictionAcc = Networks.predict(input_predict, batch_size=100, verbose=0)\n            print(\"\ub0b4 \uc608\uc0c1\", myPrediction, \"\ud655\ub960\", myPredictionAcc)\n        else:\n            #while \ub8e8\ud504 \ud0c8\ucd9c.\n            break\n\n\ndef checkSentenceWord(Model):\n    print(Model)\n    sample_sentence=\"B220ST YD5 CLAMP \uc7a0\uae40\"\n    tokenlist = okt.pos(sample_sentence, stem=True, norm=True)\n    for word in tokenlist:\n        print(word)\n\n\nif __name__==\"__main__\":\n    main()\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub124\ud2b8\uc6cd\uc740 LSTM\uc744 \ubcf5\uc7a1\ud55c \ud615\uc2dd\uc73c\ub85c \uc37c\ub2e4. \ub124\ud2b8\uc6cd \uad6c\uc870\uac00 json\uc73c\ub85c, \uc6e8\uc774\ud2b8\uac00  h5\ub85c \uc800\uc7a5\ub41c\ub2e4. \ub098\uc911\uc5d0 \ub124\ud2b8\uc6cd \uad6c\uc870\ub97c json\uc73c\ub85c \uc800\uc7a5\ud558\uace0, json\uc73c\ub85c \ubd80\ub974\ub294 \ubd80\ubd84\uc73c\ub85c \uc218\uc815\ud574\uc57c \uaca0\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc704\uc5d0 &#8220;B220ST YD5 CLAMP \uc7a0\uae40&#8221;\uc744 \ubd84\uc11d\ud558\uba74 \uc544\ub798\ub85c \ubd84\uc11d\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">('B', 'Alpha')\n('220', 'Number')\n('ST', 'Alpha')\n('YD', 'Alpha')\n('5', 'Number')\n('CLAMP', 'Alpha')\n('\uc7a0\uae30\ub2e4', 'Verb')<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from konlpy.tag import Okt\nokt=Okt()\nfrom gensim.models import Word2Vec\nfrom keras.layers import Dense, Flatten, SimpleRNN, Dropout, LSTM\nfrom keras.models import Sequential\nfrom keras.preprocessing.sequence import pad_sequences\nfrom keras.layers.embeddings import Embedding\nfrom keras.utils import to_categorical\nfrom keras.optimizers import Adam\nimport numpy as np\n#label encoder\ub85c text\ub97c int\ub85c \ubcc0\uacbd.\nfrom sklearn.preprocessing import LabelEncoder\n#model save\nfrom keras.callbacks import ModelCheckpoint\n\n\ntargetFile = open(\".\/tag\uc815\ub9ac.txt\", \"r\", encoding='UTF-8')\n#lines=targetFile.readline()\n#model=Word2Vec.load('.\/myModelV1')\nmodel=Word2Vec.load('.\/TagWord2VecModel')\n\nMAX_VOCAB=len(model.wv.vocab)\nWV_SIZE=model.wv.vectors.shape[1]\nprint(\"\ub85c\ub4dc\ud55c \ubaa8\ub378 vocab \ucd5c\ub300\uac12\uc740\", MAX_VOCAB)\nprint(\"\ub85c\ub4dc\ud55c \ubaa8\ub378 vectror \ud06c\uae30\ub294\", WV_SIZE)\n\ni=0\nsentence_by_index=[]\ntraining_result=[]\nresult=[]\nWORD_MAX=16\n\n\nwhile True:\n\n    lines = targetFile.readline()\n    firstColumn = lines.split(',')\n    #print(lines)\n    \n    if not lines:break\n    #if i == 1000:break\n    i=i+1\n    #word2vec\ub97c \ub9cc\ub4e0 \ud615\ud0dc\uc18c \ubd84\uc11d\uae30\ub97c \uc0ac\uc6a9..\n    tokenlist = okt.pos(firstColumn[1], stem=True, norm=True)\n    temp=[]\n\n    for word in tokenlist:\n        #word[0]\uc740 \ub2e8\uc5b4.\n        #word[1]\uc740 \ud488\uc0ac.\n        #print(\"word[0]\uc740\",word[0])\n        #print(\"word[1]\uc740\",word[1])\n\n        if word[1] in [\"Noun\",\"Alpha\",\"Number\",\"Verb\"]:\n            #temp.append(model.wv[word[0]])\n            #word[0]\ub97c index\ub85c \ubcc0\uacbd.\n            #\ub2e8\uc5b4\uc7a5\uc5d0 \uc5c6\ub294 \ub2e8\uc5b4\ub97c \uc608\uc678\ucc98\ub9ac\n            #\uc785\ub825\uacfc \ucd9c\ub825\uc744 \uac19\uc774 \ub9de\ucd94\uae30 \uc704\ud574, \uc785\ucd9c\ub825 \ub3d9\uc2dc\uc5d0 append\n            try:\n                #print(\"---------\")\n                #print(i)\n                #print(word[0])\n                temp.append(model.wv.vocab.get(word[0]).index)\n                #print(model.wv.vocab.get(word[0]).index)\n\n            except AttributeError:\n                #\uac12\uc744 \ubabb\ucc3e\uc73c\uba74 0\uac12 \uc785\ub825\n                temp.append(0)\n                #print(temp)\n    #print(\"index is \", i)\n    #print(\"temp is\", temp)\n\n    #\uac00\uc838\ub2e8 \uc4f4 \ucf54\ub4dc\ub294 temp\uc5d0 \uac12\uc774 \uc788\uc744 \uacbd\uc6b0\uc5d0\ub9cc append.\n    #\ucd9c\ub825\uacfc \ub9de\ucd94\uae30 \uc704\ud574, list\uac00 \ube44\uc5b4\uc788\uc5b4\ub3c4 append\ub85c \ubcc0\uacbd.\n    #if temp:\n    #    sentence_by_index.append(temp)\n    sentence_by_index.append(temp)\n\n    #\uacb0\uacfc\ub97c \ubc30\uc5f4\ub85c \uc785\ub825\n    tempResult=firstColumn[2].strip('\\n')\n    training_result.append(tempResult)\n\n\ntargetFile.close()\n#print(tokenlist)\n\n#\ucd9c\ub825\uc744 categorical\ub85c \ubcc0\uacbd.\n\nlabel_encoder = LabelEncoder()\ntraining_result_asarray = np.asarray(training_result)\ninteger_encoded = label_encoder.fit_transform(training_result_asarray)\ncategorical_training_result = to_categorical(integer_encoded, dtype='int')\n\n#\uc785\ub825, \ucd9c\ub825 \ud655\uc778\nfixed_sentence_by_index = pad_sequences(sentence_by_index, maxlen=WORD_MAX, padding='post', dtype='int')\n#print(\"\uc785\ub825\uc740\",fixed_sentence_by_index)\n#print(\"\ucd9c\ub825\uc740\",integer_encoded)\n#print(\"\ucd9c\ub825\uc740\",categorical_training_result)\nsize_categorical_training_result = categorical_training_result.shape[1]\nprint(\"\ucd9c\ub825 \ud06c\uae30\ub294\",size_categorical_training_result)\n\n#keras \ubaa8\ub378 \uc124\uc815.\nmodel2= Sequential()\nmodel2.add(Embedding(input_dim=MAX_VOCAB, output_dim=WV_SIZE, input_length=WORD_MAX, weights=[model.wv.vectors], trainable=False))\n#model2.add(Flatten())\nmodel2.add(LSTM(1024, input_shape=(4,4)))\nmodel2.add(Dropout(0.2))\nmodel2.add(Dense(512))\nmodel2.add(Dropout(0.2))\nmodel2.add(Dense(256, activation='relu'))\nmodel2.add(Dropout(0.2))\nmodel2.add(Dense(size_categorical_training_result, activation='softmax'))\nmodel2.compile(loss='categorical_crossentropy', optimizer=Adam(lr=0.001, epsilon=1e-08, decay=0.0), metrics=['accuracy'])\n\n#save model \uacbd\ub85c.\nweight_path = \".\/saved_network_weight.h5\"\ncheckpoint = ModelCheckpoint(weight_path, monitor='acc', verbose=2, save_best_only=True, mode='auto') \ncallbacks_list = [checkpoint]\n\nmodel2.fit(x=fixed_sentence_by_index, y=categorical_training_result, epochs=1000, verbose=2, validation_split=0.2, callbacks=callbacks_list, batch_size=200)\nmodel2.summary()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub85c \ubd84\uc11d\ud558\uba74, \ub300\ucda9 \uc544\ub798\uc640 \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\ub85c\ub4dc\ud55c \ubaa8\ub378 vocab \ucd5c\ub300\uac12\uc740 694\n\ub85c\ub4dc\ud55c \ubaa8\ub378 vectror \ud06c\uae30\ub294 10\n\ucd9c\ub825 \ud06c\uae30\ub294 7\nTrain on 7602 samples, validate on 1901 samples\nEpoch 1\/1000\n - 7s - loss: 1.0435 - acc: 0.5389 - val_loss: 1.7584 - val_acc: 0.7564\n\nEpoch 00001: acc improved from -inf to 0.53894, saving model to .\/saved_network_weight.h5\nEpoch 2\/1000\n - 3s - loss: 0.4565 - acc: 0.8172 - val_loss: 2.1145 - val_acc: 0.7480\n\nEpoch 00002: acc improved from 0.53894 to 0.81715, saving model to .\/saved_network_weight.h5\nEpoch 3\/1000\n - 3s - loss: 0.4405 - acc: 0.8508 - val_loss: 2.5999 - val_acc: 0.7575\n\nEpoch 00003: acc improved from 0.81715 to 0.85083, saving model to .\/saved_network_weight.h5\nEpoch 4\/1000\n - 3s - loss: 0.2354 - acc: 0.9100 - val_loss: 2.1261 - val_acc: 0.7475\n\nEpoch 00004: acc improved from 0.85083 to 0.91002, saving model to .\/saved_network_weight.h5\nEpoch 5\/1000\n - 3s - loss: 0.1733 - acc: 0.9323 - val_loss: 2.2204 - val_acc: 0.7522\n\nEpoch 00005: acc improved from 0.91002 to 0.93225, saving model to .\/saved_network_weight.h5\nEpoch 6\/1000\n - 3s - loss: 0.2758 - acc: 0.9025 - val_loss: 3.7245 - val_acc: 0.7543<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\ub300\ubc15\uc774\ub2e4!! 1,000\ud68c\ub97c \ub3cc\ub838\ub294\ub370 0.87 \uc815\ud655\ub3c4\ub97c \ubcf4\uc600\ub294\ub370, verb\uae4c\uc9c0 \uac80\uc0ac\ud558\ub2c8 0.93\uc5d0\uc11c \uc2dc\uc791\ud55c\ub2e4!! kkma\uac00 \ub3d9\uc0ac\ub85c \ub05d\ub098\ub294 \uba85\uc0ac\ud615 \ub2e8\uc5b4\ub97c \ub3d9\uc0ac\ub85c \uc778\uc2dd\ud55c\ub2e4!! \uc0ac\uc6a9\uc790 \uc785\ub825\uc744 \ubc1b\uc544\ub4e4\uc5ec \ub2e8\uc5b4\ub97c \ubd84\uc11d\ud558\ub294 \ubd80\ubd84\uc744 \uc544\ub798\uc640 \uac19\uc774 \ud588\ub2e4. \ub124\ud2b8\uc6cd\uc740 LSTM\uc744 \ubcf5\uc7a1\ud55c \ud615\uc2dd\uc73c\ub85c \uc37c\ub2e4. \ub124\ud2b8\uc6cd \uad6c\uc870\uac00 json\uc73c\ub85c, \uc6e8\uc774\ud2b8\uac00 h5\ub85c \uc800\uc7a5\ub41c\ub2e4. \ub098\uc911\uc5d0 \ub124\ud2b8\uc6cd \uad6c\uc870\ub97c json\uc73c\ub85c \uc800\uc7a5\ud558\uace0, json\uc73c\ub85c \ubd80\ub974\ub294 \ubd80\ubd84\uc73c\ub85c \uc218\uc815\ud574\uc57c \uaca0\ub2e4. \uc704\uc5d0 &#8220;B220ST YD5 CLAMP \uc7a0\uae40&#8221;\uc744 \ubd84\uc11d\ud558\uba74 \uc544\ub798\ub85c \ubd84\uc11d\ud55c\ub2e4. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[33],"tags":[650,109,637,652,649,648,441,651],"class_list":["post-3164","post","type-post","status-publish","format-standard","hentry","category-tensorflow","tag-konlpy","tag-tensorflow","tag-word2vec","tag-652","tag-649","tag-648","tag-441","tag-651"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/3164","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/comments?post=3164"}],"version-history":[{"count":5,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/3164\/revisions"}],"predecessor-version":[{"id":3182,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/3164\/revisions\/3182"}],"wp:attachment":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/media?parent=3164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/categories?post=3164"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/tags?post=3164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}