Oneulog

영어나 기타 언어에 비해서 한국어는 언어 모델로 다음 단어를 예측하기가 훨씬 까다롭다. 한국어는 어순이 중요하지 않다. 한국어에서는 어순이 중요하지 않다. 그래서 이전 단어가 주어졌을 때, 다음 단어가 나타날 확률을 구해야 하는데 어순이 중요하지 않다는 것은 다음 단어로 어떤 단어든 등장할 수 있다는 의미이다. 1. 나는 운동을 합니다 체육관에서. 2. 나는 체육관에서 운동을 합니다. 3. 체육관에서 운동을 합니다. 4. 나는 운동을 체육관에서 합니다. 위의 4개의 문장은 전부 의미가 통하는 것을 볼 수 있다. 심지어 '나는' 이라는 주어를 생략해도 말이 되어버린다. 이렇게 단어 순서를 뒤죽박죽으로 바꾸어놔도 한국어는 의미가 전달되기 때무에 확률에 기반한 언어 모델이 제대로 다음 단어를 예측하기가 어렵다..
N-gram 언어 모델은 카운트에 기반한 통계적 접근을 사용하고 있으므로 SLM의 일종이다. 다만, 앞서 배운 언어 모델과는 달리 이전에 등장한 모든 단어를 고려하는 것이 아니라 일부 단어만 고려하는 접근 방법을 사용한다. 그리고 이때 일부 단어를 몇 개 보느냐를 결정하는데 이것이 N-gram에서의 n이 가지는 의미이다. 코퍼스에서 카운트하지 못하는 경우의 감소 SLM의 한계는 훈련 코퍼스에 확률을 계산하고 싶은 문장이나 단어가 없을 수 있다는 점이다. 그리고 확률을 계산하고 싶은 문장이 길어질수록 갖고있는 코퍼스에서 그 문장이 존재하지 않을 가능성이 높다. 즉, 카운트할 수 없을 가능성이 높다. 하지만 다음과 같이 참고하는 단어들을 줄이면 카운트를 할 수 있을 가능성을 높일 수 있다. 가령, An ad..
언어 모델의 전통적인 접근 방법인 통계적 언어 모델이다. 통계적 언어 모델이 통계적인 접근 방법으로 어떻게 언어를 모델링하는지 보자. 통계적 언어 모델(Statistical Language Model)은 줄여서 SLM이라고도 한다. 조건부 확률 조건부 확률은 두 확률 P(A), P(B)에 대해서 아래와 같은 관계를 가진다. 더 많은 확률에 대해서 일반화해보자. 4개의 확률이 조건부 확률의 관계를 가질 때, 아래와 같이 표현할 수 있다. 이를 조건부 확률의 연쇄 법칙이라고 한다. 이제는 4개가 아닌 n개에 대해서 일반화를 해 보자. 이처럼 조건부 확률에 대한 정의를 통해 문장의 확률을 구해보자. 문장에 대한 확률 문장 'An adorable little boy is spreading smiles'의 확률 ..
통계 기반의 언어 모델 언어 모델은 단어 시퀀스에 확률을 할당하는 일을 하는 모델이다. 이를 조금 풀어서 쓰면, 언어 모델은 가장 자연스러운 단어 시퀀스를 찾아내는 모델이다. 단어 시퀀스에 확률을 할당하게 하기 위해서 가장 보편적으로 사용되는 방법은 언어 모델이 이전 단어들이 주어졌을 때 다음 단어를 예측하도록 하는 것이다. 단어 시퀀스의 확률 할당 자연어 처리에서 단어 시퀀스에 확률을 할당하는 일이 왜 필요할까? 예를 들어보자. 기계 번역(Machine Translation) P(나는 버스를 탔다) > P(나는 버스를 태운다) 언어 모델은 두 문장을 비교하여 좌측의 문장의 확률이 더 높다고 판단한다. 오타 교정(Spell Correlation) 선생님이 교실로 부리나케 P(달려갔다) > P(잘려갔다) ..
컴퓨터 또는 기계는 문자보다는 숫자를 더 잘 처리할 수 있다. 이를 위해 자연어 처리에서는 문자를 숫자로 바꾸는 여러 가지 기법이 있다. 원-핫 인코딩은 그 많은 기법 중에서 단어를 표현하는 가장 기본적인 표현 방법이며, 머신 러닝, 딥러닝을 하기 위해서는 반드시 배워야 하는 표현 방법이다. 단어 집합(Vocabulary) 단어 집합은 서로 다른 단어들의 집합이다. 여기서 혼동이 없도록 서로 다른 단어라는 정의에 대해서 좀 더 주목할 필요가 있다. 단어 집합에서는 기본적으로 book과 books와 같은 단어의 변형 형태도 다른 단어로 간주한다. 원-핫 인코딩이란? 원-핫 인코딩은 단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 ..
자연어 처리 과정에서 각 문장의 길이는 서로 다를 수 있다. 하지만 기계는 길이가 전부 동일한 문서들에 대해서는 하나의 행렬로 보고, 한꺼번에 묶어서 처리할 수 있다. 쉽게 말해 병렬 연산을 위해서 여러 문장의 길이를 임의로 동일하게 맞춰주는 작업이 필요할 때가 있다. 이러한 작업은 Numpy로 패딩하는 방법과 Keras 전처리 도구로 패딩하는 방법이 있다. Numpy로 패딩하기 전처리된 데이터 생성 정수 인코딩 챕터에서 Keras를 활용해 수행했던 결과를 가져온다. 1. 전처리 문장 토큰화 : ['A barber is a person.', 'a barber is good person.', 'a barber is huge person.', 'he Knew A Secret!', 'The Secret He ..
컴퓨터는 텍스트보다 숫자를 더 잘 처리할 수 있다. 이를 위해 자연어 처리에서는 텍스트를 숫자로 바꾸는 여러 가지 기법들이 있다. 그리고 그러한 기법들을 본격적으로 적용시키기 위한 첫 단계로 각 단어를 고유한 정수에 맵핑시키는 전처리 작업이 필요할 때가 있다. 정수 인코딩 단어에 정수를 부여하는 방법 중 하나로 단어를 빈도수 순으로 정렬한 단어 집합을 만들고, 빈도수가 높은 순서대로 차례로 낮은 숫자로 정수를 부여하는 방법이다. 이에 정수 인코딩으로 변환하는 방식에는 여러 가지가 있다. raw_text = "A barber is a person. a barber is good person. a barber is huge person. he Knew A Secret! The Secret He Kept is..
불용어 문장에서 대세로 작용하지 않는, 중요도가 낮은 단어를 제거한다. 예를 들면, I, my, me, over, 조사, 접미사 같은 단어들은 문장에서 자주 등장하지만 실제 의미 분석을 하는 데는 거의 기여하는 바가 없는 경우가 있다. 이러한 단어들을 불용어라고 하며, NLTK에서는 위와 같은 100여개 이상의 영어 단어들을 불용어로 패키지 내에서 미리 정의하고 있다. 불용어 제거 방법 1. 불용어(Stopword) 목록을 받아온다. 2. 정제할 문장을 토큰화한다. 3. 토큰화된 각 단어마다: 3-1. 단어가 불용어 목록에 없는 경우 -> 정제 결과에 추가 3-2. 단어가 불용어 목록에 있는 경우 -> Pass 영어 불용어 NLTK에서 불용어 확인하기 불용어 개수 : 179 불용어 10개 출력 : ['i..
NLP Developer
'NLP' 카테고리의 글 목록 (4 Page)