NLP 데이터 전처리 방법 사전 탐색

2400·2021년 11월 14일
0
  1. Count Vectorization
    특정 단어들에 대해서 칼럼으로 표현하고 노출 빈도수를 값으로 기록
    ( 단어의 출현 빈도만 신경쓰는 방법 : Bag of Words 기법이라고도 한다. 어순과 같은 정보를 잃는 단점 존재 )
    ㅊㅊ : https://jdjin3000.tistory.com/18

  2. Text preprocessing in NLP with Python codes

  • 특수문자 제거
  • 소문자화(영어)
  • stop word (ex. i me my myself we ... ) ( 보통 자주 쓰인 단어를 내림차순으로 정렬하면 상위에 오는 흔히 쓰이지만 의미라던가 정보가 없는 단어들을 말하는 것 같다. )
  • 토큰화 (형태소 처리)
  • stemming, Lemmatization ?? 이건 뭔지 더 찾아봐야 될 듯

Stemming 의 예시
Programmer, programming, program > program
단점 : 어근?으로 바뀌면서 일부 정보가 손실될 수도 있다.

Lemmatization 의 예시

  1. LGBM with words and chars n_gram
def count_regexp_occ(regexp="", text=None):
    """ Simple way to get the number of occurence of a regex"""
    return len(re.findall(regexp, text))
    
def get_indicators_and_clean_comments(df):
    """
    Check all sorts of content as it may help find toxic comment
    Though I'm not sure all of them improve scores
    """

    # Get length in words and characters
    df["raw_word_len"] = df["comment_text"].apply(lambda x: len(x.split()))
    df["raw_char_len"] = df["comment_text"].apply(lambda x: len(x))

https://www.kaggle.com/ogrellier/lgbm-with-words-and-chars-n-gram

참고 : n-gram 알고리즘

n-gram을 통한 언어 모델에서는 다음에 나올 단어의 예측은 오직 n-1개의 단어에만 의존합니다. 예를 들어 'An adorable little boy is spreading' 다음에 나올 단어를 예측하고 싶다고 할 때, n=4라고 한 4-gram을 이용한 언어 모델을 사용한다고 합시다. 이 경우, spreading 다음에 올 단어를 예측하는 것은 n-1에 해당되는 앞의 3개의 단어만을 고려합니다.

unigrams : an, adorable, little, boy, is, spreading, smiles
bigrams : an adorable, adorable little, little boy, boy is, is spreading, spreading smiles
4-grams : an adorable little boy, adorable little boy is, little boy is spreading, boy is spreading smiles

단점 :
1. Sparsity problem
문장에 존재하는 앞에 나온 단어를 모두 보는 것보다 일부 단어만을 보는 것으로 현실적으로 코퍼스에서 카운트 할 수 있는 확률을 높일 수는 있었지만, n-gram 언어 모델도 여전히 n-gram에 대한 희소 문제가 존재합니다.

(2) n을 선택하는 것은 trade-off 문제.
앞에서 몇 개의 단어를 볼지 n을 정하는 것은 trade-off가 존재합니다. 임의의 개수인 n을 1보다는 2로 선택하는 것은 거의 대부분의 경우에서 언어 모델의 성능을 높일 수 있습니다. 가령, spreading만 보는 것보다는 is spreading을 보고 다음 단어를 예측하는 것이 더 정확하기 때문입니다. 이 경우 훈련 데이터가 적절한 데이터였다면 언어 모델이 적어도 spreading 다음에 동사를 고르지 않을 것입니다.

n을 크게 선택하면 실제 훈련 코퍼스에서 해당 n-gram을 카운트할 수 있는 확률은 적어지므로 희소 문제는 점점 심각해집니다. 또한 n이 커질수록 모델 사이즈가 커진다는 문제점도 있습니다. 기본적으로 코퍼스의 모든 n-gram에 대해서 카운트를 해야 하기 때문입니다.

n을 작게 선택하면 훈련 코퍼스에서 카운트는 잘 되겠지만 근사의 정확도는 현실의 확률분포와 멀어집니다. 그렇기 때문에 적절한 n을 선택해야 합니다. 앞서 언급한 trade-off 문제로 인해 정확도를 높이려면 n은 최대 5를 넘게 잡아서는 안 된다고 권장되고 있습니다.

참고 : (Bow를 활용한) 문서 단어 행렬 DTM

단점 :

  1. 희소 표현

원-핫 벡터는 단어 집합의 크기가 벡터의 차원이 되고 대부분의 값이 0이 된다는 특징이 있었습니다. 이 특징은 공간적 낭비와 계산 리소스를 증가시킬 수 있다는 점에서 원-핫 벡터의 단점이었습니다. DTM도 마찬가지입니다.

  1. 단순 빈도 수 기반 접근
    여러 문서에 등장하는 모든 단어에 대해서 빈도 표기를 하는 이런 방법은 때로는 한계를 가지기도 합니다. 예를 들어 영어에 대해서 DTM을 만들었을 때, 불용어인 the는 어떤 문서이든 자주 등장할 수 밖에 없습니다. 그런데 유사한 문서인지 비교하고 싶은 문서1, 문서2, 문서3에서 동일하게 the가 빈도수가 높다고 해서 이 문서들이 유사한 문서라고 판단해서는 안 됩니다.

출처 :https://wikidocs.net/21692

profile
공부용 혹은 정리용 혹은 개인저장용

0개의 댓글