오늘도 사수 없이 혼자 하는 자연어처리 공부.. 심오한 고민에 빠졌다
자연어처리에서 숫자가 중요한 의미를 가지는 경우에 숫자를 학습 대상에 넣을 수 있을까?
보통 문장을 학습시켜 감성이나 주제를 분류하는 경우 숫자는 불용어처리를 하고 제거한 후 문자만을 토큰화해 학습시키는게 일반적인 방법 같다. 그런데, 숫자가 중요한 의미를 가져 학습 대상이 되는 경우에는 어떻게 해야 할까.. 인터넷을 뒤져도 마음에 드는 해답이 나오지 않아 써 보는 글!
일단 내가 하고자 하는 task 를 간단히 설명하자면, 나는 카페 메뉴 분류를 하고싶다. 메뉴명과 price 를 보고 그게 음료인지, 식품인지, 추가메뉴인지 분류하는 작업을 해보려고 한다.
요렇게 생긴 데이터에 fasttext 모델을 썼다. (요건 지난 게시글을 참조하시길) 자연어로만 돌린 모델은 0.85 정도의 아쉬운 score 가 나왔기 때문에 이를 어떻게 개선할지 고민하다.. price 데이터를 아깝게 버리지 말고 활용해보자! 생각했고
오늘 내가 쓴 두 가지 방법을 소개하고자 함
1. 자연어 학습에 숫자를 결합하기
” 1. 소개하는 말” 을 분석할 때 1이라는 것이 정말 중요하다면,
” 1/digit. 소개하는 말”
"일. 소개하는 말"
이렇게 하는 방법이 일차적으로 있다.
그런데, 나의 경우 1번 방법을 쓰기엔 ram 이 너무 작은 양의 데이터셋에도 터져버렸고 (대체 왜) 그리고 2번 방법을 쓰기엔 아직 변환에 적합한 라이브러리를 찾지 못했다. 1을 일 로 바꿔 줄 수 있는 좋은 한국어 라이브러리가 있나? 하나하나 regex 을 쓰기엔 시간적으로 너무 소요가 큰 것 같다
2. 내맘대로 앙상블
AI 모델들을 공부하다 보면 자주 접하게 되는 개념 중 하나가 앙상블이다. 쉽게 말하면 여러가지 모델을 합쳐서 성능을 올리는 전략인데, nlp 모델이 예측한 값의 결과물과
예를 들어, 전자의 모델에서 아메리카노를 음료라고 예측할 확률 99프로와
후자의 모델에서 4500원인 아메리카노를 음료라고 예측할 확률 88프로를
각 모델의 score 를 가중치로 두고 합치는 것이다 (score 가 높은 모델일 수록 믿는다는 뜻)
두 모델 모두에서 만약 아메리카노를 음료라고 분류하면 이는 확실히 음료로 분류되는 것이고, 만약 두 모델의 예측 결과값이 다르다면,
모델 1의 각 라벨의 probability * score(가중치) + 모델 2의 각 라벨의 probability * score(가중치)
중 가장 값이 크게 나온 라벨을 정답으로 쓰면 어떨까...!
는 순전히 필자의 생각이다 ㅎ
그 어디에서도 증명된 적이 없으나...
대회장 가서 실험해보고 어땠는지 글에 마저 쓰겠음
(뭐 이런 글이 다 있나 싶겠지만 이렇게 AI 가 발전하는거 아니겠ㅇ요)
'데이터 과학 Data Science > 자연어처리 NLP' 카테고리의 다른 글
[nlp] Glove 써보기 (세상에서 제일 쉬운 설명) (0) | 2023.01.21 |
---|---|
[NLP] Fasttext 한국어에서 써보고 하이퍼파라미터 튜닝까지! (2) | 2023.01.17 |
[nlp] subword 분절 (0) | 2023.01.02 |
[NLP] Tokenization (0) | 2022.12.29 |
[NLP] 정규표현식 re 간단한 예제 (0) | 2022.12.29 |