lstm 4. 자연어 처리의 단계

행동하는 개발자·2022년 11월 22일
0

RNN

목록 보기
4/14

1. 전처리

대부분의 자연어 데이터에는 특수문자들이 섞여 있다. 특히 웹크롤링을 통해 데이터를 수집한 경우 분석하기에 앞서 분석에 알맞은 데이터만 남아있도록 가공해주어야 한다.

2. Tokenization

임베딩: 문자열을 다차원 벡터로 바꾸는 과정

  • 단어 임베딩: 각 단어를 벡터로 변환하는 경우
  • 문장 임베딩: 각 문장을 벡터로 변환하는 경우
  • corpus: 말뭉치

주로 띄어쓰기로 구분되어 있는 것을 하나의 단어로 지칭하지만, 형태소와 같은 의미론적 단위로 문자열을 구분하거나, 여러 말뭉치에서 자주 등장하는 글자들로 '단위'를 묶기도 한다.

토큰: 임베딩의 단위
토큰화: 주어진 문자열을 토큰들로 나누는 과정
토큰 임베딩: 이러한 토큰들이 위치한 벡터 공간

3. Token Embedding

문자열을 토큰으로 분해했다면 one-hot-encoding을 통해 벡터로 변환할 수 있다.

one-hot-encoding이란 말뭉치에 있는 단어들을 중복없이 순서대로 나열한 뒤, 0벡터에 해당하는 순서의 요소에만 1의 값을 부여하는 방법이다. 나열한 단어들에는 중복이 없으므로 각각의 단어들은 모두 고유한 벡터값을 가지게 된다.

그러나 이 과정을 통해 얻은 임베딩에서는 각각의 토큰들이 서로 같은 거리에 위치한다. 즉 두 토큰이 다르다는 사실만 알려줄 뿐, 두 토큰이 서로 어떠한 관계를 가지는지는 알려주지 못하는 것이다. 따라서 유사한 의미를 가지는 토큰끼리는 서로 당기고, 관련 없는 토큰끼리는 밀어냄으로써 보다 유의미한 임베딩을 얻을 수 있다.

두 토큰의 유사도를 정하는 방법에는 여러가지가 있다. Word2Vec, SentencePiece를 비롯한 대부분의 임베딩 알고리즘들이 분포가설을 기반으로 토큰의 유사도를 결정한다. 분포 가설이란 같은 문맥에 등장하는 단어들은 서로 유사한 의미를 가진다는 주장으로 특정 단어를 중심으로 특정 단어 수 이내로 위치한 단어들이 곧 같은 문맥 안에 등장하는 단어들이라 정의한다.

Word2Vec

  • CBOW(Continuous Bag of Words)

주변의 단어로 중간의 단어를 예측

  • Skip-gram

중간의 단어로 주변 단어들을 예측

4. Document Embedding

말뭉치의 토큰들을 벡터로 만들었다면 준비가 끝난 것이다. 토큰들의 임베딩을 모두 더해 평균치를 구하고 긍정적인 내용을 담고 있는지, 부정적인 내용을 담고 있는지 알아낼 수 있다. 분포 가설에 따르면 긍정적 의미를 가진 토큰들은 긍정적 의미를 가진 토큰들 근처에 위치할 것이고, 부정적 의미를 가진 토큰들은 긍정적 의미를 가진 토큰들과는 멀리 분포할 것이기에 평균치가 이들 중 어느쪽에 더 가까운 지 계산하면 된다.

하지만 동음이의어와 다의어 같은 경우는 개별 토큰들의 임베딩을 종합하는 것으로는 해결할 수 없다. 이럴 경우에는 자연어의 의미 해석이 토큰 단위에서가 아닌 문장, 문서 정체에서 이루어져야 한다. 이 때 주로 사용하는 것이 언어모델이다.

언어 모델

언어모델이란 특정한 문자열, 즉 특정 토큰들의 배열이 등장할 확률을 알려주는 확률 모형이다. 대표적인 모델로 BERT가 있다.

출처: https://blog.diyaml.com/teampost/%EC%9E%90%EC%97%B0%EC%96%B4-%EC%B2%98%EB%A6%AC%EC%9D%98-4%EA%B0%80%EC%A7%80-%EB%8B%A8%EA%B3%84/#:~:text=%EC%9D%B4%20%EC%9E%84%EB%B2%A0%EB%94%A9%EC%9D%98%20%EB%8B%A8%EC%9C%84%EB%A5%BC,(token%20embedding)%EC%9D%B4%EB%9D%BC%EA%B3%A0%20%ED%95%A9%EB%8B%88%EB%8B%A4.

profile
끊임없이 뭔가를 남기는 사람

0개의 댓글