ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 실습 (3주 1일차)
    NAVER AI TECH 2023. 3. 27. 23:05

    몰랐던 파이썬 문법만 정리하도록 하겠다.

    (1강-실습-1) Naive Bayes classifier 구현_조민우_T5200

    from konlpy import tag
    tokenizer = tag.Okt()
    def make_tokenized(data):
      tokenized = []  # 단어 단위로 나뉜 리뷰 데이터.
    
      for sent in tqdm(data):
        tokens = tokenizer.morphs(sent)
        tokenized.append(tokens)
    
      return tokenized

    * konlpy $\leftarrow$ Korean NLP in Python

    * tag.okt() $\leftarrow$ Open Korean Text (트위터 형태소 분석기)

    정규화 처리를 해주는 okt.normalize(text), 어구를 추출해주는 okt.phrases(text), 형태소를 추출해주는 okt.morphs(text), 품사를 반환해주는 okt.pos(text), 명사를 추출해주는 okt.nouns(text) 등의 기능을 가지고 있다.

     

    from tqdm import tqdm

    * tqdm $\leftarrow$ 'progress' in Arabic

    진행상황을 보여준다. tqdm(iterable)의 형태로 사용할 수 있다.

    다양한 기능은 다음 블로그를 참고하자.

     

    from itertools import chain
    i2w = list(set(chain.from_iterable(train_tokenized)))

    * itertools $\leftarrow$ 반복되는 요소에 대해 처리한다.

    * chain.from_iterable $\leftarrow$ 리스트를 연결한다.

    itertools의 다양한 기능은 다음 블로그를 참조하자.

     

    from collections import Counter, defaultdict
    class_counts = Counter(train_labels)

    * Counter $\leftarrow$ 예시를 보는 게 가장 빠르다. 리스트 내 요소를 셈하여 반환한다.

    >>> Counter(["hi", "hey", "hi", "hi", "hello", "hey"])
    Counter({'hi': 3, 'hey': 2, 'hello': 1})

    다음 블로그를 참조했다. 

     

    class_counts = defaultdict(int)

    * defaultdict

    값을 지정하지 않은 key의 default value를 설정한다.

    defaultdict(int)의 경우 default value 값을 0으로 설정한다.

     

     

    (1강-실습-2) Corpus Cleaning_조민우_T5200

    import re
    pattern = r's\wa'
    for match in re.finditer(pattern, text):
        print(match.span(), match.group(0))

    * 정규 표현식(regular expression)

    \w : 영숫자 + 언더스코어("_")

    \W : (영숫자 + "_")를 제외한 문자

    \d : 숫자

    \D : 숫자가 아닌 문자

    \s : 공백 문자

    \S : 공백이 아닌 문자

    \b : 단어 경계

    . : 아무 문자 하나를 지칭합니다. 공백은 포함하나, 줄 바꿈 문자 \n은 제외합니다.

    [ ] : [ ] 안에 있는 문자들 중에서 하나의 문자와 매치합니다.

    [^ ] : [^ ] 안에 있는 문자를 제외한 문자들 중에서 하나의 문자와 매치합니다.

    * : *은 바로 앞의 문자가 0개 이상일 경우를 나타냅니다.

    + : +는 바로 앞의 문자가 최소 1개 이상일 경우를 나타냅니다.

    ? : ?는 바로 앞의 문자가 있을 수도 없을 수도 있는 경우를 나타냅니다.

    { } : { }는 바로 앞의 문자가 해당 숫자만큼 반복되는 경우를 나타냅니다.

    ^ : 글의 시작을 의미합니다.

    $ : 글의 끝을 의미합니다.

    | : 일종의 or 기호로서 여러 패턴 중 하나와 매칭합니다.

    ( ) : 텍스트를 캡쳐합니다.

    (?: ) : 일반 괄호입니다.

    (?=) : 뒷 패턴을 확인합니다.

    (?<=) : 앞 패턴을 확인합니다.

     

    from bs4 import BeautifulSoup

    * BeautifulSoup

    파이썬으로 웹을 크롤링해서 파싱할 수 있게 만들어주는 오픈소스 라이브러리이다.

     

    for i in range(10):
            html_reviews = html_source.find('span',{'id': '_filtered_ment_'+str(i)}) 
            reviews.append(html_reviews.text.strip())

    위 코딩을 이해하기 위해서 해당 페이지 소스를 잠시 가져왔다.

    <span id="_filtered_ment_0">

    명품 브랜드라 믿고 샀는데 안에 made in china가 적혀있었다

    </span>

    html_reviews.text에는 '명품 브랜드라 믿고 샀는데 안에 made in china가 적혀있었다'가 할당된다.

     

    import re
    
    for index, review in enumerate(reviews):
        reviews[index] = re.sub('[^ 가-힣]', '', review)
    print(reviews)

    * re.sub 함수의 형태를 익혀두자

     

     

    (2강-실습-1) Word2Vec 구현 및 Embedding 시각화_조민우_T5200

    Word2Vec의 CBOW와 Skip-gram을 구현하고 Embedding Vector를 PCA와 t-SNE를 통해 시각화하였다.

     

     

    (2강-실습-2) 다국어 임베딩_조민우_T5200

    최신 다국어 임베딩 모델 LaBSE(Language-agnostic BERT Sentence Embedding)을 사용해 문장 임베딩(Sentence Embeddings)을 획득하고, 한국어-영어 문장 간 유사도를 산출하였다.

    'NAVER AI TECH' 카테고리의 다른 글

    RNN, LSTM, and GRU  (0) 2023.03.29
    Attention Is All You Need  (0) 2023.03.28
    Word Embedding (4주차)  (0) 2023.03.27
    Intro to NLP (4주차)  (0) 2023.03.27
    3주차 회고록 (DL Basic & Data Visualization & Git)  (0) 2023.03.24

    댓글

Designed by Tistory.