[PyTorch] Text

YSLยท2023๋…„ 7์›” 3์ผ
0

PyTorch

๋ชฉ๋ก ๋ณด๊ธฐ
2/5
post-thumbnail

๐Ÿ“ Pytorch Tutorials


LANGUAGE MODELING WITH NN.TRANSFORMER AND TORCHTEXT


๐Ÿ“ 1.Positional Encoding
๐Ÿ“ positional encoding์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€

Input Embedding

์ž…๋ ฅ ๋ฐ์ดํ„ฐ(๋ฌธ์žฅ) โ†’ ํ–‰๋ ฌ
๋‹จ์–ด ์ธ๋ฑ์Šค๋“ค์€ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฒกํ„ฐ๊ฐ’์„ ๊ฐ€์ง€๊ณ , ๋‹จ์–ด์˜ ํ”ผ์ฒ˜ ๊ฐ’์ด ์œ ์‚ฌํ• ์ˆ˜๋ก(= ๋ฌธ๋งฅ์ƒ ์œ ์‚ฌ๋„๊ฐ€ ๋†’์„์ˆ˜๋ก) ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์ž„๋ฒ ํŒ… ๋ฒกํ„ฐ๋Š” ๊ฐ€๊นŒ์›Œ์ง

Positional Encoding

  • RNN / LSTM : ์ž…๋ ฅ๋˜๋Š” ๋ฌธ์žฅ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•จ (์•ž ์—ฐ์‚ฐ์ด ๋๋‚˜์•ผ ๋’ท ์—ฐ์‚ฐ ์ง„ํ–‰)
  • Transformer : ์ž…๋ ฅ๋œ ๋ฌธ์žฅ์„ ๋ณ‘๋ ฌ๋กœ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•จ
    โ‡’ ๋‹จ์–ด์˜ ์œ„์น˜(์ˆœ์„œ)๋ฅผ ์•Œ ์ˆ˜ ์—†๋‹ค๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Positional Encoding์„ ์‚ฌ์šฉํ•ด ์ž…๋ ฅ๋˜๋Š” ๋ฌธ์žฅ์—์„œ์˜ ๋‹จ์–ด์˜ ์ˆœ์„œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ encodingํ•จ โ‡’ ๋‹จ์–ด ๋ฒกํ„ฐ ์•ˆ์— ๋‹จ์–ด์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ํฌํ•จ์‹œํ‚ด


Sequence to Sequence

๐Ÿ“ Transformer ์ดํ•ดํ•˜๊ธฐ1

seq2seq ๋ชจ๋ธ์€ ํฌ๊ฒŒ 2๊ฐœ๋กœ ๊ตฌ์„ฑ๋จ

Encoder

: ์ž…๋ ฅ ๋ฌธ์žฅ์˜ ๋ชจ๋“  ๋‹จ์–ด๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ž…๋ ฅ ๋ฐ›์€ ๋’ค์— ๋งˆ์ง€๋ง‰์— ๋ชจ๋“  ๋‹จ์–ด ์ •๋ณด๋“ค์„ ์••์ถ•ํ•ด์„œ ํ•˜๋‚˜์˜ ๋ฒกํ„ฐ( = Context vector)๋กœ ๋งŒ๋“ฆ

Decoder

: ์ปจํ…์ŠคํŠธ ๋ฒกํ„ฐ๋ฅผ ๋ฐ›์•„ ๋ฒˆ์—ญ๋œ ๋‹จ์–ด๋“ค์„ ํ•˜๋‚˜์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ์ถœ๋ ฅํ•จ

โ‡’ ์ž…๋ ฅ ๋ฌธ์žฅ โ†’ ํ•˜๋‚˜์˜ ์ปจํ…์ŠคํŠธ ๋ฒกํ„ฐ โ†’ ์ถœ๋ ฅ ์‹œํ€€์Šค

RNN์— ๊ธฐ๋ฐ˜ํ•œ seq2seq ๋ชจ๋ธ์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Œ
1. ์ •๋ณด ์†์‹ค (โˆต ํ•˜๋‚˜์˜ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ๋ฒกํ„ฐ์— ๋ชจ๋“  ์ •๋ณด๋ฅผ ์••์ถ•ํ•˜๋ ค๊ณ  ํ•ด์„œ)
2. ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค
โ‡’ ์ž…๋ ฅ ๋ฌธ์žฅ์ด ๊ธธ๋ฉด ๋ฒˆ์—ญ ํ’ˆ์งˆ์ด ๋–จ์–ด์ง€๋Š” ํ˜„์ƒ์œผ๋กœ ๋‚˜ํƒ€๋‚˜ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž Attention ๊ธฐ๋ฒ• ์‚ฌ์šฉํ•˜๊ฒŒ ๋จ

Attention

Decoder์—์„œ ์ถœ๋ ฅ ๋‹จ์–ด๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๋งค ์‹œ์ (time step)๋งˆ๋‹ค encoder์˜ ์ „์ฒด ์ž…๋ ฅ ๋ฌธ์žฅ์„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ฐธ๊ณ ํ•จ
์ด๋•Œ ์ „์ฒด ์ž…๋ ฅ ๋ฌธ์žฅ์„ ๋ชจ๋‘ ๋™์ผํ•œ ๋น„์œจ๋กœ ์ฐธ๊ณ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ์‹œ์ ์—์„œ ์˜ˆ์ธกํ•ด์•ผ ํ•  ๋‹จ์–ด์™€ ์—ฐ๊ด€ ์žˆ๋Š” ์ž…๋ ฅ ๋‹จ์–ด ๋ถ€๋ถ„์— ์ข€ ๋” ์ง‘์ค‘ํ•ด์„œ ๋ณด๊ฒŒ ๋จ


Text Preprocessing - ํ† ํฐํ™”

ํŒŒ์ด์ฌ์˜ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ๋งŽ์Œ

  • ๊ตฌ๋‘์ , ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์ œ์™ธํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ
  • ์ค„์ž„๋ง
  • ํ•œ ๋‹จ์–ด์ธ๋ฐ ๋„์–ด์“ฐ๊ธฐ๊ฐ€ ์•ˆ์— ์žˆ๋Š” ๊ฒฝ์šฐ
  • ๊ณต๋ฐฑ ๋‹จ์œ„์˜ ํ† ํฐํ™”๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
    โ‡’ ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
  • spaCy
    : tokenization, ํ’ˆ์‚ฌ ํƒœ๊น… ๋“ฑ ๊ธฐ๋ณธ์ ์ธ ์ „์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ์ž์—ฐ์–ด์ฒ˜๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    spaCy๋ฅผ ์ด์šฉํ•ด ํ† ํฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ํ† ํฐ ์™ธ์—๋„ PoS(ํ’ˆ์‚ฌ), lemma ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ
  • NLTK
  • torchtext

+) ํ•จ์ˆ˜

  • torch.topk() : ์˜ˆ์ธก ๊ฐ’์—์„œ top-k๊ฐœ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜
  # values์—๋Š” ๊ฐ’
  # indexs์—๋Š” ์ธ๋ฑ์Šค ๊ฐ’
  values, indexs = torch.topk(predict, k=k, dim=-1)

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