{"id":847,"date":"2021-02-22T10:41:36","date_gmt":"2021-02-22T01:41:36","guid":{"rendered":"http:\/\/cedartrees.co.kr\/?p=847"},"modified":"2021-04-03T19:06:41","modified_gmt":"2021-04-03T10:06:41","slug":"sequence2sequence-attn-morpheme","status":"publish","type":"post","link":"http:\/\/blog.cedartrees.co.kr\/index.php\/2021\/02\/22\/sequence2sequence-attn-morpheme\/","title":{"rendered":"Seq2Seq \uc5b4\ud150\uc158 \ud615\ud0dc\uc18c \ubd84\uc11d"},"content":{"rendered":"\n<p>\ubcf8 \ube14\ub85c\uadf8\uc5d0 Seq2Seq \ubaa8\ub378\uc744 \ud65c\uc6a9\ud574\uc11c \uac04\ub2e8\ud55c \ubb38\uc7a5\uc744 \uc0dd\uc131\ud55c\ub2e4\ub358\uac00 \ubc88\uc5ed\uc744 \ud574\ubcf4\ub294 \uc608\uc81c\ub97c \uc218\ud589\ud588\uc2b5\ub2c8\ub2e4. \ub610 Seq2Seq\uc5d0 Attention\uc744 \uc801\uc6a9\ud574\uc11c \ubb38\uc7a5\uc0dd\uc131\uc744 \ud14c\uc2a4\ud2b8\ud574 \ubcf4\uae30\ub3c4 \ud588\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774\ubc88\uc5d0\ub294 Seq2Seq \uc5b4\ud150\uc158\uc744 \ud65c\uc6a9\ud574\uc11c \ud615\ud0dc\uc18c \ubd84\uc11d\uc744 \uc218\ud589\ud558\ub294 \uc608\uc81c\ub97c \ubb38\ub4e4\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc218\ud589\ud558\ub294 \ubc29\ubc95\uc740 \uc774\uc804\uc5d0 \uc218\ud589\ud588\ub358 \uc608\uc81c\ub4e4\uacfc \uc544\uc8fc \uc720\uc0ac\ud574\uc11c \uc774\uc804 \uc608\uc81c\uc5d0\uc11c \ud65c\uc6a9\ud588\ub358 Word Embedding, Encoder, Decoder, RNN \ubaa8\ub378\uc744 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p><span class=\"has-inline-color has-vivid-cyan-blue-color\">\ud574\ub2f9 \ubc29\ubc95\uc740 \uc5ec\ub7ec \uc5f0\uad6c\uc790\ub4e4\uc5d0 \uc758\ud574\uc11c \uc5f0\uad6c\ub418\uace0 \uc788\uc2b5\ub2c8\ub2e4. <\/span><br><span class=\"has-inline-color has-vivid-cyan-blue-color\">ETRI(\ud55c\uad6d\uc804\uc790\ud1b5\uc2e0\uc5f0\uad6c\uc6d0)\uc5d0\uc11c\ub3c4 \ud574\ub2f9 \ubaa8\ub378\uc744 \ud65c\uc6a9\ud55c \uc5f0\uad6c(Seq2Seq \uc8fc\uc758\uc9d1\uc911 \ubaa8\ub378\uc744 \uc774\uc6a9\ud55c \ud615\ud0dc\uc18c \ubd84\uc11d \ubc0f \ud488\uc0ac \ud0dc\uae45, 2016\ub144)\ub97c \uc218\ud589\ud588\uc2b5\ub2c8\ub2e4. <\/span><br><span class=\"has-inline-color has-vivid-cyan-blue-color\">\uc774 \uc678\uc5d0\ub3c4 \ud3ec\ud56d\uacf5\ub300\uc5d0\uc11c\ub3c4 &#8220;Sequence-to-sequence \uae30\ubc18 \ud55c\uad6d\uc5b4 \ud615\ud0dc\uc18c \ubd84\uc11d \ubc0f \ud488\uc0ac \ud0dc\uae45&#8221;\uc774\ub77c\ub294 \uc5f0\uad6c\uac00 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n\n\n\n<p>\uba3c\uc800 \ud615\ud0dc\uc18c\uc5d0 \ub300\ud55c \uc815\uc758\ub294 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p><span class=\"has-inline-color has-vivid-cyan-blue-color\">\ud615\ud0dc\uc18c(\u5f62\u614b\u7d20,&nbsp;<a href=\"https:\/\/ko.wikipedia.org\/wiki\/%EC%98%81%EC%96%B4\">\uc601\uc5b4<\/a>:&nbsp;morpheme)\ub294&nbsp;<a href=\"https:\/\/ko.wikipedia.org\/wiki\/%EC%96%B8%EC%96%B4%ED%95%99\">\uc5b8\uc5b4\ud559<\/a>\uc5d0\uc11c (\uc77c\ubc18\uc801\uc778 \uc815\uc758\ub97c \ub530\ub974\uba74) \uc77c\uc815\ud55c \uc758\ubbf8\uac00 \uc788\ub294 \uac00\uc7a5 \uc791\uc740 \ub9d0\uc758 \ub2e8\uc704\ub85c&nbsp;<a href=\"https:\/\/ko.wikipedia.org\/w\/index.php?title=%EB%B0%9C%ED%99%94%EC%B2%B4&amp;action=edit&amp;redlink=1\">\ubc1c\ud654\uccb4<\/a>&nbsp;\ub0b4\uc5d0\uc11c \ub530\ub85c \ub5bc\uc5b4\ub0bc \uc218 \uc788\ub294 \uac83\uc744 \ub9d0\ud55c\ub2e4. \uc989, \ub354 \ubd84\uc11d\ud558\uba74 \ub73b\uc774 \uc5c6\uc5b4\uc9c0\ub294 \ub9d0\uc758 \ub2e8\uc704\uc774\ub2e4.&nbsp;<a href=\"https:\/\/ko.wikipedia.org\/wiki\/%EC%9D%8C%EC%86%8C\">\uc74c\uc18c<\/a>\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c \ud615\ud0dc\uc18c\ub294 \ucd94\uc0c1\uc801\uc778 \uc2e4\uccb4\uc774\uba70 \ubc1c\ud654\uc5d0\uc11c \ub2e4\uc591\ud55c \ud615\ud0dc\ub85c \uc2e4\ud604\ub420 \uc218 \uc788\ub2e4. [\uc704\ud0a4\ubc31\uacfc : \ud615\ud0dc\uc18c]<\/span><\/p>\n\n\n\n<p>\uac04\ub2e8\ud788 \ub9d0\ud558\uba74 \ubd84\uc11d\uc758 \ub300\uc0c1\uc774 \ub418\ub294 \ubb38\uc7a5\uc774 \uc785\ub825 \ub410\uc744 \uacbd\uc6b0\uc5d0 &#8220;\uc77c\uc815\ud55c \uc758\ubbf8\uac00 \uc788\ub294 \uac00\uc7a5 \uc791\uc740 \ub9d0\uc758 \ub2e8\uc704&#8221;\ub85c \ubd84\ud560 \ud558\ub294 \uac83\uc774\ub77c\uace0 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ud574\ub2f9 \uc608\uc81c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ubc29\ubc95\uc73c\ub85c \uc218\ud589\ud569\ub2c8\ub2e4. \uba3c\uc800 \ubcf4\ud1b5\uc758 \uc9e7\uc740 \ubb38\uc7a5 50\uac1c\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc0dd\uc131\ud55c \ubb38\uc7a5\uc744 KoNLPy \uc911 Okt() \ud0dc\uae45 \ud074\ub798\uc2a4\ub97c \ud65c\uc6a9\ud558\uc5ec \ud615\ud0dc\uc18c \ubd84\uc11d\uc744 \uc218\ud589\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4\uc11c [&#8216;\uc694\uc998\ub3c4 \ub9ce\uc774 \ubc14\uc058\uc138\uc694?&#8217;,&#8217;\uad6c\ub450\ub97c \uc2e0\uace0 \uc2f6\uc5b4\uc694.&#8217;,&#8217;\uc6b4\ub3d9\ud654\ub97c \uc2e0\uace0 \uc2f6\uc5b4\uc694.&#8217;,&#8217;\uc5c4\ub9c8\uac00 \uc88b\uc544\uc694?&#8217;,&#8217;\uc544\ube60\uac00 \uc88b\uc544\uc694?&#8217;]\uc640 \uac19\uc740 \ubb38\uc7a5 \ub9ac\uc2a4\ud2b8\uac00 \uc8fc\uc5b4\uc84c\ub2e4\uace0 \ud560 \ub54c\uc5d0 \uc774\ub97c \ud615\ud0dc\uc18c \ubd84\uc11d\uc744 \ud558\uac8c \ub418\uba74 \uc544\ub798\uc640 \uac19\uc740 \ud615\ud0dc\ub85c \ub370\uc774\ud130\uac00 \ucd9c\ub825\ub41c\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=\"\">[\uc694\uc998\/Noun, \ub3c4\/Josa, \ub9ce\uc774\/Adverb, \ubc14\uc058\uc138\uc694\/Adjective, ?\/Punctuation]\n[\uad6c\ub450\/Noun, \ub97c\/Josa, \uc2e0\uace0\/Noun, \uc2f6\uc5b4\uc694\/Verb, .\/Punctuation]\n[\uc6b4\ub3d9\ud654\/Noun, \ub97c\/Josa, \uc2e0\uace0\/Noun, \uc2f6\uc5b4\uc694\/Verb, .\/Punctuation]\n[\uc5c4\ub9c8\/Noun, \uac00\/Josa, \uc88b\uc544\uc694\/Adjective, ?\/Punctuation]\n[\uc544\ube60\/Noun, \uac00\/Josa, \uc88b\uc544\uc694\/Adjective, ?\/Punctuation]<\/pre>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img src=\"https:\/\/konlpy-ko.readthedocs.io\/ko\/v0.4.3\/_static\/konlpy.png\" alt=\"\"\/><figcaption>https:\/\/konlpy-ko.readthedocs.io\/ko\/v0.4.3\/<\/figcaption><\/figure><\/div>\n\n\n\n<p>KoNLPy\uc5d0 \ub300\ud574\uc11c \ub354 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uace0\uc790 \ud558\uc2dc\ub294 \ubd84\uc740 \uc704\uc758 \ud648\ud398\uc774\uc9c0\uc5d0\uc11c \uc790\ub8cc\ub97c \uac80\uc0c9\ud574\ubcf4\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774\uc81c \uc785\ub825\ub41c \uc6d0\ubb38\uc744 Source\uc5d0 \uc785\ub825\ud558\uace0 \ud615\ud0dc\uc18c \ubd84\uc11d\ud55c \uacb0\uacfc\ub97c Target\uc5d0 \uc785\ub825\ud558\ub294 \uac83\uc73c\ub85c \ud559\uc2b5 \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ub418\uba74 Source \ub370\uc774\ud130\ub97c Encoder\uc5d0 \uc785\ub825\ud558\uace0 \ubd84\uc11d \uacb0\uacfc\ub97c Decoder\uc5d0 \uc785\ub825\ud574\uc11c \ud559\uc2b5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uba3c\uc800\ub294 \uc778\ucf54\ub354\uc5d0 \ub123\uc744 \ud14d\uc2a4\ud2b8 \ub370\uc774\ud130\ub97c \uc22b\uc790\ud615\ud0dc\ub85c \ubc14\uafd4 \uc8fc\uae30 \uc704\ud55c \ud074\ub798\uc2a4\ub97c \uc120\uc5b8\ud569\ub2c8\ub2e4. \ud574\ub2f9 \ud074\ub798\uc2a4\ub294 \ubb38\uc7a5\uc758 \uc2dc\uc791&lt;SOS, Start of Sentence>\uacfc \ub05d&lt;EOS, End of Sentence>\uc744 \ub098\ud0dc\ub294 \ubcc0\uc218\ub97c \uc120\uc5b8\ud558\ub294 \uac83\uc73c\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4. \uba3c\uc800 \ubb38\uc7a5\uc774 \uc785\ub825\ub418\uba74 \uc74c\uc808 \ub2e8\uc704\ub85c \ubd84\ub9ac\ud558\uace0 \uc74c\uc808\uc774 \uc874\uc7ac \ud560 \uacbd\uc6b0\ub294 \ud574\ub2f9 \uc5b4\uc808\uc758 \uce74\uc6b4\ud2b8\ub97c 1 \uc99d\uac00 \uc2dc\ud0a4\uace0 \uc5c6\uc744 \uacbd\uc6b0 dict\uc5d0 \uc74c\uc808\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4. <\/p>\n\n\n\n<p>source_vocab\uc740 \uc778\ucf54\ub529 \ubb38\uc7a5 \uc989, \uc6d0\uc5b4\uc808\uc774 \ub4e4\uc5b4\uac11\ub2c8\ub2e4. \ubc18\uba74 target_vocab\uc740 \ud615\ud0dc\uc18c \uc815\ubcf4\uac00 \ub4e4\uc5b4\uac04 \uc5b4\uc808\uc774 \uc785\ub825\ub429\ub2c8\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=\"\">SOS_token = 0\nEOS_token = 1\n\nclass Vocab:\n  def __init__(self):\n    self.vocab2index = {'&lt;SOS>':SOS_token, '&lt;EOS>':EOS_token}\n    self.index2vocab = {SOS_token:'&lt;SOS>', EOS_token:'&lt;EOS>'}\n    self.vocab_count = {}\n    self.n_vocab = len(self.vocab2index)\n    \n  def add_vocab(self, sentence):\n    for word in sentence.split(' '):\n      if word not in self.vocab2index:\n        self.vocab2index[word] = self.n_vocab\n        self.vocab_count[word] = 1\n        self.index2vocab[self.n_vocab] = word\n        self.n_vocab += 1\n      else:\n        self.vocab_count[word] += 1\n\nsource_vocab = Vocab()\ntarget_vocab = Vocab()<\/pre>\n\n\n\n<p>\uc804\uccb4\uc801\uc778 \ud750\ub984\uc740 \uc774\uc804\uc5d0 \ud14c\uc2a4\ud2b8\ud588\ub358 \ub0b4\uc6a9\uacfc \ube44\uc2b7\ud558\uae30 \ub54c\ubb38\uc5d0 \uc790\uc138\ud55c \uc124\uba85\uc740 \uc0dd\ub7b5\ud558\uace0 \ubcc0\uacbd\ub41c \ub0b4\uc6a9\ub9cc \uc815\ub9ac\ud569\ub2c8\ub2e4. \uc778\ucf54\ub354\ub294 131\u00d75\uc758 lookup \ud14c\uc774\ube14\uc5d0 \ub9f5\ud551\ub429\ub2c8\ub2e4. \uc989, GRU\uc5d0 131\uac1c\uc758 input_size\ub97c \ubcf4\ub0b4\uc9c0 \uc54a\uace0 5\uac1c\uc758 \uac12\ub9cc\uc744 \uc0ac\uc6a9\ud55c\ub2e4\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. GRU \uc140(Cell)\uc744 \ubcf4\uba74 \uc124\uba85\ub4dc\ub9b0\ub300\ub85c \uc785\ub825\uacfc \ucd9c\ub825\uc774 \ub3d9\uc77c\ud558\uac8c \uc815\uc758\ud588\uace0 4\uac1c\uc758 multi-layer\ub85c \uad6c\uc131\ud588\uc2b5\ub2c8\ub2e4. batch_first\ub97c True\ub85c \uc124\uc815\ud588\uc2b5\ub2c8\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=\"\">Encoder(\n  (embedding): Embedding(131, 5)\n  (gru): GRU(5, 5, num_layers=4, batch_first=True)\n)<\/pre>\n\n\n\n<p>\ub514\ucf54\ub354\ub294 Attention \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubaa8\ub378\uc744 \uc124\uacc4\ud569\ub2c8\ub2e4. \uc785\ub825\uac12 135\ub97c \ubc1b\uc544\uc11c 5\uac1c\uc758 \uc785\ub825\uc73c\ub85c \ub0b4\ubcf4\ub0c5\ub2c8\ub2e4. 135\ub294 target_vocab\uc758 \ud06c\uae30\uc785\ub2c8\ub2e4. 5\ub85c \uc785\ub825\ud558\ub294 \uac83\uc740 decoder\uac00 \uc774\uc804 \ub2e8\uacc4 encoder\uc758 hidden_state\ub97c \uc785\ub825\uc73c\ub85c \ubc1b\uae30 \ub54c\ubb38\uc5d0 encode\uc640 \ub3d9\uc77c\ud55c \uc0ac\uc774\uc988\ub85c \uc815\uc758\ud574\uc90d\ub2c8\ub2e4. attn Linear\uc5d0\uc11c\ub294 decoder\uc5d0 \uc785\ub825\ub418\ub294 \uac12\uacfc \uc774\uc804 \ub2e8\uacc4\uc758 hidden \uac12\uc744 \ud569\ud558\uc5ec\uc11c  target\uc758 max_length \uac12\uc778 7\ub85c \uc815\uc758\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774\uac83\uc740 attention \ubaa8\ub378\uc5d0\uc11c \uc911\uc694\ud55c \uacfc\uc815\uc774\ub77c\uace0 \ud560 \uc218 \uc788\ub294 attention weight(\uc5b4\ub5a4 \uac12\uc5d0 \uc9d1\uc911\ud560 \uac83\uc778\uac00?)\uc5d0 \ub300\ud55c \ubd80\ubd84\uc744 \uc815\uc758\ud558\ub294 \ubd80\ubd84\uc785\ub2c8\ub2e4.  \uc774\uc81c \uc774 attention weight \uac12\uacfc encoder\uc758 output \ub370\uc774\ud130\ub4e4\uc744 \uacf1\ud558\uc5ec \ud558\ub098\uc758 matrix\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc774 \uac12\uc744 decoder\uc5d0 \uc785\ub825\ub418\ub294 \uac12\uacfc \ud568\uaed8 GRU \uc140\uc5d0 \uc785\ub825 \ub370\uc774\ud130\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774\ub807\uac8c \ub098\uc628 \ucd9c\ub825 \uac12\uc744 Linear \ubaa8\ub378\uc744 \uac70\uccd0 target_vocab \uc0ac\uc774\uc988\uc640 \ub3d9\uc77c\ud558\uac8c \ub9de\ucdb0\uc8fc\uace0 \ucd9c\ub825\uac12\uc758 index \uac12\uc744 \ucc3e\uc544 \uc77c\uce58\ub418\ub294 \uac12\uc744 \ucd9c\ub825\ud569\ub2c8\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=\"\">AttentionDecoder(\n  (embedding): Embedding(135, 5)\n  (attn): Linear(in_features=10, out_features=7, bias=True)\n  (attn_combine): Linear(in_features=10, out_features=5, bias=True)\n  (dropout): Dropout(p=0.1, inplace=False)\n  (gru): GRU(5, 5, num_layers=4, batch_first=True)\n  (out): Linear(in_features=5, out_features=135, bias=True)\n)<\/pre>\n\n\n\n<p>\uae00\ub85c \ud45c\ud604\ud558\ub294 \uac83\uc774 \uae38\ubfd0 \ucf54\ub4dc\ub85c \ud45c\ud604\ud558\uba74 \uc774\uc804\uc758 attention \ubaa8\ub378\uacfc \ub3d9\uc77c\ud569\ub2c8\ub2e4. attention \ubaa8\ub378\uc740 \uae30\ubcf8 seq2seq \ubaa8\ub378\uc5d0\uc11c \uc0ac\uc6a9\ud588\ub358 context vector\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uace0 encoder\uc758 \uac01 output \uacb0\uacfc\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \ucc28\uc774\uac00 \uc788\uc2b5\ub2c8\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=\"\">class Test():\n\n  def __init__(self, sentences, source_vocab, target_vocab, encoder, decoder):\n    self.sentences = sentences\n    self.vocab = source_vocab\n    self.target_vocab = target_vocab\n    self.encoder = encoder\n    self.decoder = decoder\n\n  def tensorize(self, sentence):\n    idx = [self.vocab.vocab2index[word] for word in sentence.split(' ')]\n    return idx\n\n  def run(self):\n    x_train = [self.tensorize(sentence) for sentence in self.sentences]\n    text = []\n    \n    for x in x_train:\n      decoded_word=[]      \n      _x = torch.tensor(x, dtype=torch.long).view(-1,1)      \n      encoder_hidden = self.encoder.initHidden()\n      encoder_outputs = torch.zeros(config.max_length, self.encoder.hidden_size)\n      \n      for ei in range(_x.size(0)):\n          encoder_output, encoder_hidden = self.encoder(_x[ei], encoder_hidden)\n          encoder_outputs[ei] = encoder_output[0,0]\n\n      decoder_input = torch.tensor([SOS_token], dtype=torch.long)\n      decoder_hidden = encoder_hidden\n\n      for di in range(config.max_length):\n        decoder_output, decoder_hidden, decoder_attention = self.decoder(decoder_input, decoder_hidden, encoder_outputs)\n        i_val,i_ndx = decoder_output.data.topk(1)\n        t_word = self.target_vocab.index2vocab[i_ndx.item()]\n        decoded_word.append(t_word)\n\n        if _x.size(0) > di: \n          if _x[di] &lt; self.target_vocab.n_vocab:\n            decoder_input = _x[di] \n        else: \n          decoder_input = i_ndx.squeeze().detach()\n\n        # \ubb38\uc7a5 \ub9c8\uce68\ud45c break\n        if t_word == '.\/Punctuation': break\n        # &lt;EOS> break\n        if i_ndx == 1: break\n        \n      text.append(decoded_word)\n    return text\n\n  def predict(self):\n    return self.run()<\/pre>\n\n\n\n<p>\uc774\uc81c \uad6c\ucd95\ub41c \ubaa8\ub378\uc744 Test Class\ub97c \ud65c\uc6a9\ud574\uc11c \ud14c\uc2a4\ud2b8\ud574\ubcf4\uaca0\uc2b5\ub2c8\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=\"\">sentences = ['\ub9ce\uc774 \ucd94\uc6cc\uc694.','\uae40\ubc25\uc774 \uc88b\uc544\uc694.','\uc55e\uc73c\ub85c \uc624\uc138\uc694.','\uc2dc\ud5d8 \uacf5\ubd80\ub97c \ud574\uc694.','\ucc45\uc744 \uc77d\uc5b4\ubcf4\uc790.','\ucc98\uc74c \ubd59\uaca0\uc2b5\ub2c8\ub2e4.']\ntest = Test(sentences, source_vocab, target_vocab, encoder, decoder)\npredict = test.predict()\nfor ndx,(i,j) in enumerate(zip(sentences, predict)):\n  print(ndx, i,j)<\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ubcf8 \ube14\ub85c\uadf8\uc5d0 Seq2Seq \ubaa8\ub378\uc744 \ud65c\uc6a9\ud574\uc11c \uac04\ub2e8\ud55c \ubb38\uc7a5\uc744 \uc0dd\uc131\ud55c\ub2e4\ub358\uac00 \ubc88\uc5ed\uc744 \ud574\ubcf4\ub294 \uc608\uc81c\ub97c \uc218\ud589\ud588\uc2b5\ub2c8\ub2e4. \ub610 Seq2Seq\uc5d0 Attention\uc744 \uc801\uc6a9\ud574\uc11c \ubb38\uc7a5\uc0dd\uc131\uc744 \ud14c\uc2a4\ud2b8\ud574 \ubcf4\uae30\ub3c4 \ud588\uc2b5\ub2c8\ub2e4. \uc774\ubc88\uc5d0\ub294 Seq2Seq \uc5b4\ud150\uc158\uc744 \ud65c\uc6a9\ud574\uc11c \ud615\ud0dc\uc18c \ubd84\uc11d\uc744 \uc218\ud589\ud558\ub294 \uc608\uc81c\ub97c \ubb38\ub4e4\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc218\ud589\ud558\ub294 \ubc29\ubc95\uc740 \uc774\uc804\uc5d0 \uc218\ud589\ud588\ub358 \uc608\uc81c\ub4e4\uacfc \uc544\uc8fc \uc720\uc0ac\ud574\uc11c \uc774\uc804 \uc608\uc81c\uc5d0\uc11c \ud65c\uc6a9\ud588\ub358 Word Embedding, Encoder, Decoder, RNN \ubaa8\ub378\uc744 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 \ubc29\ubc95\uc740 \uc5ec\ub7ec \uc5f0\uad6c\uc790\ub4e4\uc5d0 \uc758\ud574\uc11c \uc5f0\uad6c\ub418\uace0 \uc788\uc2b5\ub2c8\ub2e4. ETRI(\ud55c\uad6d\uc804\uc790\ud1b5\uc2e0\uc5f0\uad6c\uc6d0)\uc5d0\uc11c\ub3c4 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.cedartrees.co.kr\/index.php\/2021\/02\/22\/sequence2sequence-attn-morpheme\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Seq2Seq \uc5b4\ud150\uc158 \ud615\ud0dc\uc18c \ubd84\uc11d&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[40,76,14],"tags":[97,96,61,74,72,55],"_links":{"self":[{"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/posts\/847"}],"collection":[{"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/comments?post=847"}],"version-history":[{"count":13,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/posts\/847\/revisions"}],"predecessor-version":[{"id":867,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/posts\/847\/revisions\/867"}],"wp:attachment":[{"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/media?parent=847"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/categories?post=847"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/tags?post=847"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}