반응형
컴퓨터는 자연어를 이해하지 못하기 때문에 컴퓨터가 알 수 있게끔 해줘야 합니다.
가장 간단한 방법은 문장을 쪼개서 컴퓨터한테 인식시키는 것입니다.
문장을 쪼개서 해당하는 칼럼의 값에 카운트를 올려주는 방식입니다.
즉 문장 속 단어의 빈도수를 체크해줍니다.
BoW 단점:
- 단어의 빈도수만 체크하기 때문에 문장의 의미를 제대로 이해하기 힘들다. ex_ "좋다가 말았네"
- 문장의 재구성이 불가능하다
Bow를 만드는 방법
"오늘도 나는 축구를 한다 나는 축구를 좋아해"
"지금 축구를 하고 싶어"
라는 문장들이 있을 때 이 문장을 컴퓨터가 이해하게끔 간단한 방법을 사용해 보겠습니다.
1. 띄어쓰기 단위
단점: 좋아해, 좋아함, 좋아 등을 구분 못해서 사용자 사전이 엄청 커집니다.
오늘도 | 나는 | 축구를 | 한다 | 좋아해 | 지금 | 하고 | 싶어 | |
오늘도 나는 축구를 한다 나는 축구를 좋아해 |
1 | 2 | 2 | 1 | 1 | 0 | 0 | 0 |
지금 축구를 하고 싶어 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 |
2. 문자 단위
단점: 문장의 의미를 담지 못합니다.
오 | 늘 | 도 | 나 | 는 | 축 | 구 | 를 | 한 | 다 | 좋 | 아 | 해 | 지 | 금 | 하 | 고 | 싶 | 어 | |
오늘도 나는 축구를 한다 나는 축구를 좋아해 |
1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
지금 축구를 하고 싶어 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 |
3. Subword 단위
3-1 형태소
단점: 해당 단어가 명사인지 조사인지 컴퓨터가 모르기 때문에 언어에 대한 사전 지식이 필요합니다.
신조어들을 새롭게 학습하기 힘듭니다.(ex_뇌피셜: 뇌 + 피셜 등)
오늘 | 도 | 나 | 는 | 축구 | 를 | 한 | 다 | 좋아 | 해 | 지금 | 하 | 고 | 싶 | 어 | |
오늘도 나는 축구를 한다 나는 축구를 좋아해 |
1 | 1 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
지금 축구를 하고 싶어 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
3-2 BPE(byte-pair encoding)
이 방법은 사용자 사전을 만들기 위한 방법으로 많은 양의 텍스트 데이터셋이 필요합니다.
문장을 바이트 단위로 쪼개서 각 바이트(문자) 뒤에 더 많이 나온 문자를 합쳐주는 방식입니다.
예를 들어 "축구"가 있으면 "축", "구"로 바이트 단위로 나뉘지만 학습한 문장이 스포츠에 관한 데이터였다면 축+구라는 게 많이 사용되기 때문에 사전에 축구가 추가됩니다. 이런 식으로 사용자 사전을 늘려서 일반적으로 3만 개가 될 때까지 학습합니다.
하지만 축구라는 단어가 한 번도 쓰이지 않은 데이터셋으로 학습했다면 축구라는 단어를 올바르게 인식하지 못할 것입니다.
이렇기 때문에 사용자 사전은 원하는 도메인과 관련된 데이터셋으로 학습하는 것이 좋습니다.
반응형
'개발 > NLP' 카테고리의 다른 글
Transformer (0) | 2021.04.25 |
---|---|
TF-IDF (0) | 2021.03.21 |
자연어 평가 지표 (0) | 2021.03.19 |