test commited on
Commit
872787c
·
1 Parent(s): 20f56bb

update: test파일이랑 원본파일 내용 변경

Browse files
Files changed (2) hide show
  1. 0903_ai_memo.py +62 -51
  2. 0903_ai_memo_test.py +51 -61
0903_ai_memo.py CHANGED
@@ -1,14 +1,10 @@
1
  # AI 학습/연구 메모 요약기
2
- # 기능: 사용자가 긴 글(논문 초록, 블로그 글, 수업 필기)을 입력 → LLaMA 모델로 핵심 요약 + 키워드 추출
3
- # 추가: OpenAPI로 사전/위키 검색해어려운 용어 간단 설명 붙여주
4
- # 결과: Gradio UI에서 "원문 / 요약 / 키워드 / 추가설명" 탭으로 보기
5
 
6
  # -*- coding: utf-8 -*-
7
  import gradio as gr
8
  from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
9
- from sklearn.feature_extraction.text import TfidfVectorizer
10
- import numpy as np
11
- import re
12
 
13
  # =========================
14
  # 1) 모델 로드 (한국어 요약)
@@ -18,72 +14,87 @@ summarizer_tokenizer = AutoTokenizer.from_pretrained(summarizer_model_name)
18
  summarizer_model = AutoModelForSeq2SeqLM.from_pretrained(summarizer_model_name)
19
 
20
  # =========================
21
- # 2) 키워드 추출 함수 (TF-IDF 기반)
22
  # =========================
23
- def extract_keywords_korean(text, top_n=5):
24
- # 한글 명사 중심 단어만 추출
25
- text = re.sub(r"[^가-힣\s]", "", text)
26
- stop_words = ['은','는','이','가','을','를','에','의','와','과','도','으로','까지','하다','있다','있음']
27
- vectorizer = TfidfVectorizer(stop_words=stop_words)
28
 
29
- try:
30
- X = vectorizer.fit_transform([text])
31
- except ValueError:
32
- return "키워드 추출 불가 (글이 너무 짧음)"
33
 
34
- indices = np.argsort(vectorizer.idf_)[::-1]
35
- features = vectorizer.get_feature_names_out()
36
- keywords = [features[i] for i in indices[:top_n]]
37
- return ", ".join(keywords)
38
-
39
- # =========================
40
- # 3) 요약 + 키워드 함수
41
- # =========================
42
- def summarize_and_extract_keywords(text):
43
- if not text.strip():
44
- return "원문을 입력하세요.", "", ""
45
-
46
- # -------------------------
47
- # 1) 요약
48
- # -------------------------
49
- inputs = summarizer_tokenizer(text, return_tensors="pt", max_length=512, truncation=True)
50
  summary_ids = summarizer_model.generate(
51
  inputs['input_ids'],
52
- max_length=200,
53
- min_length=50,
54
  num_beams=4,
55
- early_stopping=True
 
56
  )
57
  summary = summarizer_tokenizer.decode(summary_ids[0], skip_special_tokens=True)
 
58
 
59
- # -------------------------
60
- # 2) 키워드 추출
61
- # -------------------------
62
- keywords = extract_keywords_korean(text, top_n=5)
63
-
64
- return text, summary, keywords
 
 
 
 
 
 
 
 
65
 
66
  # =========================
67
- # 4) Gradio UI
68
  # =========================
69
  with gr.Blocks() as demo:
70
- gr.Markdown("## 📝 한국어 AI 요약 & 키워드 추출기")
71
 
72
- inp = gr.Textbox(lines=12, placeholder="여기에 한국어 텍스트를 붙여넣으세요.", label="원문 입력")
 
 
 
 
 
 
 
 
 
 
 
73
  btn = gr.Button("실행")
74
 
75
  with gr.Tabs():
76
  with gr.Tab("원문"):
77
- out_original = gr.Textbox(label="원문", lines=8)
78
  with gr.Tab("요약"):
79
- out_summary = gr.Textbox(label="요약", lines=8)
80
- with gr.Tab("키워드"):
81
- out_keywords = gr.Textbox(label="키워드", lines=4)
82
 
83
- btn.click(summarize_and_extract_keywords, inputs=inp, outputs=[out_original, out_summary, out_keywords])
 
 
 
 
84
 
85
  # =========================
86
- # 5) 실행
87
  # =========================
88
  if __name__ == "__main__":
89
- demo.launch()
 
 
1
  # AI 학습/연구 메모 요약기
2
+ # 기능: 사용자가 긴 글(논문 초록, 블로그 글, 수업 필기)을 입력 → LLaMA 모델로 핵심 요약
3
+ # 결과: Gradio UI에"원문 / 요약 탭으로
 
4
 
5
  # -*- coding: utf-8 -*-
6
  import gradio as gr
7
  from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
 
 
 
8
 
9
  # =========================
10
  # 1) 모델 로드 (한국어 요약)
 
14
  summarizer_model = AutoModelForSeq2SeqLM.from_pretrained(summarizer_model_name)
15
 
16
  # =========================
17
+ # 2) 요약 함수
18
  # =========================
19
+ def summarize_text(text, length_option="보통"):
20
+ text = text.strip()
 
 
 
21
 
22
+ # 짧은 글 예외 처리
23
+ if len(text) < 100:
24
+ return text
 
25
 
26
+ if length_option == "짧게":
27
+ max_len, min_len = 80, 30
28
+ else: # 보통
29
+ max_len, min_len = 200, 50
30
+
31
+ inputs = summarizer_tokenizer(
32
+ text,
33
+ return_tensors="pt",
34
+ max_length=1024,
35
+ truncation=True
36
+ )
 
 
 
 
 
37
  summary_ids = summarizer_model.generate(
38
  inputs['input_ids'],
39
+ max_length=max_len,
40
+ min_length=min_len,
41
  num_beams=4,
42
+ early_stopping=True,
43
+ no_repeat_ngram_size=3
44
  )
45
  summary = summarizer_tokenizer.decode(summary_ids[0], skip_special_tokens=True)
46
+ return summary
47
 
48
+ def summarize_and_process(text, length_option):
49
+ text = text.strip()
50
+ original_len = len(text)
51
+
52
+ if not text:
53
+ return "원문을 입력하세요.", ""
54
+
55
+ summary = summarize_text(text, length_option)
56
+ summary_len = len(summary)
57
+
58
+ out_original = f"{text}\n\n(총 글자수: {original_len})"
59
+ out_summary = f"{summary}\n\n(총 글자수: {summary_len})"
60
+
61
+ return out_original, out_summary
62
 
63
  # =========================
64
+ # 3) Gradio UI
65
  # =========================
66
  with gr.Blocks() as demo:
67
+ gr.Markdown("## 📝 한국어 AI 요약 (예시 입력해놨음)")
68
 
69
+ inp = gr.Textbox(
70
+ lines=12,
71
+ placeholder="여기에 한국어 텍스트를 붙여넣으세요. 100글자 이상",
72
+ label="원문 입력",
73
+ value="""트랜스포머 모델은 2017년에 소개된 딥러닝 모델로, 자연어 처리에서 큰 혁신을 가져왔다.
74
+ 이 모델은 셀프 어텐션(Self-Attention) 메커니즘을 사용하여 입력 시퀀스를 병렬로 처리할 수 있다.
75
+ 기존의 RNN과 달리 장기 의존성 문제를 효과적으로 해결할 수 있어 번역, 요약, 질문응답 등 다양한 NLP 태스크에서 우수한 성능을 보인다.
76
+ 트랜스포머 기반의 모델들은 이후 BERT, GPT, T5 등 여러 파생 모델의 기초가 되었으며, 현재 자연어 처리 연구에서 표준으로 자리 잡았다.
77
+ 이러한 발전 덕분에 챗봇, 기계번역, 자동 요약 등 실제 서비스에 바로 활용할 수 있는 수준까지 도달하였다."""
78
+ )
79
+
80
+ length_option = gr.Radio(["짧게", "보통"], label="요약 길이 선택", value="보통")
81
  btn = gr.Button("실행")
82
 
83
  with gr.Tabs():
84
  with gr.Tab("원문"):
85
+ out_original = gr.Textbox(label="원문 + 글자수", lines=8)
86
  with gr.Tab("요약"):
87
+ out_summary = gr.Textbox(label="요약 + 글자수", lines=8)
 
 
88
 
89
+ btn.click(
90
+ summarize_and_process,
91
+ inputs=[inp, length_option],
92
+ outputs=[out_original, out_summary]
93
+ )
94
 
95
  # =========================
96
+ # 4) 실행
97
  # =========================
98
  if __name__ == "__main__":
99
+ demo.launch(share=True)
100
+
0903_ai_memo_test.py CHANGED
@@ -1,10 +1,14 @@
1
  # AI 학습/연구 메모 요약기
2
- # 기능: 사용자가 긴 글(논문 초록, 블로그 글, 수업 필기)을 입력 → LLaMA 모델로 핵심 요약
3
- # 결과: Gradio UI에"원문 / 요약 탭으로
 
4
 
5
  # -*- coding: utf-8 -*-
6
  import gradio as gr
7
  from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
 
 
 
8
 
9
  # =========================
10
  # 1) 모델 로드 (한국어 요약)
@@ -14,86 +18,72 @@ summarizer_tokenizer = AutoTokenizer.from_pretrained(summarizer_model_name)
14
  summarizer_model = AutoModelForSeq2SeqLM.from_pretrained(summarizer_model_name)
15
 
16
  # =========================
17
- # 2) 요약 함수
18
  # =========================
19
- def summarize_text(text, length_option="보통"):
20
- text = text.strip()
 
 
 
21
 
22
- # 짧은 글 예외 처리
23
- if len(text) < 100:
24
- return text
 
25
 
26
- if length_option == "짧게":
27
- max_len, min_len = 80, 30
28
- else: # 보통
29
- max_len, min_len = 200, 50
30
-
31
- inputs = summarizer_tokenizer(
32
- text,
33
- return_tensors="pt",
34
- max_length=1024,
35
- truncation=True
36
- )
 
 
 
 
 
37
  summary_ids = summarizer_model.generate(
38
  inputs['input_ids'],
39
- max_length=max_len,
40
- min_length=min_len,
41
  num_beams=4,
42
- early_stopping=True,
43
- no_repeat_ngram_size=3
44
  )
45
  summary = summarizer_tokenizer.decode(summary_ids[0], skip_special_tokens=True)
46
- return summary
47
 
48
- def summarize_and_process(text, length_option):
49
- text = text.strip()
50
- original_len = len(text)
51
-
52
- if not text:
53
- return "원문을 입력하세요.", ""
54
-
55
- summary = summarize_text(text, length_option)
56
- summary_len = len(summary)
57
-
58
- out_original = f"{text}\n\n(총 글자수: {original_len})"
59
- out_summary = f"{summary}\n\n(총 글자수: {summary_len})"
60
-
61
- return out_original, out_summary
62
 
63
  # =========================
64
- # 3) Gradio UI
65
  # =========================
66
  with gr.Blocks() as demo:
67
- gr.Markdown("## 📝 한국어 AI 요약 (예시 입력해놨음)")
68
 
69
- inp = gr.Textbox(
70
- lines=12,
71
- placeholder="여기에 한국어 텍스트를 붙여넣으세요. 100글자 이상",
72
- label="원문 입력",
73
- value="""트랜스포머 모델은 2017년에 소개된 딥러닝 모델로, 자연어 처리에서 큰 혁신을 가져왔다.
74
- 이 모델은 셀프 어텐션(Self-Attention) 메커니즘을 사용하여 입력 시퀀스를 병렬로 처리할 수 있다.
75
- 기존의 RNN과 달리 장기 의존성 문제를 효과적으로 해결할 수 있어 번역, 요약, 질문응답 등 다양한 NLP 태스크에서 우수한 성능을 보인다.
76
- 트랜스포머 기반의 모델들은 이후 BERT, GPT, T5 등 여러 파생 모델의 기초가 되었으며, 현재 자연어 처리 연구에서 표준으로 자리 잡았다.
77
- 이러한 발전 덕분에 챗봇, 기계번역, 자동 요약 등 실제 서비스에 바로 활용할 수 있는 수준까지 도달하였다."""
78
- )
79
-
80
- length_option = gr.Radio(["짧게", "보통"], label="요약 길이 선택", value="보통")
81
  btn = gr.Button("실행")
82
 
83
  with gr.Tabs():
84
  with gr.Tab("원문"):
85
- out_original = gr.Textbox(label="원문 + 글자수", lines=8)
86
  with gr.Tab("요약"):
87
- out_summary = gr.Textbox(label="요약 + 글자수", lines=8)
 
 
88
 
89
- btn.click(
90
- summarize_and_process,
91
- inputs=[inp, length_option],
92
- outputs=[out_original, out_summary]
93
- )
94
 
95
  # =========================
96
- # 4) 실행
97
  # =========================
98
  if __name__ == "__main__":
99
- demo.launch(share=True)
 
1
  # AI 학습/연구 메모 요약기
2
+ # 기능: 사용자가 긴 글(논문 초록, 블로그 글, 수업 필기)을 입력 → LLaMA 모델로 핵심 요약 + 키워드 추출
3
+ # 추가: OpenAPI로 사전/위키 검색해어려운 용어 간단 설명 붙여주
4
+ # 결과: Gradio UI에서 "원문 / 요약 / 키워드 / 추가설명" 탭으로 보기
5
 
6
  # -*- coding: utf-8 -*-
7
  import gradio as gr
8
  from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
9
+ from sklearn.feature_extraction.text import TfidfVectorizer
10
+ import numpy as np
11
+ import re
12
 
13
  # =========================
14
  # 1) 모델 로드 (한국어 요약)
 
18
  summarizer_model = AutoModelForSeq2SeqLM.from_pretrained(summarizer_model_name)
19
 
20
  # =========================
21
+ # 2) 키워드 추출 함수 (TF-IDF 기반)
22
  # =========================
23
+ def extract_keywords_korean(text, top_n=5):
24
+ # 한글 명사 중심 단어만 추출
25
+ text = re.sub(r"[^가-힣\s]", "", text)
26
+ stop_words = ['은','는','이','가','을','를','에','의','와','과','도','으로','까지','하다','있다','있음']
27
+ vectorizer = TfidfVectorizer(stop_words=stop_words)
28
 
29
+ try:
30
+ X = vectorizer.fit_transform([text])
31
+ except ValueError:
32
+ return "키워드 추출 불가 (글이 너무 짧음)"
33
 
34
+ indices = np.argsort(vectorizer.idf_)[::-1]
35
+ features = vectorizer.get_feature_names_out()
36
+ keywords = [features[i] for i in indices[:top_n]]
37
+ return ", ".join(keywords)
38
+
39
+ # =========================
40
+ # 3) 요약 + 키워드 함수
41
+ # =========================
42
+ def summarize_and_extract_keywords(text):
43
+ if not text.strip():
44
+ return "원문을 입력하세요.", "", ""
45
+
46
+ # -------------------------
47
+ # 1) 요약
48
+ # -------------------------
49
+ inputs = summarizer_tokenizer(text, return_tensors="pt", max_length=512, truncation=True)
50
  summary_ids = summarizer_model.generate(
51
  inputs['input_ids'],
52
+ max_length=200,
53
+ min_length=50,
54
  num_beams=4,
55
+ early_stopping=True
 
56
  )
57
  summary = summarizer_tokenizer.decode(summary_ids[0], skip_special_tokens=True)
 
58
 
59
+ # -------------------------
60
+ # 2) 키워드 추출
61
+ # -------------------------
62
+ keywords = extract_keywords_korean(text, top_n=5)
63
+
64
+ return text, summary, keywords
 
 
 
 
 
 
 
 
65
 
66
  # =========================
67
+ # 4) Gradio UI
68
  # =========================
69
  with gr.Blocks() as demo:
70
+ gr.Markdown("## 📝 한국어 AI 요약 & 키워드 추출기")
71
 
72
+ inp = gr.Textbox(lines=12, placeholder="여기에 한국어 텍스트를 붙여넣으세요.", label="���문 입력")
 
 
 
 
 
 
 
 
 
 
 
73
  btn = gr.Button("실행")
74
 
75
  with gr.Tabs():
76
  with gr.Tab("원문"):
77
+ out_original = gr.Textbox(label="원문", lines=8)
78
  with gr.Tab("요약"):
79
+ out_summary = gr.Textbox(label="요약", lines=8)
80
+ with gr.Tab("키워드"):
81
+ out_keywords = gr.Textbox(label="키워드", lines=4)
82
 
83
+ btn.click(summarize_and_extract_keywords, inputs=inp, outputs=[out_original, out_summary, out_keywords])
 
 
 
 
84
 
85
  # =========================
86
+ # 5) 실행
87
  # =========================
88
  if __name__ == "__main__":
89
+ demo.launch()