{"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>\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>\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>\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>\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>\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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_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_featured_media_url":"","jetpack_sharing_enabled":true,"_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}]}}