-- ๋ณธ ํฌ์คํ
์ ํ์ดํ ์น๋ก ๋ฐฐ์ฐ๋ ์์ฐ์ด ์ฒ๋ฆฌ (ํ๋น๋ฏธ๋์ด) ์ฑ
์ ์ฐธ๊ณ ํด์ ์์ฑ๋ ๊ธ์
๋๋ค.
-- ์์ค์ฝ๋๋ ์ฌ๊ธฐ
1. ์๋ฒ ๋ฉ(Embedding) ์ด๋?
- ์ด์ฐ ํ์
์ Word ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ง ๋ฒกํฐ ํํ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ๋ฐฉ๋ฒ์ ๋จ์ด ์๋ฒ ๋ฉ์ด๋ผ๊ณ ํจ
- ์ด์ฐํ์
?
๋ฌธ์, ๊ฐ์ฒด๋ช , ์ดํ์ฌ์ ๋ฑ ์ ํํ ์งํฉ์์ ์ป์ ๋ชจ๋ ์ ๋ ฅ ํน์ฑ์ ์ด์ฐํ์ ์ด๋ผ๊ณ ํ๋ค.
- ์ด์ฐํ์
?
- ์์ฐ์ด๋ฅผ ๊ธฐ๊ณ๊ฐ ์ดํดํ ์ ์๋ ์ซ์ํํ์ธ ๋ฒกํฐ๋ก ๋ฐ๊พผ ๊ฒฐ๊ณผ ํน์ ๊ทธ ์ผ๋ จ์ ๊ณผ์ ์ ์ฒด๋ฅผ ์๋ฒ ๋ฉ์ด๋ผ๊ณ ํจ
- ๋ํ์ ์ผ๋ก ์ํซ์ธ์ฝ๋ฉ, TF-IDF ๋ฐฉ๋ฒ์ด ์๋ค.
2. ์๋ฒ ๋ฉ ๊ธฐ๋ฒ์ ํ๋ฆ์ ์ข ๋ฅ
- ์ ์ฐจ ํต๊ณ๊ธฐ๋ฐ์ ๊ธฐ๋ฒ์์ Neural Network ๊ธฐ๋ฒ์ผ๋ก
- ํต๊ณ๊ธฐ๋ฐ์ ๊ธฐ๋ฒ
- ์ ์ฌ์๋ฏธ๋ถ์ : ๋จ์ด์ ์ฌ์ฉ ๋น๋ ๋ฑ Corpus์ ํต๊ณ๋ ์ ๋ณด๊ฐ ๋ค์ด์๋ ํ๋ ฌ์ ํน์ด๊ฐ ๋ถํด ๋ฑ ์ํ์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ ํ๋ ฌ์ ์ํ ๋ฒกํฐ๋ค์ ์ฐจ์์ ์ถ์ํ๋ ๋ฐฉ๋ฒ (TF-IDF, Word_Context Matrix, PMI Matrix ๋ฑ์ด ์๋ค.)
- Neural Network ๊ธฐ๋ฒ
- Nerual Probabilistic Language Model์ด ๋ฐํ๋ ์ดํ๋ถํฐ ์ฃผ๋ชฉ๋ฐ๊ธฐ ์์
- ๊ตฌ์กฐ๊ฐ ์ ์ฐํ๊ณ ํํ๋ ฅ์ด ํ๋ถํ๊ธฐ ๋๋ฌธ์ ์์ฐ์ด์ ๋ฌดํํ ๋ฌธ๋งฅ์ ์๋น ๋ถ๋ถ ํ์ตํ ์ ์์ด์ ์ฃผ๋ชฉ๋ฐ๋๋ค.
- ํต๊ณ๊ธฐ๋ฐ์ ๊ธฐ๋ฒ
- ๋จ์ด์์ค์์ ๋ฌธ์ฅ์์ค์ ์๋ฒ ๋ฉ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค.
- ๋จ์ด์์ค ์๋ฒ ๋ฉ ๊ธฐ๋ฒ
- ๊ฐ๊ฐ ๋ฒกํฐ์ ํด๋น ๋จ์ด์ ๋ฌธ๋งฅ์ ์๋ฏธ๋ฅผ ํจ์ถํฎ๋ง, ๋จ์ด๊ฐ ๋์ผํ๋ฉด ๋์ผํ ๋จ์ด๋ก ์ธ์ํ๊ณ , ๋ชจ๋ ๋ฌธ๋งฅ์ ์ ๋ณด๋ฅผ ์ดํดํ ์ ์๋ค. (๋์์ด์์ด๋ฅผ ๊ตฌ๋ฒผํ๊ธฐ ์ด๋ ต๋ค.)
- NPLM, Word2Vec, GloVe, FastText ๋ฑ
- ๋ฌธ์ฅ์์ค ์๋ฒ ๋ฉ ๊ธฐ๋ฒ
- ELMo๊ฐ ๋ฐํ๋ ์ดํ ์ฃผ๋ชฉ๋ฐ๊ธฐ ์์
- ๊ฐ๋ณ๋จ์ด๊ฐ ์๋ Sequence ์ ์ฒด์ ๋ฌธ๋งฅ์ ์๋ฏธ๋ฅผ ํจ์ถํ๊ธฐ ๋๋ฌธ์ ๋จ์ด ์๋ฒ ๋ฉ ๊ธฐ๋ฒ๋ณด๋ค Transfer Learning ํจ๊ณผ๊ฐ ์ข๋ค.
- ๋์์ด์์ด๋ ๋ฌธ์ฅ์์ค ์๋ฒ ๋ฉ ๊ธฐ๋ฒ์ ํ์ฉํ๋ฉด ๋ถ๋ฆฌํด์ ์ดํดํ ์ ์์ด์ ์์ฆ ์ฃผ๋ชฉ๋ฐ๋๋ค. (๋ฌธ๋งฅํ์ ์ฉ์ด)
- BERT, GPT ๋ฑ
- ๋จ์ด์์ค ์๋ฒ ๋ฉ ๊ธฐ๋ฒ
- Rule Based ์์ End to End๋ก, ๊ทธ๋ฆฌ๊ณ ์ต๊ทผ์๋ Pre-Training / fine Tuning ์ผ๋ก
- 1990๋ ๋ ์์ฐ์ด ์ฒ๋ฆฌ ๋ชจ๋ธ์ ์ด๊ธฐ ๋ชจ์ต์ ํผ์ณ๋ฅผ ์ฌ๋์ด ๋ฝ์์ ์ฌ์ฉ
- 2000๋ ๋์๋ ํผ์ณ๋ฅผ ์๋์ผ๋ก ์ถ์ถํด์ฃผ๊ณ , ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ๊ธฐ๊ณ๊ฐ ์ดํดํ๋ end to end ๊ธฐ๋ฒ์ ์ฌ์ฉ (๋ํ์ ์ผ๋ก Sequence to Sequence ๋ชจ๋ธ์ด ์๋ค)
- 2018๋ ELMo ๋ชจ๋ธ์ด ์ ์๋ ์ดํ NLP๋ชจ๋ธ์ pre-training ๊ณผ fine tuning ๋ฐฉ์์ผ๋ก ๋ฐ์ ํ๊ณ ์๋ค
3. ์๋ฒ ๋ฉ์ ์ข ๋ฅ
- ํ๋ ฌ๋ถํด ๊ธฐ๋ฐ ๋ฐฉ๋ฒ
- Corpus๊ฐ ๋ค์ด์๋ ์๋ ํ๋ ฌ์ Decomposition์ ํตํด ์๋ฒ ๋ฉ ํ๋ ๋ฐฉ๋ฒ
- Decomposition ์ดํ์๋ ๋ ์ค ํ๋์ ํ๋ ฌ๋ง ์ฌ์ฉํ๊ฑฐ๋ ๋์ sumํ๊ฑฐ๋ concatenate ํ๋ ๋ฐฉ์์ผ๋ก ์๋ฒ ๋ฉ์ ์งํํ๋ค
- GloVe, Sweivet ๋ฑ
- ์์ธก ๊ธฐ๋ฐ ๋ฐฉ๋ฒ
- ์ด๋ค ๋จ์ด ์ฃผ๋ณ์ ํน์ ๋จ์ด๊ฐ ๋ฑ์ฅํ ์ง ์์ธกํ๊ฑฐ๋
- ์ด์ ๋จ์ด๋ค์ด ์ฃผ์ด์ก์ ๋ ๋ค์ ๋จ์ด๊ฐ ๋ฌด์์ผ์ง ์์ธกํ๊ฑฐ๋
- ๋ฌธ์ฅ ๋ด ์ผ๋ถ ๋จ์ด๋ฅผ ์ง์ฐ๊ณ ํด๋น ๋จ์ด๊ฐ ๋ฌด์์ผ์ง ๋ง์ถ๋ ๊ณผ์ ์ ํ์ต์ํค๋ ๋ฐฉ๋ฒ
- Neural Network ๊ธฐ๋ฐ ๋ฐฉ๋ฒ๋ค์ด ์ฌ๊ธฐ์ ์ํ๋ค.
- Word2Vec, FastText, BERT, ELMo, GPT ๋ฑ
- ํ ํฝ ๊ธฐ๋ฐ ๋ฐฉ๋ฒ
- ์ฃผ์ด์ง ๋ฌธ์์ ์ ์ฌ๋ ์ฃผ์ ๋ฅผ ์ถ๋ก ํ๋ ๋ฐฉ์์ผ๋ก ์๋ฒ ๋ฉ์ ์ํํ๋ ๊ธฐ๋ฒ
- LDA๊ธฐ๋ฒ์ด ์ฌ๊ธฐ์ ์ํจ
- ํ์ต์ด ์จ๋ฃ๋๋ฉด ๊ฐ๋ฌธ์๊ฐ ์ด๋ค ์ฃผ์ ์ ๋ถํฌ๋ฅผ ๊ฐ๋์ง ํ๋ฅ ๋ฒกํฐ ํํ๋ก ๋ณํํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ๋ฉ ๊ธฐ๋ฒ์ ์ผ์ข ์ผ๋ก ์ดํดํ๋ฉด ๋๋ค.
4. ๋จ์ด ์๋ฒ ๋ฉ ํ์ต ๋ฐฉ๋ฒ
๋จ์ด ์๋ฒ ๋ฉ์ ๋ ์ด๋ธ์ด ์๋ ๋ฐ์ดํฐ๋ก ํ์ต๋๋ค. ํ์ง๋ง ์ง๋ํ์ต๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. ์ด๊ฒ ๋ฌด์จ๋ง์ธ๊ฐ ์์๋ณด๋ฉด, ์๋์ ๊ฐ๋ค.
- ๋ฐ์ดํฐ๊ฐ ์๋ฌต์ ์ผ๋ก ๋ ์ด๋ธ ๋์ด ์๋ ๋ณด์กฐ ์์
์ ๊ตฌ์ฑํ๋ค.
- ๋จ์ด ์ํ์ค๊ฐ ์ฃผ์ด์ง๋ฉด ๋ค์ ๋จ์ด๋ฅผ ์์ธกํ๋ ๋ณด์กฐ์์ (์ธ์ด ๋ชจ๋ธ๋ง ์์ ์ํ)
- ์๊ณผ ๋ค์ ๋จ์ด ์ํ์ค๊ฐ ์ฃผ์ด์ง๋ฉด ๋๋ฝ๋ ๋จ์ด๋ฅผ ์์ธกํ๋ ๋ณด์กฐ์์
- ๋จ์ด๊ฐ ์ฃผ์ด์ง๋ฉด ์์น์ ๊ด๊ณ ์์ด window์์ ๋ฑ์ฅํ ๋จ์ด๋ฅผ ์์ธกํ๋ ๋ณด์กฐ์์
- ๋ณด์กฐ์์
์ ์ ํ์ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ์์ ์ง๊ด๊ณผ ๊ณ์ฐ ๋น์ฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
- ๋ณด์กฐ์์
์ ์)
GloVe, CBOW, skip-gram ๋ฑ
- ๋ณด์กฐ์์
์ ์)
5. ์ฌ์ ํ๋ จ๋ ๋จ์ด ์๋ฒ ๋ฉ (pre-trained word embedding)
- ๊ตฌ๊ธ, ์ํคํผ๋์ ๋ฑ์์ ๋๊ท๋ชจ ๋ง๋ญ์น์ ์ฌ์ ํ๋ จ๋ ๋จ์ด ์๋ฒ ๋ฉ์ ๋ค์ด๋ก๋ํด์ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋จ์ด ์๋ฒ ๋ฉ์ ๋ช๊ฐ์ง ์์ฑ๊ณผ NLP ์์ ์ pre-trained word embedding ์ ์ฌ์ฉํ๋ ์์๋ฅผ ์์๋ณด์.
5.1 ์๋ฒ ๋ฉ ๋ก๋
์๋ฒ ๋ฉ์ ํจ์จ์ ์ผ๋ก ๋ก๋ํ๊ณ ์ฒ๋ฆฌํ๋ PreTrainedEmbeddings ์ ํธ๋ฆฌํฐ ํด๋์ค๋ฅผ ์ดํด๋ณด์. (ํด๋น ์ฝ๋๋ ์ด ๋งํฌ์์ ํ์ธํ ์์๋ค) ์ด ํด๋์ค๋ ๋น ๋ฅธ ์กฐํ๋ฅผ ์ํด ๋ฉ๋ชจ๋ฆฌ ๋ด์ ๋ชจ๋ ๋จ์ด์ ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ถํ๊ณ K-Nearest Neighbor ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ annoy ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ค.
5.1.1 ํจํค์ง ์ค์น ๋ฐ ๋ถ๋ฌ์ค๊ธฐ
# annoy ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
!pip install annoy
import torch
import torch.nn as nn
from tqdm import tqdm
from annoy import AnnoyIndex
import numpy as np
5.1.2 class ์ดํด๋ณด๊ธฐ
- __init__
- word_to_index : ๋จ์ด์์ ์ ์๋ก ๋งคํ
- word_vectors : ๋ฒกํฐ์ ๋ฐฐ์ด ๋ฆฌ์คํธ
- ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ด์ฃผ๋ PreTrainedEmbeddings ํด๋์ค์ ์์ฑ์
- from_embeddings_file(cls, embedding_file)
- ํ์ผ์ ๋ถ๋ฌ์ฌ๋ ํด๋น ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค
- ์ฌ์ ํ๋ จ๋ ๋ฒกํฐ ํ์ผ๋ก๋ถํฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
- ๋ฐํ๊ฐ์ PretrainedEmbedding ์ ์ธ์คํด์ค
- get_embedding(self, word)
- ์๋ฒ ๋ฉ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐํ๊ฐ์ผ๋ก ๋ฐ๋๋ค.
- numpy.ndarray์ ํํ์ ๋ฐํ๊ฐ
- get_closet_to_vector(self, vector, n=1)
- ๋ฒกํฐ๊ฐ ์ฃผ์ด์ง๋ฉด n๊ฐ์ ์ต๊ทผ์ ์ด์์ ๋ฐํ
- [str, str...] ํํ๋ก ๋ฐํ๋๋ค.
- compute_and_print_analogy(self, word1, word2, word3)
- print("{} : {} :: {} : {}".format(word1, word2, word3, word4)) ํํ๋ก ๋จ์ด์ ์ ์ถ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ค๋ค.
class PreTrainedEmbeddings(object):
""" ์ฌ์ ํ๋ จ๋ ๋จ์ด ๋ฒกํฐ ์ฌ์ฉ์ ์ํ ๋ํผ ํด๋์ค """
def __init__(self, word_to_index, word_vectors):
"""
๋งค๊ฐ๋ณ์:
word_to_index (dict): ๋จ์ด์์ ์ ์๋ก ๋งคํ
word_vectors (numpy ๋ฐฐ์ด์ ๋ฆฌ์คํธ)
"""
self.word_to_index = word_to_index
self.word_vectors = word_vectors
self.index_to_word = {v: k for k, v in self.word_to_index.items()}
self.index = AnnoyIndex(len(word_vectors[0]), metric='euclidean')
print("์ธ๋ฑ์ค ๋ง๋๋ ์ค!")
for _, i in self.word_to_index.items():
self.index.add_item(i, self.word_vectors[i])
self.index.build(50)
print("์๋ฃ!")
@classmethod
def from_embeddings_file(cls, embedding_file):
#ํ์ผ์ ๋ถ๋ฌ์ฌ๋ ํด๋น ๋ฉ์๋ ์ฌ์ฉ
# embeding = PreTrainedEmbeddings.from_embeddings_file(ํ์ผ์ด๋ฆ) ์ด๋ ๊ฒ ์๋ฒ ๋ฉํด์ค
"""์ฌ์ ํ๋ จ๋ ๋ฒกํฐ ํ์ผ์์ ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค.
๋ฒกํฐ ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ ํฌ๋งท์
๋๋ค:
word0 x0_0 x0_1 x0_2 x0_3 ... x0_N
word1 x1_0 x1_1 x1_2 x1_3 ... x1_N
๋งค๊ฐ๋ณ์:
embedding_file (str): ํ์ผ ์์น
๋ฐํ๊ฐ:
PretrainedEmbeddings์ ์ธ์คํด์ค
"""
word_to_index = {}
word_vectors = []
with open(embedding_file) as fp:
for line in fp.readlines():
line = line.split(" ")
word = line[0]
vec = np.array([float(x) for x in line[1:]])
word_to_index[word] = len(word_to_index)
word_vectors.append(vec)
return cls(word_to_index, word_vectors)
def get_embedding(self, word):
"""
๋งค๊ฐ๋ณ์:
word (str)
๋ฐํ๊ฐ
์๋ฒ ๋ฉ (numpy.ndarray)
"""
return self.word_vectors[self.word_to_index[word]]
def get_closest_to_vector(self, vector, n=1):
"""๋ฒกํฐ๊ฐ ์ฃผ์ด์ง๋ฉด n ๊ฐ์ ์ต๊ทผ์ ์ด์์ ๋ฐํํฉ๋๋ค
๋งค๊ฐ๋ณ์:
vector (np.ndarray): Annoy ์ธ๋ฑ์ค์ ์๋ ๋ฒกํฐ์ ํฌ๊ธฐ์ ๊ฐ์์ผ ํฉ๋๋ค
n (int): ๋ฐํ๋ ์ด์์ ๊ฐ์
๋ฐํ๊ฐ:
[str, str, ...]: ์ฃผ์ด์ง ๋ฒกํฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋จ์ด
๋จ์ด๋ ๊ฑฐ๋ฆฌ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ง ์์ต๋๋ค.
"""
nn_indices = self.index.get_nns_by_vector(vector, n)
return [self.index_to_word[neighbor] for neighbor in nn_indices]
def compute_and_print_analogy(self, word1, word2, word3):
"""๋จ์ด ์๋ฒ ๋ฉ์ ์ฌ์ฉํ ์ ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค
word1์ด word2์ผ ๋ word3์ __์
๋๋ค.
์ด ๋ฉ์๋๋ word1 : word2 :: word3 : word4๋ฅผ ์ถ๋ ฅํฉ๋๋ค
๋งค๊ฐ๋ณ์:
word1 (str)
word2 (str)
word3 (str)
"""
# get_embedding ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋ฒกํฐ๊ฐ์ ๋ฐ๋๋ค
vec1 = self.get_embedding(word1)
vec2 = self.get_embedding(word2)
vec3 = self.get_embedding(word3)
# ๋ค ๋ฒ์งธ ๋จ์ด ์๋ฒ ๋ฉ์ ๊ณ์ฐํฉ๋๋ค
spatial_relationship = vec2 - vec1
vec4 = vec3 + spatial_relationship
# get_closet_to_vector ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ต๊ทผ์ ์ด์์ ์๋ word๋ค์ ๋ฐ๋๋ค. (n = 4๊ฐ)
closest_words = self.get_closest_to_vector(vec4, n=4)
existing_words = set([word1, word2, word3])
closest_words = [word for word in closest_words
if word not in existing_words]
if len(closest_words) == 0:
print("๊ณ์ฐ๋ ๋ฒกํฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ด์์ ์ฐพ์ ์ ์์ต๋๋ค!")
return
for word4 in closest_words:
print("{} : {} :: {} : {}".format(word1, word2, word3, word4))
5.1.3 GloVe ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋
# GloVe ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค.
!wget http://nlp.stanford.edu/data/glove.6B.zip
!unzip glove.6B.zip
!mkdir -p data/glove
!mv glove.6B.100d.txt data/glove
5.1.4 ์๋ฒ ๋ฉ ์์ฑ
embeddings = PreTrainedEmbeddings.from_embeddings_file('data/glove/glove.6B.100d.txt')
5.1.5 ๊ฒฐ๊ณผ ํ์ธํด๋ณด๊ธฐ
- ์ฑ๋ณ ๋ช
์ฌ์ ๋๋ช
์ฌ์ ๊ด๊ณ
-
embeddings.compute_and_print_analogy('man', 'he', 'woman')
-
- ๋์ฌ - ๋ช
์ฌ ๊ด๊ณ
-
embeddings.compute_and_print_analogy('fly', 'plane', 'sail')
-
- ๋ช
์ฌ - ๋ช
์ฌ ๊ด๊ณ
-
embeddings.compute_and_print_analogy('cat', 'kitten', 'dog')
-
- ์์์ด (๋ ๋์ ๋ฒ์ฃผ)
-
embeddings.compute_and_print_analogy('blue', 'color', 'dog')
-
- ๋ถ๋ถ์์ ์ ์ฒด ๊ฐ๋
์ ๊ด๊ณ
-
embeddings.compute_and_print_analogy('leg', 'legs', 'hand')
-
- ๋ฐฉ์ ์ฐจ์ด
-
embeddings.compute_and_print_analogy('talk', 'communicate', 'read')
-
- ์ ์ฒด ์๋ฏธ ํํ
-
embeddings.compute_and_print_analogy('blue', 'democrat', 'red')
-
5.1.6 ์๋ฒ ๋ฉ์ ๋ฌธ์
๋จ์ด ๋ฒกํฐ๋ ๋์์ ๋ฑ์ฅํ๋ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฏ๋ก, ์๋ชป๋ ๊ด๊ณ๊ฐ ์์ฑ๋๊ธฐ๋ ํ๋ค.
- ์๋ชป๋ ์ ๋ณด๋ฅผ ๋ด๋ฑ๋ ๊ฒฝ์ฐ. (๋์์ ๋ฑ์ฅํ๋ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์ฝ๋ฉํ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์ค๋ฅ๋ ๋น์ฐํ๋ค.)
-
embeddings.compute_and_print_analogy('fast', 'fastest', 'small')
โถ smallest๊ฐ ๋์์ผ ํ์ง๋ง, largest among ๋ฑ ๋ค๋ฅธ๋จ์ด๊ฐ ๋ฑ์ฅํ๋ค.
-
- ๋๋ฆฌ ์๋ ค์ง ๋จ์ด ์๋ฒ ๋ฉ์ ์์ธ ์ฑ๋ณ ์ธ์ฝ๋ฉ (์ด๋ ๊ฒ ์ฑ๋ณ๊ณผ ๊ฐ์ ๋ณดํธ ์์ฑ์ ์ฃผ์ํด์ผํ๋ค. ์๋ํ๋ฉด ์ถํ ํ์ ๋ชจ๋ธ์์ ์์น ์๋ ํธํฅ์ ๋ฐ์์ํฌ ์ ๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.)
-
embiddeings.compute_and_pring_analogy('man', 'king', 'woman')
-
- ๋๋ก๋ ๋ฒกํฐ์ ์ธ์ฝ๋ฉ๋ ๋ฌธํ์ ์ฑ๋ณ ํธ๊ฒฌ์ ๋ฐ์์ํค๊ธฐ๋ ํ๋ค.
-
embeddings.compute_and_print_analogy('man', 'doctor', 'woman')
โถ ๋จ์๋ ์์ฌ, ์ฌ์๋ ๊ฐํธ์ฌ๋ผ๋ ๋ฌธํ์ ์ฑ๋ณ ํธ๊ฒฌ์ ๋ฐ์์์ผฐ๋ค.
-
์ง๊ธ๊น์ง ์๋ฒ ๋ฉ์ ๊ดํ ๊ฐ๋จํ ์์ฑ๊ณผ ํน์ง์ ์ดํด๋ณด์๋ค. ๋ค์๊ธ์์๋ CBOW ์๋ฒ ๋ฉ์ ํ์ต์ํค๋ ์์ ๋ฅผ ์ดํด๋ณผ ๊ฒ์ด๋ค.
์ฐธ๊ณ ๋ฌธํ ) https://heung-bae-lee.github.io/2020/01/16/NLP_01/