Загружаем каталог…
Загружаем каталог…
1. 단어의 표현이 필요한 이유 단어의 표현(Word Representation)은 문자로 이루어진 단어를 숫자로 변환하는 작업이다. 문서 분류·번역 등을 하려면 확률 계산·덧셈·뺄셈 같은 수학적 연산 이 필요하다. 문자열은 그대로 연산할 수 없으므로 분석 전에 숫자로 바꾼다. 숫자로 바꾸면서 단어 본연의 의미를 어떻게 살릴지가 핵심 과제다. 2. 원핫-인코딩 (One-Hot-Encoding) 단어마다 고유 인덱스를 주고, 그 자리만 1, 나머지는 0인 벡터로 표현하는 방법이다. 원숭이, 바나나, 사과 원숭이, 바나나, 사과, 코끼리 원숭이 = [1, 0, 0] 원숭이 = [1, 0, 0, 0] 바나나 = [0, 1, 0] 바나나 = [0, 1, 0, 0] 사과 = [0, 0, 1] 사과 = [0, 0, 1, 0] 코끼리 = [0, 0, 0, 1] 벡터: 숫자들의 나열 벡터의 차원 수 = 어휘(단어) 수 새로운 단어가 등장하면 차원을 하나 늘리는 직관적인 방법이다. 2-1. 텍스트를 단어 목록으로 바꾸기 import re import numpy as np def tokenize(text): return re.findall(r"[가-힣A-Za-z0-9]+", text.lower()) tokenize("사과, 바나나! 사과?") # ['사과', '바나나', '사과'] tokenize("NLP Model과 DATA 2026") # ['nlp', 'model과', 'data', '2026'] tokenize("원숭이-코끼리_바나나") # ['원숭이', '코끼리', '바나나'] 한글·영문·숫자만 남기고 영문은 소문자로 통일한다. 단, 공백 기준이므로 model과 처럼 조사가 붙은 채 남는다. np.set_printoptions(precision=3, suppress=True) 는 실제 값은 그대로 두고 화면 표시 만 바꾼다. ( 1.234567 → 1.235 로 표시) 2-2. 어휘와 인덱스 만들기 단어를 벡터로 바꾸려면 먼저 고정된 어휘 순서와 인덱스 가 필요하다. words = ["원숭이", "바나나", "사과", "사과", "코끼리"] vocabulary = list(dict.fromkeys(words)) # 중복 제거, 첫 등장 순서 유지 word_to_index = {word: i for i, word in enumerate(vocabulary)} print("어휘:", vocabulary) print("인덱스:", word_to_index) # 어휘: ['원숭이', '바나나', '사과', '코끼리'] # 인덱스: {'원숭이': 0, '바나나': 1, '사과': 2, '코끼리': 3} 중복 제거 방법에 따라 어휘 순서가 달라질 수 있다. order_words = ["원숭이", "바나나", "사과", "바나나"] sorted_vocabulary = sorted(set(order_words)) first_seen_vocabulary = list(dict.fromkeys(order_words)) print("정렬된 어휘:", sorted_vocabulary) print("첫 등장 순서:", first_seen_vocabulary) # 정렬된 어휘: ['바나나', '사과', '원숭이'] # 첫 등장 순서: ['원숭이', '바나나', '사과'] 배열 위치와 바로 연결하려면 0부터 시작하는 인덱스 가 편리하다. 2-3. 원핫 벡터와 UNK 처리 어휘에 없는 단어(미등록 단어)는 정해 둔 <UNK> 위치로 보낸다. vocabulary_with_unk = ["<UNK>", "원숭이", "바나나", "사과"] index_with_unk = {w: i for i, w in enumerate(vocabulary_with_unk)} query_words = ["사과", "코끼리", "바나나"] query_indices = [index_with_unk.get(w, index_with_unk["<UNK>"]) for w in query_words] # [3, 0, 2] identity = np.eye(len(vocabulary_with_unk), dtype=int) query_one_hot = identity[query_indices] # [[0 0 0 1] # [1 0 0 0] # [0 0 1 0]] 단위행렬( np.eye )의 각 행이 곧 원핫 벡터 이므로, 인덱스로 행을 꺼내면 된다. 각 행의 합은 1이고, argmax(axis=1) 로 1의 위치(원래 인덱스)를 복원할 수 있다. -> # [3, 0, 2] # 코끼리 -> 인덱스 0 벡터 [1 0 0 0] # 기린 -> 인덱스 0 벡터 [1 0 0 0] 서로 다른 미등록 단어가 모두 같은 UNK 벡터가 되는 한계가 있다. 2-4. 원핫-인코딩의 한계 1) 차원 크기의 문제 단어의 수만큼 차원이 필요하다. 2017년 표준국어대사전 등재 단어 약 50만 개 → 50만 차원 이 필요하며, 대부분이 0인 희소 벡터 가 된다. 2) 의미를 담지 못하는 문제 원핫 벡터는 서로 직교 하므로 코사인 유사도가 항상 0이다. 원숭이 [0, 1], 바나나 [1, 0] similarity = (0×1) + (1×0) / ... = 0 원숭이·바나나 , 원숭이·사과 , 개·고양이 모두 유사도 0 → 단어 사이의 멀고 가까움을 비교할 수 없다. 3. 단어 임베딩 (Word Embedding) 원핫-인코딩의 한계 결과 차원이 너무 큼 연산 낭비, 모델 학습에 불리 단어 의미를 담지 못함 분석을 효과적으로 수행할 수 없음 단어 임베딩은 단어의 의미를 간직하는 밀집 벡터(Dense Vector)로 표현하는 방법이다. 임베딩은 단어·문장을 벡터로 변환해 벡터 공간에 끼워 넣는다(embed)는 의미다. 원핫 (3차원) 밀집 벡터 (2차원) 원숭이 [0, 1, 0] 원숭이 [0.5, 0.8] 바나나 [1, 0, 0] 바나나 [0.8, 0.1] 사과 [0, 0, 1] 사과 [0.2, 0.2] 구분 희소 벡터 (원핫) 밀집 벡터 (임베딩) 값 대부분 0 각 원소가 값을 가짐 새 단어 추가 차원 증가 차원 유지 연산 낭비가 큼 분류·예측 모델 학습 시 연산 감소 3-1. 밀집 벡터를 만드는 방법: 분포 가설 밀집 벡터로 차원 문제는 해결되지만, 단어를 어디에 위치시켜야 하는지 명확한 방법은 없다. 분포 가설: 같은 문맥에서 등장하는 단어는 유사한 의미를 지닌다. 단어의 의미는 곧 그 언어에서의 활용이다. — 비트겐슈타인 임의의 위치에 벡터를 생성한다. 같은 문맥에 등장하는 단어를 더 가까이 옮긴다. 3-2. 단어 표현 방법 분류 구분 의미 예시 Local Representation (Discrete) 단어 자체만 보고 값을 매핑 One-hot vector, N-gram, BoW, TDM (Count Based) Distributed Representation (Continuous) 주변 단어를 참조해 표현 Word2Vec, FastText (Prediction Based), GloVe, LSA (Count Based) 4. 유사도 계산 (Text Similarity) 4-1. 유클리디안 거리 (Euclidean distance) 두 벡터 사이의 직진 거리를 계산한다. (피타고라스 정리) d(p, q) = √( (q1 - p1)2 + (q2 - p2)2 + ... + (qn - pn)2 ) 4-2. 코사인 유사도 (Cosine Similarity) 두 벡터 사이의 각(방향)을 이용해 유사도를 측정한다. similarity = cos(θ) = (A · B) / (‖A‖ ‖B‖) 각도 코사인 유사도 0도 (같은 방향) 1 90도 (직교) 0 180도 (반대 방향) -1 1에 가까울수록 유사한 의미를 가진다. 0벡터는 방향이 없으므로 코사인 유사도를 계산할 수 없다. 4-3. 유클리디안 vs 코사인 base = np.array([1.0, 2.0]) # 크기만 두 배 [2, 4] → 거리: 2.236 코사인: 1.0 # 위치 이동 [2, 3] → 거리: 1.414 코사인: 0.992 구분 측정 대상 특징 유클리디안 거리 위치 차이 크기 차이를 그대로 반영 코사인 유사도 방향의 유사성 같은 방향이면 크기가 달라도 1 자연어 처리에서는 주로 코사인 유사도를 쓰고, 상대적인 크기를 볼 때 유클리디안 거리를 쓴다. 예를 들어 경제·정치 관련 단어 수로 기사를 표현하면, 길이가 짧은 기사와 긴 기사도 주제 비율이 같으면 코사인 유사도는 높게 나온다. 4-4. 자카드 유사도 (Jaccard index) 문서·문장 간 겹치는 토큰의 비율을 측정한다. J(A, B) = |A ∩ B| / |A ∪ B| = |A ∩ B| / (|A| + |B| - |A ∩ B|) 집합을 사용하므로 같은 단어가 여러 번 나와도 한 번만 센다. ( ["사과", "사과", "바나나"] vs ["사과", "원숭이", "원숭이"] → 0.333) 같은 집합 → 1.0 / 겹치지 않음 → 0.0 / 두 공집합 → 이 함수에서는 1.0으로 정의 4-5. 레벤슈타인 거리 (Levenshtein distance) 두 문자열이 얼마나 다른지를 나타내는 거리 로, 한 문자열을 다른 문자열로 바꾸는 데 필요한 삽입·삭제·치환의 최소 횟수 로 형태적 거리를 잰다. H O N D A H Y U N D A I 5. n-Gram n-Gram은 연속한 n개 단어를 하나로 묶어 보는 방법이다. 몇 개를 묶느냐에 따라 unigram·bigram·trigram 등으로 구분하며, 제한적이지만 문맥을 표현할 수 있다. an adorable little boy is spreading smiles unigrams : an, adorable, little, boy, is, spreading, smiles bigrams : an adorable, adorable little, little boy, boy is, ... trigrams : an adorable little, adorable little boy, little boy is, ... 4-grams : an adorable little boy, adorable little boy is, ... 5-1. n-Gram 활용 활용 내용 연어 처리 금융 통화 위원회 , 국회 의원 , 고객 서비스 처럼 함께 쓰이는 단어 묶기 Language Modeling 단어 시퀀스의 확률 계산에 사용 분야(Domain)에 따라 단어들의 확률 분포가 다르다. (금융 분야는 금융 용어가 많이 등장) 분야에 적합한 코퍼스를 사용하면 언어 모델의 성능이 높아질 수 있다. 반대로 훈련 코퍼스에 따라 성능이 달라지는 것은 언어 모델의 약점으로 분류되기도 한다.
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
LG CNS AI Campus KG | 단어의 표현 | 10.06. 1. 단어의 표현이 필요한 이유 단어의 표현(Word Representation)은 문자로 이루어진 단어를 숫자로 변환하는 작업이다. 문서 분류·번역 등을 하려면 확률 계산·덧셈·뺄셈 같은 수학적 연산 이 필요하다. 문자열은 그대로 연산할 수 없으므로 분석 전에 숫자로 바꾼다. 숫자로 바꾸면서 단어 본연의 의미를 어떻게 살릴지가 핵심 과제다. 2. 원핫-인코딩 (One-Hot-Encoding) 단어마다 고유 인덱스를 주고, 그 자리만 1, 나머지는 0인 벡터로 표현하는 방법이다. 원숭이, 바나나, 사과 원숭이, 바나나, 사과, 코끼리 원숭이 = [1, 0, 0] 원숭이 = [1, 0, 0, 0] 바나나 = [0, 1, 0] 바나나 =…
Открыть источник