본문 바로가기
소셜네트워크

[소셜네트워크] 자연어 처리 #2

by LSB98 2024. 10. 23.
728x90
반응형

1. 말뭉치(Corpus)와 데이터 준비

  • Corpus(말뭉치): 컴퓨터에 저장된 자연어 자료의 모음입니다.
    • 예: Google Books Ngram, Brown Corpus, American National Corpus
    • 파일 형식: .txt, .csv, .json, .xml
  • 말뭉치 준비 과정:
    1. 데이터 선택 및 전처리: 의미 없는 데이터(노이즈)를 제거.
    2. 형식 변환: 데이터를 NLP에 적합한 형태로 변경 (예: JSON, CSV).
    3. 샘플링: 분석에 필요한 데이터 속성 추출.
    4. 숫자 데이터 변환(Encoding): 머신러닝 모델 학습을 위해 텍스트를 수치화.

 

2. NLP의 주요 전처리 단계

  1. 토큰화(Tokenization):
    • 텍스트를 단어 또는 문장 단위로 분리.
    • N-gram: 단어를 n개씩 묶어서 연결(예: Unigram, Bigram).
  2. 품사 태깅(PoS Tagging):
    • 단어에 품사를 태깅해 문법적 의미 부여.
  3. 불용어 제거(Stopword Removal):
    • "the", "is"와 같이 의미 없는 단어 제거.
  4. 어간 추출(Stemming)과 표제어 추출(Lemmatization):
    • Stemming: 단어를 어간으로 변환(예: "running" → "run").
    • Lemmatization: 문맥에 맞게 단어의 기본형으로 변환(예: "am", "is" → "be").

 

3. 단어 인코딩(Encoding) 방법

  1. Bag of Words (BoW):
    • 단어의 출현 빈도를 기반으로 벡터 생성.
    • 순서가 아닌 빈도만 고려합니다.

from collections import Counter
tokens = ["소설", "네트워크", "분석", "자연어"]
bow = Counter(tokens)
print(bow)

 

One-Hot Encoding:

  • 단어를 벡터로 변환할 때 한 단어만 1, 나머지는 0으로 표시.

def one_hot_encoding(word, word_to_index):
    vector = [0] * len(word_to_index)
    index = word_to_index[word]
    vector[index] = 1
    return vector

 

TF-IDF (Term Frequency-Inverse Document Frequency):

  • TF: 특정 단어가 문서에서 등장한 빈도.
  • IDF: 단어가 전체 문서에 등장한 정도의 역수

 

TF-IDF = TF * IDF

 

4. Word2Vec과 임베딩(Embedding)

  1. Word2Vec:
    • 단어를 벡터 공간에 매핑하여 단어 간 유사도를 반영합니다.
    • 두 가지 방식:
      • CBOW (Continuous Bag of Words): 주변 단어로 중심 단어 예측.
      • Skip-Gram: 중심 단어로 주변 단어 예측.
  2. Embedding:
    • 단어를 고차원 공간의 벡터로 표현해 문맥적 의미를 반영합니다.

from gensim.models import Word2Vec
sentences = [["소설", "네트워크", "분석"], ["자연어", "처리"]]
model = Word2Vec(sentences, vector_size=50, window=3, min_count=1, sg=0)
print(model.wv["소설"])

 

5. 한국어 NLP와 KoNLPy

  • KoNLPy: 한국어 NLP 라이브러리.
    • 지원되는 형태소 분석기:
      • Okt (Open Korea Text), Mecab, Komoran, Hannanum, Kkma.

from konlpy.tag import Okt
okt = Okt()
print(okt.morphs("열심히 코딩한 당신, 연휴에는 여행을 가봐요"))

728x90
반응형