Update app.py
Browse files
app.py
CHANGED
@@ -187,34 +187,36 @@ def preprocess_text_with_llm(input_text: str) -> str:
|
|
187 |
1. 출력 형식: id,text,label,metadata
|
188 |
2. id: 1부터 시작하는 순차적 번호
|
189 |
3. text: 의미 있는 단위로 분리된 텍스트
|
190 |
-
4. label: 텍스트의 주제나 카테고리를
|
191 |
-
-
|
192 |
-
-
|
193 |
-
-
|
194 |
-
- Health (건강)
|
195 |
-
- Entertainment (엔터테인먼트)
|
196 |
-
- Business (비즈니스)
|
197 |
-
- Safety (안전)
|
198 |
-
- Culture (문화)
|
199 |
- Politics (정치)
|
200 |
-
-
|
201 |
5. metadata: 날짜, 출처 등 추가 정보
|
202 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
주의사항:
|
204 |
- text에 쉼표가 있으면 큰따옴표로 감싸기
|
205 |
- 큰따옴표는 백슬래시로 이스케이프 처리
|
206 |
- 각 행은 새로운 줄로 구분
|
207 |
-
-
|
208 |
-
- text와 label은 서로 다른 내용이어야 함"""
|
209 |
|
210 |
-
full_prompt = f"{system_prompt}\n\n{input_text}\n\n출력:"
|
211 |
|
212 |
try:
|
213 |
response = ""
|
214 |
stream = hf_client.text_generation(
|
215 |
prompt=full_prompt,
|
216 |
max_new_tokens=4000,
|
217 |
-
temperature=0.
|
218 |
top_p=0.9,
|
219 |
stream=True,
|
220 |
)
|
@@ -223,11 +225,24 @@ def preprocess_text_with_llm(input_text: str) -> str:
|
|
223 |
if msg:
|
224 |
response += msg
|
225 |
|
226 |
-
# <EOS_TOKEN> 이전까지만
|
227 |
if "<EOS_TOKEN>" in response:
|
228 |
processed_text = response.split("<EOS_TOKEN>")[0].strip()
|
229 |
else:
|
230 |
processed_text = response.strip()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
|
232 |
# CSV 형식 검증
|
233 |
try:
|
@@ -436,7 +451,7 @@ with gr.Blocks(css=css) as demo:
|
|
436 |
outputs=[convert_status, parquet_preview_convert, download_parquet_convert]
|
437 |
)
|
438 |
|
439 |
-
#
|
440 |
with gr.Tab("Text Preprocessing with LLM"):
|
441 |
gr.Markdown("### 텍스트를 입력하면 LLM이 데이터셋 형식에 맞게 전처리하여 출력합니다.")
|
442 |
with gr.Row():
|
@@ -450,7 +465,7 @@ with gr.Blocks(css=css) as demo:
|
|
450 |
with gr.Row():
|
451 |
preprocess_button = gr.Button("전처리 실행", variant="primary")
|
452 |
clear_button = gr.Button("초기화")
|
453 |
-
|
454 |
preprocess_status = gr.Textbox(
|
455 |
label="전처리 상태",
|
456 |
interactive=False,
|
@@ -464,12 +479,11 @@ with gr.Blocks(css=css) as demo:
|
|
464 |
)
|
465 |
|
466 |
# Parquet 변환 및 다운로드 섹션
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
)
|
473 |
|
474 |
def handle_text_preprocessing(input_text: str):
|
475 |
if not input_text.strip():
|
|
|
187 |
1. 출력 형식: id,text,label,metadata
|
188 |
2. id: 1부터 시작하는 순차적 번호
|
189 |
3. text: 의미 있는 단위로 분리된 텍스트
|
190 |
+
4. label: 텍스트의 주제나 카테고리를 아래 기준으로 정확하게 한 개만 선택
|
191 |
+
- Historical_Figure (역사적 인물)
|
192 |
+
- Military_History (군사 역사)
|
193 |
+
- Technology (기술)
|
|
|
|
|
|
|
|
|
|
|
194 |
- Politics (정치)
|
195 |
+
- Culture (문화)
|
196 |
5. metadata: 날짜, 출처 등 추가 정보
|
197 |
|
198 |
+
중요:
|
199 |
+
- 동일한 텍스트를 반복해서 출력하지 말 것
|
200 |
+
- 각 텍스트는 한 번만 처리하여 가장 적합한 label을 선택할 것
|
201 |
+
- 입력 텍스트를 의미 단위로 적절히 분리할 것
|
202 |
+
|
203 |
+
예시:
|
204 |
+
1,"이순신은 조선 중기의 무신이다.","Historical_Figure","조선시대, 위키백과"
|
205 |
+
|
206 |
주의사항:
|
207 |
- text에 쉼표가 있으면 큰따옴표로 감싸기
|
208 |
- 큰따옴표는 백슬래시로 이스케이프 처리
|
209 |
- 각 행은 새로운 줄로 구분
|
210 |
+
- 불필요한 반복 출력 금지"""
|
|
|
211 |
|
212 |
+
full_prompt = f"{system_prompt}\n\n입력텍스트:\n{input_text}\n\n출력:"
|
213 |
|
214 |
try:
|
215 |
response = ""
|
216 |
stream = hf_client.text_generation(
|
217 |
prompt=full_prompt,
|
218 |
max_new_tokens=4000,
|
219 |
+
temperature=0.1, # 더 결정적인 출력을 위해 낮춤
|
220 |
top_p=0.9,
|
221 |
stream=True,
|
222 |
)
|
|
|
225 |
if msg:
|
226 |
response += msg
|
227 |
|
228 |
+
# <EOS_TOKEN> 이전까지만 추출하고 정제
|
229 |
if "<EOS_TOKEN>" in response:
|
230 |
processed_text = response.split("<EOS_TOKEN>")[0].strip()
|
231 |
else:
|
232 |
processed_text = response.strip()
|
233 |
+
|
234 |
+
# 중복 출력 제거
|
235 |
+
lines = processed_text.split('\n')
|
236 |
+
unique_lines = []
|
237 |
+
seen_texts = set()
|
238 |
+
|
239 |
+
for line in lines:
|
240 |
+
line = line.strip()
|
241 |
+
if line and '출력:' not in line and line not in seen_texts:
|
242 |
+
unique_lines.append(line)
|
243 |
+
seen_texts.add(line)
|
244 |
+
|
245 |
+
processed_text = '\n'.join(unique_lines)
|
246 |
|
247 |
# CSV 형식 검증
|
248 |
try:
|
|
|
451 |
outputs=[convert_status, parquet_preview_convert, download_parquet_convert]
|
452 |
)
|
453 |
|
454 |
+
# 네번째 탭의 UI 부분 수정
|
455 |
with gr.Tab("Text Preprocessing with LLM"):
|
456 |
gr.Markdown("### 텍스트를 입력하면 LLM이 데이터셋 형식에 맞게 전처리하여 출력합니다.")
|
457 |
with gr.Row():
|
|
|
465 |
with gr.Row():
|
466 |
preprocess_button = gr.Button("전처리 실행", variant="primary")
|
467 |
clear_button = gr.Button("초기화")
|
468 |
+
|
469 |
preprocess_status = gr.Textbox(
|
470 |
label="전처리 상태",
|
471 |
interactive=False,
|
|
|
479 |
)
|
480 |
|
481 |
# Parquet 변환 및 다운로드 섹션
|
482 |
+
convert_to_parquet_button = gr.Button("Parquet으로 변환")
|
483 |
+
download_parquet = gr.File(label="변환된 Parquet 파일 다운로드")
|
484 |
+
|
485 |
+
|
486 |
+
|
|
|
487 |
|
488 |
def handle_text_preprocessing(input_text: str):
|
489 |
if not input_text.strip():
|