전체 글 65

[논문리뷰] P-tuning-GPT Understands, Too(Version2)

P-tuning이란? P-tuning은 언어 모델의 full pre-training을 지양하고 수동적인 프롬프트 엔지니어링을 극복하고자 고안한 방법입니다. 수동 프롬프트 엔지니어링은 단어 하나의 변화가 결과에 큰 영향을 미치기 때문에 성능의 일관성을 확보하기 어렵습니다. AutoPrompt와 같은 선행 연구는 템플릿을 자동으로 생성하는 방식을 도입했지만, 여전히 단어 단위의 템플릿이기 때문에 단어 하나가 바뀌면 결과가 크게 달라지는 한계가 있습니다. P-tuning은 이러한 한계를 극복하기 위해 연속성있는 임베딩 벡터를 생성하여 학습합니다. 프롬프트에는 "영국의 수도는 [MASK] 입니다."라는 문장이 있습니다. 여기서 "The capital of ~is"는 프롬프트이고, "Britain"은 컨텍스트(X..

논문 2024.01.24

[논문리뷰] Prefix-Tuning: Optimizing Continuous Prompts for Generation

개요 (Overview) "Prefix-Tuning"은 2021년에 스탠포드에서 발표된 논문으로, 사전 훈련된 언어 모델의 파라미터를 고정시키고 prefix를 도입하여 다양한 작업에 대한 효율적인 조정을 가능케 하는 방법을 소개합니다. Prefix-Tuning은 가벼운 fine-tuning 접근으로써, 적은 학습 데이터로도 성능 향상을 이끌어낼 수 있습니다. 요약 (Abstract) - Prefix-Tuning은 사전 훈련된 언어 모델의 파라미터를 고정시키고, 새로운 벡터인 prefix를 도입하여 다양한 작업에 대한 튜닝을 수행합니다. - "프로프팅"에서 영감을 받아, prefix만 잘 튜닝하면 모델의 답변이 향상될 수 있다는 아이디어를 제시합니다. - Prefix-Tuning은 전체 파라미터를 학습시키..

논문 2024.01.22

[논문리뷰] LoRA (Low-Rank Adaptation of Large Language Models)

http://arxiv.org/abs/2106.09685 LoRA: Low-Rank Adaptation of Large Language Models An important paradigm of natural language processing consists of large-scale pre-training on general domain data and adaptation to particular tasks or domains. As we pre-train larger models, full fine-tuning, which retrains all model parameters, becomes le arxiv.org 소개 (Introduction) "LoRA"는 마이크로소프트에서 출시된 언어 모델로, ..

논문 2024.01.22

[rdflib] 네임스페이스(namespace) 추가하기(feat. schema1)

rdflib은 파이썬을 사용해 RDF 데이터를 구축할 수 있는 라이브러리다. 기존에 많이 사용하는 DCTERMS, RDF, RDFS, SKOS 등은 이미 네임스페이스, 즉, URI체계가 내부에 정의되어 있어서 라이브러리를 통해 불러와주면 사용할 수 있다. DCTERMS는 dct, dcterms 등 prefix를 다양하게 쓰는 경우가 있어, 임의로 prefix를 수정하려면 'bind'를 사용하면 된다. from rdflib import Namespace, Literal, URIRef from rdflib.graph import Graph from rdflib.namespace import DCTERMS # RDF 그래프 생성 g = Graph() # DCTERMS 네임스페이스의 접두사를 수정하여 'mydc..

[Python&Pandas] 유사한 문자열을 매칭하는 파이썬 라이브러리(difflib)

Python에서는 difflib 라이브러리와 pandas 라이브러리를 활용하여 비슷한 문자열을 매칭할 수 있다. 데이터프레임에서 difflib을 사용한 문자열 매칭 예를 들어 df1의 '주소' 컬럼이 있고, '서울특별시 관악구 남부순환로'라는 값이 있다. 그리고, 내가 매칭하려는 값은 '서울특별시 남부순환로'라면, str.contains는 띄어쓰기를 포함하기 때문에 찾을 수 없다. difflib 라이브러리는 시퀀스 데이터를 비교하고 찾는 데에 사용됨. 특히 get_close_matches 함수는 비슷한 문자열을 찾을 수 있다. import difflib import pandas as pd # 가상의 데이터프레임 생성 data = {'주소': ['서울특별시 관악구 남부순환로', '서울특별시 강남구 테헤란로..

[Pandas] 두 개의 데이터프레임에서 특정 문자열이 포함된 행 제거하기(~, isin)

판다스(Pandas)를 사용하여 데이터를 다루다 보면 두 개의 데이터프레임을 조합하거나 특정 조건을 충족하는 행을 제거하는 작업이 필요할 때가 있다. 이번 글에서는 두 데이터프레임을 비교하여 특정 문자열이 포함된 행을 제거하는 방법을 소개한다. 코드 설명 # 필요한 라이브러리 불러오기 import pandas as pd # 두 개의 데이터프레임 생성 (예시 데이터) df1 = pd.DataFrame({'기관명': ['기관1', '기관2', '기관3', '기관4'], '값': [1, 2, 3, 4]}) df2 = pd.DataFrame({'기관명': ['기관2', '기관4'], '값': [10, 20]}) # df2의 기관명이 포함된 행 제거 df3 = df1[~df1['기관명'].isin(df2['기관명..

[Pandas] 빈 값(NaN, None)에 원하는 값 채우기(pd.where)

pd.where(조건문, 실행문) 형태로 빈 값에 원하는 값을 채울 수 있다. np.nan와 None을 통일시키고 싶을 때 사용할 수 있음 df = df.where(pd.notnull(df), None) where를 사용해서 다양한 조건문으로 데이터를 조작할 수 있음 >>> s = pd.Series(range(5)) >>> s.where(s > 0) 0 NaN 1 1.0 2 2.0 3 3.0 4 4.0 dtype: float64 >>> s.mask(s > 0) 0 0.0 1 NaN 2 NaN 3 NaN 4 NaN dtype: float64 아래 공식문서를 참고 https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.where.html pandas.D..

[3d-force-graph] 3D 그래프 시각화 - 관광지 그래프 예제

3D Force Graph를 이용한 시각화 예제 3D Force Graph는 3D 공간에 노드와 링크를 표현하는 시각화 라이브러리이고, 원본 깃헙에 예제가 다양하게 존재함 CSV 파일을 읽어와서 3D Force Graph에 사용하는 JSON으로 변환하는 코드 포함 노드를 클릭하면 해당 관광지의 정보를 보여주는 infoBox 구현 사용 데이터: 전국관광지정보표준데이터 모든 코드는 Github 레포지토리에 공개되어있습니다 데이터 정제 import pandas as pd import numpy as np import json df = pd.read_csv('data.csv', encoding='cp949') # 공공데이터는 주로 cp949로 인코딩 되어있음 # null값 처리 df = df.replace({n..

개발일지 2023.12.14

[Python] 변수명을 for문으로 할당하기 - globals()

전역변수를 활용하면 가능하다. 예를 들어, 시도명 또는 시도코드마다 데이터 프레임을 만들고 싶을 때 아래와 같은 코드를 사용할 수 있음 global()[변수명] sido_code_list = { '11': '서울', '51': '강원', '41': '경기', '48': '경남', '47': '경북', '29': '광주', '27': '대구', '30': '대전', '26': '부산', '36': '세종', '31': '울산', '28': '인천', '46': '전남', '45': '전북', '50': '제주', '44': '충남', '43': '충북' } for code, sido in sido_code_list.items(): # 동적으로 변수명 생성 df_name = f"df_{code}" #df_1..