Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- Kaggle
- PCA
- BFS
- DART
- FastAPI
- Stream
- 백준
- Computer Architecture
- rao
- system hacking
- MDP
- Dreamhack
- 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습
- Got
- Flutter
- bloc
- study book
- 영상처리
- fastapi를 사용한 파이썬 웹 개발
- Widget
- BAEKJOON
- pytorch
- ML
- BOF
- C++
- llm을 활용 단어장 앱 개발일지
- Algorithm
- ARM
- Image Processing
- MATLAB
Archives
- Today
- Total
Bull
[NLP] FastText | study book 본문
FastText concept
2015년 메타의 FAIR 연구소에서 개발한 오픈소스 임베딩 모델로 텍스트 분류 및 텍스트 마이닝 알고리즘이다. Word2Vec과 유사하지만 fastText는 단어의 하위 단어를 고려하여 더 높은 정확도와 성능을 제공한다. 하위 단어 고려를 위해 N-gram 을 사용해 단어를 분해하고 벡터화한다.
- < , >(꺽새) 와 같은 특수 기호를 사용해 단어의 시작과 끝을 나타낸다.
- N-gram을 사용해 하위 단어 집합이 구성되는데,
"서울특별시" 를 바이그램으로 분할 시 "서울", "울특", "특별", "별시" 가 된다. - 분해된 하위 단어 집합은 나눠지지 않은 자신 단어도 포함됨.
- 만들어진 단어는 고유한 벡터값을 가짐.
- 같은 하위 단어를 공유하는 단어 끼리는 정보 공유해 학습이 가능하다. 그래서 비슷한 단어끼리는 비슷한 임베딩 벡터가 되어 유사도를 높일 수 있다.
- OOV 단어도 하위 단어로 나누어 임베딩 계산이 된다. "개인택시", "정보처리기사", "임대차보호법" 이라는 단어가 말뭉치에는 있지만 "개인정보보호법"은 없다. 하지만 하위 단어로 조합하여 만들 수 있어서 이 OOV에 대한 임베딩 연산이 가능하다.
FasstText class
from gensim.models import FastText
fastText = FastText(
sentences=tokens,
vector_size=128,
window=5,
min_count=5,
sg=1,
epochs=3,
min_n=2,
max_n=6
)
실습: FastText
pip install Korpora
pip install konlpy
pip install gensim
from Korpora import Korpora
corpus = Korpora.load("kornli")
corpus_texts = corpus.get_all_texts() + corpus.get_all_pairs()
tokens = [sentence.split() for sentence in corpus_texts]
print(tokens[:3])
KorNLI(Korean Natural Language Inference)
한국어 자연어 추론(NLI)를 위한 데이터 셋이다. 자연어 추론은 두 개 이상의 문장이 주어졌을 때 두 문장 간의 관계를 분류하는 작업을 의미한다.
주어진 문장이 함의 관계, 중립 관계, 불일치 관계 중 어느 관계에 해당되는지 분류할 수 있다.
get_all_texts
: 모든 문장을 튜플 형태로 반환한다.get_all_pairs
: 입력 문장과 쌍을 이루는 대응 문장을 튜플 형태로 반환한다.
이어서..
fastText.save("../models/fastText.model")
fastText = FastText.load("../models/fastText.model")
oov_token = "사랑해요"
oov_vector = fastText.wv[oov_token]
print(oov_token in fastText.wv.index_to_key)
print(fastText.wv.most_similar(oov_vector, topn=5))
- 학습 결과 출력은 생략.
index_to_key
: 학습된 단어 사전을 나타내는 리스트. "사랑해요"라는 단어는 단어 사전 리스트 내에 존재하지 않아 OOV 처리된다.- 그러나 fastText는 하위 단어로 나뉘어 있기 때문에 "사랑해요"라는 단어를 처리할 수 있다.
참고자료
https://product.kyobobook.co.kr/detail/S000209621433
파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습 | 윤대희 - 교보문고
파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습 | 트랜스포머는 딥러닝 분야에서 성능이 우수한 모델로 현대 인공지능 분야의 핵심 기술입니다. 트랜스포머와 비전 트랜스
product.kyobobook.co.kr
'Artificial Intelligence > NLP' 카테고리의 다른 글
[NLP] Word2Vec | study book (0) | 2024.09.22 |
---|---|
[NLP] TF-IDF(Term Frequency-Inverse Document Frequency) | study book (0) | 2024.09.22 |
[NLP] N-gram | study book (0) | 2024.09.21 |
[NLP] 토큰화 | study book (1) | 2024.09.08 |
[AI::NLP] Word2Vec에 대해 알아보자: 단어의 비밀, 사실은 숫자의 배열이었다! (CBOW, Skip-gram) (2) | 2024.07.21 |