딥러닝 프레임워크/자연어 처리

자연어 처리(Text Mining)

Zoo_10th 2024. 4. 16.

1. 자연어 처리

자연어 처리는 인간이 사용하는 언어를 컴퓨터가 이해하고 처리할 수 있도록 하는 기술이다. 이를 위해서는 컴퓨터가 자연어를 이해하고 분석하는 기술이 필요하다. 이러한 기술은 기계학습과 딥러닝과 같은 인공지능 기술의 발전과 함께 지속적으로 발전해왔다. 자연어 처리 기술은 자연어 이해, 자연어 생성, 자연어 분석 등으로 구성된다.

자연어 처리 기술은 다양한 분야에서 활용된다. 예를 들어, 검색 엔진에서 검색어와 검색 대상 문서를 자연어 처리하여 가장 적합한 검색 결과를 제공하거나, 기계 번역에서는 다른 언어의 문장을 자연어 처리하여 번역 결과를 생성한다. 또한, 음성 인식 기술에서는 자연어 처리를 통해 사용자의 음성을 텍스트로 변환하여 처리한다.

현재 자연어 처리 기술은 다양한 문제점이 존재한다. 예를 들어, 다의어나 어순의 다양성과 같은 언어의 특성 상 정확한 처리가 어렵다. 이러한 문제점을 해결하기 위해 연구와 개발이 이루어지고 있습니다. 예를 들어, 딥러닝을 이용한 자연어 처리 기술의 발전이 많은 기대를 받고 있다.

1-1. 자연어 처리 주제

1) 텍스트 전처리

토큰화, 정제, 형태소 분석, 불용어 처리, 레이블 인코딩

2) 개수 기반 단어 표현

문장 내에서 단어들의 빈도수를 측정하여 이를 기반으로 데이터 분석 가능한 형태로 만드는 것

3) 문서 유사도(Document Similarity)

단어들을 수치화 한 후 이를 기반으로 단어들 사이의 거리를 계산하여 문서 간의 단어들의 차이를 계산하는 것

4) 토픽 모델링(Topic Modeling)

텍스트 본문의 숨겨진 의미 구조를 발견하기 위해 사용되는 텍스트 마이닝 기법

5) 연관 분석(Association)

문서 내의 단어들을 이용하여 연관 분석을 실시

6) 딥러닝을 이용한 자연어 처리

RNN, LSTM 등의 인공신경망 알고리즘을 이용하여 딥러닝으로 자연어 처리

7) 워드 임베딩(Word Embedding)

Word2vec 패키지를 이용하여 단어를 벡터로 표현하는 방법으로 희소 표현에서 밀집 표현으로 변환하는 것

8) 텍스트 분류(Text Classification)

텍스트를 입력으로 받아, 텍스트가 어떤 종류의 범주(Class)에 속하는지를 구분하는 작업

9) 태깅(Tagging)

각 단어가 어떤 유형에 속해 있는지를 알아내는 것

10) 번역(Translation)

챗봇(Chatbot) 또는 기계 번역(Machine Translation)

2. 형태소 분석(Stemming)

2-1. 형태소 분석

한국어는 명사 뒤에 조사, 동사 뒤에 어미(예: -다)가 붙는다. 명사나 동사와 같은 단어로 분석을 하려면 이러한 조사나 어미를 떼어내야 한다. 이를 위한 과정을 형태소 분석이라고 하며, 형태소(morpheme)란 언어에서 의미가 있는 가장 작은 단위를 의미한다.

형태소 분석을 해주는 소프트웨어를 형태소 분석기라고 하는데, 공개된 형태소 분석기에는 한나눔, 꼬꼬마, 코모란, 트위터 4가지가 있다. 이들은 모두 한국어 문법 규칙을 바탕으로 형태소 분석을 한다. 일본에서 만든 mecab은 기계학습을 통한 형태소 분석기이다. 파이썬에서는 KoNLPy 패키지를 통해 이들 형태소 분석기를 모두 사용할 수 있다.

2-2. 형태소 분석기의 종류

KoNLPy는 파이썬에서 쉽게 다양한 형태소 분석과 태깅을 할 수 있도록 한나눔, 꼬꼬마, 코모란, 메카브, 트위터와 같은 라이브러리들을 모아놓았다.

1) Hannanum

KAIST Semantic Web Research Center에서 개발한 형태소 분석기

https://www.sketchengine.eu/wp-content/uploads/Original-HanNanum-manual.pdf

2) Kkma

서울대학교 IDS(Intelligent Data Systems) 연구실에서 개발한 형태소 분석기

http://kkma.snu.ac.kr/

형태소 분석 및 품사 태깅 — KoNLPy 0.4.3 documentation (konlpy-ko.readthedocs.io)

3) Komoran

Shineware에서 개발한 형태소 분석기

https://docs.komoran.kr/

 

4) Mecab

일본어용 형태소 분석기를 한국어를 사용할 수 있도록 수정한 형태소 분석기

https://bitbucket.org/eunjeon/mecab-ko

5) Open Korean Text

(구.트위터) 과거 트위터에서 사용되던 형태소 분석기

Twitter: Twitter Korean Text.

3. 카운트 기반 단어 표현

3-1. Bag of Words(BoW)

Bag of Words는 단어들의 순서를 고려하지 않고, 단어들의 출현 빈도에만 집중하여 텍스트 데이터를 수치화하는 방법이다. 직역하면, 단어들의 가방이라는 의미를 가지고 있다. 가방 안에는 특정 텍스트 문서 내에서 등장한 모든 단어들이 들어간다. 가방을 흔들어 단어들을 섞으면, 해당 문서 내에서 특정 단어가 N번 등장했다면, 가방 안에는 그 단어가 N개 있게 된다. 이렇게 되면 단어의 순서는 더 이상 중요하지 않다.

3-2. 문서 단어 행렬(Document-Term Matrix, DTM)

문서 단어 행렬(Document-Term Matrix, DTM)이란 다수의 문서에서 등장하는 각 단어들의 빈도를 행렬로 표현한 것을 말한다. 쉽게 생각하면 각 문서에 대한 BoW를 하나의 행렬로 만든 것으로 생각할 수 있으며, BoW와 다른 표현 방법이 아니라 BoW 표현을 다수의 문서에 대해서 행렬로 표현하고 부르는 용어이다. 

문장1 : 먹고 싶은 사과

문장2 : 먹고 싶은 바나나

문장3 : 길고 노란 바나나 바나나

문장4 : 저는 과일이 좋아요

  과일이 길고 노란 먹고 바나나 사과 싶은  저는 좋아요
문장1 0 0 0 1 0 1 1 0 0
문장2 0 0 0 1 1 0 1 0 0
문장3 0 1 1 0 2 0 0 0 0
문장4 1 0 0 0 0 0 0 1 1

각 문서에서 등장한 단어의 빈도를 행렬의 값으로 표기한다. 문서 단어 행렬은 문서들을 서로 비교할 수 있도록 수치화할 수 있다는 점에서 의의를 갖는다. 만약 필요에 따라서는 형태소 분석기로 단어 토큰화를 수행하고, 불용어에 해당되는 조사들 또한 제거하여 더 정제된 DTM을 만들 수도 있다.

3-3. TF-IDF(단어 빈도-역 문서 빈도 Term Frequency-Inverse Document Frequency)

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의 등장 횟수.

생소한 글자때문에 어려워보일 수 있지만, 잘 생각해보면 TF는 이미 앞에서 구한 적이 있다. TF는 앞에서 배운 DTM의 예제에서 각 단어들이 가진 값들이다. DTM이 각 문서에서의 각 단어의 등장 빈도를 나타내는 값이었기 때문이다.

2) df(t)

특정 단어 t가 등장한 문서의 수.

여기서 특정 단어가 각 문서, 또는 문장들에서 몇 번 등장했는지는 관심가지지 않으며 오직 특정 단어 t가 등장한 문장의 수에만 관심을 가진다. 앞서 배운 DTM에서 바나나는 문장2와 문장3에서 등장했다. 이 경우, 바나나의 df는 2다. 문장3에서 바나나가 두 번 등장했지만, 바나나란 단어가 문장2에서 100번 등장했고, 문장3에서 200번 등장했다고 하더라도 바나나의 df는 2가 된다.

3) idf(d, t)

df(t)에 반비례하는 수.

IDF라는 이름을 보고 DF의 역수가 아닐까 생각했다면, IDF는 DF의 역수를 취하고 싶은 것이 맞다. 그런데 log와 분모에 1을 더해주는 식에 의아하실 수 있다. log를 사용하지 않았을 때, IDF를 DF의 역수로 사용한다면 총 문서의 수 n이 커질 수록, IDF의 값은 기하급수적으로 커지게 된다. 그렇기 때문에 log를 사용한다.

4. 유사도 분석

4-1. 코사인 유사도(Cosine Similarity)

코사인 유사도는 두 벡터 간의 코사인 각도를 이용하여 구할 수 있는 두 벡터의 유사도를 의미한다. 두 벡터의 방향이 완전히 동일한 경우에는 1의 값을 가지며, 90°의 각을 이루면 0, 180°로 반대의 방향을 가지면 -1의 값을 갖게 된다. 즉, 결국 코사인 유사도는 -1 이상 1 이하의 값을 가지며 값이 1에 가까울수록 유사도가 높다고 판단할 수 있다. 이를 직관적으로 이해하면 두 벡터가 가리키는 방향이 얼마나 유사한가를 의미한다.

4-2. Word2Vec

Word2Vec은 자연어 처리를 위해 사용되는 알고리즘입니다. 단어를 고차원 공간에서 표현하여, 단어 간에 다양한 수학적 연산이 가능하도록 하는 기술이다. 구글 연구팀이 2013년에 발표했으며, 언어 번역, 감성 분석, 추천 시스템 등 다양한 분야에서 활용되고 있다. 또한, Word2Vec은 연속적인 단어 가방(CBOW) 모델과 스킵 그램 모델 두 가지 방법으로 단어 임베딩을 생성한다.

Word2Vec

 

Korean Word2Vec

ABOUT 이곳은 단어의 효율적인 의미 추정 기법(Word2Vec 알고리즘)을 우리말에 적용해 본 실험 공간입니다. Word2Vec 알고리즘은 인공 신경망을 생성해 각각의 한국어 형태소를 1,000차원의 벡터 스페이

word2vec.kr

1) CBOW(Continuous Bag of Words)

ex) "The fat cat sat on the mat"

예를 들어서 갖고 있는 코퍼스에 위와 같은 예문이 있다면 ['The', 'fat', 'cat', 'on', 'the', 'mat']으로부터 sat을 예측하는 것은 CBOW가 하는 일이다. 이때 예측해야하는 단어 sat을 중심 단어(center word)라고 하고, 예측에 사용되는 단어들을 주변 단어(context word)이다.

중심 단어를 예측하기 위해서 앞, 뒤로 몇 개의 단어를 볼지를 결정해야 하는데 이 범위를 윈도우(window)라고 한다. 예를 들어 윈도우 크기가 2이고, 예측하고자 하는 중심 단어가 sat이라고 한다면 앞의 두 단어인 fat와 cat, 그리고 뒤의 두 단어인 on, the를 입력으로 사용한다. 윈도우 크기가 n이라고 한다면, 실제 중심 단어를 예측하기 위해 참고하려고 하는 주변 단어의 개수는 2n이다.

 

2) Skip-gram

CBOW에서는 주변 단어를 통해 중심 단어를 예측했다면, Skip-gram은 중심 단어에서 주변 단어를 예측한다. 앞서 언급한 예문에 대해서 동일하게 윈도우 크기가 2일 때, 데이터셋은 다음과 같이 구성된다.

728x90

'딥러닝 프레임워크 > 자연어 처리' 카테고리의 다른 글

LSTM (1)  (1) 2024.04.19
RNN 실습  (0) 2024.04.18
RNN 문자 생성  (0) 2024.04.18
RNN (1)  (0) 2024.04.18
자연어 처리 예제(1)  (0) 2024.04.17

댓글