-
실습 (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