[AIS7] NLP (4)

BBakHyeยท2022๋…„ 12์›” 15์ผ
0

๐Ÿฆ AI SCHOOL 7๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
47/52
post-thumbnail

1106 ์‹ค์Šต (RNN)

๋จธ์‹ ๋Ÿฌ๋‹์—์„œ๋Š” BOW, TF-IDF ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๋”ฅ๋Ÿฌ๋‹์—์„œ๋„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
RNN์—์„œ๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ฝ”๋”ฉํ•ด์ฃผ๋Š” ์‹œํ€€์Šค์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข€ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋‚ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ RNN

: ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉ

  • ์ธต์„ ๊นŠ๊ฒŒ ์Œ“์ง€ ์•Š์Œ

RNN Explanier
RNN์˜ ์‹œ๊ฐํ™” ์„ค๋ช…์ด ์ž˜ ๋˜์–ด ์žˆ๋Š” ๋ธ”๋กœ๊ทธ

์…€(cell): RNN์˜ ์€๋‹‰์ธต์—์„œ ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๋…ธ๋“œ(RNN์˜ ๋ฐ˜๋ณต ๋‹จ์œ„, ๊ฐœ๋ณ„)
๋ฉ”๋ชจ๋ฆฌ์…€(memory cell): ์ด์ „์˜ ๊ฐ’์„ ๊ธฐ์–ตํ•˜๋Š” ์ผ์ข…์˜ ๋ฉ”๋ชจ๋ฆฌ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์…€(์ „์ฒด, RNNcell์ด๋ผ๊ณ ๋„ ํ•จ)
์€๋‹‰์ƒํƒœ(hidden state): ์€๋‹‰์ธต์˜ ๋ฉ”๋ชจ๋ฆฌ ์…€์—์„œ ๋‚˜์˜จ ๊ฐ’์ด ์ถœ๋ ฅ์ธต ๋ฐฉํ–ฅ ๋˜๋Š” ๋‹ค์Œ ์‹œ์ ์˜ ์ž์‹ (๋‹ค์Œ ๋ฉ”๋ชจ๋ฆฌ ์…€)์—๊ฒŒ ๋ณด๋‚ด๋Š” ์ƒํƒœ

  • RNN์€ ์€๋‹‰์ธต์˜ ๋…ธ๋“œ์—์„œ ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋‚˜์˜จ ๊ฒฐ๊ณผ๊ฐ’์„ ์ถœ๋ ฅ์ธต ๋ฐฉํ–ฅ์œผ๋กœ๋„ ๋ณด๋‚ด๋ฉด์„œ,
    ๋‹ค์‹œ ์€๋‹‰์ธต ๋…ธ๋“œ์˜ ๋‹ค์Œ ๊ณ„์‚ฐ์˜ ์ž…๋ ฅ์œผ๋กœ ๋ณด๋‚ด๋Š” ํŠน์ง•
    ๋‹ค์–‘ํ•œ ๊ธธ์ด์˜ ์ž…๋ ฅ ์‹œํ€€์Šค๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ธ๊ณต ์‹ ๊ฒฝ๋ง
  • ํƒ€์ž„์Šคํ…(timesteps): ์ž…๋ ฅ ์‹œํ€€์Šค์˜ ๊ธธ์ด(input_length)๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ธฐ๋„ ํ•จ. ์‹œ์ ์˜ ์ˆ˜
  • ์ˆœํ™˜๋„คํŠธ์›Œํฌ์—์„œ๋Š” ์€๋‹‰์ธต์ด ์ž…๋ ฅ์ธต๊ณผ ์ด์ „ ํƒ€์ž„์Šคํ…์˜ ์€๋‹‰์ธต์œผ๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ๋ฐ›์Œ
  • ์ธ์ ‘ํ•œ ํƒ€์ž„ ์Šคํ…์˜ ์ •๋ณด๊ฐ€ ์€๋‹‰์ธต์— ํ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ์–ต๊ฐ€๋Šฅ(์‹ ๊ฒฝ๋ง ๋‚ด๋ถ€์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™œ์šฉ)

โœ… BPTT (BackPropagation Through Time), RNN์˜ ์—ญ์ „ํŒŒ

  • ๊ธฐ์šธ๊ธฐ๋Š” ์˜ค์ฐจ์˜ ๋ณ€ํ™”์— ๋Œ€ํ•œ ๊ฐ€์ค‘์น˜์˜ ๋ณ€ํ™”์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋ธ์— ๋งž๋Š” ์—ญ์ „ํŒŒ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ธฐ์šธ๊ธฐ๋ฅผ ์ฐพ์•„์•ผ ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ
  • ๋‹ค๋ฅธ ์‹ ๊ฒฝ๋ง๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ RNN ์—ญ์‹œ ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•(Gradient Descent)๊ณผ ์˜ค์ฐจ ์—ญ์ „ํŒŒ(backpropagation)๋ฅผ ์ด์šฉํ•ด ํ•™์Šต
  • ์ •ํ™•ํ•˜๊ฒŒ๋Š” ์‹œ๊ฐ„ ํ๋ฆ„์— ๋”ฐ๋ฅธ ์ž‘์—…์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ญ์ „ํŒŒ๋ฅผ ํ™•์žฅํ•œ BPTT(Back-Propagation Through Time)๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•™์Šต

โœ… RNN์˜ ํ•œ๊ณ„์ : ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค

:๋ณต์žกํ•œ ์—ฐ์‚ฐ์œผ๋กœ ์ธํ•œ ๊ธฐ์šธ๊ธฐ ๋ฌธ์ œ ๋ฐœ์ƒ
=> ์•„์ฃผ ์˜ค๋ž˜ ์ „์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

๐Ÿ’ก ๋ฌธ์ œ์ : ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค ๋˜๋Š” ํญ๋ฐœ ๋ฌธ์ œ(Vanishing-Exploding Gradient Problem)

  • ์‹œ๊ฐ„์„ ํ†ตํ•œ ์—ญ์ „ํŒŒ( Backpropagation Through Time)์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ผ๋ฐ˜ ์—ญ์ „ํŒŒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ๊ณฑ์…ˆ๊ณผ ์—ฐ์‚ฐ์„ ๋„์ž…

๐Ÿ’กํ•ด๊ฒฐ์ฑ…: Truncated-Backpropagation Through Time(์ƒ๋žต๋œ BPTT, ํ˜„์žฌ time step์—์„œ 5 time step ์ด์ „๊นŒ์ง€ ํ™•์ธ)

๐Ÿ“Œ RNN์˜ ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

โœ… LSTM (Long Short-Term Memory)

: ์ˆœํ™˜ ์‹ ๊ฒฝ๋ง(RNN) ๊ธฐ๋ฒ•์˜ ํ•˜๋‚˜

  • ๋ฉ”๋ชจ๋ฆฌ ์…€, ์ž…๋ ฅ ๊ฒŒ์ดํŠธ, ์ถœ๋ ฅ ๊ฒŒ์ดํŠธ, ๋ง๊ฐ ๊ฒŒ์ดํŠธ๋ฅผ ์ด์šฉํ•ด ๊ธฐ์กด ์ˆœํ™˜ ์‹ ๊ฒฝ๋ง(RNN)์˜ ๋ฌธ์ œ์ธ ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€
  • LSTM์•Œ๊ณ ๋ฆฌ์ฆ˜์€ Cell State๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํŠน์ง•์ธต์„ ํ•˜๋‚˜ ๋” ๋„ฃ์–ด Weight๋ฅผ ๊ณ„์† ๊ธฐ์–ตํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •
  • ์…€ ์ƒํƒœ(Cell state)๋Š” ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ด๋‹น >> LSTM์€ ๊ณผ๊ฑฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์†ํ•ด์„œ ์—…๋ฐ์ดํŠธ
  • ๊ธฐ์กด RNN์˜ ๊ฒฝ์šฐ, ์ •๋ณด์™€ ์ •๋ณด์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€๋ฉด, ์ดˆ๊ธฐ์˜ Weight๊ฐ’์ด ์œ ์ง€๋˜์ง€ ์•Š์•„ ํ•™์Šต๋Šฅ๋ ฅ์ด ์ €ํ•˜

๐Ÿ’ก ์žฅ์ :

  • ๊ฐ๊ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ปจํŠธ๋กค ๊ฐ€๋Šฅ
  • ๊ฒฐ๊ณผ๊ฐ’ ์ปจํŠธ๋กค ๊ฐ€๋Šฅ

๐Ÿ’ก ๋‹จ์ :

  • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฎ์–ด์”Œ์›Œ ์งˆ ๊ฐ€๋Šฅ์„ฑ
  • ์—ฐ์‚ฐ์†๋„๊ฐ€ ๋Š๋ฆผ

โœ… GRU (Gated Recurrent Units)

: LSTM์„ ๋ณ€ํ˜•์‹œํ‚จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, Gradient Vanishing์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ

  • LSTM์€ ์ดˆ๊ธฐ์˜ weight๊ฐ€ ๊ณ„์† ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์ง€๋งŒ, GRUs๋Š”
    Update Gate์™€ Reset Gate๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, ๊ณผ๊ฑฐ์˜ ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ˜์˜ํ•  ๊ฒƒ์ธ์ง€
    ๊ฒฐ์ •(GRU๋Š” ๊ฒŒ์ดํŠธ๊ฐ€ 2๊ฐœ, LSTM์€ 3๊ฐœ)
  • Update Gate๋Š” ๊ณผ๊ฑฐ์˜ ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” Gate์ด๋ฉฐ, Reset Gate๋Š” ํ˜„ ์‹œ์  ์ •๋ณด์™€ ๊ณผ๊ฑฐ ์‹œ์  ์ •๋ณด์˜ ๋ฐ˜์˜ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •

๐Ÿ’ก ์žฅ์ :

  • ์—ฐ์‚ฐ์†๋„๊ฐ€ ๋น ๋ฆ„
  • LSTM์ฒ˜๋Ÿผ ๋ฎ์–ด์”Œ์›Œ ์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์—†์Œ

๐Ÿ’ก ๋‹จ์ :

  • ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ฒฐ๊ณผ๊ฐ’ ์ปจํŠธ๋กค ๋ถˆ๊ฐ€

๐Ÿ’ก ๊ธฐ์กด์˜ RNN์ธต์„ LSTM ๋˜๋Š” GRU๋กœ ์ด๋ฆ„๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋จ.
GRU๋ณด๋‹ค๋Š” LSTM์ด ๋” ๋งŽ์ด ์‚ฌ์šฉ๋จ.

๐Ÿ“Œ Modelling

  • Keras์˜ ์„ธ ๊ฐœ์˜ ๋‚ด์žฅ RNN
    • keras.layers.SimpleRNN: ์ด์ „ ํƒ€์ž„์Šคํ…์˜ ์ถœ๋ ฅ์ด ๋‹ค์Œ ํƒ€์ž„์Šคํ…์œผ๋กœ ๊ณต๊ธ‰๋˜๋Š” ์™„์ „ํžˆ ์—ฐ๊ฒฐ๋œ RNN์ž…๋‹ˆ๋‹ค.
    • keras.layers.GRU
    • keras.layers.LSTM
  • ๋‚ด์žฅ RNN์˜ ์ฃผ์š” ๊ธฐ๋Šฅ
    • dropout ๋ฐ recurrent_dropout ์ธ์ˆ˜๋ฅผ ํ†ตํ•œ ๋ฐ˜๋ณต ๋“œ๋กญ์•„์›ƒ
    • go_backwards ์ธ์ˆ˜๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ ์‹œํ€€์Šค๋ฅผ ๋ฐ˜๋Œ€๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
    • unroll ์ธ์ˆ˜๋ฅผ ํ†ตํ•œ ๋ฃจํ”„ ์–ธ๋กค๋ง(CPU์—์„œ ์งง์€ ์‹œํ€€์Šค๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์†๋„๊ฐ€ ํฌ๊ฒŒ ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ์Œ)

์ถœ์ฒ˜: https://www.tensorflow.org/text/tutorials/text_classification_rnn

โœ… TextVectorization (์ธ์ฝ”๋”ฉ), 1์ฐจ์›

VOCAB_SIZE = 1000
encoder = tf.keras.layers.TextVectorization(
    max_tokens=VOCAB_SIZE)
encoder.adapt(train_dataset.map(lambda text, label: text))

๐Ÿ’ก adapt() == fit_transform()

โœ… Embedding (๋‹ค์ฐจ์›์œผ๋กœ ๋‹จ์–ด์˜ ์œ ์‚ฌ๋„์— ๋”ฐ๋ฅธ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ)

: ๋‹จ์–ด ์ž„๋ฒ ๋”ฉ์€ ์œ ์‚ฌํ•œ ๋‹จ์–ด๊ฐ€ ์œ ์‚ฌํ•œ ์ธ์ฝ”๋”ฉ์„ ๊ฐ–๋Š” ํšจ์œจ์ ์ด๊ณ  ์กฐ๋ฐ€ํ•œ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ด ์ธ์ฝ”๋”ฉ์„ ์ง์ ‘ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž„๋ฒ ๋”ฉ์€ ๋ถ€๋™ ์†Œ์ˆ˜์  ๊ฐ’์˜ ์กฐ๋ฐ€ํ•œ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค(๋ฒกํ„ฐ์˜ ๊ธธ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜).

์ถœ์ฒ˜: https://www.tensorflow.org/text/guide/word_embeddings

Embedding(vocab_size, embedding_dim)

  • Embedding layer: ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆซ์žํ˜•์œผ๋กœ๋งŒ ๋ฐ”๊ฟ” ๋„ฃ์œผ๋ฉด ๋‹จ์–ด ์‚ฌ์ด์˜ ์œ ์‚ฌ๋„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ ์ˆซ์žํ˜•์„ ๋ฒกํ„ฐํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ ๊ตฌ์„ฑ์ธต ์ค‘ ๊ฐ ๋‹จ์–ด์˜ ์œ ์‚ฌ๋„๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ์ •ํ•ด์ง„ ๊ธธ์ด๋กœ ์••์ถ•ํ•ด์ฃผ๋Š” ์ธต
  • Embedding layer์„ ํ†ตํ•ด ์ถœ๋ ฅ๋œ ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ์˜ ์ตœ์ข… ์ฐจ์›์€ (batch_size, vocab_size, embedding_dim)์ด ๋ฉ๋‹ˆ๋‹ค.

โœ… Bidirectional (์–‘๋ฐฉํ–ฅ ํ•™์Šต)

: ์ˆœ์ฐจ RNN ํ•™์Šต ๋ฐฉํ–ฅ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–‘๋ฐฉํ–ฅ์˜ ํ•™์Šต์„ ํ†ตํ•ด์„œ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • simpleRNN
  • LSTM
  • GRU

์ˆœ์ฐจ RNN์œผ๋กœ๋งŒ ํ•˜๋ฉด ๋‚ ์ด, ๋„ˆ๋ฌด๋งŒ ๋ณด๊ณ  ๋‚ ์”จ์˜ ์ƒํƒœ๋ฅผ ํŒŒ์•…ํ•ด์•ผํ•˜์ง€๋งŒ ์–‘๋ฐฉํ–ฅ ํ•™์Šต์„ ์ด์šฉํ•˜๋ฉด ์ผฐ๋‹ค, ์—์–ด์ปจ์„ ๋ณด๊ณ  ๋‚ ์”จ์˜ ์ƒํƒœ๋ฅผ ๋” ์ž˜ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๐Ÿ’ก validation_split ์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ์ž˜ ์•ˆ ๋‚˜์˜ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ train_test_split ์œผ๋กœ train ์„ train, valid๋กœ ๋‚˜๋ˆ ์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข€ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ƒ…๋‹ˆ๋‹ค.

๐Ÿค” ์™œ ์ผ๊นŒ์š”?
stratify ์œ ๋ฌด์˜ ์ฐจ์ด (class๊ฐ€ ๊ท ์ผํ•˜๊ฒŒ ํ•™์Šต๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ)

# Simple RNN ๋ ˆ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•œ ๋ชจ๋ธ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
model = Sequential()

# ์ž…๋ ฅ-์ž„๋ฒ ๋”ฉ์ธต
model.add(Embedding(input_dim=vocab_size, output_dim=embedding_dim, 
                    name="embedding", input_length=max_length))
model.add(SimpleRNN(units=32, return_sequences=True))
model.add(SimpleRNN(units=32))

# ์ถœ๋ ฅ์ธต
model.add(Dense(units=n_class, activation="softmax"))

return_sequences=True๋Š” Dense layer์™€ ์ถœ๋ ฅ์ธต์—๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ–‡ SUMMARY

๐Ÿ’ก ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ ๋ฒกํ„ฐํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ํ† ํฐํ™”(str.split()) => one-hot-encoding => bag of words(min_df, max_df, analyzer, stopwords, n-gram)
    => TF-IDF(๋„ˆ๋ฌด ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ๋‹จ์–ด๋Š” ๋‚ฎ์€ ๊ฐ€์ค‘์น˜, ํŠน์ • ๋ฌธ์„œ์—๋งŒ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ๋‹จ์–ด๋Š” ๋†’์€ ๊ฐ€์ค‘์น˜)
  • RNN ์€ ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜ˆ์ธกํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ BOW ์ˆœ์„œ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‹œํ€€์Šค ๋ฐฉ์‹์˜ ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Embedding => ์—ฌ๋Ÿฌ ๊ฐ๋„์—์„œ ๋‹จ์–ด์™€ ๋‹จ์–ด ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋ด…๋‹ˆ๋‹ค. ๊ฐ€๊นŒ์šด ๊ฑฐ๋ฆฌ์— ์žˆ๋Š” ๋‹จ์–ด๋Š” ์œ ์‚ฌํ•œ ๋‹จ์–ด์ด๊ณ  ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€ ์ˆ˜๋ก ์˜๋ฏธ๊ฐ€ ๋จผ ๋‹จ์–ด ์ž…๋‹ˆ๋‹ค.
    => ์˜๋ฏธ๋ฅผ ์ข€ ๋” ๋ณด์กดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

  • ์ •๊ทœํ‘œํ˜„์‹ => ํ…์ŠคํŠธ ์ •๊ทœํ™”
  • ๋ถˆ์šฉ์–ด => ๋‚˜, ๋„ˆ, ๊ทธ๊ฒƒ, ์ด๊ฒƒ, ์ €๊ฒƒ ์ฒ˜๋Ÿผ ์ž์ฃผ ๋“ฑ์žฅํ•˜์ง€๋งŒ ํฐ ์˜๋ฏธ๋ฅผ ๊ฐ–์ง€ ์•Š๋Š” ๋‹จ์–ด ์ œ์™ธ
  • ํ˜•ํƒœ์†Œ ๋ถ„์„ => ์˜๋ฏธ๊ฐ€ ์—†๋Š” ์กฐ์‚ฌ, ์–ด๋ฏธ, ๊ตฌ๋‘์  ๋“ฑ์„ ์ œ์™ธ
  • ์–ด๊ฐ„์ถ”์ถœ(stemming ์›ํ˜•์„ ๋ณด์กดํ•˜์ง€ ์•Š์Œ), ํ‘œ์ œ์–ดํ‘œ๊ธฐ๋ฒ•(lemmatization, ์›ํ˜•์„ ๋ณด์กด)

๐Ÿ’ก RNN

  • time-step ์„ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ์— ์ฃผ๋กœ ์‚ฌ์šฉ, ์˜ˆ) ์ž์—ฐ์–ด(์ฑ—๋ด‡), ์Œ์„ฑ, ์‹œ๊ณ„์—ด๋ฐ์ดํ„ฐ(์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ), ์‹ฌ์ „๋„ ๋ฐ์ดํ„ฐ
  • RNN, LSTM, GRU
  • BPTT

๐Ÿ’ก
์ฝœ๋ฐฑ(callback) ์ค‘ ์กฐ๊ธฐ์ข…๋ฃŒ(early stopping)์€ ์‹ ๊ฒฝ๋ง์˜ ๊ณผ๋Œ€์ ํ•ฉ์„ ํšŒํ”ผํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ์ •๊ทœํ™”(regularization) ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.


โœ… GPU์— ์—ฐ๊ฒฐ์ด ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ

gpu_info = !nvidia-smi
gpu_info = '\n'.join(gpu_info)
if gpu_info.find('failed') >= 0:
    print('Not connected to a GPU')
else:
    print(gpu_info)

๐Ÿ™‹๐Ÿปโ€โ™€๏ธ ์งˆ๋ฌธ

Q: ์ถœ๋ ฅ๊ฐ’์ด ์–ด๋–ค ํ˜•ํƒœ๋กœ ๋‚˜์˜ฌ๊นŒ์š”?

A: 0~1 ์‚ฌ์ด์˜ ํ™•๋ฅ ๊ฐ’


๐Ÿฆ ์งˆ๋ฌธ

Q: Bidirectional ๊ณผ์ •์—์„œ ์ฐจ์›์ถ•์†Œ ๊ธฐ๋Šฅ์ด ์žˆ๋‚˜์š”?
A: Bidirectional์—๋Š” ์ฐจ์›์ถ•์†Œ ๊ธฐ๋Šฅ์ด ๋”ฐ๋กœ ์žˆ์ง€ ์•Š๋‹ค.


โœ๏ธ TIL

  • ์‚ฌ์‹ค(Fact): RNN, LSTM๊ณผ GRU๋ฅผ ์ด์šฉํ•ด ์ž์—ฐ์–ด ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.
  • ๋Š๋‚Œ(Feeling): ์˜ค๋Š˜๋„ ์–ด๋ ต๋‹ค.
  • ๊ตํ›ˆ(Finding): ์ด๋ฒˆ์ฃผ ๋‚ด์šฉ ์™„๋ฒฝ ๋ณต์Šตํ•ด์„œ ๋ฏธ๋‹ˆํ”„๋กœ์ ํŠธ ์ž˜ ํ•˜์ž!
profile
๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ก โœ๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€