1. 텍스트 전처리
1) 토큰화: 주어진 텍스트를 작은 부분인’ 토큰’으로 나누는 과정/ 문장을 개별 단어로 분리하는 것을 의미함.
➔ 예시: 구두점 제외시키기: 마침표. 컴마, 물음표? 세미콜론; 느낌표!
- I love music -> [“i”, “love”, “music”] 으로 변환
➔ 토큰화 고려점:
* 구두점이나 특수문자를 단순히 제외해서는 안된다.($45.55 123,456,789 ->문장의 경계를 알 수 있는데 도움이 됨)
* 줄임말과 단어 내에 띄어쓰기가 있는 경우 (we're -> we are, i'm -> i am)
➔ 한국어 토큰화 문제점: 교착어의 문제, 한국어는 영어보다 띄어쓰기가 잘 지켜지지 않는다.
2) 정규화: 다양한 형태의 텍스트를 일관된 형태로 변환하는 작업(동일한 의미의 여러 다른 표현들을 하나의 표현으로 바꾸는 작업)
➔ 목적: 규칙에 기반한 표기가 다른 단어들의 통합, 대소문자 통합, 불필요한 단어의 제거(등장 빈도가 적은 단어, 길이가 짧은 단어)
➔ 모든 문자를 소문자/ 대문자로 변환, 숫자 제거, 약어 확장(can’t -> can not)
- 정제 작업은 토큰화 작업에 방해가 되는 부분들을 배제시키고 토큰화 작업을 수행하기 위해 토큰화 작업보다 앞서 이루어지기도 하지만 토큰화 작업 이후에도 여전히 남아있는 노이즈들을 제거하기위해 지속적으로 이루어지기도 합니다.
- 영어 단어의 길이가 한국어 단어의 길이보다 평균적으로 길고 한국어 단어는 한자어가 많아 한 글자만으로도 의미를 가진 경우가 많다.
Ex. HTML 문서로부터 가져온 코퍼스, 뉴스 기사 크롤링 시 등장하는 글자들을 규칙에 기반하여 한 번에 제거하는 방식으로 유용하게 사용함
3) lemmatization: 단어를 기본 형태로 변환해서 어형 변화가 없게 하는 것(표제어 추출)
➔ running의 원형인 동사 run으로 바꾸거나, 명사 mice의 원형인 명사 mouse로 바꾼다.
- 정규화 기법 중 코퍼스에 있는 단어의 개수를 줄일 수 있는 기법으로 자연어 처리 문제에서 주로 사용함. 표제어 추출은 단어들이 다른 형태를 가지더라도 그 뿌리 단어를 찾아가서 단어의 개수를 줄일 수 있는지 판단한다. (ex. Am, are, is는 서로 다른 스펠링이지만 그 뿌리 단어는 be라고 볼 수 있다. 이때 이 단어들의 표제어는 be라고 한다.)
4) 불용어: 자주 등장하지만 실제 의미 분석에 크게 기여하지 않는 단어들을 제거하는 작업
- 갖고 있는 데이터에서 유의미한 단어 토큰만을 선별하기 위해 큰 의미가 없는 단어 토큰을 제거하는 작업. (I, my, me, over, 조사, 접미사 같은 단어들은 문장에서 자주 등장하지만 실제 의미 분석을 하는데는 거의 기여하는 바가 없는 경우들)
- 한국어에서 불용어를 제거하는 방법으로는 간단하게 토큰화 후에 조사, 접속사 등을 제거하는 방법이 있다. 하지만 불용어를 제거하려고 하다보면 조사나 접속사와 같은 단어들뿐만 아니라 명사, 형용사와 같은 단어들 중에서 불용어로서 제거하고 싶은 단어들이 생기기도 하여 결국 사용자가 직접 불용어 사전을 만들게 되는 경우가 많다.
2. 한국어 토큰화의 문제점
1) 띄어쓰기 규칙 불일치: 실제 사용자들은 정확하게 띄워쓰기를 지키지 않아 원하는 결과를 얻기 위해 추가적인 전처리 작업이 필요
2) 복합 명사가 많다. ‘데이터베이스’, ‘자연언어처리’와 같은 용어들이 개별적인 단위로 분리하면 안됨
3) 단어의 순서: 한국어는 동일한 의미를 가진 문장이라도 단어의 배열이 다르게 나타날 수 있다.
4) 조사와 어미: 한국어에서 조사와 어미는 문장 내에서 중요한 역할을 하기 때문에 제거되면 문장 의미 파악이 어려움
5) 형태소의 다양성: ‘가다’라는 동사가 ‘가’, ‘가서,’ 가기’, ‘갔’ 등 다양한 형태로 변형될 수 있다. 이는 토큰화 과정을 복잡하게 만든다.
교착어란 조사, 어미 등을 붙여서 말을 만드는 언어를 의미하며 한국어는 이러한 교착어에 포함된다. 예를 들어 그(he/him)라는 주어나 목적어가 들어간 문장이 있을 경우 영어와 다르게 ‘그’ 뒤에 여러 조사들이 띄어쓰기 없이 붙게 되는 경우가 일반적이다.(ex. 그가, 그에게, 그와, 그는) 한국어는 영어와 같이 띄어쓰기로 구분이 되지 않기 때문에 토큰화가 적용되기 어렵다.
한국어는 어절이 독립적인 단어로 구성되지 않고 조사 등이 붙어있기 때문에 이를 분리하기 위해 형태소 분리가 필요하다. 형태소란 뜻을 가진 가장 작은 말의 단위를 말하며 자립 형태소와 의존 형태소로 구분할 수 있다. 자립 형태소는 접사, 어미, 조사와 상관없이 자립하여 사용할 수 있는 형태소이며 의존 형태소는 다른 형태소와 결합하여 사용되는 접사, 어미, 조사, 어간을 말한다. 이렇게 형태소 분리로 구분을 하게 되면 의존 형태소 구분이 가능하여 띄어쓰기 기반의 토큰화보다 자연어 처리를 더 적절하게 할 수 있다.
3. 영어 토큰화의 문제점과 예제
➔ 영어 텍스트 데이터를 처리할 때는 아래와 같은 점들을 고려하여 적절한 전처리 및 토크나이징 기법인 lemmatization, stemming 등을 선택하고 구현해야 된다.
1) 단어의 변형: 영어 단어는 시제, 수동, 능동에 따라 다양한 형태로 변형 가능. run, runs, running은 서로 다른 형태이다.
2) 불용어: 영어에서도 관사 the, a / 전치사 in, on/ 접속사 and, but 등과 같이 자주 등장하지만 의미 분석에 크게 상관없는 불용어가 있음
3) 구두점 및 특수문자: 마침표 . 는 문장의 끝도 나타내지만, 웹사이트 & URL & 숫자 & 이니셜 등에서도 사용
4) 줄임말과 소유격: 줄임말(can’t, I’m), 소유격(Nayoon’s)의 경우 토큰화가 복잡해 짐
50 명명된 엔터티: 사람 이름, 장소 이름 등 명명된 엔터티는 보통 한 개체로 취급되므로 한 단위로 인식하는게 필요하다. new york -> new york / new, york
5) 대소문자 구분: 한국어와 달리 영어는 대소문자를 구분하고 있다. 미국 US와 우리를 의미하는 us는 구분되어야 함 -> 대소문자 정제시에는 먼저 품사 표시를 한 후 대소문자를 정제하는 것이 좋은 방법
4. lemmatization은 무엇이고 무엇이 문제점인가?
Lemmatization은 단어들로부터 원형을 찾는 과정이다. 이는 단어가 문맥에 따라 변형되더라도 기본 의미를 유지하도록 도와준다.
➔ 예시: am, are is 는 서로 다른 형태를 가지더라도, 그 뿌리 단어는 be라고 볼 수 있으며 이 단어들의 표제어는 be이다. / running, runs, ran 등의 단어들은 모두 원형 run으로 lemmatization 될 수 있다.
➔ 문제점: 사전을 기반으로 동작하기 때문에 처리 시간이 오래 걸린다. / 주요 언어 이외의 언어들에 대해 성능이 좋지 않다./ 표제어 추출기가 본래 단어의 품사 정보를 알아야만 정확한 결과를 얻을 수 있다./ 몇몇 단어들은 여러 가지 의미를 가질 수 있고 이로 인해 원형 복원이 어려울 수 있다.
5. stemming이란 무엇이고 가장 단순한 방법론인 porter stemmer는 무엇인가?
-stemming: 텍스트 데이터를 처리할 때 단어의 기본 형태인 ‘어간’을 추출하는 작업
➔ 동일한 의미를 지닌 여러 단어의 변형들을 하나의 기본 형태로 통일하는 역할
➔ 어간 추출 규칙에 따라 임의로 어미를 자르기 때문에, 결과로 나오는 단어가 실제 사전에 존재하지 않는 경우도 있다. 특히 한국어는 동음이의어가 무수히 쌓이기 때문에 stemming 하면 안된다.
➔ porter stemmer 어간 추출 알고리즘의 하나로 일반적으로 어간 추출 속도는 표제어 추출보다 빠른데, 포터 어간 추출기는 정밀하게 설계되어 정확도가 높으므로 영어 자연어 처리에서 어간 추출을 하고자 한다면 가장 준수한 선택이다. (라고 교재에 나와있는데 수업때 교수님의 표현으로는 stemmer를 쓰면 단어가 형편없어진다..좋지 못한 방법론이지만 어쩔수 없다 등의 부정적 표현..)
다음 그림에서와 같이 porter stemmer는 어떤 단어로 끝나는 말을 특정 단어로 바꿔준다.
crying -> cry, lies -> li, caresses -> caress
6. 불용어란?
- 불용어: 텍스트 데이터에서 자주 등장하지만 실제로는 큰 의미를 가지지 않는 단어들
➔ 영어: 관사(the, a), 인칭 대명사(I, you), 전치사(in, on), 접속사(and, but)
➔ 한국어: 조사(은,는,이,가), 접속사(그리고,그래서)
- 필요성: 실질적인 의미 분석에 크게 기여하지 않기 때문에 제거함으로써 효율성 높임/ 중요한 단어가 아닌데 계속 나타나서 결과를 왜곡 할 수 있어 삭제를 하여 정확도를 높임/ 노이즈 제거 -> 종종 사용자가 직접 불용어 사전을 만드는 경우도 있다.
7. 정수인코딩, 패딩, 원핫인코딩
➔ 이 세가지는 자연언어 처리에서 텍스트 데이터를 컴퓨터가 이해할 수 있는 형태로 변환하는데 사용됨
1) 정수인코딩 integer encoding: 텍스트 데이터에서 각 단어를 고유한 정수로 매핑하는 방법. 일반적으로 빈도수가 높은 단어에 낮은 수자를 부여한다. 예를 들어 I love to play tennis 라는 문장에서 i, love, to ,play, tennis를 각각 1,2,3,4,5와 같이 고유한 정수로 변환한다.
2) 패딩 padding: 모든 텍스트 데이터가 동일한 길이를 가지도록 만드는 작업.
일반적으로 짧은 문장에는 0을 추가하여 길이를 맞춘다. 예를 들어 I love football과 He is a good player 라는 두 문장이 있을 때 첫 번째 문장의 길이를 늘리기 위해 [1,2,5,0]처럼 패딩을 추가한다.
- ex) 넘파이를 사용한 여러 길이의 단어 가 있으면 이 단어들을 모두 tokenizer 해서 정수로 변경한뒤, 가장 길이기 간 문장의 길이로 환산해, 고정된 길이로 맞추는 것이다.
3) 원핫인코딩: 각 단어를 모든 단어들 중 하나만 값이 1이고 나머지는 모두 값이 0인 벡터로 변환하는 방법. 이 벡터의 크기는 전체 단어 집합의 크기와 같다. 예시로 I love to play football에서 love라는 단어가 있으면 [0,1,0,..]처럼 표현한다.
ex) 케라스를 이용해서 진행
한 문장 샘플을 갖고 tokenizer 진행 후, 시퀀스로 변경해 tokenizer를 진행한다.
-한계: 단어의 개수가 늘어날 수록 벡터를 저장하기 위해 필요한 공간이 계속 늘어난다는 단점이 있다.
다른 표현으로는 벡터의 차원이 늘어난다고 표현한다.
-GPT
● 원핫 인코딩은 범주형 데이터를 이진 벡터로 변환하는 기술입니다. 각 범주는 해당하는 위치에 1을 가지고, 다른 위치는 0으로 표현됩니다.
● 예를 들어, "사과", "바나나", "오렌지"를 원핫 인코딩하면 각각 [1, 0, 0], [0, 1, 0], [0, 0, 1]과 같이 표현됩니다.
8. 기계학습의 처리 순서
1) 데이터 수집: 모델을 학습시키기 위한 데이터를 수집하는 단계. 실험 설계, 설문조사, 웹 스크래핑 등 다양한 방법으로 진행
2) 데이터 점검 및 탐색: 데이터 구조, 노이즈 데이터, 머신 러닝 적용을 위해 데이터를 어떻게 정제해야 되는지 파악 -> EDA 탐색적 데이터 분석 단계라고도 말함, 시각화와 간단한 통계 테스트를 진행하기도 함
3) 데이터 전처리: 모델이 학습할 수 있는 형태로 데이터를 변환하는 단계. 결측치 제거, 이상치 처리, 정규화 또는 표준화, 인코딩 등 작업이 포함/ 머신러닝 과정 중 가장 까다로운 작업 중 하나. 자연어처리에서는 토큰화, 정체, 정규화, 불용어 제거 등의 단계를 포함한다.
3) 데이터 분할: 모델의 일반화 성능을 평가하기 위해 데이터를 학습용, 검증용, 테스트용으로 나눔
4) 모델링 및 모델 학습, 검증: 알고리즘이 데이터에서 패턴을 찾아내도록 학습하는 과정. 주어진 입력에 대해 예상되는 출력값과 실제 출력값 사이의 차이를 최소화하도록 파라미터 업데이트/ 검증셋을 사용하여 모델의 성능을 평가하고, 필요에 따라 하이퍼파라미터 조정 등 모델 개선
5) 모델 평가: 훈련용 데이터로 학습이 완료되면 테스트용 데이터로 성능을 평가한다. 기계가 예측한 데이터가 테스트용 데이터의 실제 정답과 얼마나 가까운지를 측정한다. 이 단계에서 얻은 결과가 실제 환경에서의 성능 추정치로 사용됨
6) 모델 배포: 개발된 모델은 실제 시스템에 적용되거나 API 형태로 서비스 제공/ 만약 모델을 업데이트 해야되는 상황이 오면 다시 수집 단계로 돌아갈 수 있다.
9. 지도, 비지도, 반지도, 강화학습
1) 지도 학습: 레이블이라는 정답이 있는 데이터를 활용해 학습하는 것을 말하며 자연어 처리는 대부분 지도학습에 속한다.
2) 비지도 학습: 데이터에 별도의 레이블이 없이 학습하는 것을 의미한다. 예시로 텍스트 처리 분야의 토픽 모델링 알고리즘인 LSA 나 LDA는 비지도 학습에 속한다.
3) 반지도 학습: 일부 데이터만 레이블이 있는 상태로 학습하는 방법이며 지도 학습과 반지도 학습의 중간 형태로 볼 수 있다. 주로 레이블이 부족한 상황에서 사용된다.
강화 학습: 에이전트가 환경과 상호작용하며 특정 작업을 수행하고 그 결과에 따라 보상을 받아 학습하는 방법이다. 에이전트는 행동을 선택하여 보상을 최대화 하고 환경에 대한 정도를 기반으로 학습하며 학습을 개선한다.
10. 이진분류와 다중분류의 차이점
이진분류는 주어진 입력에 대해 두 개의 선택지 중 하나의 답을 선택해야 하는 경우를 의미하며, 다중 분류의 경우 세 개 이상의 선택지 중에서 답을 선택해야 하는 경우를 의미한다.
11. 회귀란 무엇이고 로지스틱 회귀는 무엇인가?
1) 회귀: 두 변수 간의 관계를 모델링 하는 방법. 한 변수의 변화가 다른 변수의 변화에 어떤 영향을 미치는지 분석하는 것이 목표이다. 일반적으로 연속적인 값이나 숫자를 예측하는 데 많이 사용된다.
ex: 연속적인 수치 데이터 -> 주택가격, 온도, 주식 가격, 판매량 등
2) 로지스틱 회귀: 분류 문제에 사용되는 머신러닝 알고리즘. 주로 확률을 사용하여 어떤 사건이 발생할 확률을 예측하고, 그 확률을 기반으로 분류를 수행한다.
ex: 범주형 데이터 -> 스팸/비스팸, 암/정상
3) 차이점
회귀: 연속적인 종속 변수를 예측/ 로지스틱 회귀: 이산적인 분류를 예측하는데 사용
회귀: 선형 관계를 가정하고 선형 모델을 사용/ 로지스틱 회귀: 선형 조합을 시그모이드 함수로 변환하여 비선형 관계를 모델링 함
12. 샘플과 특성에서 벡터 차원을 이용한 자질들을 표현하는 방식에 대한 이해
-기계학습에서 데이터는 일반적으로 벡터로 표현된다. 이 때 각 데이터 샘플은 여러 개의 특성 또는 변수를 가지며, 이들은 벡터의 각 차원으로 표현된다. 예를 들어 집의 가격을 예측하기 위한 모델을 학습시킨다고 하면, 각 집은 면적, 방 개수, 위치 등 여러가지 특성이 있다. 이런 경우 각 집은 3차원 벡터로 표현되며 각 차원은 하나의 특성에 해당된다. 벡터[2000,3,5]는 면적이 2000제곱피트, 방이 3개가 있고, 위치 점수가 5인 집을 나타낼 수 있다.
데이터를 벡터로 표현하는 것은 기계학습 알고리즘이 데이터를 처리하고 학습할 수 있는 형태로 만드는 중요한 단계이다. 다양한 알고리즘들은 고차원 공간에서 동작하며 벡터 연산을 사용하여 패턴을 찾아낸다. 따라서 샘플과 그에 대응하는 특성들을 잘 정의하고 적절한 차원의 벡터로 변환하는 것은 기계학습에서 매우 중요하다.
일반적으로 생각하는 행렬의 하나의 행(머신 러닝에서는 하나의 데이터) 을 샘플(Sample)이라 하고, 종속 변수 y를 예측하기 위한 각각의 독립 변수x(행렬 관점에서의 열)를 특성(Feature)이라고 한다.
13. 성능평가
- 혼동행렬 : 정확도(맞춘 문제수/전체문제수)는 맞춘 결과와 틀린 결과에 대한 세부적인 내용을 알려주지는 않는다. 이를 위해 사용하는 것이 혼동 행렬이다.
* 정밀도: 모델이 True라고 분류한 것 중에서 실제 True인 것의 비율
* 정확도: 맞춘 문제수/전체문제수
* 재현율: 실제 True인 것 중에서 모델이 True라고 예측한 것의 비율
14. 과적합과 과소적합
1) 과적합(Overfitting): 훈련 데이터를 과하게 학습한 경우를 말한다. 기계가 훈련 데이터에 대해서만 과하게 학습하면 성능 측정을 위한 테스트 데이터나 실제 서비스에서는 정확도가 좋지 않은 현상이 발생한다. (훈련 데이터에 대한 정확도는 높지만, 테스트 데이터는 정확도가 낮은 상황이다. 이러한 상황을 방지하기 위해서는 테스트 데이터의 오차가 증가하기 전이나, 정확도가 감소하기 전에 훈련을 멈추는 것이 바람직함.
2) 과소적합(Underfitting): 테스트 데이터의 성능이 올라갈 여지가 있음에도 훈련을 덜 한 상태를 말한다. 과적합과는 달리 훈련 자체를 너무 적게한 상태로 훈련 데이터에 대해서도 정확도가 낮음.
- 문제점: 과적합과 과소적합 모두 문제이지만, 과적합이 더 문제라고 볼 수 있다. 과소적합의 경우 추가로 학습을 시키면 되지만, 과적합의 경우에는 모델을 새로 다시 만들어야하기 때문이다.
- 문제점 해결 방법: 과소적합의 경우 모델이 충분히 학습할 수 있도록 추가로 학습시키고 과적합의 경우 모델 훈련시 테스트 데이터의 오차가 증가하기 전이나 정확도가 감소하기 전에 훈련을 멈추는 등의 노력을 하거나, 이미 과적합된 경우 모델을 새로이 만드는 방법으로 문제를 해결할 수 있다.
15. 통계적 언어모델인 n-gram 모델
- N-GRAM: 다음 단어의 확률을 예측하는 모델로, N은 특정 단어를 예측하기 위해 참조하는 이전 단어들의 수를 나타낸다.
- I am studying 라는 다음에 올 단어를 예측하려면
● 1-gram (unigram)은 이전 단어를 고려하지 않고 각 단어가 독립적으로 등장할 확률만 고려
● 2-gram (Bigram)은 바로 이전의 하나의 단어만 고려. studying 단어 뒤 어떤 단어 올 확률 계산
● 3-gram (Trigram)은 이전 두개의 단어를 고려. am studying 뒤에 어떤 단어가 올지 확률 계산
-> N이 커질수록 문맥 정보는 더 잘 반영되지만, 데이터에 대한 요구량과 계산 복잡성도 증가하며, 충분한 데이터 없이 희소성 문제 발생할 수 있음.
-문제점: 간단하고 구현하기 쉽지만, 멀리 떨어져 있는 정보간 관계를 학습하는 것은 어렵다.
(앞의 단어 몇개만 보다보니 의도하고 싶은대로 문장을 끝맺음하지 못하는 경우가 생긴다는 것이다. 문장을 읽다보면 앞 부분과 뒷부분의 문맥이 전혀 연결이 안되는 경우도 생길 수 있다. 결론적으로, 전체 문장을 고려한 언어 모델보다는 정확도가 떨어질 수 밖에 없다.)
또한, N-gram Language Model 의 한계점을 극복하기 위해, 여러 일반화 방법들이 존재하지만, 취약점을 완전히 해결하지 못했고, n-gram 보다 대체적으로 성능이 우수한 인공신경망을 이용한 언어모델이 많이 사용되고 있다.
16. 한국어 언어모델
- 문제점
1) 띄어쓰기가 제대로 지켜지지 않는다. 한국어는 띄어쓰기를 제대로 하지 않아도 의미가 전달되며, 띄어쓰기 규칙 또한 상대적으로 까다로운 언어이기 때문에 자연어 처리를 하는 것에 있어서 한국어 코퍼스는 띄어쓰기가 제대로 지켜지지 않는 경우가 많다. 토큰이 제대로 분리 되지 않은채 훈련 데이터로 사용된다면 언어 모델은 제대로 동작하지 않는다.
2) 한국어는 교착어이다. 교착어는 언어 모델 작동을 어렵게 만든다. 띄어쓰기 단위인 어절 단위로 토큰화를 할 경우에는 문장에서 발생가능한 단어의 수가 굉장히 늘어난다. (그녀가, 그녀를, 그녀와, 그녀께서, 그녀처럼 등 다양함)
3) 한국어는 어순이 중요하지 않다. 이로써 다음 단어가 나타날 확률을 구해야하는데 어순이 중요하지 않다는 것은 다음 단어로 어떤 단어든 등장할 수 있다는 의미이다.
- 나는 운동을 합니다 체육관에서/ 나는 체육관에서 운동을 합니다. /체육관에서 운동을 합니다./나는 운동을 체육관에서 합니다.
17. 언어모델의 복잡도
- 측정 방식: 펄플렉서티(Perplexity, 줄여서 PPL)를 통해 평가, 모델 내에서 자신의 성능을 수치화하여 결과를 내놓는 평가 방식으로 이 값이 낮을수록 언어 모델의 성능이 좋다고 판단함. 주어진 문장을 얼마나 잘 예측할 수 있는지를 나타내며, 이 값은 테스트 데이터에 대한 모델의 확률 분포와 실제 데이터의 확률 분포 간 차이를 적용하여 계산함./ PPL은 문장의 길이로 정규화된 문장 확률의 역수를 구하면 된다.
- 측정 이유: 두 가지 (또는 그 이상의) 언어 모델의 성능을 비교할 때, 일일히 실제 작업을 진행하고 정확도를 비교하는 작업은 공수가 많이 들기 때문에 조금 부정확하더라도 테스트 데이터에 대해 빠르게 식으로 계산되는 간단한 평가 방법을 사용
- 수치 해석: PPL은 선택할 수 있는 가능한 경우의 수를 의미하는 분기계수(Branching factor)이다. PPL은 이 언어 모델이 특정 시점에서 평균적으로 몇 개의 선택지를 가지고 고민하고 있는지를 의미한다.
만약 PPL이 10이 나왔다면 해당 언어 모델은 테스트 데이터에 대해서 다음 단어를 예측하는 모든 시점마다 평균 10개의 단어를 가지고 어떤 것이 정답인지 고민하고 있다고 해석할 수 있다.
다만, 여기서 주의할 점은 PPL의 값이 낮다는 것은 테스트 데이터 상에서 높은 정확도를 보인다는 것이지, 사람이 느끼기에 좋은 언어 모델이라는 것을 의미하지는 않는다.
+ 또한 PPL은 테스트 데이터에 의존하므로 두 개 이상의 언어 모델을 비교할 때는 정량적으로 양이 많고, 도메인에 알맞은 통일한 테스트 데이터를 사용해야 신뢰도가 높다.
18. 벡터 공간 모델
18.1) 이산적 분산표현
: 단어의 표현 방법은 크게 국소 표현(Local Representation) 방법과 분산 표현(Distributed Representation) 방법으로 나뉜다.
국소 표현 방법(Local Representation)을 이산 표현(Discrete Representation)이라고도 하며 이는 해당 단어 그 자체만 보고, 특정값을 맵핑하여 단어를 표현하는 방법이다.
분산 표현(Distributed Representation)을 연속 표현(Continuous Represnetation)이라고도 하며 이는 그 단어를 표현하고자 주변을 참고하여 단어를 표현하는 방법이다.
18.2) 문서 단어 행렬 표현 방식
: 문서 단어 행렬(Document-Term Matrix, DTM)이란 다수의 문서에서 등장하는 각 단어들의 빈도를 행렬로 표현한 것을 말한다. 각 문서에 대한 BoW를 하나의 행렬로 만든 것으로 생각할 수 있으며, BoW와 다른 표현 방법이 아니라 BoW 표현을 다수의 문서에 대해서 행렬로 표현하고 부르는 용어이다. 행렬의 값은 각 문서의 등장한 단어의 빈도이다.
문서 단어 행렬은 문서들을 서로 비교할 수 있도록 수치화할 수 있다는 점에서 의의를 갖는다.
18.3) 문서 단어 행렬 표현 방식의 문제점
(1) 희소 표현(Sparse representation)
: DTM과 같은 대부분의 값이 0인 표현을 희소 벡터(sparse vector) 또는 희소 행렬(sparse matrix)라고 부르는데, 희소 벡터는 많은 양의 저장 공간과 높은 계산 복잡도를 요구한다.
(2) 단순 빈도 수 기반 접근
: 각 문서에는 중요한 단어와 불필요한 단어가 혼재되어있는데, 여러 문서에 등장하는 모든 단어에 대해서 빈도 표기를 하는 방식은 한계를 가진다. 예를 들어, 영어 문서에서 불용어 'the'는 어떤 문서이든 자주 등장 할 수 밖에 없는데, 여러 문서에서 'the'가 동일하게 빈도수가 높다고 해서 이 문서들이 유사한 문서라고 판단되어서는 안된다.
18.4) TF-IDF방식과 표현식 측정법
TF-IDF(Term Frequency-Inverse Document Frequency)는 단어의 빈도와 역 문서 빈도(문서의 빈도에 특정 식을 취함)를 사용하여 DTM 내의 각 단어들마다 중요한 정도를 가중치로 주는 방법으로, 먼저 DTM을 만든 후,TF-IDF 가중치를 부여한다.
TF-IDF는 주로 문서의 유사도를 구하는 작업, 검색 시스템에서 검색 결과의 중요도를 정하는 작업, 문서 내에서 특정 단어의 중요도를 구하는 작업 등에 사용된다.
TF-IDF는 TF와 IDF를 곱한 값을 의미하는데 이를 식으로 표현하면 다음과 같다. 문서를 d, 단어를 t, 문서의 총 개수를 n이라고 표현할 때 TF, DF, IDF는 각각 다음과 같이 정의된다.
(1) tf(d,t) : 특정 문서 d에서의 특정 단어 t의 등장 횟수
(2) df(t) : 특정 단어 t가 등장한 문서의 수
(3) idf(t) : df(t)에 반비례하는 수
18.5) IDF를 측정하는 방식
IDF(Inverse Document Frequency)는 DF(문서의 빈도)에 역수를 취한 것인데, 단순히 역수를 취하는 것이 아니라 분모에 1을 더하고 log를 취한다. 이를 식으로 표현하면 idf(t)=log(n/df(t))이다. 분모에 1을 더하는 이유는 특정 단어가 전체 문서에 등장하지 않을 경우에 분모가 0이되는 상황을 방지하기 위함이며,
log를 취하는 이유는 log를 취하지 않고 idf(t)=n/df(t) 라는 식으로 사용하게 되면 총 문서의 수인 n이 커질수록 IDF의 값이 기하급수적으로 커지게 되기 때문이고, log를 취하지 않으면 희귀 단어들에 엄청난 가중치가 부여될 수 있기 때문이다.
19. 코사인 유사도
- 왜 코사인 인가?
문서의 유사도를 확인하기 위해서는 다차원 공간에서 벡터 값의 유사도를 확인해야 한다. 코사인 유사도는 두 벡터 간의 코사인 각도를 이용하여 두 벡터의 유사도를 구할 수 있다. 시작점이 0이기 때문에 코사인을 사용하면 편리하다.
또한 유사도를 이용해 추천 시스템을 구현할 수 있다. 유사도만으로 영화의 줄거리에 기반해서 영화를 추천해주는 시스템이다.
- 유사도는 무엇을 의미하는가?
두 벡터의 방향이 완전히 동일한 경우 1의 값을 가지며, 90도의 각을 이루는 경우 0, 180도로 반대의 방향을 가지면 -1의 값을 갖는다. 즉, 코사인 유사도는 -1 이상 1 이하의 값을 가지며 값이 1에 가까울수록 유사도가 높다고 할 수 있고, 이는 두 벡터가 가리키는 방향이 얼마나 유사한가를 의미한다.
20. 유클리드 유사도 측정 계산 법
유클리드 유사도는 데이터 포인트 간의 유클리드 거리를 기반으로 유사성을 측정하는 방법이다. 이는 공간에서의 두 점간의 직선 거리를 나타내는 유클리드 거리를 활용하여 데이터 간의 유사성을 계산하며 값이 작을 수록 더 유사하다고 판단된다.
2차원 좌표 평면 상에선 피타고라스의 정리를 통해 두 점 사이의 거리를 계산해 값을 구할 수 있으며 다차원의 경우 다차원 관점에서 각각의 유클리드 거리를 구하면 된다. 하기 파이썬 코드는 4차원 공간에서의 예시이다.
'Data Analysis > 텍스트마이닝' 카테고리의 다른 글
[Kaggle] Women's E-Commerce Clothing Reviews (0) | 2023.12.04 |
---|---|
Gutenberg project_Alice's Adventures in Wonderland (0) | 2023.11.01 |
텍스트마이닝_정수 인코딩 (0) | 2023.10.01 |
텍스트 마이닝_전처리 종류 (0) | 2023.09.11 |
텍스트 마이닝_필수 라이브러리 설치 (0) | 2023.09.02 |