본문 바로가기
자연어처리(NLP) & CHAT GPT/NLP

[NLP] 언어 모델링 - 개념

by 11car28z 2023. 7. 29.

NLP 과정


1.텍스트 데이터 수집
-DB
-웹크롤링(스크래핑)
도구: selenium(웹 제어), BeautifulSoup(가져온 텍스트 구조화)

-텍스트 증식 고려(권장하지 않음)
동일한 의미이지만 다양한 단어를 생성
ex)이미지 – 회전, 필터처리 등으로 데이터들을 변환

-위키피디아, 북스코퍼스 등 다양한 사이트에서 자연어 테이터를 수집

2.텍스트 전처리
토큰화 , 텍스트 정제, 불용어처리, 정수인코딩, 패딩, 원핫 인코딩 등

3.언어모델링<오늘 학습>
-언어 모델링 알고리즘 선택(머신러닝, 딥러닝, 데이터마이닝)
목적에 맞춰서 고르기

텍스트 다양한 추론 작업

중요문장 추출 / 문장 생성/ 문장 이해/ 주어진 문장의 빈칸 채우기 -> 언어모델


언어모델

통계적 모델(초창기 모델, 잘 안쓰임), 신경망[신경망 기반] 모델

문장또는 단어를 추측하는 모델

ex) 나는 오늘 강의실에서 자연어 처리를 _____________________?

앞에있는 통계적, 신경망 기반으로 단어의 시퀀스을 추측해서 빈칸에 무엇이 들어갈지 추측하는 것

 

1. 통계적 모델: 단어의 순서에 대해 확률 부여

ex) 구글 검색창에 검색어를 입력하면 뒤에 나올 단어를 확률을 기반으로 추측

ex) P(나는 자연어 처리를 공부한다.) > P(나는 자연어 처리를 먹는다.)

P(공부한다|나는, 자연어, 처리를) -> "나는, 자연어, 처리를"이 주어지면 "공부한다"가 나올 확률

 

(1) n-grams : 문서, 문장, 문단간의 유사도 조사

'오늘 점심 추천 메뉴: 소고기볶음밥, 햄볶음밥'을 ngram을 이용해 통계학적 모델 만들면 ->

n=1 (유니그램) : 한단어씩 나눈 것

ex)오늘, 점심, 추천, 메뉴, 소고기볶음밥, 햄볶음밥

 

n=2 (바이그램) : 두단어씩 나눈 것

ex)오늘 점심, 점심 추천, 추천 메뉴,

메뉴 소고기볶음밥, 소고기볶음밥 햄볶음밥

 

ex)

P(소고기볶음밥|점심 추천 메뉴)

count(점심 추천 메뉴 소고기볶음밥)/count(점심 추천 메뉴)=20/30

"점심 추천 메뉴" 순서대로 등장한 빈도수

 

P(햄볶음밥|점심 추천 메뉴)

count(점심 추천 메뉴 햄볶음밥)/count(점심 추천 메뉴)=5/30

 

"점심 추천 메뉴"만 검색하면 단어 순서 확률에 의해 "소고기볶음밥"이 나올 확률이 가장 높다

 

n-grams의 한계

단어가 약간만 달라지면 다른 것으로 인식하는 한계

n을 얼마나해야 확률이 좋은지 선택하기 어려움, 유니그램이 제일 좋다.

 

한국어는 단어의 순서가 큰 의미 없음 -> 신경망(RNN, LSTM) 기반 생성시 어려움

ex) 나는 지금 자연어 공부해요

자연어 공부해요 나는 지금 -> 문장이 끝났다고 생각했는데 다시 시작하는 경우

 

 

2. 신경망 기반 모델

(1) (얕은) 신경망 종류: NN(입력 계층, 출력 계층)

LinearRegression(예측회귀) -> Logistic Regression(이진분류시그모이드 함수) -> SOFTMAX(다중분류) -> (얕은신경망 종류: NN(입력 계층출력 계층)

 

h(x) = wx+b (-무한대, +무한대) -> LinearRegression

sigmoid(h(x)) (0,1) -> LinearRegression + 시그모이드

SOFTMAX: 이진 분류기 여러개로 다중분류하기

 

 

(2) (깊은) 신경망 종류: DNN, CNN, RNN 등

DNN: 입력 계층, 출력 계층, 적어도 1개 이상의 히든 계층

CNN: DNN앞에 컨볼루션 레이어 위치

RNN: 시계열 기반 신경망

 

자연어 처리 영역에서 단어를 표현하는 방법

1. 원핫 인코딩

2. DTM(Document Term Matrix, TF)

행:Document ex)문서, 소설책 한권 등  (행에 Document가 오는 것이 편하다.)

열:Term ex)열권의 소설책에 등장하는 전체 단어

Matrix: 해당 책에 등장하는 단어의 빈도수

 

단어1 단어2 ... 단어M

문서1 5 0 ... 1 M차원벡터공간(5,0,...,1)

문서2

...

문서N

 

ex)이 소설책과 유사한 책 추천

1.문서1과 다른 문서의 유클리드거리를 구해 가장가까운 것 추천

2.KNN: k개 이웃수에 따라 분류한다. 단어를 기준으로 다른 Document참조해 분류해서 추천하기

 

Matrix

행단위로 최대인 것: 단어 빈도수 높은거

영양가 없는 A, The 같은 단어가 출력될 수 있어 불용어 처리가 필요하다.

 

열단위로 최대인것 : 가장 언급이 많은 단어 찾기

 

DTM의 한계점

(1) 문서 단어 행렬 구성 : 특정문서 하나를 대상으로 가장 유사한 문서 찾기 위해

-> 유클리드 거리 방법 활용하면 덜 비슷한 것이 더 유사하다는 문제발생

 

문서 단어 행렬은 m차원(m개의 컬럼) 데이터

 

ex)영화에서 돈과 사랑이라는 단어의 빈도수로 비슷한 영화찾기

 

해결방법 -> 코사인 유사도

 

 

3. TDM(Term Document Matrix)

행:Term

열:Document

Matrix

 

 

4.TFIDF(TF * IDF)

(1) TF

tf(d,t) : 문서 d에서 단어 t의 등장 횟수(DTM에서 행렬의 요소값이 tf임)

 

(2) IDF

df(t) : 단어 t가 등장한 문서의 개수

idf(d,t) : log(n / (df(t)+1))

- n은 전체 문서의 개수

- log

ex) n=1000

idf(d,t)=log(1000 / (df(t)+1))

df(t) =1, idf(d,t)는 log(1000/1)은 3

df(t) =10, idf(d,t)는 log(1000/10)은 2

 

**TF-IDF 값은 한 문서에서 단어가 등장하는 빈도가 높을수록 커지고(term frequency),

반대로 코퍼스에서 해당 단어를 포함하는 문서가 많을수록 반비례해서 작아진다(inverse document frequency).

 

**특정 문서 내에서 단어 빈도가 높을 수록, 그리고 전체 문서들 중 그 단어를 포함한 문서가 적을 수록 TF-IDF값이 높아진다.

따라서 이 값을 이용하면 모든 문서에 흔하게 나타나는 단어를 걸러내는 효과를 얻을 수 있다. IDF의 로그 함수 안의 값은 항상 1 이상이므로, IDF값과 TF-IDF값은 항상 0 이상이 된다.

특정 단어를 포함하는 문서들이 많을 수록 로그 함수 안의 값이 1에 가까워지게 되고, 이 경우 IDF값과 TF-IDF값은 0에 가까워지게 된다.