๐Ÿšดโ€โ™‚๏ธ
TIL
  • MAIN
  • : TIL?
  • : WIL
  • : Plan
  • : Retrospective
    • 21Y
      • Wait a moment!
      • 9M 2W
      • 9M1W
      • 8M4W
      • 8M3W
      • 8M2W
      • 8M1W
      • 7M4W
      • 7M3W
      • 7M2W
      • 7M1W
      • 6M5W
      • 1H
    • ์ƒˆ์‚ฌ๋žŒ ๋˜๊ธฐ ํ”„๋กœ์ ํŠธ
      • 2ํšŒ์ฐจ
      • 1ํšŒ์ฐจ
  • TIL : ML
    • Paper Analysis
      • BERT
      • Transformer
    • Boostcamp 2st
      • [S]Data Viz
        • (4-3) Seaborn ์‹ฌํ™”
        • (4-2) Seaborn ๊ธฐ์ดˆ
        • (4-1) Seaborn ์†Œ๊ฐœ
        • (3-4) More Tips
        • (3-3) Facet ์‚ฌ์šฉํ•˜๊ธฐ
        • (3-2) Color ์‚ฌ์šฉํ•˜๊ธฐ
        • (3-1) Text ์‚ฌ์šฉํ•˜๊ธฐ
        • (2-3) Scatter Plot ์‚ฌ์šฉํ•˜๊ธฐ
        • (2-2) Line Plot ์‚ฌ์šฉํ•˜๊ธฐ
        • (2-1) Bar Plot ์‚ฌ์šฉํ•˜๊ธฐ
        • (1-3) Python๊ณผ Matplotlib
        • (1-2) ์‹œ๊ฐํ™”์˜ ์š”์†Œ
        • (1-1) Welcome to Visualization (OT)
      • [P]MRC
        • (2๊ฐ•) Extraction-based MRC
        • (1๊ฐ•) MRC Intro & Python Basics
      • [P]KLUE
        • (5๊ฐ•) BERT ๊ธฐ๋ฐ˜ ๋‹จ์ผ ๋ฌธ์žฅ ๋ถ„๋ฅ˜ ๋ชจ๋ธ ํ•™์Šต
        • (4๊ฐ•) ํ•œ๊ตญ์–ด BERT ์–ธ์–ด ๋ชจ๋ธ ํ•™์Šต
        • [NLP] ๋ฌธ์žฅ ๋‚ด ๊ฐœ์ฒด๊ฐ„ ๊ด€๊ณ„ ์ถ”์ถœ
        • (3๊ฐ•) BERT ์–ธ์–ด๋ชจ๋ธ ์†Œ๊ฐœ
        • (2๊ฐ•) ์ž์—ฐ์–ด์˜ ์ „์ฒ˜๋ฆฌ
        • (1๊ฐ•) ์ธ๊ณต์ง€๋Šฅ๊ณผ ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ
      • [U]Stage-CV
      • [U]Stage-NLP
        • 7W Retrospective
        • (10๊ฐ•) Advanced Self-supervised Pre-training Models
        • (09๊ฐ•) Self-supervised Pre-training Models
        • (08๊ฐ•) Transformer (2)
        • (07๊ฐ•) Transformer (1)
        • 6W Retrospective
        • (06๊ฐ•) Beam Search and BLEU score
        • (05๊ฐ•) Sequence to Sequence with Attention
        • (04๊ฐ•) LSTM and GRU
        • (03๊ฐ•) Recurrent Neural Network and Language Modeling
        • (02๊ฐ•) Word Embedding
        • (01๊ฐ•) Intro to NLP, Bag-of-Words
        • [ํ•„์ˆ˜ ๊ณผ์ œ 4] Preprocessing for NMT Model
        • [ํ•„์ˆ˜ ๊ณผ์ œ 3] Subword-level Language Model
        • [ํ•„์ˆ˜ ๊ณผ์ œ2] RNN-based Language Model
        • [์„ ํƒ ๊ณผ์ œ] BERT Fine-tuning with transformers
        • [ํ•„์ˆ˜ ๊ณผ์ œ] Data Preprocessing
      • Mask Wear Image Classification
        • 5W Retrospective
        • Report_Level1_6
        • Performance | Review
        • DAY 11 : HardVoting | MultiLabelClassification
        • DAY 10 : Cutmix
        • DAY 9 : Loss Function
        • DAY 8 : Baseline
        • DAY 7 : Class Imbalance | Stratification
        • DAY 6 : Error Fix
        • DAY 5 : Facenet | Save
        • DAY 4 : VIT | F1_Loss | LrScheduler
        • DAY 3 : DataSet/Lodaer | EfficientNet
        • DAY 2 : Labeling
        • DAY 1 : EDA
        • 2_EDA Analysis
      • [P]Stage-1
        • 4W Retrospective
        • (10๊ฐ•) Experiment Toolkits & Tips
        • (9๊ฐ•) Ensemble
        • (8๊ฐ•) Training & Inference 2
        • (7๊ฐ•) Training & Inference 1
        • (6๊ฐ•) Model 2
        • (5๊ฐ•) Model 1
        • (4๊ฐ•) Data Generation
        • (3๊ฐ•) Dataset
        • (2๊ฐ•) Image Classification & EDA
        • (1๊ฐ•) Competition with AI Stages!
      • [U]Stage-3
        • 3W Retrospective
        • PyTorch
          • (10๊ฐ•) PyTorch Troubleshooting
          • (09๊ฐ•) Hyperparameter Tuning
          • (08๊ฐ•) Multi-GPU ํ•™์Šต
          • (07๊ฐ•) Monitoring tools for PyTorch
          • (06๊ฐ•) ๋ชจ๋ธ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
          • (05๊ฐ•) Dataset & Dataloader
          • (04๊ฐ•) AutoGrad & Optimizer
          • (03๊ฐ•) PyTorch ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ
          • (02๊ฐ•) PyTorch Basics
          • (01๊ฐ•) Introduction to PyTorch
      • [U]Stage-2
        • 2W Retrospective
        • DL Basic
          • (10๊ฐ•) Generative Models 2
          • (09๊ฐ•) Generative Models 1
          • (08๊ฐ•) Sequential Models - Transformer
          • (07๊ฐ•) Sequential Models - RNN
          • (06๊ฐ•) Computer Vision Applications
          • (05๊ฐ•) Modern CNN - 1x1 convolution์˜ ์ค‘์š”์„ฑ
          • (04๊ฐ•) Convolution์€ ๋ฌด์—‡์ธ๊ฐ€?
          • (03๊ฐ•) Optimization
          • (02๊ฐ•) ๋‰ด๋Ÿด ๋„คํŠธ์›Œํฌ - MLP (Multi-Layer Perceptron)
          • (01๊ฐ•) ๋”ฅ๋Ÿฌ๋‹ ๊ธฐ๋ณธ ์šฉ์–ด ์„ค๋ช… - Historical Review
        • Assignment
          • [ํ•„์ˆ˜ ๊ณผ์ œ] Multi-headed Attention Assignment
          • [ํ•„์ˆ˜ ๊ณผ์ œ] LSTM Assignment
          • [ํ•„์ˆ˜ ๊ณผ์ œ] CNN Assignment
          • [ํ•„์ˆ˜ ๊ณผ์ œ] Optimization Assignment
          • [ํ•„์ˆ˜ ๊ณผ์ œ] MLP Assignment
      • [U]Stage-1
        • 1W Retrospective
        • AI Math
          • (AI Math 10๊ฐ•) RNN ์ฒซ๊ฑธ์Œ
          • (AI Math 9๊ฐ•) CNN ์ฒซ๊ฑธ์Œ
          • (AI Math 8๊ฐ•) ๋ฒ ์ด์ฆˆ ํ†ต๊ณ„ํ•™ ๋ง›๋ณด๊ธฐ
          • (AI Math 7๊ฐ•) ํ†ต๊ณ„ํ•™ ๋ง›๋ณด๊ธฐ
          • (AI Math 6๊ฐ•) ํ™•๋ฅ ๋ก  ๋ง›๋ณด๊ธฐ
          • (AI Math 5๊ฐ•) ๋”ฅ๋Ÿฌ๋‹ ํ•™์Šต๋ฐฉ๋ฒ• ์ดํ•ดํ•˜๊ธฐ
          • (AI Math 4๊ฐ•) ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• - ๋งค์šด๋ง›
          • (AI Math 3๊ฐ•) ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• - ์ˆœํ•œ๋ง›
          • (AI Math 2๊ฐ•) ํ–‰๋ ฌ์ด ๋ญ์˜ˆ์š”?
          • (AI Math 1๊ฐ•) ๋ฒกํ„ฐ๊ฐ€ ๋ญ์˜ˆ์š”?
        • Python
          • (Python 7-2๊ฐ•) pandas II
          • (Python 7-1๊ฐ•) pandas I
          • (Python 6๊ฐ•) numpy
          • (Python 5-2๊ฐ•) Python data handling
          • (Python 5-1๊ฐ•) File / Exception / Log Handling
          • (Python 4-2๊ฐ•) Module and Project
          • (Python 4-1๊ฐ•) Python Object Oriented Programming
          • (Python 3-2๊ฐ•) Pythonic code
          • (Python 3-1๊ฐ•) Python Data Structure
          • (Python 2-4๊ฐ•) String and advanced function concept
          • (Python 2-3๊ฐ•) Conditionals and Loops
          • (Python 2-2๊ฐ•) Function and Console I/O
          • (Python 2-1๊ฐ•) Variables
          • (Python 1-3๊ฐ•) ํŒŒ์ด์ฌ ์ฝ”๋”ฉ ํ™˜๊ฒฝ
          • (Python 1-2๊ฐ•) ํŒŒ์ด์ฌ ๊ฐœ์š”
          • (Python 1-1๊ฐ•) Basic computer class for newbies
        • Assignment
          • [์„ ํƒ ๊ณผ์ œ 3] Maximum Likelihood Estimate
          • [์„ ํƒ ๊ณผ์ œ 2] Backpropagation
          • [์„ ํƒ ๊ณผ์ œ 1] Gradient Descent
          • [ํ•„์ˆ˜ ๊ณผ์ œ 5] Morsecode
          • [ํ•„์ˆ˜ ๊ณผ์ œ 4] Baseball
          • [ํ•„์ˆ˜ ๊ณผ์ œ 3] Text Processing 2
          • [ํ•„์ˆ˜ ๊ณผ์ œ 2] Text Processing 1
          • [ํ•„์ˆ˜ ๊ณผ์ œ 1] Basic Math
    • ๋”ฅ๋Ÿฌ๋‹ CNN ์™„๋ฒฝ ๊ฐ€์ด๋“œ - Fundamental ํŽธ
      • ์ข…ํ•ฉ ์‹ค์Šต 2 - ์บ๊ธ€ Plant Pathology(๋‚˜๋ฌด์žŽ ๋ณ‘ ์ง„๋‹จ) ๊ฒฝ์—ฐ ๋Œ€ํšŒ
      • ์ข…ํ•ฉ ์‹ค์Šต 1 - 120์ข…์˜ Dog Breed Identification ๋ชจ๋ธ ์ตœ์ ํ™”
      • ์‚ฌ์ „ ํ›ˆ๋ จ ๋ชจ๋ธ์˜ ๋ฏธ์„ธ ์กฐ์ • ํ•™์Šต๊ณผ ๋‹ค์–‘ํ•œ Learning Rate Scheduler์˜ ์ ์šฉ
      • Advanced CNN ๋ชจ๋ธ ํŒŒํ—ค์น˜๊ธฐ - ResNet ์ƒ์„ธ์™€ EfficientNet ๊ฐœ์š”
      • Advanced CNN ๋ชจ๋ธ ํŒŒํ—ค์น˜๊ธฐ - AlexNet, VGGNet, GoogLeNet
      • Albumentation์„ ์ด์šฉํ•œ Augmentation๊ธฐ๋ฒ•๊ณผ Keras Sequence ํ™œ์šฉํ•˜๊ธฐ
      • ์‚ฌ์ „ ํ›ˆ๋ จ CNN ๋ชจ๋ธ์˜ ํ™œ์šฉ๊ณผ Keras Generator ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์ดํ•ด
      • ๋ฐ์ดํ„ฐ ์ฆ๊ฐ•์˜ ์ดํ•ด - Keras ImageDataGenerator ํ™œ์šฉ
      • CNN ๋ชจ๋ธ ๊ตฌํ˜„ ๋ฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ธฐ๋ณธ ๊ธฐ๋ฒ• ์ ์šฉํ•˜๊ธฐ
    • AI School 1st
    • ํ˜„์—… ์‹ค๋ฌด์ž์—๊ฒŒ ๋ฐฐ์šฐ๋Š” Kaggle ๋จธ์‹ ๋Ÿฌ๋‹ ์ž…๋ฌธ
    • ํŒŒ์ด์ฌ ๋”ฅ๋Ÿฌ๋‹ ํŒŒ์ดํ† ์น˜
  • TIL : Python & Math
    • Do It! ์žฅ๊ณ +๋ถ€ํŠธ์ŠคํŠธ๋žฉ: ํŒŒ์ด์ฌ ์›น๊ฐœ๋ฐœ์˜ ์ •์„
      • Relations - ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„
      • Relations - ๋‹ค๋Œ€์ผ ๊ด€๊ณ„
      • ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ ๋ชจ๋“ˆํ™” ํ•˜๊ธฐ
      • TDD (Test Driven Development)
      • template tags & ์กฐ๊ฑด๋ฌธ
      • ์ •์  ํŒŒ์ผ(static files) & ๋ฏธ๋””์–ด ํŒŒ์ผ(media files)
      • FBV (Function Based View)์™€ CBV (Class Based View)
      • Django ์ž…๋ฌธํ•˜๊ธฐ
      • ๋ถ€ํŠธ์ŠคํŠธ๋žฉ
      • ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ดˆ๋‹ค์ง€๊ธฐ (HTML, CSS, JS)
      • ๋“ค์–ด๊ฐ€๊ธฐ + ํ™˜๊ฒฝ์„ค์ •
    • Algorithm
      • Programmers
        • Level1
          • ์†Œ์ˆ˜ ๋งŒ๋“ค๊ธฐ
          • ์ˆซ์ž ๋ฌธ์ž์—ด๊ณผ ์˜๋‹จ์–ด
          • ์ž์—ฐ์ˆ˜ ๋’ค์ง‘์–ด ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค๊ธฐ
          • ์ •์ˆ˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ธฐ
          • ์ •์ˆ˜ ์ œ๊ณฑ๊ทผ ํŒ๋ณ„
          • ์ œ์ผ ์ž‘์€ ์ˆ˜ ์ œ๊ฑฐํ•˜๊ธฐ
          • ์ง์‚ฌ๊ฐํ˜• ๋ณ„์ฐ๊ธฐ
          • ์ง์ˆ˜์™€ ํ™€์ˆ˜
          • ์ฒด์œก๋ณต
          • ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜
          • ์ฝœ๋ผ์ธ  ์ถ”์ธก
          • ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„
          • ํ‚คํŒจ๋“œ ๋ˆ„๋ฅด๊ธฐ
          • ํ‰๊ท  ๊ตฌํ•˜๊ธฐ
          • ํฐ์ผ“๋ชฌ
          • ํ•˜์ƒค๋“œ ์ˆ˜
          • ํ•ธ๋“œํฐ ๋ฒˆํ˜ธ ๊ฐ€๋ฆฌ๊ธฐ
          • ํ–‰๋ ฌ์˜ ๋ง์…ˆ
        • Level2
          • ์ˆซ์ž์˜ ํ‘œํ˜„
          • ์ˆœ์œ„ ๊ฒ€์ƒ‰
          • ์ˆ˜์‹ ์ตœ๋Œ€ํ™”
          • ์†Œ์ˆ˜ ์ฐพ๊ธฐ
          • ์†Œ์ˆ˜ ๋งŒ๋“ค๊ธฐ
          • ์‚ผ๊ฐ ๋‹ฌํŒฝ์ด
          • ๋ฌธ์ž์—ด ์••์ถ•
          • ๋ฉ”๋‰ด ๋ฆฌ๋‰ด์–ผ
          • ๋” ๋งต๊ฒŒ
          • ๋•…๋”ฐ๋จน๊ธฐ
          • ๋ฉ€์ฉกํ•œ ์‚ฌ๊ฐํ˜•
          • ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ
          • ๊ด„ํ˜ธ ๋ณ€ํ™˜
          • ๊ตฌ๋ช…๋ณดํŠธ
          • ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
          • ๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง
          • ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ํŠธ๋Ÿญ
          • ๋‹ค์Œ ํฐ ์ˆซ์ž
          • ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ
          • ๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ
          • ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜• ์ฐพ๊ธฐ
          • H-Index
          • JadenCase ๋ฌธ์ž์—ด ๋งŒ๋“ค๊ธฐ
          • N๊ฐœ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜
          • N์ง„์ˆ˜ ๊ฒŒ์ž„
          • ๊ฐ€์žฅ ํฐ ์ˆ˜
          • 124 ๋‚˜๋ผ์˜ ์ˆซ์ž
          • 2๊ฐœ ์ดํ•˜๋กœ ๋‹ค๋ฅธ ๋น„ํŠธ
          • [3์ฐจ] ํŒŒ์ผ๋ช… ์ •๋ ฌ
          • [3์ฐจ] ์••์ถ•
          • ์ค„ ์„œ๋Š” ๋ฐฉ๋ฒ•
          • [3์ฐจ] ๋ฐฉ๊ธˆ ๊ทธ๊ณก
          • ๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ
        • Level3
          • ๋งค์นญ ์ ์ˆ˜
          • ์™ธ๋ฒฝ ์ ๊ฒ€
          • ๊ธฐ์ง€๊ตญ ์„ค์น˜
          • ์ˆซ์ž ๊ฒŒ์ž„
          • 110 ์˜ฎ๊ธฐ๊ธฐ
          • ๊ด‘๊ณ  ์ œ๊ฑฐ
          • ๊ธธ ์ฐพ๊ธฐ ๊ฒŒ์ž„
          • ์…”ํ‹€๋ฒ„์Šค
          • ๋‹จ์†์นด๋ฉ”๋ผ
          • ํ‘œ ํŽธ์ง‘
          • N-Queen
          • ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ
          • ์ตœ๊ณ ์˜ ์ง‘ํ•ฉ
          • ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ
          • ๊ฑฐ์Šค๋ฆ„๋ˆ
          • ํ•˜๋…ธ์ด์˜ ํƒ‘
          • ๋ฉ€๋ฆฌ ๋›ฐ๊ธฐ
          • ๋ชจ๋‘ 0์œผ๋กœ ๋งŒ๋“ค๊ธฐ
        • Level4
    • Head First Python
    • ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์œ„ํ•œ SQL
    • ๋‹จ ๋‘ ์žฅ์˜ ๋ฌธ์„œ๋กœ ๋ฐ์ดํ„ฐ ๋ถ„์„๊ณผ ์‹œ๊ฐํ™” ๋ฝ€๊ฐœ๊ธฐ
    • Linear Algebra(Khan Academy)
    • ์ธ๊ณต์ง€๋Šฅ์„ ์œ„ํ•œ ์„ ํ˜•๋Œ€์ˆ˜
    • Statistics110
  • TIL : etc
    • [๋”ฐ๋ฐฐ๋Ÿฐ] Kubernetes
    • [๋”ฐ๋ฐฐ๋Ÿฐ] Docker
      • 2. ๋„์ปค ์„ค์น˜ ์‹ค์Šต 1 - ํ•™์ŠตํŽธ(์ค€๋น„๋ฌผ/์‹ค์Šต ์œ ํ˜• ์†Œ๊ฐœ)
      • 1. ์ปจํ…Œ์ด๋„ˆ์™€ ๋„์ปค์˜ ์ดํ•ด - ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์“ฐ๋Š”์ด์œ  / ์ผ๋ฐ˜ํ”„๋กœ๊ทธ๋žจ๊ณผ ์ปจํ…Œ์ด๋„ˆํ”„๋กœ๊ทธ๋žจ์˜ ์ฐจ์ด์ 
      • 0. ๋“œ๋””์–ด ์ฐพ์•„์˜จ Docker ๊ฐ•์˜! ์™•์ดˆ๋ณด์—์„œ ๋„์ปค ๋งˆ์Šคํ„ฐ๋กœ - OT
    • CoinTrading
      • [๊ฐ€์ƒ ํ™”ํ ์ž๋™ ๋งค๋งค ํ”„๋กœ๊ทธ๋žจ] ๋ฐฑํ…Œ์ŠคํŒ… : ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŒ…
    • Gatsby
      • 01 ๊นƒ๋ถ ํฌ๊ธฐ ์„ ์–ธ
  • TIL : Project
    • Mask Wear Image Classification
    • Project. GARIGO
  • 2021 TIL
    • CHANGED
    • JUN
      • 30 Wed
      • 29 Tue
      • 28 Mon
      • 27 Sun
      • 26 Sat
      • 25 Fri
      • 24 Thu
      • 23 Wed
      • 22 Tue
      • 21 Mon
      • 20 Sun
      • 19 Sat
      • 18 Fri
      • 17 Thu
      • 16 Wed
      • 15 Tue
      • 14 Mon
      • 13 Sun
      • 12 Sat
      • 11 Fri
      • 10 Thu
      • 9 Wed
      • 8 Tue
      • 7 Mon
      • 6 Sun
      • 5 Sat
      • 4 Fri
      • 3 Thu
      • 2 Wed
      • 1 Tue
    • MAY
      • 31 Mon
      • 30 Sun
      • 29 Sat
      • 28 Fri
      • 27 Thu
      • 26 Wed
      • 25 Tue
      • 24 Mon
      • 23 Sun
      • 22 Sat
      • 21 Fri
      • 20 Thu
      • 19 Wed
      • 18 Tue
      • 17 Mon
      • 16 Sun
      • 15 Sat
      • 14 Fri
      • 13 Thu
      • 12 Wed
      • 11 Tue
      • 10 Mon
      • 9 Sun
      • 8 Sat
      • 7 Fri
      • 6 Thu
      • 5 Wed
      • 4 Tue
      • 3 Mon
      • 2 Sun
      • 1 Sat
    • APR
      • 30 Fri
      • 29 Thu
      • 28 Wed
      • 27 Tue
      • 26 Mon
      • 25 Sun
      • 24 Sat
      • 23 Fri
      • 22 Thu
      • 21 Wed
      • 20 Tue
      • 19 Mon
      • 18 Sun
      • 17 Sat
      • 16 Fri
      • 15 Thu
      • 14 Wed
      • 13 Tue
      • 12 Mon
      • 11 Sun
      • 10 Sat
      • 9 Fri
      • 8 Thu
      • 7 Wed
      • 6 Tue
      • 5 Mon
      • 4 Sun
      • 3 Sat
      • 2 Fri
      • 1 Thu
    • MAR
      • 31 Wed
      • 30 Tue
      • 29 Mon
      • 28 Sun
      • 27 Sat
      • 26 Fri
      • 25 Thu
      • 24 Wed
      • 23 Tue
      • 22 Mon
      • 21 Sun
      • 20 Sat
      • 19 Fri
      • 18 Thu
      • 17 Wed
      • 16 Tue
      • 15 Mon
      • 14 Sun
      • 13 Sat
      • 12 Fri
      • 11 Thu
      • 10 Wed
      • 9 Tue
      • 8 Mon
      • 7 Sun
      • 6 Sat
      • 5 Fri
      • 4 Thu
      • 3 Wed
      • 2 Tue
      • 1 Mon
    • FEB
      • 28 Sun
      • 27 Sat
      • 26 Fri
      • 25 Thu
      • 24 Wed
      • 23 Tue
      • 22 Mon
      • 21 Sun
      • 20 Sat
      • 19 Fri
      • 18 Thu
      • 17 Wed
      • 16 Tue
      • 15 Mon
      • 14 Sun
      • 13 Sat
      • 12 Fri
      • 11 Thu
      • 10 Wed
      • 9 Tue
      • 8 Mon
      • 7 Sun
      • 6 Sat
      • 5 Fri
      • 4 Thu
      • 3 Wed
      • 2 Tue
      • 1 Mon
    • JAN
      • 31 Sun
      • 30 Sat
      • 29 Fri
      • 28 Thu
      • 27 Wed
      • 26 Tue
      • 25 Mon
      • 24 Sun
      • 23 Sat
      • 22 Fri
      • 21 Thu
      • 20 Wed
      • 19 Tue
      • 18 Mon
      • 17 Sun
      • 16 Sat
      • 15 Fri
      • 14 Thu
      • 13 Wed
      • 12 Tue
      • 11 Mon
      • 10 Sun
      • 9 Sat
      • 8 Fri
      • 7 Thu
      • 6 Wed
      • 5 Tue
      • 4 Mon
      • 3 Sun
      • 2 Sat
      • 1 Fri
  • 2020 TIL
    • DEC
      • 31 Thu
      • 30 Wed
      • 29 Tue
      • 28 Mon
      • 27 Sun
      • 26 Sat
      • 25 Fri
      • 24 Thu
      • 23 Wed
      • 22 Tue
      • 21 Mon
      • 20 Sun
      • 19 Sat
      • 18 Fri
      • 17 Thu
      • 16 Wed
      • 15 Tue
      • 14 Mon
      • 13 Sun
      • 12 Sat
      • 11 Fri
      • 10 Thu
      • 9 Wed
      • 8 Tue
      • 7 Mon
      • 6 Sun
      • 5 Sat
      • 4 Fri
      • 3 Tue
      • 2 Wed
      • 1 Tue
    • NOV
      • 30 Mon
Powered by GitBook
On this page
  • 3. Word Embedding : Word2Vec, GloVe
  • Word2Vec
  • GloVe
  • ์‹ค์Šต
  • ํ•„์š” ํŒจํ‚ค์ง€
  • ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ
  • ๋ฐ์ดํ„ฐ์…‹ ํด๋ž˜์Šค
  • ๋ชจ๋ธ ํด๋ž˜์Šค
  • ํ…Œ์ŠคํŠธ

Was this helpful?

  1. TIL : ML
  2. Boostcamp 2st
  3. [U]Stage-NLP

(02๊ฐ•) Word Embedding

210906

Previous(03๊ฐ•) Recurrent Neural Network and Language ModelingNext(01๊ฐ•) Intro to NLP, Bag-of-Words

Last updated 3 years ago

Was this helpful?

3. Word Embedding : Word2Vec, GloVe

์›Œ๋“œ ์ž„๋ฒ ๋”ฉ์€ ์ž์—ฐ์–ด๊ฐ€ ๋‹จ์–ด๋“ค์„ ์ •๋ณด์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ ํ•ด์„œ ๊ฐ ๋‹จ์–ด๋“ค์„ ํŠน์ • ๊ณต๊ฐ„์— ํ•œ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

๊ณ ์–‘์ด๋ฅผ ์˜๋ฏธํ•˜๋Š” cat๊ณผ ์–ด๋ฆฐ ๊ณ ์–‘์ด๋ฅผ ์˜๋ฏธํ•˜๋Š” kitty๋Š” ์˜๋ฏธ๊ฐ€ ์œ ์‚ฌํ•˜๋ฏ€๋กœ ๊ฐ ์ ์€ ๊ฐ€๊นŒ์ด ์œ„์น˜ํ•˜๊ณ  hamburger์™€๋Š” ๋ฉ€๋ฆฌ ์œ„์น˜ํ•˜๊ฒŒ ๋œ๋‹ค.

Word2Vec

์›Œ๋“œ ์ž„๋ฒ ๋”ฉ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•. ๊ฐ™์€ ๋ฌธ์žฅ์—์„œ ๋‚˜ํƒ€๋‚œ ์ธ์ ‘ํ•œ ๋‹จ์–ด๋“ค ๊ฐ„์— ์˜๋ฏธ๊ฐ€ ๋น„์Šทํ•  ๊ฒƒ์ด๋ผ๋Š” ๊ฐ€์ •์„ ์‚ฌ์šฉํ•œ๋‹ค. "The cat purrs" ์™€ " This cat hunts mice" ๋ผ๋Š” ๋ฌธ์žฅ์—์„œ cat์ด๋ผ๋Š” ๋‹จ์–ด๋Š” The, purrs, This, hunts, mice ์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค.

์–ด๋– ํ•œ ๋‹จ์–ด๊ฐ€ ์ฃผ๋ณ€์˜ ๋“ฑ์žฅํ•˜๋Š” ๋‹จ์–ด๋ฅผ ํ†ตํ•ด ๊ทธ ์˜๋ฏธ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ์ฐฉ์•ˆํ•œ๋‹ค. ์ฃผ์–ด์ง„ ํ•™์Šต ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ cat ์ฃผ๋ณ€์— ๋‚˜ํƒ€๋‚˜๋Š” ์ฃผ๋ณ€ ๋‹จ์–ด๋“ค์˜ ํ™•๋ฅ  ๋ถ„ํฌ๋ฅผ ์˜ˆ์ธกํ•˜๊ฒŒ ๋œ๋‹ค. ๋ณด๋‹ค ๊ตฌ์ฒด์ ์œผ๋กœ๋Š” cat์„ ์ž…๋ ฅ๋‹จ์–ด๋กœ ์ฃผ๊ณ  ์ฃผ๋ณ€๋‹จ์–ด๋ฅผ ์ˆจ๊ธด์ฑ„ ์˜ˆ์ธกํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ Word2Vec์˜ ํ•™์Šต์ด ์ง„ํ–‰๋œ๋‹ค.

๊ตฌ์ฒด์ ์ธ ํ•™์Šต ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ฒ˜์Œ์—๋Š” "I study math" ๋ผ๋Š” ๋ฌธ์žฅ์ด ์ฃผ์–ด์ง„๋‹ค

  • word๋ณ„๋กœ tokenization์ด ์ด๋ฃจ์–ด์ง€๊ณ  ์œ ์˜๋ฏธํ•œ ๋‹จ์–ด๋ฅผ ์„ ๋ณ„ํ•ด ์‚ฌ์ „์„ ๊ตฌ์ถ•ํ•œ๋‹ค

  • ์ด ํ›„ ์‚ฌ์ „์— ์žˆ๋Š” ๋‹จ์–ด๋“ค์€ ์‚ฌ์ „์˜ ์‚ฌ์ด์ฆˆ๋งŒํผ์˜ ์ฐจ์›์„ ๊ฐ€์ง„ ont-hot vector๋กœ ํ‘œํ˜„๋œ๋‹ค.

  • ์ดํ›„ sliding window๋ผ๋Š” ๊ธฐ๋ฒ•์„ ์ ์šฉํ•ด์„œ ํ•œ ๋‹จ์–ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์•ž๋’ค๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๋‹จ์–ด๋“ค ๊ฐ๊ฐ๊ณผ์˜ ์ž…์ถœ๋ ฅ ๋‹จ์–ด ์Œ์„ ๊ตฌ์„ฑํ•˜๊ฒŒ๋œ๋‹ค.

    • ์˜ˆ๋ฅผ ๋“ค์–ด window size๊ฐ€ 3์ด๋ฉด ์•ž๋’ค๋กœ ํ•˜๋‚˜์˜ ๋‹จ์–ด๋งŒ์„ ๋ณด๊ฒŒ๋œ๋‹ค.

    • ์ค‘์‹ฌ ๋‹จ์–ด๊ฐ€ I ๋ผ๋ฉด (I, study) ๋ผ๋Š” ์Œ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

    • ์ค‘์‹ฌ ๋‹จ์–ด๊ฐ€ study ๋ผ๋ฉด (study, I) ์™€ (study, math) ๋ผ๋Š” ์Œ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

    • ์ฆ‰, (์ค‘์‹ฌ ๋‹จ์–ด, ์ฃผ๋ณ€ ๋‹จ์–ด) ๋ผ๋Š” ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„ ์Œ์„ window size์— ๋”ฐ๋ผ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

  • ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ž…์ถœ๋ ฅ ๋‹จ์–ด ์Œ๋“ค์— ๋Œ€ํ•ด ์˜ˆ์ธก Task๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” Two layer๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.

    • ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋Š” Vocab์˜ ์‚ฌ์ด์ฆˆ์™€ ๊ฐ™๋‹ค.

    • ๊ฐ€์šด๋ฐ์— ์žˆ๋Š” Hidden layer์˜ ๋…ธ๋“œ ์ˆ˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ •ํ•˜๋Š” ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ์ด๋ฉฐ, ์›Œ๋“œ์ž„๋ฒ ๋”ฉ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฐจ์› ์ˆ˜์™€ ๋™์ผํ•œ ๊ฐ’์œผ๋กœ ์ฃผ๋กœ ๊ฒฐ์ •ํ•œ๋‹ค.

  • ๋งŒ์•ฝ (study, math) ์Œ์„ ํ•™์Šตํ•œ๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด input๊ฐ’์œผ๋กœ study๋ฅผ ์˜๋ฏธํ•˜๋Š” [0, 1, 0] ์ด ์ž…๋ ฅ๋œ๋‹ค.

    • study : [0, 1, 0]

    • math : [0, 0, 1]

    • I : [1, 0, 0]

  • Input layer๋Š” 3์ฐจ์› Hidden layer๋Š” 2์ฐจ์›์ด๋ฏ€๋กœ W๋Š” 3 * 2์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ ์‹ค์ œ X์™€ ๊ณฑํ•ด์งˆ ๋•Œ์˜ 2 * 3์˜ ๋ชจ์–‘์œผ๋กœ ๊ณฑํ•ด์ง„๋‹ค.

  • Output layer๋Š” 3์ฐจ์›์ด๋ฏ€๋กœ W๋Š” 3 * 2์˜ ๋ชจ์–‘์œผ๋กœ ๊ณฑํ•ด์ง„๋‹ค.

  • ์ดํ›„, Softmax๋ฅผ ์ ์šฉํ•ด์„œ ํ™•๋ฅ ๋ถ„ํฌ ๋ฒกํ„ฐ๋ฅผ ์–ป๊ฒŒ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ Ground Truth์™€์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์ œ์ผ ๊ฐ€๊นŒ์›Œ์ง€๊ฒŒ ํ•˜๋Š” Softmax Loss๋ฅผ ์ ์šฉํ•จ์œผ๋กœ์จ W1๊ณผ W2๋ฅผ ํ•™์Šตํ•˜๊ฒŒ๋œ๋‹ค.

  • ์—ฌ๊ธฐ์„œ W1๊ณผ X๋ฅผ ๋‚ด์ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, X์˜ ํŠน์„ฑ์ƒ ํŠน์ • ์ธ๋ฑ์Šค๋งŒ 1์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋‹ค 0์ด๋‹ค ๋ณด๋‹ˆ, W1์˜ ํŠน์ • ์ธ๋ฑ์Šค ๊ฐ’๋งŒ ๋ฝ‘์•„์˜จ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    • ๊ทธ๋ž˜์„œ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•  ๋•Œ์—๋„ ๋‚ด์ ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ  X์—์„œ 1์ด ์กด์žฌํ•˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  W1์—์„œ ๊ฐ€์ ธ์˜ค๊ฒŒ๋œ๋‹ค.

  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ W2์™€ W1*X๋ฅผ ๋‚ด์ ํ•  ๋•Œ๋„ Ground Truth๊ฐ’์ธ Y์—์„œ 1์ด ์กด์žฌํ•˜๋Š” ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’๋งŒ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ W2๋Š” Y์—์„œ 1์ด ์กด์žฌํ•˜๋Š” ์ธ๋ฑ์Šค์—์„œ์˜ ๊ฐ’๋งŒ ๋ฝ‘์•„์˜จ๋‹ค.

    • ์˜ˆ์ธก๊ฐ’๊ณผ ์‹ค์ œ๊ฐ’์ด ๊ฐ€๊นŒ์›Œ์ง€๋ ค๋ฉด W2 * W1 * X์˜ ๊ฐ’์€ ์ •๋‹ต์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค์˜ ๊ฐ’์€ ๋ฌดํ•œ๋Œ€์— ๊ฐ€๊นŒ์›Œ์•ผ ํ•˜๊ณ  ๊ทธ์™ธ์˜ ๊ฐ’๋“ค์€ ์Œ์˜ ๋ฌดํ•œ๋Œ€์— ๊ฐ€๊นŒ์›Œ์•ผ ํ•œ๋‹ค.

    • ๊ทธ๋ž˜์•ผ Softmax๋ฅผ ์ ์šฉํ–ˆ์„ ๋•Œ ์–‘์˜ ๋ฌดํ•œ๋Œ€์— ๋Œ€ํ•ด์„œ๋งŒ 1์„ ์–ป๊ณ  ๋‚˜๋จธ์ง€ ์œ„์น˜์—์„œ๋Š” 0์„ ์–ป๊ธฐ ๋•Œ๋ฌธ

์œ„ ๋งํฌ์— ๋“ค์–ด๊ฐ€๋ฉด ์›Œ๋“œ ์ž„๋ฒ ๋”ฉ์„ ์‹œ๊ฐ์ ์ธ ์ƒํƒœ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ์‹œ๋กœ๋Š” 8๊ฐœ์˜ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ hidden size๋Š” 5์ด๋‹ค.

๋˜, ๋‹ค์Œ๊ณผ ๊ฐ™์ด W1๊ณผ W2 ํ–‰๋ ฌ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • W1์€ Transpose๋ฅผ ํ†ตํ•ด W2์™€ ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ฐ™๋„๋ก ๋‚˜ํƒ€๋ƒˆ๋‹ค.

  • ํ‘ธ๋ฅธ์ƒ‰์€ ์Œ์ˆ˜, ๋ถ‰์€์ƒ‰์€ ์–‘์ˆ˜์ด๋‹ค.

  • ํ˜„์žฌ๋Š” Random Initialization ๋œ ์ƒํƒœ์ด๋‹ค.

๊ฐ ๋‹จ์–ด์˜ ์ž„๋ฒ ๋”ฉ ๋œ ์ขŒํ‘œํ‰๋ฉด๋„ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • W1๊ณผ W2์˜ ์ฐจ์›์€ 5๊ฐœ์ง€๋งŒ PCA๋ฅผ ํ†ตํ•ด์„œ 2-Dimension์œผ๋กœ ์ฐจ์› ์ถ•์†Œ๋ฅผ ํ•œ ๋’ค Scatter plot์˜ ํ˜•ํƒœ๋กœ ๊ฐ๊ฐ์˜ ๋ฒกํ„ฐ๋“ค์„ ์‹œ๊ฐํ™” ํ•œ ๊ฒฐ๊ณผ์ด๋‹ค.

Trainin data๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

eat|apple
eat|orange
eat|rice
drink|juice
drink|milk
drink|water
orange|juice
apple|juice
rice|milk
milk|drink
water|drink
juice|drink

์ดํ›„, 300๋ฒˆ์˜ ํ•™์Šต์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ ํ›„์˜ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

  • juice์˜ input vector๋Š” drink์˜ output vector์™€๋Š” ์œ ์‚ฌํ•œ ๋ฒกํ„ฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    • ์ด ๋‘ ๋‹จ์–ด๋ฒกํ„ฐ์˜ ๋‚ด์ ๊ฐ’์€ ์ปค์ง€๊ฒŒ ๋œ๋‹ค.

    • ๋˜ํ•œ milk์™€ water์™€๋„ ์œ ์‚ฌํ•˜๋‹ค.

  • eat๊ณผ apple๋„ ์œ ์‚ฌํ•œ ๋ฒกํ„ฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

    • orange์™€๋„ ์œ ์‚ฌํ•˜๋‹ค.

์ž…๋ ฅ ๋‹จ์–ด์™€ ์ถœ๋ ฅ ๋‹จ์–ด์˜ ๋‘ ๊ฐœ์˜ ๋ฒกํ„ฐ๋ฅผ ์ตœ์ข…์ ์œผ๋กœ ์–ป์„ ์ˆ˜ ์žˆ๊ณ  ๋‘˜ ์ค‘์— ์–ด๋А๊ฒƒ์„ ์›Œ๋“œ ์ž„๋ฒ ๋”ฉ์˜ ์•„์›ƒํ’‹์œผ๋กœ ์‚ฌ์šฉํ•ด๋„ ์ƒ๊ด€์ด ์—†์œผ๋‚˜ ํ†ต์ƒ์ ์œผ๋กœ ์ž…๋ ฅ ๋‹จ์–ด์˜ ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•™์Šต๋œ Word2Vec์€ Words๊ฐ„์˜ ์˜๋ฏธ๋ก ์  ๊ด€๊ณ„๋ฅผ Vector Embedding๋กœ ์ž˜ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ ๊ทธ๋ฆผ์€ Word2Vec์œผ๋กœ ํ•™์Šต๋œ ๋‹จ์–ด๋“ค์˜ ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ๋ฅผ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

MAN์—์„œ WOMAN์œผ๋กœ์˜ ๋ฒกํ„ฐ๋‚˜ KING์—์„œ QUEEN ๋ฒกํ„ฐ๊ฐ€ ๋‚จ์„ฑ์—์„œ ์—ฌ์„ฑ์œผ๋กœ์˜ ๋ณ€ํ™”๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋ฒกํ„ฐ์˜ ๊ด€๊ณ„๊ฐ€ ์›Œ๋“œ์ž„๋ฒ ๋”ฉ ๊ด€๊ณ„์—์„œ ์ž˜ ํ•™์Šต๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์œ„ ๋งํฌ์—์„œ Word2Vec์„ ํ•œ๊ธ€ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ํ•™์Šตํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋˜, ์œ„ ๋งํฌ์—์„œ๋Š” ์—ฌ๋Ÿฌ ๋‹จ์–ด๋“ค์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ๋‚˜๋จธ์ง€ ๋‹จ์–ด์™€ ๊ฐ€์žฅ ์˜๋ฏธ๊ฐ€ ์ƒ์ดํ•œ ๋‹จ์–ด๋ฅผ ์ฐพ์•„๋‚ด๋Š” ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค

  • ์—„๋งˆ, ์•„๋น , ํ• ์•„๋ฒ„์ง€, ํ• ๋จธ๋‹ˆ, ์ด์›ƒ์‚ฌ์ดŒ => ์ด์›ƒ์‚ฌ์ดŒ

  • ๊ฐ ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ํ‰๊ท  ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์„œ ํ‰๊ท  ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ํฐ ๋‹จ์–ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • math, shopping, reading, science => shopping

Word2Vec์€ ๋‹จ์–ด ์ž์ฒด์˜ ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•˜๋Š” Task ์ด์™ธ์—๋„ ๋‹ค์–‘ํ•œ ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ Task์—์„œ ์ž์—ฐ์–ด๋ฅผ Word๋‹จ์œ„์˜ ๋ฒกํ„ฐ๋กœ ๋‚˜ํƒ€๋‚ด์–ด Task์˜ ์ž…๋ ฅ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ํ˜•ํƒœ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

  • ๊ธฐ๊ณ„ ๋ฒˆ์—ญ : ๊ฐ™์€ ์˜๋ฏธ๋ฅผ ์ง€๋‹Œ ๋‹จ์–ด๊ฐ€ align ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

  • ๊ฐ์ • ๋ถ„์„ : ๊ฐ ๋‹จ์–ด๋“ค์˜ ๊ธ/๋ถ€์ •์˜ ์˜๋ฏธ๋ฅผ ๋ณด๋‹ค ์šฉ์ดํ•˜๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์›Œ๋“œ ์ž„๋ฒ ๋”ฉ์„ ์ œ๊ณตํ•œ๋‹ค.

  • Image Captioning : ์ด๋ฏธ์ง€์˜ ์ƒํ™ฉ์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์ด์—๋Œ€ํ•œ ์„ค๋ช…๊ธ€์„ ์ž์—ฐ์–ด์˜ ํ˜•ํƒœ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ

  • PoS tagging, ๊ณ ์œ ๋ช…์‚ฌ์ธ์‹ ๋“ฑ

GloVe

Word2Vec๊ณผ ๋”๋ถˆ์–ด ๋งŽ์ด ์“ฐ์ด๋Š” ๋˜๋‹ค๋ฅธ ์›Œ๋“œ ์ž„๋ฒ ๋”ฉ ๋ฐฉ๋ฒ•์ด๋‹ค. Word2Vec๊ณผ์˜ ํฐ ์ฐจ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๊ฐ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ ์Œ๋“ค์— ๋Œ€ํ•ด์„œ ํ•™์Šต ๋ฐ์ดํ„ฐ์—์„œ ๋‘ ๋‹จ์–ด๊ฐ€ ํ•œ ์œˆ๋„์šฐ ๋‚ด์—์„œ ๋ช‡๋ฒˆ ๋“ฑ์žฅํ–ˆ๋Š”์ง€๋ฅผ ์‚ฌ์ „์— ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•œ๋‹ค.

  • ๋‹ค์Œ ์ˆ˜์‹์ฒ˜๋Ÿผ ์ž…๋ ฅ๋ฒกํ„ฐ์™€ ์ถœ๋ ฅ๋ฒกํ„ฐ์˜ ๋‚ด์ ๊ฐ’์—์„œ ๋‘ ๋‹จ์–ด๊ฐ€ ํ•œ ์œˆ๋„์šฐ ๋‚ด์—์„œ ๋™์‹œ์— ๋ช‡๋ฒˆ ๋“ฑ์žฅํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐ’์— log๋ฅผ ์ทจํ•œ ๊ฐ’์„ ๋บ€ ๊ฐ’์„ Loss Function์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

    • ๊ทธ๋ž˜์„œ, ๋‘ ๋‚ด์ ๊ฐ’์ด P์— fit๋˜๋„๋ก ํ•œ๋‹ค.

  • Word2Vec์—์„œ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ๋‹จ์–ด๋Š” ์ž์ฃผ ํ•™์Šต๋จ์œผ๋กœ์จ ์›Œ๋“œ ์ž„๋ฒ ๋”ฉ์˜ ๋‚ด์ ๊ฐ’์ด ๊ทธ์— ๋น„๋ก€ํ•ด์„œ ์ปค์ง€๊ฒŒ ๋˜๋Š”๋ฐ, GloVe์—์„œ๋Š” ๋‹จ์–ด์Œ์ด ๋™์‹œ์— ๋“ฑ์žฅํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ log๊ฐ’์„ Ground Truth๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค๋Š” ์ ์—์„œ ์ค‘๋ณต๋˜๋Š” ๊ณ„์‚ฐ์„ ์ค„์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์กด์žฌํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํ•™์Šต์ด Word2Vec๋ณด๋‹ค ๋” ๋น ๋ฅด๊ฒŒ ๋˜๋ฉฐ ๋” ์ ์€ ๋ฐ์ดํ„ฐ๋กœ๋„ ํ•™์Šต์ด ์ž˜ ๋œ๋‹ค.

  • ์„ธ๋ถ€์ ์œผ๋กœ๋Š” ๋” ๋งŽ์€ ์ฐจ์ด์ ์ด ์žˆ์ง€๋งŒ ํฐ ํ‹€์—์„œ๋Š” ์ด์ •๋„์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

  • ๋‘ ๋ฐฉ๋ฒ•์€ ์ฃผ์–ด์ง„ ํ•™์Šต๋ฐ์ดํ„ฐ์— ๊ธฐ๋ฐ˜ํ•ด์„œ ์›Œ๋“œ์ž„๋ฒ ๋”ฉ์„ ํ•™์Šตํ•˜๋Š” ๋™์ผํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๊ณ  ์‹ค์ œ๋กœ Task์— ์ ์šฉํ–ˆ์„ ๋•Œ ์„ฑ๋Šฅ๋„ ๋น„๋“ฑ๋น„๋“ฑํ•˜๊ฒŒ ๋‚˜์˜จ๋‹ค.

๋˜, GloVe ๋ชจ๋ธ์€ ์ถ”์ฒœ์‹œ์Šคํ…œ์— ๋งŽ์ด ํ™œ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ Co-occurrence matrix์˜ low rank matrix factorization์˜ Task๋กœ์„œ ์„ ํ˜•๋Œ€์ˆ˜์˜ ๊ด€์ ์—์„œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ • ๊ด€์ (๋˜๋Š” ๊ธฐ์ค€)์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๋‹จ์–ด๋“ค์˜ ๋ฒกํ„ฐ๊ด€๊ณ„๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋น„์Šทํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

man / woman

company / ceo

๋‹จ์–ด๋“ค๊ฐ„์˜ ์˜๋ฏธ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ๊ด€๊ณ„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ˜•์šฉ์ƒ์˜ ์›ํ˜•๊ณผ ๋น„๊ต๊ธ‰, ์ตœ์ƒ๊ธ‰์˜ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‹จ์–ด๋“ค ์‚ฌ์ด์—๋„ ์ด๋Ÿฌํ•œ ๋ฌธ๋ฒ•์ ์ธ ๊ด€๊ณ„๊นŒ์ง€๋„ GloVe๊ฐ€ ์ž˜ ํ•™์Šตํ–ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

GloVe๋Š” Open Source๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์œ„ํ‚คํ”ผ๋””์•„ 2014๋…„๋„ ๋ฒ„์ „ + Gigaword 5๋ฅผ ํ•™์Šตํ•œ pretrained ๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • 60์–ต๊ฐœ์˜ ํ† ํฐ(๋˜๋Š” ๋‹จ์–ด)์ด ์žˆ๋‹ค.

  • ์ค‘๋ณต๋œ ๋‹จ์–ด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‚ฌ์ „์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋‹จ์–ด๋Š” 40๋งŒ๊ฐœ์ด๋‹ค.

  • uncased๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์•˜๋‹ค๋ผ๋Š” ๋œป

    • he์™€ He๋ฅผ ๊ฐ™์€ ๋‹จ์–ด๋กœ ์ทจ๊ธ‰ํ–ˆ๋‹ค๋Š” ๋œป

  • 50d, 100d, 200d, 300d๋Š” GloVe ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•  ๋•Œ ๊ฒฐ์ •ํ•œ Target Dimension์˜ ํฌ๊ธฐ์ด๋‹ค.

    • ์ž…๋ ฅ ๋‹จ์–ด์™€ ์ถœ๋ ฅ ๋‹จ์–ด์˜ ๋ฒกํ„ฐ์˜ ํฌ๊ธฐ์ด๋‹ค.

์‹ค์Šต

ํ•„์š” ํŒจํ‚ค์ง€์™€ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ๋Š” ์ด์ „ ์‹ค์Šต๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜๋ฏ€๋กœ ์„ค๋ช…์€ ์ƒ๋žตํ•œ๋‹ค.

ํ•„์š” ํŒจํ‚ค์ง€

!pip install konlpy
from tqdm import tqdm
from konlpy.tag import Okt
from torch import nn
from torch.nn import functional as F
from torch.utils.data import Dataset, DataLoader
from collections import defaultdict

import torch
import copy
import numpy as np

๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ

train_data = [
  "์ •๋ง ๋ง›์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.",
  "๊ธฐ๋Œ€ํ–ˆ๋˜ ๊ฒƒ๋ณด๋‹จ ๋ณ„๋กœ์˜€๋„ค์š”.",
  "๋‹ค ์ข‹์€๋ฐ ๊ฐ€๊ฒฉ์ด ๋„ˆ๋ฌด ๋น„์‹ธ์„œ ๋‹ค์‹œ ๊ฐ€๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ์•ˆ ๋“œ๋„ค์š”.",
  "์™„์ „ ์ตœ๊ณ ์ž…๋‹ˆ๋‹ค! ์žฌ๋ฐฉ๋ฌธ ์˜์‚ฌ ์žˆ์Šต๋‹ˆ๋‹ค.",
  "์Œ์‹๋„ ์„œ๋น„์Šค๋„ ๋‹ค ๋งŒ์กฑ์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค.",
  "์œ„์ƒ ์ƒํƒœ๊ฐ€ ์ข€ ๋ณ„๋กœ์˜€์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ๊ฐœ์„ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.",
  "๋ง›๋„ ์ข‹์•˜๊ณ  ์ง์›๋ถ„๋“ค ์„œ๋น„์Šค๋„ ๋„ˆ๋ฌด ์นœ์ ˆํ–ˆ์Šต๋‹ˆ๋‹ค.",
  "๊ธฐ๋…์ผ์— ๋ฐฉ๋ฌธํ–ˆ๋Š”๋ฐ ์Œ์‹๋„ ๋ถ„์œ„๊ธฐ๋„ ์„œ๋น„์Šค๋„ ๋‹ค ์ข‹์•˜์Šต๋‹ˆ๋‹ค.",
  "์ „๋ฐ˜์ ์œผ๋กœ ์Œ์‹์ด ๋„ˆ๋ฌด ์งฐ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋ณ„๋กœ์˜€๋„ค์š”.",
  "์œ„์ƒ์— ์กฐ๊ธˆ ๋” ์‹ ๊ฒฝ ์ผ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๋ถˆ์พŒํ–ˆ์Šต๋‹ˆ๋‹ค."       
]

test_words = ["์Œ์‹", "๋ง›", "์„œ๋น„์Šค", "์œ„์ƒ", "๊ฐ€๊ฒฉ"]
tokenizer = Okt()

def make_tokenized(data):
  tokenized = []
  for sent in tqdm(data):
    tokens = tokenizer.morphs(sent, stem=True)
    tokenized.append(tokens)

  return tokenized
  
  train_tokenized = make_tokenized(train_data)
word_count = defaultdict(int)

for tokens in tqdm(train_tokenized):
  for token in tokens:
    word_count[token] += 1
    
word_count = sorted(word_count.items(), key=lambda x: x[1], reverse=True)
print(list(word_count))
[('.', 14), ('๋„', 7), ('์ด๋‹ค', 4), ('์ข‹๋‹ค', 4), ('๋ณ„๋กœ', 3), ('๋‹ค', 3), ('์ด', 3), ('๋„ˆ๋ฌด', 3), ('์Œ์‹', 3), ('์„œ๋น„์Šค', 3), ('ํ•˜๋‹ค', 2), ('๋ฐฉ๋ฌธ', 2), ('์œ„์ƒ', 2), ('์ข€', 2), ('๋”', 2), ('์—', 2), ('์กฐ๊ธˆ', 2), ('์ •๋ง', 1), ('๋ง›์žˆ๋‹ค', 1), ('์ถ”์ฒœ', 1), ('๊ธฐ๋Œ€ํ•˜๋‹ค', 1), ('๊ฒƒ', 1), ('๋ณด๋‹จ', 1), ('๊ฐ€๊ฒฉ', 1), ('๋น„์‹ธ๋‹ค', 1), ('๋‹ค์‹œ', 1), ('๊ฐ€๋‹ค', 1), ('์‹ถ๋‹ค', 1), ('์ƒ๊ฐ', 1), ('์•ˆ', 1), ('๋“œ๋„ค', 1), ('์š”', 1), ('์™„์ „', 1), ('์ตœ๊ณ ', 1), ('!', 1), ('์žฌ', 1), ('์˜์‚ฌ', 1), ('์žˆ๋‹ค', 1), ('๋งŒ์กฑ์Šค๋Ÿฝ๋‹ค', 1), ('์ƒํƒœ', 1), ('๊ฐ€', 1), ('๊ฐœ์„ ', 1), ('๋˜๋‹ค', 1), ('๊ธฐ๋ฅด๋‹ค', 1), ('๋ฐ”๋ผ๋‹ค', 1), ('๋ง›', 1), ('์ง์›', 1), ('๋ถ„๋“ค', 1), ('์นœ์ ˆํ•˜๋‹ค', 1), ('๊ธฐ๋…์ผ', 1), ('๋ถ„์œ„๊ธฐ', 1), ('์ „๋ฐ˜', 1), ('์ ', 1), ('์œผ๋กœ', 1), ('์งœ๋‹ค', 1), ('์ €', 1), ('๋Š”', 1), ('์‹ ๊ฒฝ', 1), ('์จ๋‹ค', 1), ('๋ถˆ์พŒํ•˜๋‹ค', 1)]
w2i = {}
for pair in tqdm(word_count):
  if pair[0] not in w2i:
    w2i[pair[0]] = len(w2i)
    
print(train_tokenized)
print(w2i)    
[['์ •๋ง', '๋ง›์žˆ๋‹ค', '.', '์ถ”์ฒœ', 'ํ•˜๋‹ค', '.'], ['๊ธฐ๋Œ€ํ•˜๋‹ค', '๊ฒƒ', '๋ณด๋‹จ', '๋ณ„๋กœ', '์ด๋‹ค', '.'], ['๋‹ค', '์ข‹๋‹ค', '๊ฐ€๊ฒฉ', '์ด', '๋„ˆ๋ฌด', '๋น„์‹ธ๋‹ค', '๋‹ค์‹œ', '๊ฐ€๋‹ค', '์‹ถ๋‹ค', '์ƒ๊ฐ', '์ด', '์•ˆ', '๋“œ๋„ค', '์š”', '.'], ['์™„์ „', '์ตœ๊ณ ', '์ด๋‹ค', '!', '์žฌ', '๋ฐฉ๋ฌธ', '์˜์‚ฌ', '์žˆ๋‹ค', '.'], ['์Œ์‹', '๋„', '์„œ๋น„์Šค', '๋„', '๋‹ค', '๋งŒ์กฑ์Šค๋Ÿฝ๋‹ค', '.'], ['์œ„์ƒ', '์ƒํƒœ', '๊ฐ€', '์ข€', '๋ณ„๋กœ', '์ด๋‹ค', '.', '์ข€', '๋”', '๊ฐœ์„ ', '๋˜๋‹ค', '๊ธฐ๋ฅด๋‹ค', '๋ฐ”๋ผ๋‹ค', '.'], ['๋ง›', '๋„', '์ข‹๋‹ค', '์ง์›', '๋ถ„๋“ค', '์„œ๋น„์Šค', '๋„', '๋„ˆ๋ฌด', '์นœ์ ˆํ•˜๋‹ค', '.'], ['๊ธฐ๋…์ผ', '์—', '๋ฐฉ๋ฌธ', 'ํ•˜๋‹ค', '์Œ์‹', '๋„', '๋ถ„์œ„๊ธฐ', '๋„', '์„œ๋น„์Šค', '๋„', '๋‹ค', '์ข‹๋‹ค', '.'], ['์ „๋ฐ˜', '์ ', '์œผ๋กœ', '์Œ์‹', '์ด', '๋„ˆ๋ฌด', '์งœ๋‹ค', '.', '์ €', '๋Š”', '๋ณ„๋กœ', '์ด๋‹ค', '.'], ['์œ„์ƒ', '์—', '์กฐ๊ธˆ', '๋”', '์‹ ๊ฒฝ', '์จ๋‹ค', '์ข‹๋‹ค', '.', '์กฐ๊ธˆ', '๋ถˆ์พŒํ•˜๋‹ค', '.']]
{'.': 0, '๋„': 1, '์ด๋‹ค': 2, '์ข‹๋‹ค': 3, '๋ณ„๋กœ': 4, '๋‹ค': 5, '์ด': 6, '๋„ˆ๋ฌด': 7, '์Œ์‹': 8, '์„œ๋น„์Šค': 9, 'ํ•˜๋‹ค': 10, '๋ฐฉ๋ฌธ': 11, '์œ„์ƒ': 12, '์ข€': 13, '๋”': 14, '์—': 15, '์กฐ๊ธˆ': 16, '์ •๋ง': 17, '๋ง›์žˆ๋‹ค': 18, '์ถ”์ฒœ': 19, '๊ธฐ๋Œ€ํ•˜๋‹ค': 20, '๊ฒƒ': 21, '๋ณด๋‹จ': 22, '๊ฐ€๊ฒฉ': 23, '๋น„์‹ธ๋‹ค': 24, '๋‹ค์‹œ': 25, '๊ฐ€๋‹ค': 26, '์‹ถ๋‹ค': 27, '์ƒ๊ฐ': 28, '์•ˆ': 29, '๋“œ๋„ค': 30, '์š”': 31, '์™„์ „': 32, '์ตœ๊ณ ': 33, '!': 34, '์žฌ': 35, '์˜์‚ฌ': 36, '์žˆ๋‹ค': 37, '๋งŒ์กฑ์Šค๋Ÿฝ๋‹ค': 38, '์ƒํƒœ': 39, '๊ฐ€': 40, '๊ฐœ์„ ': 41, '๋˜๋‹ค': 42, '๊ธฐ๋ฅด๋‹ค': 43, '๋ฐ”๋ผ๋‹ค': 44, '๋ง›': 45, '์ง์›': 46, '๋ถ„๋“ค': 47, '์นœ์ ˆํ•˜๋‹ค': 48, '๊ธฐ๋…์ผ': 49, '๋ถ„์œ„๊ธฐ': 50, '์ „๋ฐ˜': 51, '์ ': 52, '์œผ๋กœ': 53, '์งœ๋‹ค': 54, '์ €': 55, '๋Š”': 56, '์‹ ๊ฒฝ': 57, '์จ๋‹ค': 58, '๋ถˆ์พŒํ•˜๋‹ค': 59}

๋ฐ์ดํ„ฐ์…‹ ํด๋ž˜์Šค

CBOW ์™€ SkipGram ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ์…‹์„ ์ •์˜ํ•œ๋‹ค.

  • CBOW : Continuous Bag of Words์˜ ์•ฝ์–ด๋กœ ์ฃผ๋ณ€์— ์žˆ๋Š” ๋‹จ์–ด๋“ค์„ ๊ฐ€์ง€๊ณ  ์ค‘๊ฐ„ ๋‹จ์–ด๋ฅผ ์˜ˆ์ธก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

  • SkipGram : CBOW์™€ ๋ฐ˜๋Œ€๋กœ ์ค‘๊ฐ„ ๋‹จ์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ์ฃผ๋ณ€ ๋‹จ์–ด๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

CBOW

class CBOWDataset(Dataset):
  def __init__(self, train_tokenized, window_size=2):
    self.x = []
    self.y = []

    for tokens in tqdm(train_tokenized):
      token_ids = [w2i[token] for token in tokens]
      for i, id in enumerate(token_ids):
        if i-window_size >= 0 and i+window_size < len(token_ids):
          self.x.append(token_ids[i-window_size:i] + token_ids[i+1:i+window_size+1])
          self.y.append(id)

    self.x = torch.LongTensor(self.x)  # (์ „์ฒด ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜, 2 * window_size)
    self.y = torch.LongTensor(self.y)  # (์ „์ฒด ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜)

  def __len__(self):
    return self.x.shape[0]

  def __getitem__(self, idx):
    return self.x[idx], self.y[idx]
  • ์ค‘์‹ฌ ๋‹จ์–ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ๋งŒํผ์˜ ์ฃผ๋ณ€ ๋‹จ์–ด๋ฅผ x๋กœ, ์ค‘์‹ฌ ๋‹จ์–ด๋ฅผ y๋กœ ์„ค์ •ํ•œ๋‹ค.

  • ์ด ๋•Œ(window_size = 2 ๊ธฐ์ค€) ์ฒ˜์Œ ๋‘ ๋‹จ์–ด์™€ ๋งˆ์ง€๋ง‰ ๋‘ ๋‹จ์–ด๋Š” ํ•™์Šต ๋ฐ์ดํ„ฐ์— ํฌํ•จ๋˜์ง€ ๋ชปํ•˜๋Š”๊ฑด๊ฐ€?

SkipGram

class SkipGramDataset(Dataset):
  def __init__(self, train_tokenized, window_size=2):
    self.x = []
    self.y = []

    for tokens in tqdm(train_tokenized):
      token_ids = [w2i[token] for token in tokens]
      for i, id in enumerate(token_ids):
        if i-window_size >= 0 and i+window_size < len(token_ids):
          self.y += (token_ids[i-window_size:i] + token_ids[i+1:i+window_size+1])
          self.x += [id] * 2 * window_size

    self.x = torch.LongTensor(self.x)  # (์ „์ฒด ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜)
    self.y = torch.LongTensor(self.y)  # (์ „์ฒด ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜)

  def __len__(self):
    return self.x.shape[0]

  def __getitem__(self, idx):
    return self.x[idx], self.y[idx]
  • ์ฃผ๋ณ€ ๋‹จ์–ด๋ฅผ y๋กœ, ์ค‘์‹ฌ ๋‹จ์–ด๋ฅผ x๋กœ ์„ค์ •ํ•œ๋‹ค. ์ด ๋•Œ x์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฃผ๋ณ€ ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜์™€ ํ†ต์ผ์‹œ์ผœ์ค€๋‹ค.

cbow_set = CBOWDataset(train_tokenized)
skipgram_set = SkipGramDataset(train_tokenized)

๋ชจ๋ธ ํด๋ž˜์Šค

CBOW

class CBOW(nn.Module):
  def __init__(self, vocab_size, dim):
    super(CBOW, self).__init__()
    self.embedding = nn.Embedding(vocab_size, dim, sparse=True)
    self.linear = nn.Linear(dim, vocab_size)

  # B: batch size, W: window size, d_w: word embedding size, V: vocab size
  def forward(self, x):  # x: (B, 2W)
    embeddings = self.embedding(x)  # (B, 2W, d_w)
    embeddings = torch.sum(embeddings, dim=1)  # (B, d_w)
    output = self.linear(embeddings)  # (B, V)
    return output
  • CBOW ๋ชจ๋ธ์„ ์„ ์–ธํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  nn.Module์˜ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด super() ๊ตฌ๋ฌธ์„ ์„ ์–ธํ•œ๋‹ค.

    • ๋‚˜๋Š” ๋ชฐ๋ž์—ˆ๋Š”๋ฐ, ์ƒˆ๋กœ ์•Œ๊ฒŒ๋˜์–ด ๊ณต์œ ํ•œ๋‹ค. ๋‹ค์Œ์˜ ๋‘ ๊ฒฝ์šฐ๋Š” ๋˜‘๊ฐ™์€ ์˜๋ฏธ๋ฅผ ์ง€๋‹ˆ๋ฉฐ ์ „์ž๋Š” 2.x ํŒŒ์ด์ฌ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉํ•˜๋˜ ๋ฌธ๋ฒ•์ด๊ณ  ํ›„์ž๋Š” 3.x ํŒŒ์ด์ฌ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉํ•˜๋˜ ๋ฌธ๋ฒ•์ด๋‹ค. ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด 2.x ๋ฌธ๋ฒ•๋„ ์ธ์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค.

    • super(CBOW, self).__init__(**kwargs)

    • super().__init__(**kwargs)

  • nn.Embedding(num_embeddings, embedding_dim, sparse)

    • num_embeddings : dictionary์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. vocab์— ๋“ฑ๋ก๋œ ์ด ๋‹จ์–ด ์ˆ˜

    • embedding_dim : ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ์˜ ์ฐจ์›

    • sparse : ๋งŒ์•ฝ True๋ผ๋ฉด 0์ด ์žˆ๋Š” ํ–‰๋ ฌ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๊ณ  0์ด ์•„๋‹Œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ–‰๋ ฌ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค. ์‹ค์ œ๋กœ๋„ 0์ธ ๋ถ€๋ถ„์„ ์—…๋ฐ์ดํŠธ ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ฃผ๋กœ True๋กœ ์„ค์ •ํ•œ๋‹ค. False์ธ ๊ฒฝ์šฐ์—๋Š” 0์„ ํฌํ•จํ•œ ํ–‰๋ ฌ๋กœ ๊ฐ€์ง€๊ฒŒ๋œ๋‹ค.

      • ํฌ์†Œ ํ–‰๋ ฌ์ด๋ž€ ํ–‰๋ ฌ์˜ ๊ฐ’์ด ๋Œ€๋ถ€๋ถ„ 0์ธ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

  • forward

    • ๊ฐ๊ฐ์˜ ์ค‘์‹ฌ๋‹จ์–ด์— ๋Œ€ํ•œ ์ฃผ๋ณ€๋‹จ์–ด๊ฐ€ (1, 2W) ์˜ ๋ชจ์–‘์œผ๋กœ ์กด์žฌํ•œ๋‹ค. ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ W๋งŒํผ ์–‘์ชฝ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ 2W ์ด๋‹ค.

    • ์ดํ›„ ๋ฐ์ดํ„ฐ๋กœ๋”์—์„œ ๋ฐฐ์น˜๋งŒํผ ๋‚˜์˜ค๋ฏ€๋กœ (B, 2W)์˜ ๋ชจ์–‘์œผ๋กœ ์กด์žฌํ•œ๋‹ค. ์ดํ•ด๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์น˜ ์‚ฌ์ด์ฆˆ๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์„ค๋ช…ํ•œ๋‹ค.

    • embedding : ๊ฐ๊ฐ์˜ ์ฃผ๋ณ€๋‹จ์–ด๊ฐ€ ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ๊ผด๋กœ ๋ฐ”๋€Œ๋ฉด์„œ (2W, d_w)์˜ ํ˜•ํƒœ๋กœ ๋ฐ”๋€๋‹ค. ์ด ๊ณผ์ •์ด INPUT์—์„œ HIDDEN์œผ๋กœ ๊ฐ€๋Š” ๊ณผ์ •์ด๋‹ค.

    • torch.sum : embeddings์˜ ์›์†Œ๋ฅผ ๋ชจ๋‘ ๋”ํ•˜๋Š”๋ฐ ์ด ๋•Œ์˜ ์ถ•์ด dim=1 ์ด๋‹ค. ์ด๋•Œ ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์‹ค์ œ๋กœ embeddings์˜ ์ฐจ์›์€ (B, 2W, d_w) ์ด๋‹ค. ๋”ฐ๋ผ์„œ 2W๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค ๋”ํ•˜๋ผ๋Š” ๋œป. ๊ฒฐ๊ตญ ์•„๋ž˜์™€ ๊ฐ™์ด ๋œ๋‹ค. (๋ฌผ๋ก  ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ๋Š” ํ•œ ๋ฆฌ์ŠคํŠธ์— ํ•œ ๊ฐœ์˜ 1๊ฐ’๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค)

    • ์ดํ›„, Linear๋ฅผ ๊ฑฐ์ณ Hidden์—์„œ Output์œผ๋กœ ๋„คํŠธ์›Œํฌ๊ฐ€ ๊ตฌ์„ฑ๋œ๋‹ค.

class SkipGram(nn.Module):
  def __init__(self, vocab_size, dim):
    super(SkipGram, self).__init__()
    self.embedding = nn.Embedding(vocab_size, dim, sparse=True)
    self.linear = nn.Linear(dim, vocab_size)

  # B: batch size, W: window size, d_w: word embedding size, V: vocab size
  def forward(self, x): # x: (B)
    embeddings = self.embedding(x)  # (B, d_w)
    output = self.linear(embeddings)  # (B, V)
    return output
  • CBOW์˜ ์„ค๋ช…๊ณผ ๋™์ผํ•˜๋‹ค. ๋‹ค๋งŒ ์ค‘์‹ฌ๋‹จ์–ด์—์„œ ์ฃผ๋ณ€๋‹จ์–ด๋กœ์˜ ๋ฐฉํ–ฅ์ด๊ธฐ ๋•Œ๋ฌธ์— CBOW์™€ ๊ฐ™์€ torch.sum ์€ ์—†๋‹ค.

cbow = CBOW(vocab_size=len(w2i), dim=256)
skipgram = SkipGram(vocab_size=len(w2i), dim=256)
  • ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. vocab size๋Š” ๋งŒ๋“ค์–ด๋‘” vocab์˜ ๊ธธ์ด์ด๋ฉฐ ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ์˜ ์ฐจ์›์€ 256์œผ๋กœ ์ •ํ–ˆ๋‹ค.

batch_size=4
learning_rate = 5e-4
num_epochs = 5
device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')

cbow_loader = DataLoader(cbow_set, batch_size=batch_size)
skipgram_loader = DataLoader(skipgram_set, batch_size=batch_size)
  • ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ธํŒ…ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๋กœ๋” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

cbow.train()
cbow = cbow.to(device)
optim = torch.optim.SGD(cbow.parameters(), lr=learning_rate)
loss_function = nn.CrossEntropyLoss()

for e in range(1, num_epochs+1):
  print("#" * 50)
  print(f"Epoch: {e}")
  for batch in tqdm(cbow_loader):
    x, y = batch
    x, y = x.to(device), y.to(device) # (B, W), (B)
    output = cbow(x)  # (B, V)
 
    optim.zero_grad()
    loss = loss_function(output, y)
    loss.backward()
    optim.step()

    print(f"Train loss: {loss.item()}")

print("Finished.")
skipgram.train()
skipgram = skipgram.to(device)
optim = torch.optim.SGD(skipgram.parameters(), lr=learning_rate)
loss_function = nn.CrossEntropyLoss()

for e in range(1, num_epochs+1):
  print("#" * 50)
  print(f"Epoch: {e}")
  for batch in tqdm(skipgram_loader):
    x, y = batch
    x, y = x.to(device), y.to(device) # (B, W), (B)
    output = skipgram(x)  # (B, V)

    optim.zero_grad()
    loss = loss_function(output, y)
    loss.backward()
    optim.step()

    print(f"Train loss: {loss.item()}")

print("Finished.")
  • CBOW์™€ Skip Gram์„ ํ•™์Šตํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ

for word in test_words:
  input_id = torch.LongTensor([w2i[word]]).to(device)
  emb = cbow.embedding(input_id)

  print(f"Word: {word}")
  print(emb.squeeze(0))
Word: ์Œ์‹
tensor([-0.2270,  0.6425, -1.8639,  2.0074,  1.0602,  0.2280, -1.8116,  0.8747,
         1.0573, -0.5521,  0.9199, -0.6088,  0.1038, -1.3149, -0.7779, -0.1262,
        -0.2844, -0.8965,  1.0262, -1.0729,  0.9233, -0.3065, -0.4321,  0.6775,
        -0.6982, -0.7818, -1.2061, -0.5342,  0.1569, -0.3796, -0.2084,  0.2658,
         0.0634, -0.8452,  0.2186,  1.7930, -0.9043, -1.4288,  0.1343, -0.1323,
        -0.0827,  2.4206,  1.2419,  0.2111,  0.8264,  1.0360,  0.4485, -1.1690,
         1.3214,  0.3526,  0.1401, -0.7342,  0.4352, -0.2940,  0.7282,  1.1189,
         1.5770,  1.1922, -1.5995, -1.1725,  0.0383, -0.0336,  0.3315, -0.1366,
         0.1023, -1.1581, -0.4394,  2.3015, -1.1541, -1.9957,  0.6316,  1.1867,
         0.7656,  0.4047,  1.0780,  1.6586, -0.9893,  1.5444, -0.7219, -1.2783,
         1.1337, -1.0382, -2.2678,  0.4427,  0.5249, -0.3099,  1.0815,  0.3609,
        -0.7238, -0.2766,  1.9665, -0.2601, -1.0646, -1.6778, -1.4640, -0.0491,
         1.5413,  1.7797, -1.0758, -1.1144, -0.2286,  0.0801, -0.8882,  0.7936,
        -0.9803, -1.3373,  0.2506, -0.3887, -0.3695,  0.5422, -1.4766,  0.6960,
         1.0853,  1.6725, -0.1421,  0.2922, -0.4651, -0.7007,  0.4225, -0.4785,
         0.1668,  0.1869,  1.1163,  0.8795, -0.4107, -0.4094, -0.6185, -1.0438,
        -0.8743, -0.1753, -1.2997, -0.3147,  0.6688,  1.2124,  0.3117, -0.6259,
         0.3318, -0.3269,  0.3592,  0.8215,  0.3237, -0.5968,  0.0490, -0.6924,
         0.9793,  0.2978,  0.4555,  1.2372, -1.2608, -0.1196, -0.2401,  3.0968,
         0.3112,  1.4220, -0.4118,  0.6844,  2.5612, -0.1734,  0.2485,  0.3059,
        -0.6804, -1.7223, -1.0865,  0.4444, -1.1373, -2.0967, -0.0566, -0.2483,
         0.2775,  0.2334,  0.0348,  0.7561, -0.2670, -1.8109,  1.0936, -1.2397,
         1.5405,  1.0400,  1.6530,  1.3015,  0.7623, -0.5298,  0.7347,  0.7972,
        -0.9365, -0.2704,  0.1107, -0.5784,  0.3181, -0.4907, -1.3453,  1.7972,
         0.3025, -1.3448,  0.2850, -1.2486, -0.6892,  1.4329,  0.2077, -0.5875,
         0.2315, -0.0705,  0.5190,  0.9477,  0.4642,  1.1244,  1.6203, -0.6578,
         0.3903,  0.3586,  0.2026, -0.5119,  0.9532, -0.2923,  0.4737, -0.1401,
        -0.3620,  0.1771, -1.4056, -0.6920, -0.2073,  0.5479,  2.5050, -0.2251,
        -0.1477, -0.8426, -1.0569,  1.1574, -0.9174,  0.9778, -0.4568, -1.1284,
         0.3200, -0.6528,  0.8150, -0.8982, -1.2987, -0.8387, -0.1911, -0.1043,
        -1.1814,  1.5886,  0.0527,  0.5757, -0.3675,  0.0131, -0.6479,  1.2956,
        -0.7678, -0.0297,  0.0950,  1.3812, -2.3011,  1.2982, -0.7013,  0.9153],
       device='cuda:0', grad_fn=<SqueezeBackward1>)
Word: ๋ง›
tensor([-1.0472,  0.0974, -0.8682, -1.1996,  0.2108,  0.1986,  0.0686, -0.0737,
        -1.3722,  0.5095, -0.4904, -0.2565, -0.5316, -0.4625,  0.9563, -0.2709,
         0.0844, -0.7378, -0.6514,  0.2506,  0.8878,  0.9990,  0.5927, -1.0165,
        -0.0710, -0.2383, -0.0516,  0.6606,  0.4938, -0.0647, -0.3309,  1.9562,
        -0.1541, -0.5692, -0.6306, -0.7136,  0.1331, -1.3353, -0.3859,  0.0787,
        -0.3642, -1.0149, -1.3493, -1.1551,  0.2465,  1.0351, -0.6229,  0.5483,
         0.7147,  2.0509, -0.3774, -0.1519, -0.8314, -1.5689, -0.2741, -0.6017,
         0.4783,  1.0759,  0.0212, -0.3583, -1.4920, -1.4609, -0.7354, -0.9537,
         0.6405, -1.2083, -0.1385, -0.1988,  0.5321,  0.1500,  0.3514,  0.5592,
        -0.0134, -1.6319, -1.9174,  0.7925,  0.7038, -1.9603, -0.3082, -1.0190,
        -0.9457, -0.6549, -2.3182,  0.9935, -0.9646, -0.2284, -1.5698,  1.6264,
         1.9855,  0.7877,  0.2498, -0.4655, -1.8867,  0.0782, -2.1022, -0.9665,
         0.1089,  1.0033, -0.7092, -0.6666,  0.0724, -0.1201,  1.0299,  1.1822,
        -0.5133, -0.0656,  1.6838,  0.5656, -1.6196, -1.3678, -1.9246, -0.2582,
        -1.2313, -0.5565, -1.4278, -1.6979,  0.2416, -0.2073, -0.9860,  0.4333,
        -0.7303, -1.8909, -0.4977, -0.3817, -0.1278, -1.2833, -0.1096,  0.5392,
         0.0872,  0.1551,  0.6277,  0.0262,  0.2213,  0.2394,  0.7892, -0.6257,
         0.2233, -0.4631, -1.1916, -0.4870, -0.8276,  0.8618, -1.3837,  0.8283,
        -1.8022,  0.1711, -1.1377,  0.1900,  1.1042, -0.0955, -0.8679, -0.2167,
         0.8381,  0.0165,  0.1233,  0.3171,  1.0855,  0.5779, -1.1795, -0.7091,
         1.5232,  0.3740,  0.4528,  1.2556,  0.1404,  0.2895,  0.1765, -0.9980,
         0.9362,  0.8846,  0.0243, -0.6571,  0.2311,  0.7219, -0.8362,  0.5606,
        -1.0710, -0.9607,  1.3773, -1.7947, -1.0652,  2.0063,  0.4961,  1.4650,
        -0.4460, -1.5360, -1.8555, -0.1169,  1.3857, -0.8016,  1.4880, -0.2983,
         0.3895, -0.1311,  0.3588,  0.1798, -0.5869,  0.0665,  0.1506,  0.8748,
         0.3882,  0.3710,  1.4076, -1.2311,  1.6294, -1.1121,  0.5917,  1.3581,
        -1.7429,  1.5666,  2.1108,  0.6751, -0.2842,  0.4098, -0.9852,  0.7692,
        -0.0995,  0.9608,  0.0525,  1.4533, -0.0367,  0.5078, -0.4264, -0.8814,
         1.5054,  0.7343,  0.8897,  0.6645, -0.6002, -1.6571,  1.3604, -1.2209,
         0.0410,  0.8878, -0.5121,  0.2544,  1.5048,  1.4095,  0.1942, -0.9450,
        -0.4449, -0.8279, -0.5602,  0.0912, -0.6250,  0.4974, -1.3092, -0.2586,
        -0.8915, -1.0231,  1.4395, -1.6217, -0.2441,  0.2061,  0.8649,  0.0635],
       device='cuda:0', grad_fn=<SqueezeBackward1>)
Word: ์„œ๋น„์Šค
tensor([-0.0787, -1.1450, -0.7564, -2.4116, -0.0838, -0.7901,  1.7528, -0.7519,
        -1.1036,  1.2519,  1.9637,  0.4373, -1.6533, -0.5308,  0.4822,  0.7537,
         0.6932,  0.2260, -0.7731, -1.0282,  1.0214, -2.6137,  1.8673,  1.6458,
        -0.8776, -1.5505,  0.3739,  0.6621,  1.6348,  0.2010,  0.6087,  1.1409,
         0.2191, -0.2075,  0.6529, -1.1824,  0.4042, -0.4010, -1.3660,  0.1026,
         0.1692, -1.9065, -0.0668, -1.0470,  1.1856, -1.0677, -1.2867,  0.8814,
         1.6265,  0.2371, -0.3964,  0.1474,  1.0457,  0.4961, -0.2712,  0.3565,
        -0.9721,  0.2956,  0.1070, -0.3823,  1.4254, -1.3427,  0.5211,  1.2268,
         1.4122,  0.6131, -0.6106, -0.5293,  0.8121, -0.1082, -0.8560, -2.1471,
         0.9212,  0.3901,  0.0973, -0.7380, -0.1620, -0.3767,  0.3537,  0.6173,
        -0.4539,  1.0900, -1.4832,  0.4236,  1.9819,  1.0959,  0.6926, -0.5225,
         0.7654, -0.5251,  1.9103,  0.8923, -0.4214, -0.3404,  0.6262, -0.2463,
         0.6839,  0.8577,  0.1911,  1.1948, -1.4529, -1.4004, -1.5048,  0.5155,
         0.1009,  0.4357,  1.8159,  0.8558,  1.3723, -0.5532,  0.8792,  0.2843,
        -0.3140,  0.1011,  0.1138, -1.3283, -0.6232, -0.8752, -0.9700,  0.3494,
        -0.1527, -2.0688,  0.9206,  0.5911,  0.6741, -0.1734,  0.8589, -1.3126,
        -2.5574, -1.6329, -1.0171,  0.6409,  0.1215, -0.1397, -0.6283,  1.2531,
        -1.3375,  1.1464, -0.7267, -1.4634, -0.1921, -1.2586, -0.8526,  0.2546,
        -0.9211, -0.9668,  0.0244,  1.2189, -0.2882, -0.1984,  0.7868,  0.8291,
         0.9296,  1.1139,  2.2364,  0.3595, -1.1315, -0.1057,  1.3962,  1.3667,
        -0.2853, -0.4472, -0.1790, -0.8108, -0.0603, -0.4816, -0.3196,  0.1857,
         2.1967, -2.0003, -0.9249,  0.2484,  0.2902,  1.5240, -0.4971,  0.5436,
         0.8831, -2.4488, -0.6193, -0.0385,  0.5773,  0.6528,  1.0862, -0.8144,
        -1.8830, -0.4851, -0.6876, -0.5086,  0.5674, -0.6843, -0.7577, -0.1941,
        -0.3187, -1.3989, -0.2202,  0.4376, -1.4670, -2.1252, -0.9923, -1.2067,
        -0.0418,  0.7270, -1.7223,  0.3808,  0.0361,  0.2602,  1.1497,  0.1551,
        -0.4484, -0.3199,  0.5271,  1.1065,  0.8989,  0.5388,  2.8208,  1.5697,
        -1.5519, -0.5708,  1.2299, -0.1646,  0.0899,  1.3712,  0.7240, -0.6646,
         2.5825, -1.6390,  0.5282, -0.5932, -0.2457,  1.0970, -0.9602, -1.7764,
        -0.2803, -0.8997, -0.7232,  1.2771,  0.3938, -1.3284,  0.5469, -1.4847,
        -2.1790,  0.7954,  1.1309, -1.3554, -1.1986,  1.9054, -0.0211,  1.5022,
         0.3509,  0.4151,  1.0703,  0.3781, -0.3361, -0.8350,  0.8844, -0.8835],
       device='cuda:0', grad_fn=<SqueezeBackward1>)
Word: ์œ„์ƒ
tensor([ 1.4635,  0.0472, -0.2920,  2.2415,  0.7345, -0.0266,  2.3534,  0.4149,
        -0.4027, -0.8227,  0.2078, -0.0614,  1.3888,  1.5814,  1.2698,  0.7780,
         1.0784, -0.5726,  0.3691, -0.3784,  1.7578,  0.6682,  1.1343,  1.1348,
        -0.7508, -0.6819, -0.2814,  1.6518,  0.9614,  0.2049,  1.6817,  1.1591,
        -1.4652,  1.7127,  1.3486,  0.8572, -0.0781,  2.1295,  1.8364, -1.1327,
        -1.5336, -0.2378, -0.4603,  0.4570, -1.5193, -0.8845,  0.2861, -0.2050,
        -1.1469,  0.7168,  1.6596,  0.5842,  1.0214, -0.4324, -0.8226, -1.6118,
        -0.7537,  1.8058,  0.2632, -0.5004, -0.5509, -0.9169, -0.4003,  0.5948,
         1.2915, -2.5165,  0.4802, -1.1447,  0.2535, -1.5039, -0.6419, -0.7702,
        -0.1178, -1.1140,  0.6543,  1.5395, -0.7481,  0.4947, -0.0842,  0.4924,
         1.6079,  1.2196,  0.1097,  1.0841, -1.3099, -1.0873, -1.6422,  1.0077,
        -0.5648, -0.1174, -0.5233, -0.3610,  0.6528, -1.6939,  1.3660,  0.9235,
        -0.9617,  0.1454,  0.0946,  1.3863,  0.5336,  0.7604, -1.1961,  0.9660,
        -1.4058, -1.7446,  0.4522, -1.2946, -1.0239,  1.0128, -0.5896, -0.0522,
        -1.2036,  0.2604, -0.9780,  0.8232,  1.8128, -0.4069,  0.7757, -0.3126,
        -1.3977,  0.8309, -1.4586,  2.5585, -0.1508,  0.5422,  1.2602,  2.3163,
         1.1662, -0.0363,  1.9558, -0.5463, -1.1020,  0.9395,  0.1261,  0.3191,
         1.0380,  0.9197, -2.3953, -0.0254,  0.7378,  1.4489,  1.0960,  1.0448,
        -0.3338,  0.8813,  0.3805,  1.4281, -0.6788,  0.6769,  0.2370, -0.0375,
         0.4547,  0.5599, -0.4717,  1.8094, -0.0208,  0.9473,  0.0324,  1.1140,
         0.3397, -0.9161, -0.4724,  0.7157, -0.2371, -0.1056,  0.4809, -1.7507,
        -0.0878, -1.1405,  0.2465,  0.6495, -0.6020, -0.5262, -0.0185,  0.0338,
        -1.3123, -1.0556,  2.6045, -1.6214, -0.4730, -0.1740,  0.1088, -0.3643,
         0.9992, -0.4736,  0.9494, -0.2128,  0.0932, -0.0634, -0.2361,  0.0767,
         0.2880,  0.7311,  1.0265, -0.7716,  0.8375, -1.0687, -0.5387, -0.4072,
         0.3035, -0.3796,  1.0750, -1.3545, -0.1934,  0.1279, -0.1400,  0.1826,
         0.7236,  0.0869, -2.5555,  1.4435,  1.2680, -1.1072,  0.2390, -0.6227,
        -0.6019,  0.2923, -0.3315, -0.9888,  0.0680, -0.6145,  1.4524, -0.6144,
         0.3811, -1.0752, -0.1378, -1.1781, -1.3308,  0.1508,  0.6268,  0.7951,
         0.0076, -0.1099, -1.7573, -0.9509,  0.7146,  1.0960, -0.1482, -0.3525,
         2.6867, -0.0765, -0.1901,  0.8058,  1.2801,  1.2046, -2.4593, -0.6246,
         1.6271, -0.1134, -0.0778, -0.0460, -0.2295, -0.1353,  1.7088,  2.2059],
       device='cuda:0', grad_fn=<SqueezeBackward1>)
Word: ๊ฐ€๊ฒฉ
tensor([ 0.8071, -1.3313, -0.3625, -1.5106,  0.6003,  0.2000, -1.8236, -0.4199,
        -0.2933,  2.0132,  2.0983, -1.4669, -1.0168,  1.6880,  0.6606, -0.0546,
         1.1678,  0.6888, -0.7090,  0.8981, -1.1845, -0.4427,  1.1653, -0.7461,
         0.5615,  0.1164, -0.0094,  1.2941,  0.4426, -0.9336,  0.0255,  1.3787,
        -1.1152, -0.0392, -0.8120, -1.5373,  1.1159, -0.9863,  0.4286, -1.7930,
         0.4408, -0.4924,  0.0201, -1.2696,  0.3612,  0.5594,  1.2853,  0.1080,
        -0.8028,  0.1369, -0.3349,  0.9132, -1.1569,  0.6054,  1.1370, -0.9736,
         0.8449,  0.3383, -0.5378, -0.1810,  1.1856,  1.3018, -0.2890,  0.0199,
         0.3393, -0.8456, -0.2945, -1.6360,  1.2111, -1.6976, -0.3300,  0.5007,
         0.1409, -0.0166,  1.5618, -1.5591, -1.8889,  0.4192,  0.5738, -0.3916,
         0.5963, -0.2358,  0.1130, -0.4391, -1.1202,  1.0349, -0.3725,  1.4162,
        -1.1179, -0.2070,  0.5687,  0.9898,  0.5919, -0.7255, -0.3884, -1.4880,
         0.8851, -1.0258, -2.1898, -1.2771,  1.8130, -0.5130, -0.4104, -2.4358,
        -0.3272,  1.9936, -0.5004, -1.2736, -1.0434,  0.8440, -0.8625,  0.7908,
        -0.2088, -0.4829,  2.0142, -0.2008,  1.1509,  0.0038,  0.1059,  0.0373,
        -0.7908, -1.0695, -2.3989, -1.0499, -2.5601,  1.0675, -1.0300, -0.4214,
        -0.2884, -0.1907, -0.7646, -0.7620, -1.3060,  0.1957, -0.4128, -0.3409,
        -0.9520,  0.3340,  0.8779,  0.0572, -0.7208, -0.1062, -2.1561,  0.5127,
         0.1051,  0.7469,  0.0130, -0.0913, -0.8858,  2.8809, -0.1937,  0.2497,
        -0.1365,  1.3323,  0.6656,  0.3979,  0.8870,  0.9509,  0.8877,  1.6644,
        -0.0219,  0.1815,  0.8389,  0.7634,  0.3560, -0.2789,  0.7645,  0.3617,
        -0.4780,  0.1113,  0.0688,  1.1077, -1.0212, -1.0837, -0.1043,  0.0270,
         1.1620,  1.1493, -0.2896,  0.3576, -0.3277,  1.6700, -0.0992, -0.5844,
        -0.9020, -0.1732, -1.8760,  0.7676,  1.1106, -0.6111,  0.9906,  0.2238,
        -0.5576, -0.8923,  0.5638,  0.5147,  0.3834, -1.0289,  0.2768, -0.4992,
        -0.6802,  1.4443,  2.2874, -1.7116, -1.2088, -0.7768,  0.0621,  0.2715,
         1.8747, -0.6866, -0.1533,  0.4955,  2.2433, -0.9108, -0.1007, -0.4541,
         0.4291, -0.1669,  0.2096, -0.2491, -1.1363,  0.1701,  0.2329,  1.3489,
        -0.6611, -0.4267, -1.2714,  0.0092,  0.7429,  0.2841, -1.6789, -0.5273,
         0.3177, -0.5025, -1.1413, -0.2910,  0.2159, -0.5251, -0.0195, -1.2398,
         0.2083, -0.7559, -0.9942, -1.7577,  1.0292,  1.9885,  0.1919,  0.1370,
        -1.6130,  0.0330,  0.7853, -1.7331,  2.1818, -1.5653,  0.5580,  1.6604],
       device='cuda:0', grad_fn=<SqueezeBackward1>)
for word in test_words:
  input_id = torch.LongTensor([w2i[word]]).to(device)
  emb = skipgram.embedding(input_id)

  print(f"Word: {word}")
  print(max(emb.squeeze(0)))
Word: ์Œ์‹
tensor(2.3452, device='cuda:0', grad_fn=<UnbindBackward>)
Word: ๋ง›
tensor(2.4317, device='cuda:0', grad_fn=<UnbindBackward>)
Word: ์„œ๋น„์Šค
tensor(3.0386, device='cuda:0', grad_fn=<UnbindBackward>)
Word: ์œ„์ƒ
tensor(2.9022, device='cuda:0', grad_fn=<UnbindBackward>)
Word: ๊ฐ€๊ฒฉ
tensor(2.2546, device='cuda:0', grad_fn=<UnbindBackward>)
wevi
Korean Word2Vec
GitHub - dhammack/Word2VecExample: An example application using Word2Vec. Given a list of words, it finds the one which isn't 'like' the others - a typical language understanding evaluation task.GitHub
Logo
๊ฝค? ๋˜‘๋˜‘ํ•œ ๊ฒƒ ๊ฐ™๊ตฐ