[[ 0 0 1 2] [ 0 0 0 3] [ 4 5 6 7] [ 0 8 9 10] [ 0 11 12 13] [ 0 0 0 14] [ 0 0 0 15] [ 0 0 16 17] [ 0 0 18 19] [ 0 0 0 20]]์์ฐ์ด = ์ฐ๋ฆฌ๊ฐ ํ์์ ๋งํ๋ ์์ฑ์ด๋ ํ ์คํธ
์์ฐ์ด ์ฒ๋ฆฌ(Natural Language Processing, NLP) : ์์ฐ์ด๋ฅผ ์ปดํจํฐ๊ฐ ์ธ์ํ๊ณ ์ฒ๋ฆฌํ๋ ๊ฒ
- ํ ์คํธ ์ ์ฒ๋ฆฌ ๊ณผ์
ํ ํฐํ(tokenization) : ์ ๋ ฅ๋ ํ ์คํธ๋ฅผ ์๊ฒ ๋๋๋ ๊ณผ์
keras, text ๋ชจ๋์ text_to_word_sequence() ํจ์ : ๋ฌธ์ฅ์ ๋จ์ด ๋จ์๋ก ๋๋
from tensorflow.keras.preprocessing.text import text_to_word_sequence
text = ‘ํด๋ณด์ง ์์ผ๋ฉด ํด๋ผ ์ ์๋ค’
result = text_to_word_sequence(text)
print(result)
[‘ํด๋ณด์ง’, ‘์์ผ๋ฉด’, ‘ํด๋ผ’, ‘์’, ‘์๋ค’]
๋จผ์ ํ ์คํธ์ ๊ฐ ๋จ์ด๋ฅผ ๋๋์ด ํ ํฐํํฉ๋๋ค.
ํ ์คํธ์ ๋จ์ด๋ฅผ ํ ํฐํํด์ผ ๋ฅ๋ฌ๋์์ ์ธ์๋ฉ๋๋ค.
ํ ํฐํ ํ ๊ฒฐ๊ณผ๋ ๋ฅ๋ฌ๋์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ผ๋ผ์ค์ Tokenizer() ํจ์ : ๋จ์ด์ ๋น๋ ์ ๊ณ์ฐ
from tensorflow.keras.preprocessing.text import Tokenizer
docs = [‘๋จผ์ ํ
์คํธ์ ๊ฐ ๋จ์ด๋ฅผ ๋๋์ด ํ ํฐํํฉ๋๋ค.’, ‘ํ
์คํธ์ ๋จ์ด๋ก ํ ํฐํํด์ผ ๋ฅ๋ฌ๋์์ ์ธ์๋ฉ๋๋ค.’, ‘ํ ํฐํํ ๊ฒฐ๊ณผ๋ ๋ฅ๋ฌ๋์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.’,]
#Tokenizer()๋ฅผ ์ด์ฉํด ์ ์ฒ๋ฆฌ
token = Tokenizer() # ํ ํฐํ ํจ์ ์ง์
token.fit_on_texts(docs) # ํ ํฐํ ํจ์์ ๋ฌธ์ฅ ์ ์ฉ
print(token.word_counts) # ๋จ์ด์ ๋น๋ ์๋ฅผ ๊ณ์ฐํ ๊ฒฐ๊ณผ ์ถ๋ ฅ
#word_counts= ๋จ์ด์ ๋น๋ ์๋ฅผ ๊ณ์ฐํด์ฃผ๋ ํจ์
OrderedDict([(‘๋จผ์ ’, 1), (‘ํ ์คํธ์’, 2), (‘๊ฐ’, 1), (‘๋จ์ด๋ฅผ’, 1), (‘๋๋์ด’, 1), (‘ํ ํฐํ’, 3), (‘ํฉ๋๋ค’, 1), (‘๋จ์ด๋ก’, 1), (‘ํด์ผ’, 1), (‘๋ฅ๋ฌ๋์์’, 2), (‘์ธ์๋ฉ๋๋ค’, 1), (‘ํ’, 1), (‘๊ฒฐ๊ณผ๋’, 1), (‘์ฌ์ฉ’, 1), (‘ํ ’, 1), (‘์’, 1), (‘์์ต๋๋ค’, 1)])
‘ํ ํฐํ’๊ฐ 3๋ฒ, ‘ํ ์คํธ์’์ ‘๋ฅ๋ฌ๋์์’๊ฐ 2๋ฒ, ๋๋จธ์ง๊ฐ 1๋ฒ์ฉ ๋์ค๊ณ ์๋ค
์์๋ฅผ ๊ธฐ์ตํ๋ OrderedDict ํด๋์ค์ ๋ด๊ฒจ ์๋ ํํ๋ก ์ถ๋ ฅ
document_count() ํจ์ : ์ด ๋ช ๊ฐ์ ๋ฌธ์ฅ์ด ๋ค์ด์๋๊ฐ?
print(token.document_count)
์คํ๊ฒฐ๊ณผ : 3
word_docs() ํจ์ : ๊ฐ ๋จ์ด๋ค์ด ๋ช ๊ฐ์ ๋ฌธ์ฅ์ ๋์ค๋๊ฐ? (์ถ๋ ฅ๋๋ ์์๋ ๋๋ค)
print(token.word_docs)
{‘ํ’: 1, ‘๋จผ์ ’: 1, ‘๋๋์ด’: 1, ‘ํด์ผ’: 1, ‘ํ ํฐํ’: 3, ‘๊ฒฐ๊ณผ๋’: 1, ‘๊ฐ’: 1, ‘๋จ์ด๋ฅผ’: 1, ‘์ธ์๋ฉ๋๋ค’: 1, ‘์์ต๋๋ค’: 1, ‘ํ ’: 1, ‘๋จ์ด๋ก’: 1, ‘์’: 1, ‘ํฉ๋๋ค’: 1, ‘๋ฅ๋ฌ๋์์’: 2, ‘์ฌ์ฉ’: 1, ‘ํ ์คํธ์’: 2}
word_index() ํจ์ : ๊ฐ ๋จ์ด์ ๋งค๊ฒจ์ง ์ธ๋ฑ์ค ๊ฐ
print(token.word_index)
{'๋ฅ๋ฌ๋์์': 3, '๋จ์ด๋ฅผ': 6, '๊ฒฐ๊ณผ๋': 13, '์': 16, 'ํ': 12, '์ธ์๋ฉ๋๋ค': 11, 'ํฉ๋๋ค': 8, 'ํ ์คํธ์': 2, 'ํ ํฐํ': 1, 'ํ ': 15, '๊ฐ': 5, '์์ต๋๋ค': 17, '๋จผ์ ': 4, '๋๋์ด': 7, 'ํด์ผ': 10, '์ฌ์ฉ': 14, '๋จ์ด๋ก': 9}
๋จ์ด์ ์-ํซ ์ธ์ฝ๋ฉ
‘์ค๋ซ๋์ ๊ฟ๊พธ๋ ์ด๋ ๊ทธ ๊ฟ์ ๋ฎ์๊ฐ๋ค’
์-ํซ ์ธ์ฝ๋ฉ = ๊ฐ ๋จ์ด๋ฅผ ๋ชจ๋ 0์ผ๋ก ๋ฐ๊พธ์ด ์ฃผ๊ณ ์ํ๋ ๋จ์ด๋ง 1๋ก ๋ฐ๊พธ์ด ์ฃผ๋ ๊ฒ
์ด๋ฅผ ์ํํ๊ธฐ ์ํด ๋จผ์ ๋จ์ด ์๋งํผ 0์ผ๋ก ์ฑ์์ง ๋ฒกํฐ ๊ณต๊ฐ์ผ๋ก ๋ฐ๊พธ๊ธฐ
ํ์ด์ฌ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๋ฏ๋ก, ๋งจ ์์ 0์ด ์ถ๊ฐ๋จ
์ด์ ๊ฐ ๋จ์ด๊ฐ ๋ฐฐ์ด ๋ด์์ ํด๋นํ๋ ์์น๋ฅผ 1๋ก ๋ฐ๊ฟ์ ๋ฒกํฐํํ ์ ์๋ค.
1. ํ ํฐํ ํจ์๋ฅผ ๋ถ๋ฌ์ ๋จ์ด ๋จ์๋ก ํ ํฐํํ๊ณ ๊ฐ ๋จ์ด์ ์ธ๋ฑ์ค ๊ฐ์ ์ถ๋ ฅ
from tensorflow.keras.preprocessing.text import Tokenizer
text=“์ค๋ซ๋์ ๊ฟ๊พธ๋ ์ด๋ ๊ทธ ๊ฟ์ ๋ฎ์๊ฐ๋ค”
token = Tokenizer()
token.fit_on_texts([text])
print(token.word_index)
{‘๊ฟ์’: 5, ‘๊ฟ๊พธ๋’: 2, ‘๊ทธ’: 4, ‘๋ฎ์๊ฐ๋ค’: 6, ‘์ด๋’: 3, ‘์ค๋ซ๋์’: 1}
2. ์-ํซ ์ธ์ฝ๋ฉ
์ผ๋ผ์ค์์ ์ ๊ณตํ๋ Tokenizer์ texts_to_sequences() ํจ์ : ๋ง๋ค์ด์ง ํ ํฐ์ ์ธ๋ฑ์ค๋ก๋ง ์ฑ์์ง ์๋ก์ด ๋ฐฐ์ด ์์ฑ
x = token.texts_to_sequences([text])
print(x)
[[1,2,3,4,5,6]]
to_categorical() ํจ์ - 1~6๊น์ง์ ์ ์๋ก ์ธ๋ฑ์ค ๋์ด ์๋ ๊ฒ์ 0๊ณผ 1๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฐฐ์ด๋ก ๋ฐ๊พธ๊ธฐ, ์-ํซ ์ธ์ฝ๋ฉ ์งํ
. ๋ฐฐ์ด ๋งจ ์์ 0์ด ์ถ๊ฐ๋๋ฏ๋ก ๋จ์ด ์๋ณด๋ค 1์ด ๋ ๋ง๊ฒ ์ธ๋ฑ์ค ์ซ์๋ฅผ ์ก์ ์ฃผ๋ ๊ฒ์ ์ ์!
from keras.utils import to_categorical
# ์ธ๋ฑ์ค ์์ ํ๋๋ฅผ ์ถ๊ฐํด์ ์-ํซ ์ธ์ฝ๋ฉ ๋ฐฐ์ด ๋ง๋ค๊ธฐ
word_size = len(t.word_index) +1
x = to_categorical(x, num_classes=word_size)
print(x)
์-ํซ ์ธ์ฝ๋ฉ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด ๋ฒกํฐ์ ๊ธธ์ด๊ฐ ๋๋ฌด ๊ธธ์ด์ง๋ค๋ ๋จ์ ( ์๋ฅผ ๋ค์ด 1๋ง ๊ฐ์ ๋จ์ด ํ ํฐ์ผ๋ก ์ด๋ฃจ์ด์ง ๋ง๋ญ์น๋ฅผ ๋ค๋ฃฌ๋ค๊ณ ํ ๋, ์ด ๋ฐ์ดํฐ๋ฅผ ์-ํซ ์ธ์ฝ๋ฉ์ผ๋ก ๋ฒกํฐํํ๋ฉด 9,999๊ฐ์ 0๊ณผ ํ๋์ 1๋ก ์ด๋ฃจ์ด์ง ๋จ์ด ๋ฒกํฐ๋ฅผ 1๋ง ๊ฐ๋ ๋ง๋ค์ด์ผ ํ๋ค.) ์ด๋ฌํ ๊ณต๊ฐ์ ๋ญ๋น๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด ๋จ์ด ์๋ฒ ๋ฉ(word embedding)์ด๋ผ๋ ๋ฐฉ๋ฒ
๋จ์ด ์๋ฒ ๋ฉ์ ์ฃผ์ด์ง ๋ฐฐ์ด์ ์ ํด์ง ๊ธธ์ด๋ก ์์ถ
๋จ์ด ์๋ฒ ๋ฉ์ผ๋ก ์ป์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ง๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ๊ณต๊ฐ์ ๋ญ๋น๊ฐ ์ ๋ค
์ด๋ฐ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ฅํ ์ด์ ๋ ๊ฐ ๋จ์ด ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ
๋จ์ด ๊ฐ ์ ์ฌ๋๋ ์ด๋ป๊ฒ ๊ณ์ฐํ๋ ๊ฒ์ผ๊น?
์ค์ฐจ ์ญ์ ํ
์ผ๋ผ์ค์์ ์ ๊ณตํ๋ Embedding()ํจ์
from keras.layers import Embedding model = Sequential() model.add(Embedding(16,4)
Embedding(16,4)๊ฐ ์๋ฏธํ๋ ๋ฐ๋// ‘์ ๋ ฅ’๊ณผ ‘์ถ๋ ฅ’์ ํฌ๊ธฐ// ์ ๋ ฅ๋ ์ด ๋จ์ด ์๋ 16, ์๋ฒ ๋ฉ ํ ์ถ๋ ฅ๋๋ ๋ฒกํฐ ํฌ๊ธฐ๋ 4
์ฌ๊ธฐ์ ๋จ์ด๋ฅผ ๋งค๋ฒ ์ผ๋ง๋ ์ ๋ ฅํ ์ง๋ฅผ ์ถ๊ฐ๋ก ์ง์ ํ ์ ์๋ค.
Embedding(16,4, input_length=2)๋ผ๊ณ ํ๋ฉด ์ด ์ ๋ ฅ๋๋ ๋จ์ด ์๋ 16๊ฐ์ด์ง๋ง ๋งค๋ฒ 2๊ฐ์ฉ๋ง ๋ฃ๊ฒ ๋ค๋ ๋ป
ํ ์คํธ ๊ฐ์ ์ ์์ธกํ๋ ๋ฅ๋ฌ๋ ๋ชจ๋ธ -์ํ ๋ฆฌ๋ทฐ๋ฅผ ๋ฅ๋ฌ๋ ๋ชจ๋ธ๋ก ํ์ตํด์, ๊ฐ ๋ฆฌ๋ทฐ๊ฐ ๊ธ์ ์ ์ธ์ง ๋ถ์ ์ ์ธ์ง ์์ธก
1. ์งง์ ๋ฆฌ๋ทฐ 10๊ฐ๋ฅผ ๋ถ๋ฌ์ ๊ฐ๊ฐ ๊ธ์ ์ด๋ฉด 1์ด๋ผ๋ ํด๋์ค๋ฅผ, ๋ถ์ ์ ์ด๋ฉด 0์ด๋ผ๋ ํด๋์ค๋ก ์ง์
# ํ
์คํธ ๋ฆฌ๋ทฐ ์๋ฃ ์ง์
docs = [‘๋๋ฌด ์ฌ๋ฐ๋ค์’,‘์ต๊ณ ์์’,‘์ฐธ ์ ๋ง๋ ์ํ์์’,‘์ถ์ฒํ๊ณ ์ถ์ ์ํ์
๋๋ค.’,‘ํ ๋ฒ ๋ ๋ณด๊ณ ์ถ๋ค์’,‘๊ธ์์’,‘๋ณ๋ก์์’,‘์๊ฐ๋ณด๋ค ์ง๋ฃจํ๋ค์’,‘์ฐ๊ธฐ๊ฐ ์ด์ํด์’,‘์ฌ๋ฏธ์์ด์’]
# ๊ธ์ ๋ฆฌ๋ทฐ๋ 1, ๋ถ์ ๋ฆฌ๋ทฐ๋ 0์ผ๋ก ํด๋์ค ์ง์
class = array([1,1,1,1,1,0,0,0,0,0])
2. ํ ํฐํ ๊ณผ์
Tokenizer() ํจ์์ fit_on_text: ๊ฐ ๋จ์ด๋ฅผ ํ๋์ ํ ํฐ์ผ๋ก ๋ณํ
# ํ ํฐํ
token = Tokenizer()
token.fit_on_texts(docs)
print(token.word_index) # ํ ํฐํ ๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด ํ์ธ
{'์๊ฐ๋ณด๋ค': 16, '๋ง๋ ': 6, '์ํ์ ๋๋ค': 10, 'ํ ๋ฒ': 11, '์ํ์์': 7, '์ถ์': 9, '๋ณด๊ณ ์ถ๋ค์': 13, '์ด์ํด์': 19, '์ฌ๋ฏธ์์ด์': 20, '๋': 12, '์ถ์ฒํ๊ณ ': 8, '์ง๋ฃจํ๋ค์': 17, '์ต๊ณ ์์': 3, '์': 5, '์ฐธ': 4, '์ฌ๋ฐ๋ค์': 2, '๋ณ๋ก์์': 15, '๊ธ์์': 14, '์ฐ๊ธฐ๊ฐ': 18, '๋๋ฌด': 1}.
3. ํ ํฐ์ ์ง์ ๋ ์ธ๋ฑ์ค๋ก ์๋ก์ด ๋ฐฐ์ด์ ์์ฑ
x = token.texts_to_sequences(docs)
print(x)
[[1, 2], [3], [4, 5, 6, 7], [8, 9, 10], [11, 12, 13], [14], [15], [16, 17], [18, 19], [20]]
๋จ์ด๊ฐ 1๋ถํฐ 20๊น์ง์ ์ซ์๋ก ํ ํฐํ
๊ทธ๋ฐ๋ฐ ์ ๋ ฅ๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ์ ํ ํฐ ์๊ฐ ๊ฐ๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ ์ ์ํ์๊ธฐ ๋ฐ๋๋๋ค.
์๋ฅผ ๋ค์ด ‘์ต๊ณ ์์’๋ ํ๋์ ํ ํฐ ([3])์ด์ง๋ง ‘์ฐธ ์ ๋ง๋ ์ํ์์’๋ 4๊ฐ์ ํ ํฐ([4, 5, 6, 7])์ ๊ฐ์ง๊ณ ์์ง์.
๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ์ ๋ ฅ์ ํ๋ ค๋ฉด ํ์ต ๋ฐ์ดํฐ์ ๊ธธ์ด๊ฐ ๋์ผํด์ผ ํฉ๋๋ค.=>ํจ๋ฉ( padding)
pad_sequnce()
padded_x = pad_sequences(x, 4) # ์๋ก ๋ค๋ฅธ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ฅผ 4๋ก ๋ง์ถ๊ธฐ
print(padded_x)
[[ 0 0 1 2]
[ 0 0 0 3]
[ 4 5 6 7]
[ 0 8 9 10]
[ 0 11 12 13]
[ 0 0 0 14]
[ 0 0 0 15]
[ 0 0 16 17]
[ 0 0 18 19]
[ 0 0 0 20]]
4. ๋จ์ด ์๋ฒ ๋ฉ์ ํฌํจ, ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ๋ง๋ค๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
์๋ฒ ๋ฉ ํจ์์ ํ์ํ ์ธ ๊ฐ์ง ํ๋ผ๋ฏธํฐ= ‘์ ๋ ฅ, ์ถ๋ ฅ, ๋จ์ด ์’
1. ์ด ๋ช ๊ฐ์ ๋จ์ด ์งํฉ์์(์ ๋ ฅ),
2. ๋ช ๊ฐ์ ์๋ฒ ๋ฉ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง(์ถ๋ ฅ),
3. ๊ทธ๋ฆฌ๊ณ ๋งค๋ฒ ์ ๋ ฅ๋ ๋จ์ด ์๋ ๋ช ๊ฐ๋ก ํ ์ง(๋จ์ด ์)
1 . word_size๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ ๋ค, ๊ธธ์ด๋ฅผ ์ธ๋ len() ํจ์๋ฅผ ์ด์ฉํด word_index ๊ฐ์ ์์ ๋ง๋ ๋ณ์์ ๋์ ํฉ๋๋ค. ์ด๋ ์ ์ฒด ๋จ์ด์ ๋งจ ์์ 0์ด ๋จผ์ ๋์์ผ ํ๋ฏ๋ก ์ด ๋จ์ด ์์ 1์ ๋ํ๋ ๊ฒ์ ์์ง ๋ง์๊ธฐ ๋ฐ๋๋๋ค.
word_size = len(token.word_index) +1
2. ์ด๋ฒ ์์ ์์๋ word_size๋งํผ์ ์ ๋ ฅ ๊ฐ์ ์ด์ฉํด 8๊ฐ์ ์๋ฒ ๋ฉ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค๊ฒ ์ต๋๋ค. ์ฌ๊ธฐ์ 8์ด๋ผ๋ ์ซ์๋ ์์๋ก ์ ํ ๊ฒ์ ๋๋ค. ๋ฐ์ดํฐ์ ๋ฐ๋ผ ์ ์ ํ ๊ฐ์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค. ์ด๋ ๋ง๋ค์ด์ง 8๊ฐ์ ์๋ฒ ๋ฉ ๊ฒฐ๊ณผ๋ ์ฐ๋ฆฌ ๋์ ๋ณด์ด์ง ์์ต๋๋ค. ๋ด๋ถ์์ ๊ณ์ฐํ์ฌ ๋ฅ๋ฌ๋์ ๋ ์ด์ด๋ก ํ์ฉ๋ฉ๋๋ค.
3. ํจ๋ฉ ๊ณผ์ ์ ๊ฑฐ์ณ 4๊ฐ์ ๊ธธ์ด๋ก ๋ง์ถฐ ์ฃผ์์ผ๋ฏ๋ก 4๊ฐ์ ๋จ์ด๊ฐ ๋ค์ด๊ฐ๊ฒ ์ค์ ํ๋ฉด ์๋ฒ ๋ฉ ๊ณผ์ ์ ๋ค์ ํ ์ค๋ก ํํ๋ฉ๋๋ค.
Embedding(word_size, 8, input_length=4)
๋ชจ๋ธ ์์ฑ
# ๋จ์ด ์๋ฒ ๋ฉ์ ํฌํจํ์ฌ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ๋ง๋ค๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
model = Sequential()
model.add(Embedding(word_size, 8, input_length=4))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(padded_x, labels, epochs=20)
print("\n Accuracy: %.4f" % (model.evaluate(padded_x, labels)[1]))
์ต์ ํ ํจ์๋ก adam()์ ์ฌ์ฉํ๊ณ ์ค์ฐจ ํจ์๋ก๋ binary_crossentropy()๋ฅผ ์ฌ์ฉํ์ต๋๋ค. 30๋ฒ ๋ฐ๋ณตํ๊ณ ๋์ ์ ํ๋๋ฅผ ๊ณ์ฐํ์ฌ ์ถ๋ ฅํ๊ฒ ํ์ต๋๋ค.
import numpy
import tensorflow as tf
from numpy import array
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Flatten,Embedding
# ํ
์คํธ ๋ฆฌ๋ทฐ ์๋ฃ ์ง์
docs = ['๋๋ฌด ์ฌ๋ฐ๋ค์','์ต๊ณ ์์','์ฐธ ์ ๋ง๋ ์ํ์์','์ถ์ฒํ๊ณ ์ถ์ ์ํ์
๋๋ค.','ํ๋ฒ ๋ ๋ณด๊ณ ์ถ๋ค์','๊ธ์์','๋ณ๋ก์์','์๊ฐ๋ณด๋ค ์ง๋ฃจํ๋ค์','์ฐ๊ธฐ๊ฐ ์ด์ํด์','์ฌ๋ฏธ์์ด์']
# ๊ธ์ ๋ฆฌ๋ทฐ๋ 1, ๋ถ์ ๋ฆฌ๋ทฐ๋ 0์ผ๋ก ํด๋์ค ์ง์
classes = array([1,1,1,1,1,0,0,0,0,0])
# ํ ํฐํ
token = Tokenizer()
token.fit_on_texts(docs)
print(token.word_index)
# ํจ๋ฉ, ์๋ก ๋ค๋ฅธ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ฅผ 4๋ก ๋ง์ถค
padded_x = pad_sequences(x, 4)
"\nํจ๋ฉ ๊ฒฐ๊ณผ\n", print(padded_x)
# ์๋ฒ ๋ฉ์ ์
๋ ฅ๋ ๋จ์ด ์ ์ง์
word_size = len(token.word_index)+1
# ๋จ์ด ์๋ฒ ๋ฉ์ ํฌํจํ์ฌ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ๋ง๋ค๊ณ ๊ฒฐ๊ณผ ์ถ๋ ฅ
model = Sequential()
model.add(Embedding(word_size, 8, input_length=4))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(padded_x, labels, epochs=20)
print("\n Accuracy: %.4f" % (model.evaluate(padded_x, classes)[1]))
์คํ ๊ฒฐ๊ณผ
Train on 10 samples
Epoch 1/20 10/10 [==============================] - 0s 7ms/sample - loss: 0.7047 - accuracy: 0.3000
Epoch 2/20 10/10 [==============================] - 0s 183us/sample - loss: 0.7027 - accuracy: 0.4000
(์ค๋ต)
Epoch 20/20 10/10 [==============================] - 0s 150us/sample - loss: 0.6668 - accuracy: 0.9000 10/10 [==============================] - 0s 2ms/sample - loss: 0.6648 - accuracy: 0.9000
ํ์ต ํ 10๊ฐ์ ๋ฆฌ๋ทฐ ์ํ ์ค 9๊ฐ์ ๊ธ์ ๋๋ ๋ถ์ ์ ๋งํ์
'๋ฅ๋ฌ๋ > Today I learned :' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฅ๋ฌ๋] itertools ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2021.04.01 |
---|---|
[๋ฅ๋ฌ๋] Numpy ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2021.03.31 |
[๋ฅ๋ฌ๋] ์ด๋ฏธ์ง ์ธ์ , ์ปจ๋ณผ๋ฃจ์ ์ ๊ฒฝ๋ง(CNN) (0) | 2021.03.27 |
[๋ฅ๋ฌ๋] ์ ํ ํ๊ท ์ ์ฉํ๊ธฐ (0) | 2021.03.26 |
[๋ฅ๋ฌ๋] ์์ธ์ ์ข ๋ฅ ์์ธกํ๊ธฐ (0) | 2021.03.25 |