forked from boostcampaitech7/level2-nlp-datacentric-nlp-04
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' of https://github.com/boostcampaitech7/level2-nlp…
…-datacentric-nlp-04 into feat/stratified_random_shuffle_implements
- Loading branch information
Showing
33 changed files
with
244 additions
and
92 deletions.
There are no files selected for viewing
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,190 @@ | ||
""" | ||
프롬프트 템플릿을 버전별로 관리하고 제공하는 모듈입니다. | ||
## 주요 기능 | ||
- relabel: 텍스트 레이블 수정을 위한 프롬프트 생성 | ||
- denoise: 텍스트 노이즈 제거를 위한 프롬프트 생성 | ||
- augment: 텍스트 증강을 위한 프롬프트 생성 | ||
## 사용 방법 | ||
version 파라미터를 통해 원하는 버전의 프롬프트 템플릿을 선택할 수 있습니다. | ||
## 모델 | ||
- LGAI-EXAONE/EXAONE-3.0-7.8B-Instruct에서 가장 잘 동작합니다. | ||
Examples: | ||
>>> prompt = get_relabel_prompt("1", "sample text", "target") | ||
>>> prompt = get_denoise_prompt("1", "noisy text") | ||
>>> prompt = get_agument_prompt("1", "original text") | ||
""" | ||
|
||
|
||
def get_relabel_prompt(version, text, target): | ||
if version == "1": | ||
return relabel_v1_prompt(text, target) | ||
else: | ||
return relabel_v1_prompt(text, target) | ||
|
||
|
||
def get_denoise_prompt(version, text): | ||
if version == "1": | ||
return denoise_v1_prompt(text) | ||
else: | ||
return denoise_v1_prompt(text) | ||
|
||
|
||
def get_agument_prompt(version, text): | ||
if version == "1": | ||
return agument_v1_prompt(text) | ||
else: | ||
return agument_v1_prompt(text) | ||
|
||
|
||
def relabel_v1_prompt(text, target): | ||
prompt = ( | ||
"# 지침\n" | ||
"당신은 노이즈가 포함된 한국어 뉴스 제목을 입력받아 주제 분류가 잘 되었는지를 검수합니다." | ||
"한글 문자 일부가 노이즈(알파벳, 숫자, 특수 기호 등)로 임의로 교체되어 있습니다." | ||
"주제는 0~6으로 총 7개의 주제로 분류됩니다. 대부분은 잘 분류가 되어있지만 일부는 잘못 분류되어 있습니다." | ||
"주제가 잘 분류되었다면 기존 주제를 출력하고, 잘못 분류되었다면 더 적합한 주제를 출력하세요.\n\n" | ||
"# 입력 형식\n" | ||
"- [기사 제목]: 제목 텍스트 [주제]: 0 형식으로 텍스트 형식의 뉴스 기사 제목와 숫자 형식의 주제가 주어집니다.\n\n" | ||
"# 출력 규칙\n" | ||
"반드시 입력에 해당하는 주제를 숫자 형식으로만 반환해야 합니다. 반드시 어떠한 다른 문장도 생성하지 말고 오직 숫자로만 반환하세요.\n\n" | ||
"# 총 7개의 주제에 대한 주제별 예시\n" | ||
"주제 6: ['사우디 석유 가격 0∼8달러 좁아...국제 유가', '한중일 정상 특별성명 채택...비핵화 목표 환영·3','노벨상 수상 말하노바화회 개막...세계적 예술가'," | ||
"'홍콩 시위 격화...원격조종 사제폭탄 등장, 경찰 대응 강화','이란, 보수 싱 탱크 제재 대상에 올라...지역 안보 긴장 고조']\n" | ||
"주제 5: ['코스피, 미국발 악재에 또 급락...2360대로 털썩', '월세 전환에 주거비 부담 증가...작년 역대 최고치 기록', '옵션 만기일 NH투자, 매도 우위 전망'," | ||
" '산업생산 가동률 금융위수 합보...제조업 회복 조짐', '흥국운용, 2천350억원 중순위 인수']\n" | ||
"주제 4: ['자율주행 모터쇼 판교서 개막…내달 운행 무인셔틀 첫선','티맵, 인공지능 업지능으로 생활 혁신 주도','시스템 반도체, 전 세계 시장 점유율 급증...한국 기업들 경쟁력 강화'," | ||
"'애플, iOS 11 배포로 증강현실 시대 개막','초신성 폭발 3시간 만에 관측...최단기록']\n" | ||
"주제 3: ['못믿을 아파트 관리비…경기 556곳서 150억 비리 적발종합','중재기구 처벌 강화 요구 노동자 시위','방통위원장, 민영방송의날 기념식서 방송산업 발전 강조'," | ||
"'경찰, 5월 초 유커·日관광객 대상 바가지 요금 집중','랜섬웨어 국내 15건 신고...정부 대응 강화']\n" | ||
"주제 2: ['文대통령 베트남 당서기장 만나…국회의장·총리와도 면담종합2보','폭주당, 민생당에 평화 지지 호소','청와대 관계자들에게 미공개 자료 유출 논란'," | ||
"'민주당 대표, 전북 방문해 지역 현안 논의','이총리, 4.13 총선 준비 본격화...정책 발표']\n" | ||
"주제 1: ['인터뷰 류현진 친구에게 안타 맞는 것 싫어해…승부는 냉정', '추신수 경기 타율 0.210...시즌 종료까지 반등', 'K리그, 멀티골 순형 활약으로 1위 탈환...FX'," | ||
"'기원 감독, 패배 후 인터뷰서 심경 밝혀...팀 분위기 회복이','GS칼텍스, 세터 이나연↔이고은 트레이드 발표']\n" | ||
"주제 0: ['제주 낮최고 22.5도 포근…산간 호우 예비특보','의사의 거짓말, 가짜 건강상식 폭로된다...전문가 경고','찾아가는 시문학 공연, 지역 도서관서 개최...문학의 계절'," | ||
"'백제트, 노김 피손민 신곡 발표...팬들 기대감 고조','3·1 운동 기념 스님 재조명...독립운동 정신 계승'] \n\n" | ||
"# 입출력 예시\n" | ||
"[기사 제목]: 프란치스코 교황, 8일 난민 지원 미사 집전 [주제]: 6" | ||
"[출력]: 6\n" | ||
"[기사 제목]: 노벨상 수상 말하노바화회 개막...세계적 예술가 [주제]: 1" | ||
"[출력]: 6\n" | ||
"[기사 제목]: [기사 제목]: 3분기 리그테이블 IPO 미래·채권 KB證 약진…M&A '삼일 [주제]: 0" | ||
"[출력]: 5\n" | ||
"[기사 제목]: 미래 교통시스템 新모델 ‘제로셔틀’ 선보여 [주제]: 4" | ||
"[출력]: 4\n" | ||
"[기사 제목]: 아파트 '깜깜이 회계' 몸살.. 외부감사에도 적발 못 해 [주제]: 5" | ||
"[출력]: 3\n" | ||
"[기사 제목]: 경기도의회 민주당 대표단, 전북도의회 방문…교류 활성화 맞손 [주제]: 3" | ||
"[출력]: 2\n" | ||
"[기사 제목]: 야마모토 요시노부, 가장 많은 수상 경력을 가진 현역 야구 선수? [주제]: 1" | ||
"[출력]: 1\n" | ||
"[기사 제목]: 올해 첫 황사…내일 밤부터 일요일까지 전국에 영향 [주제]: 0" | ||
"[출력]: 0\n" | ||
f"[기사 제목]: {text} [주제]: {target}\n" | ||
"[출력]:" | ||
) | ||
messages = [ | ||
{ | ||
"role": "system", | ||
"content": ( | ||
"당신은 엄격한 규칙을 따르는 한국어 뉴스 기사 검수 시스템입니다." | ||
" 반드시 [출력]: 형식으로만 응답해야 하며, 어떠한 추가 설명도 하지 않습니다." | ||
), | ||
}, | ||
{"role": "user", "content": prompt}, | ||
] | ||
return messages | ||
|
||
|
||
def denoise_v1_prompt(text): | ||
prompt = ( | ||
"# 지침\n" | ||
"당신은 노이즈가 포함된 한국어 뉴스 제목을 원문으로 복원하는 작업을 수행합니다." | ||
"한글 문자 일부가 노이즈(알파벳, 숫자, 특수 기호 등)로 임의로 교체되어 있습니다. 교체된 노이즈를 원래 한글 문자를 복원해야 합니다." | ||
"한자는 노이즈가 아니므로 제거하면 안됩니다. 그러나 복원할 때 한자를 생성해서는 안됩니다." | ||
"문장을 복원할 때 입력한 뉴스 기사 제목의 주제를 추측하고, 이를 적극 반영하여 해당 주제에서 쓰일법한 단어 위주로 복원합니다.\n\n" | ||
"# 입력 형식\n" | ||
"- [입력]: 으로 시작하는 뉴스 기사 제목 텍스트가 주어집니다.\n\n" | ||
"# 출력 규칙\n" | ||
"반드시 복원한 문장만 반환해야 합니다. 반드시 어떠한 다른 문장도 함께 생성하지 말고 오직 복원한 문장만 반환하세요." | ||
"만약 노이즈가 너무 심한 문장이라 원본 문장으로 복원할 수 없다면, 'X'를 반환하세요.\n\n" | ||
"# 예시\n" | ||
"[입력]: ip*한국사이버[제 U분기 영업익ux0u원?!.G$ 감소" | ||
"[출력]: ipo 한국사이버 제 3분기 영업이익 100억원 감소\n" | ||
"[입력]: K^한국관광공사X업무y약@체결" | ||
"[출력]: 한국관광공사 업무 계약 체결\n" | ||
"[입력]: 20T9년s제1회 외K인투자~정@협의회" | ||
"[출력]: 2019년 제1회 외국인투자 정책협의회\n" | ||
"[입력]: rR')드전 앞{ 신태ht실]%^xG우리2플<{ ^f]" | ||
"[출력]: \n" | ||
"[입력]: raw래F H인 _G8H $장 진입zo) 완화i6진" | ||
"[출력]: \n\n" | ||
f"[입력]: {text}\n" | ||
"[출력]:" | ||
) | ||
messages = [ | ||
{ | ||
"role": "system", | ||
"content": ( | ||
"당신은 엄격한 규칙을 따르는 한국어 텍스트 복원 시스템입니다." | ||
" 반드시 [출력]: 형식으로만 응답해야 하며, 어떠한 추가 설명도 하지 않습니다." | ||
), | ||
}, | ||
{"role": "user", "content": prompt}, | ||
] | ||
return messages | ||
|
||
|
||
def agument_v1_prompt(text): | ||
prompt = ( | ||
"# 지침\n" | ||
"당신은 한국어 뉴스 기사 제목 5개를 생성하는 작업을 수행합니다." | ||
"한국어 뉴스 기사 제목이 입력으로 들어오면 입력과 동일한 주제로 뉴스 기사 제목을 생성합니다." | ||
"생성하는 뉴스 기사는 반드시 입력 뉴스 기사에서 사용한 단어와 겹치면 안됩니다. 주제에서 벗어나지 않으면서 모든 단어를 새롭게 생성해야 합니다." | ||
"뉴스 기사를 생성할 때 사람 이름이나 지역명 같은 고유명사가 나온다면, 이를 반드시 새롭게 대체해야합니다." | ||
" 고유명사는 절대 겹치지 말아야 합니다.\n\n" | ||
"뉴스 기사 주제는 총 7가지가 있으며, 각 주제별로 예시가 하나씩 주어집니다.\n\n" | ||
"# 입력 형식\n" | ||
"- [입력]: 으로 시작하는 뉴스 기사 제목 텍스트가 주어집니다.\n\n" | ||
"# 출력 규칙\n" | ||
"반드시 [['1번뉴스기사', '2번뉴스기사', '3번뉴스기사', '4번뉴스기사', '5번뉴스기사'] 와 같이 문자열 배열 형식으로 생성합니다." | ||
"형식에 맞게 뉴스 기사 제목만 반환해야 합니다. 반드시 어떠한 다른 문장도 함께 생성하지 말고 오직 생성한 문장만 반환합니다. \n\n" | ||
"# 총 7개의 주제에 대한 주제별 예시\n" | ||
"[입력]: 3분기 리그테이블 IPO 미래·채권 KB證 약진…M&A '삼일" | ||
"[출력]: ['코스피, 미국발 악재에 또 급락...2360대로 털썩', '월세 전환에 주거비 부담 증가...작년 역대 최고치 기록', '옵션 만기일 NH투자, 매도 우위 전망'," | ||
"'산업생산 가동률 금융위수 합보...제조업 회복 조짐', '흥국운용, 2천350억원 중순위 인수']\n" | ||
"[입력]: 야마모토 요시노부, 가장 많은 수상 경력을 가진 현역 야구 선수?" | ||
"[출력]: ['인터뷰 류현진 친구에게 안타 맞는 것 싫어해…승부는 냉정', '추신수 경기 타율 0.210...시즌 종료까지 반등', 'K리그, 멀티골 순형 활약으로 1위 탈환...FX'," | ||
"'기원 감독, 패배 후 인터뷰서 심경 밝혀...팀 분위기 회복이','GS칼텍스, 세터 이나연↔이고은 트레이드 발표'] \n" | ||
"[입력]: 프란치스코 교황, 8일 난민 지원 미사 집전" | ||
"[출력]: ['사우디 석유 가격 0∼8달러 좁아...국제 유가', '한중일 정상 특별성명 채택...비핵화 목표 환영·3','노벨상 수상 말하노바화회 개막...세계적 예술가','홍콩 시위 격화...원격조종 사제폭탄 등장," | ||
"경찰 대응 강화','이란, 보수 싱 탱크 제재 대상에 올라...지역 안보 긴장 고조']\n" | ||
"[입력]: 미래 교통시스템 新모델 ‘제로셔틀’ 선보여" | ||
"[출력]: ['자율주행 모터쇼 판교서 개막…내달 운행 무인셔틀 첫선','티맵, 인공지능 업지능으로 생활 혁신 주도','시스템 반도체, 전 세계 시장 점유율 급증...한국 기업들 경쟁력 강화'," | ||
"'애플, iOS 11 배포로 증강현실 시대 개막','초신성 폭발 3시간 만에 관측...최단기록']\n" | ||
"[입력]: 아파트 '깜깜이 회계' 몸살.. 외부감사에도 적발 못 해" | ||
"[출력]: ['못믿을 아파트 관리비…경기 556곳서 150억 비리 적발종합','중재기구 처벌 강화 요구 노동자 시위','방통위원장, 민영방송의날 기념식서 방송산업 발전 강조'," | ||
"'경찰, 5월 초 유커·日관광객 대상 바가지 요금 집중','랜섬웨어 국내 15건 신고...정부 대응 강화']\n\n" | ||
"[입력]: 경기도의회 민주당 대표단, 전북도의회 방문…교류 활성화 맞손" | ||
"[출력]: ['文대통령 베트남 당서기장 만나…국회의장·총리와도 면담종합2보','폭주당, 민생당에 평화 지지 호소','청와대 관계자들에게 미공개 자료 유출 논란'," | ||
"'민주당 대표, 전북 방문해 지역 현안 논의','이총리, 4.13 총선 준비 본격화...정책 발표']\n\n" | ||
"[입력]: 올해 첫 황사…내일 밤부터 일요일까지 전국에 영향" | ||
"[출력]: ['제주 낮최고 22.5도 포근…산간 호우 예비특보','의사의 거짓말, 가짜 건강상식 폭로된다...전문가 경고','찾아가는 시문학 공연, 지역 도서관서 개최...문학의 계절'," | ||
"'백제트, 노김 피손민 신곡 발표...팬들 기대감 고조','3·1 운동 기념 스님 재조명...독립운동 정신 계승']\n\n" | ||
f"[입력]: {text}\n" | ||
"[출력]:" | ||
) | ||
messages = [ | ||
{ | ||
"role": "system", | ||
"content": ( | ||
"당신은 엄격한 규칙을 따르는 한국어 뉴스 기사 제목 생성 시스템입니다." | ||
" 반드시 [출력]: 형식으로만 응답해야 하며, 어떠한 추가 설명도 하지 않습니다." | ||
), | ||
}, | ||
{"role": "user", "content": prompt}, | ||
] | ||
return messages |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
import pandas as pd | ||
from pororo import Pororo | ||
from tqdm import tqdm | ||
|
||
|
||
""" | ||
Pororo 라이브러리를 사용하여 문장을 다른 언어로 번역 후 다시 원래 언어로 번역하는 Back Translation(역번역) 작업을 수행 | ||
readme를 먼저 읽고 pororo 라이브러를 설치해야함. | ||
""" | ||
|
||
|
||
def back_translation(text, lang1, lang2, mt): | ||
trans_text = mt(text, src=lang1, tgt=lang2) | ||
backtrans_text = mt(trans_text, src=lang2, tgt=lang1) | ||
return backtrans_text | ||
|
||
|
||
def apply_back_translation(data_path, output_path, lang1="ko", lang2="en"): | ||
df = pd.read_csv(data_path) | ||
|
||
mt = Pororo(task="translation", lang="multi") | ||
|
||
tqdm.pandas() | ||
|
||
df["back_translation"] = df["text"].progress_apply(lambda x: back_translation(x, lang1=lang1, lang2=lang2, mt=mt)) | ||
|
||
df.to_csv(output_path, index=False, encoding="utf-8-sig") | ||
|
||
|
||
if __name__ == "__main__": | ||
data_path = "../data/pororo/data.csv" | ||
output_path = "../data/pororo/data_backtranslated.csv" | ||
apply_back_translation(data_path, output_path, lang1="ko", lang2="en") |
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -15,6 +15,7 @@ exclude = [ | |
"env", | ||
"venv", | ||
"**/*.ipynb", # Jupyter Notebook 파일 제외 | ||
"prompt*.py" | ||
] | ||
|
||
[tool.ruff.lint] | ||
|
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.