ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NLP 입문자를 위한 text 전처리
    AI 2023. 4. 26. 12:32

     

     

     

     

    문장을 단어로 쪼개고 단어에 미리 매긴 번호로 문장을 표현하는 것

    을 목표로 한다.

     


     

    1. 챗봇 모델을 블랙박스로 생각해 본다.

    산에서 문명의 도움 없이 불을 피는 방법을 알려주세요 -> BLACK BOX -> 산에서 문명의 도움 없이 불을 피우는 방법은 여러 가지가 있습니다. 여기 몇 가지 기본적인 방법들을 소개합니다 .........

     

    2. 컴퓨터에서 문장을 어떻게 표현하는 지 궁금해 한다.

     

    3. 문장을 단어로 쪼개고 단어에 미리 매긴 번호로 문장을 표현하는 것이 좋다고 다른 사람들이 밝혀냈으므로 받아들인다.

    그리고 한국어 단어를 다뤄야 하므로 konlpy의 Okt와 tensorflow의 TextVectorization을 사용해 본다.

    from konlpy.tag import Okt
    import tensorflow
    import tensorflow as tf
    from tensorflow.keras import layers
    from tensorflow.keras.layers import TextVectorization
    
    okt = Okt()
    vocab = okt.morphs('불을 피우기 전에 안전을 위해 다음 사항을 유의하세요.')
    vocab_set = set()
    for word in vocab:
      vocab_set.add(word)
    
    vectorizor = TextVectorization(
      vocabulary=list(vocab_set)
    )
    
    vector = vectorizor(' '.join(okt.morphs('불을 피우기 전에 안전을 위해 다음 사항을 유의하세요.')))
    
    decoded = []
    for v in vector:
      decoded += [vectorizor.get_vocabulary()[v]]
    decoded = ' '.join(decoded)
    
    print(vocab)
    print(vectorizor.get_vocabulary())
    print(vector)
    print(decoded)

     

    4. 언어 모델들은 다음 단어를 예측하는 방식으로 동작한다는 것을 떠올린다.

     

    input: "<START>산에서 문명의 도움 없이 불을 피는 방법을 알려주세요"

    output: "산 에서 문명의 도움 없이 불을 피우는 방법은 여러 가지가 있습니다. 여기 몇 가지 기본적인 방법들을 소개합니다...<END>"

     

    "모델에 처음 들어가는 input 단어인 <START>"와 "모델 가동을 언제 끝낼지를 나타내기 위한 output 단어인 <END>" 를 위한 번호를 따로 할당하고 나중에 vectorize 된 vector의 앞이나 뒤에 <START>나 <END>의 번호를 붙여 줘야 한다.

     

    댓글

Designed by Tistory.