NLP 8

Large Language Model (5) : RAG

RAG (Retrieval Augmented Generation, 검색 증강 생성)오늘은 요즘 LLM 관련 기술 중 많이 언급되는 RAG에 대해서 이야기해보려고 합니다. RAG(영어권 사람들은 '랙'이라고 읽더라고요)은 Retrieval Augmented Generation의 약자입니다. 우리 말로는 검색 증강 생성이라고 부릅니다. Retrieval을 검색이라고 번역한 것인데요. 보통 검색하면 Retrieval보다는 Search가 떠오르지 않으시나요?Search와 Retrieval의 차이는 무엇일까요? 좀 뜬금없어 보이지만 오늘 논의와 관련이 있기 때문에 잠시 이야기하고 넘어가겠습니다.먼저 사전적인 의미부터 살펴보면 Search는 말 그대로 검색을 의미합니다. 수많은 후보 중에 내가 원하는 특정 대상을 ..

Deep Learning 2024.04.28

Large Language Model (4) : Fine Tuning & LoRA

들어가며 LLM 이야기를 접하다보면 필수적으로 따라오는 용어 중에 Fine Tuning이라는 것이 있습니다. 우리 말로는 미세조정이라고 번역합니다. 오늘은 Fine Tuning이 무엇이고, 왜 LLM 이야기에 빠지지 않고 등장하는지에 대해 이야기해보려고 합니다. Pre-trained Model Fine Tuning에 대해서 이해하려면 Pre-trained Model을 먼저 이야기해야합니다. https://jins-sw.tistory.com/48 에서 Foundation Model이라는 측면의 LLM 이야기를 한 적이 있는데 참고하셔도 좋을 듯 합니다. 예를 들어 어떤 이메일이 스팸인지 아닌지 판단하다는 자연어처리 기능을 만든다고 생각해보겠습니다. 전통적으로 하던 방법은 다음과 같습니다. 이메일 데이터를 ..

Deep Learning 2023.11.12

머신 러닝 + 자연어 처리

오늘은 특정한 기술이나 알리고즘이 아니라 머신 러닝을 사용해서 자연어처리 문제를 푸는 일반적인 과정에 대해서 이야기를 해보려고합니다. 다르게 말하면, 자연어처리 문제를 어떻게 일반적인 머신 러닝 문제 형태로 바꾸느냐에 대한 이야기입니다. 머신 러닝 문제 형태? 머신 러닝 문제 형태라는 것이 무엇일까요? 우리가 흔히 머신 러닝이라고 부르는 것은 실제로는 다양한 알고리즘의 집합니다. 대표적인 머신 러닝 알고리즘들은 아래와 같은 분류에 속합니다 (이 외에 다른 분류도 있습니다). Clustering Regression Classification Clustering은 비슷한 데이터들끼리 분류하고 모으는 작업입니다. 예를 들어 쇼핑몰의 고객 데이터를 주고, 고객들을 몇가지 부류로 나누는 작업이 있을 수 있습니다...

Deep Learning 2022.03.26

Transformer로 한국어 품사 태거 만들기

한국어 품사 태거를 만들어 봅시다 품사 태거(Part-of-Speech Tagger)는 NLP에서 기본이 되는 태스크이고, 그 때문에 NLP를 배울 때 많이 만들어보는 기능이기도 합니다. 품사 태거가 NLP에서 나름 인기있는 이유는 몇가지가 있을 겁니다. 다른 NLP Task의 입력 또는 전처리 역할을 합니다. 요즘은 트렌드가 언어학적인 요소를 많이 배제하는 추세지만 전통적으로 파싱, 번역 등의 NLP 파이프라인에 많이 쓰였습니다. 한국어에서 BPE와 같은 통계적인 Tokenizer를 대신하는 방법으로 쓰이기도 합니다. 한국어의 특성상 통계적인 Subword보다는 형태소 단위를 토근으로 쓸 때 성능이 더 좋긴 경우들이 있습니다. (참조: 한국어 토큰의 단위는 뭐가 좋을까?) 품사 태깅은 Sequentia..

Deep Learning 2021.06.13

한국어 띄어쓰기: 실전 예제로 배워보는 딥러닝 자연어 처리

한국어 띄어쓰기: 실전 예제로 배워보는 딥러닝 자연어 처리 아름다운별지구에오신여러분을환영합니다 딥러닝도 좀 배웠고, 자연어처리도 좀 배웠고, pytorch도 좀 배웠는데 막상 뭔가를 만들어 보려면 막막할 수 있습니다. 오늘은 pytorch를 이용해서 한국어 띄어쓰기 모듈을 바닥부터 만들어보고, 이 과정에서 실제로 어떻게 간단하 자연어처리기를 개발하는지 살펴보려고 합니다. "아름다운별지구에오신여러분을환영합니다"를 입력으로 주면 "아름다운 별 지구에 오신 여러분을 환영합니다"로 바꿔주는 것이 오늘의 목표입니다. 딥러닝과 Pytorch에 대해서 기본적인 부분을 습득하고 있다고 가정하겠습니다. 특히 Pytorch에 대한 사용법은 설명하지 않으니 참고 부탁드립니다. 문제 정의, 발상의 전환 머신러닝 문제를 풀 때..

Deep Learning 2021.05.26

Word Vector 훈련 데이터를 키우면 얼마나 도움이 될까?

지난 테스트(Tensorflow의 Embedding Layer vs fastText)에서 Tensorflow의 자체 임베딩보다는 아무래도 대용량의 데이터를 사용해서 훈련시킨 fastText가 성능 개선에 도움이 된다는 사실을 확인하고 또 궁금한 점이 생겼습니다. 그렇다면 fastText를 훈련시키는 데이터를 키우면 어떨까요? 한국어 위키피디아도 크기는 하지만 실제로 더 큰 데이터는 나무 위키입니다. 콘텐츠 품질에 대해 논란이 있지만 방대한 텍스트 데이터이기는 하죠. 그리고 다소 심한 구어체와 비속어들이 있지만 어떻게 보면 위키피디아보다 요즘 인터넷 상의 언어 형태를 더 잘 보여준다고 볼 수도 있고요. 그리하여 기존 위키피디아 + 네이버 영화 데이터에 나무위키 데이터까지 더해서 fastText를 훈련시켜보..

Deep Learning 2020.05.01

Tensorflow의 Embedding Layer vs fastText

지난 번 한국어 토큰 테스트(한국어 토큰의 단위는 뭐가 좋을까?)를 해보고나니, Tensorflow(Keras)의 Embedding은 어떨지 궁금했습니다. 그래서 지난번 테스트 중 가장 성능이 좋았던 "형태소+글자" 단위 토큰으로 비교를 해보았습니다. Embedding dimension은 fastText의 기본값 100으로 그대로 하고요. OOV를 위한 토큰을 추가합니다. import tensorflow as tf import numpy as np from tqdm import tqdm from konlpy.tag import Mecab OOV_TOKEN = '' EMBEDDING_DIM = 100 Toknizer와 코퍼스 읽는 건 앞에서 그대로 가져오고요. tagger = Mecab() def toke..

Deep Learning 2020.04.30

한국어 토큰의 단위는 뭐가 좋을까?

한국어 자연어 처리를 하다 보면 토큰의 단위를 뭐로 할지 고민이 될 때가 있습니다. 토큰을 어떻게 잡느냐에 따라 데이터의 크기도 달라지고, 아마도(?) 최종 시스템의 성능도 달라질 거고요. 그래서 이 아마도를 한번 확인해보기로 했습니다. 토큰에 따라 성능이 달라질까요? 결론은 네 그렇습니다. 두 줄 요약. 어절을 통으로 쓰는 것보다는 형태소나 Subword와 같은 작은 단위가 좋다. 글자를 쓰느냐, 자소를 쓰느냐는 (특히 형태소 단위 토큰에서) 크게 유의미하지 않다. 이번 글의 또다른 목적은 간단한 한국어 자연어 처리기를 나름 최신의 기술들을 사용해서 처음부터 끝까지 만드는 법을 보여드리는 겁니다. 그래서 전체 데이터와 코드를 포함했습니다. 시작하기 전에 이 글은 읽으시는 분께서 Tensorflow, M..

Deep Learning 2020.04.28