-
Notifications
You must be signed in to change notification settings - Fork 0
/
text_to_X.qmd
905 lines (627 loc) · 58.7 KB
/
text_to_X.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
# 활용사례
## 논문 초록
제주대 안도현 교수가 페이스북에 공개한 챗GPT를 활용한 논문 초록 작성 비법은 영문초록을 효과적으로 빠른 시간내에 방법하는 방법을 제시하고 있다. 작업흐름과 지시명령어(Prompt)를 포함한 비법은 해외 학술지 작성에 영어초록이 필요하신 분들께 큰 도움이 될 것이다. 특히, 영문초록 작성은 국문 학술지에 논문을 제출할 때 중요한 요소 중 하나로, 논문의 국제적 가시성을 높이는 데도 기여할 것이다.
[딥엘(DeepL)](https://www.deepl.com)과 챗GPT를 이용하면 학술지 영문초록 작성 과정에서 영문 교정을 크게 줄일 수 있다. 딥엘과 챗GPT를 활용하여 문법적으로 정확하고 의미론적으로 일관된 텍스트를 생성할 수 있어 전문 영문 교정 서비스를 이용하지 않아도 높은 품질의 영문초록을 작성할 수 있어 시간과 비용을 크게 줄일 것으로 기대된다.
### 작업흐름
딥엘과 챗GPT를 활용한 학술지 영문초록 작성의 작업흐름은 다음과 같다. 먼저 국문초록을 작성한다. 이후 딥엘을 사용하여 국문초록을 영문으로 번역한다. 번역된 영문초록은 ChatGPT로 윤문을 진행한다. 이때, 프롬프트에 "Revise the abstract to follow APA style guidelines and ensure that it falls within the word count range of 400 to 500 words."라고 입력하여, APA 스타일 가이드라인을 따르고 단어 수가 400에서 500 단어 사이가 되도록 수정한다. 이렇게 하면 품질 높은 영문초록을 효율적으로 작성할 수 있다.
::: callout-important
## 딥엘과 챗GPT 학술지 영문초록 작성 작업흐름
1. 국문초록 작성
2. 딥엘로 국문을 영문으로 번역.
3. 번역한 영문을 ChatGPT로 윤문.
- 프롬프트에 다음과 같이 입력:
> Revise the abstract to follow APA style guidelines and ensure that it falls within the word count range of 400 to 500 words.
:::
### 사례
한글 초록 작성 후 딥엘을 사용하여 국문초록을 영어로 번역한다. 딥엘은 자연어 처리 기술을 활용하여 높은 정확도의 번역을 제공하므로, 이 단계에서 얻은 영어 초록은 대체로 문법적으로 정확하고 의미도 잘 전달된다. 다음으로, 챗GPT에 앞서 준비한 프롬프트에 딥엘로 번역한 영문초록을 더 자연스럽고 전문적으로 다듬도록 지시한다. "Revise the abstract below to follow APA style guidelines and ensure that it falls within the word count range of 400 to 500 words."
챗GPT는 프롬프트에 따라 영문초록을 윤문하는데 챗GPT 언어모형(GPT-3.5/GPT-4)은 문장 구조를 개선하고, 필요한 경우 전문 용어를 추가하며, 전반적으로 더 자연스럽고 전문적인 표현을 사용하여 초록을 다듬는다. 완성된 영문초록은 원래의 한글초록이 가진 의미를 정확하게 전달하면서도, 국제 학술지에 제출하기에 적합한 수준의 언어와 구조를 갖추게 된다. 이 과정을 2020년에 출간된 논문[@lee2020]의 한글 초록에 적용하여 실제 저자가 작성한 영문 초록과 비교해보자. [^text_to_x-1]
[^text_to_x-1]: 논문 소스코드 [바로가기](https://statkclee.github.io/comp_document/automation-kasdba.html), PDF 출판 논문 [다운로드](https://statkclee.github.io/comp_document/data/00006_002_39.pdf)
::: {.callout-tip appearance="simple"}
### 1. 한글 초록 원문
알파고가 2016년 바둑 인간 챔피언 이세돌 9단을 현격한 기량차이로 격파하면서 인공지능에 대한 관심이 급격히 증가하였다. 그와 동시에 기계가 인간의 일자리 잠식을 가속화하면서 막연한 불안감이 삽시간에 전파되었다. 기계와의 일자리 경쟁은 컴퓨터의 출현이전부터 시작되었지만 인간만의 고유한 영역으로 알고 있던 인지, 창작 등 다양한 분야에서 오히려 인간보다 더 우수한 성능과 저렴한 가격 경쟁력을 보여주면서 기존 인간의 일자리가 기계에 대체되는 것이 가시권에 들었다. 이번 문헌조사와 실증 데이터 분석을 통해서 기계가 인간의 일자리를 대체하는 자동화의 본질에 대해서 살펴보고, 인간과 기계의 업무 분장을 통해 더 생산성을 높일 수 있는 방안을 제시하고자 한다.
:::
::: {.callout-tip appearance="simple"}
### 2. 딥엘 영문초록 번역
Interest in artificial intelligence skyrocketed in 2016 when AlphaGo defeated human Go champion Lee Sedol 9 by a stunning margin. At the same time, a vague sense of anxiety was quickly spread as machines accelerated the erosion of human jobs. Although the competition for jobs with machines began before the advent of computers, the replacement of existing human jobs by machines became visible as machines showed better performance and lower price competitiveness than humans in various fields such as cognition and creation, which were thought to be unique to humans. Through this literature review and empirical data analysis, we examine the nature of automation in which machines replace human jobs. and suggest ways to increase productivity through the division of labor between humans and machines.
Translated with www.DeepL.com/Translator (free version)
:::
::: {.callout-tip appearance="simple"}
### 3. 챗GPT 프롬프트
Revise the abstract to follow APA style guidelines and ensure that it falls within the word count range of 400 to 500 words.
Interest in artificial intelligence skyrocketed in 2016 when AlphaGo defeated human Go champion Lee Sedol 9 by a stunning margin. At the same time, a vague sense of anxiety was quickly spread as machines accelerated the erosion of human jobs. Although the competition for jobs with machines began before the advent of computers, the replacement of existing human jobs by machines became visible as machines showed better performance and lower price competitiveness than humans in various fields such as cognition and creation, which were thought to be unique to humans. Through this literature review and empirical data analysis, we examine the nature of automation in which machines replace human jobs. and suggest ways to increase productivity through the division of labor between humans and machines.
:::
::: columns
::: {.column width="54.5%"}
**챗GPT 윤문한 영문초록**
The rise of artificial intelligence (AI) has garnered significant attention since 2016 when AlphaGo, an AI program, defeated the human Go champion Lee Sedol. However, the growing use of machines in various fields has also fueled concerns about the displacement of human jobs. This paper presents a literature review and empirical data analysis to explore the nature of automation and suggest ways to enhance productivity by optimizing the division of labor between humans and machines.
While machines have been replacing human jobs for centuries, the rapid development of AI has made it possible for machines to outperform humans in fields previously considered uniquely human, such as cognition and creation. As a result, there is a growing awareness of the impact of automation on employment opportunities. This paper aims to provide insights into this issue through a comprehensive review of relevant literature and analysis of empirical data.
Our analysis indicates that automation can lead to the displacement of jobs that require low-level skills, but it can also create new opportunities that require higher-level skills. Furthermore, automation can enhance productivity and lower costs, thus benefiting both consumers and firms. Therefore, there is a need to strike a balance between the potential benefits and challenges of automation.
To maximize the advantages of automation, we propose an optimal division of labor between humans and machines. In this approach, humans are responsible for tasks that require creativity, emotional intelligence, and social skills, while machines are responsible for tasks that require precision and efficiency. This approach can lead to better job quality and increased productivity.
In conclusion, this paper highlights the potential impact of automation on employment and the need to optimize the division of labor between humans and machines. While automation can lead to job displacement, it can also create new opportunities and improve job quality. Therefore, policymakers and firms must consider ways to optimize the use of automation to benefit both society and the economy.
:::
::: {.column width="1%"}
:::
::: {.column width="44.5%"}
**영문초록 원문**
Machines have been used simply for arithmetic operations and documentation. However, with the development of technology, a new generation of artificial intelligence has begun. Machines are not just tools that can be calculated, but they have been commercialized in various fields, such as natural language processing technology that can understand and communicate human language, or video fields, where human dependence was high. Since 2016, the AI game, "Alphago," has defeated Lee Se-dol with a significant difference in skill, interest in AI has increased sharply. Machines have started to replace human jobs because of their excellent performance, low cost and competitive edge. In this paper, I would like to present a plan on how to use artificial intelligence to affect human jobs and how to improve productivity effectively by cooperating with machines and humans in the future.
:::
:::
영문초록을 비교하면, 챗GPT로 윤문한 영문초록이 원문보다 더 구조적이고 상세하다는 것을 알 수 있다. 챗GPT 초록은 문제 정의부터 해결 방안까지 체계적으로 다루고 있으며, 인공지능과 인간 노동 간의 최적의 역할 분배에 대한 구체적인 제안까지 포함하고 있지만, 원문 초록은 비교적 간단하고 일반적인 내용만을 다루고 있다. 원문은 인공지능이 인간의 일자리에 어떤 영향을 미칠 수 있는지와 미래에 어떻게 협력할 수 있는지에 대한 개요를 제공하지만, 구체적인 분석이나 제안은 부족하다.
## 계산기 프로그램
계산기 프로그램은 사용자가 입력한 사칙연산을 수행하고 결과를 출력하는 프로그램이지만, 간단한 계산기 프로그램을 각 언어로 작성하는 것은 프로그래밍 학습 첫 걸음으로 시간이 많이 걸리고 어려운 작업이었다. 하지만, 챗GPT를 활용하면 간단한 계산기 프로그램을 다양한 환경에서 손쉽게 작성할 수 있다.
![계산기 프로그램](images/calculator.jpg)
가장 기본적인 형태는 명령줄 인터페이스(Command Line Interface, CLI)를 사용하는 것으로 CLI 계산기는 텍스트 기반의 인터페이스를 제공하며, 사용자가 키보드를 통해 연산자와 피연산자를 입력하기 때문에 간단하고 빠르게 프로토타입을 만들 수 있는 장점이 있다.
그래픽 사용자 인터페이스(Graphical User Interface, GUI)를 활용한 계산기를 고려할 수 있다. GUI 계산기는 사용자에게 더 직관적인 경험을 제공하며, 버튼과 메뉴를 통해 다양한 연산을 쉽게 수행하기 때문에 사용자 친화적이지만, 디자인과 이벤트 처리 로직을 구현해야 하므로 개발이 복잡할 수 있다.
웹 기반 계산기는 인터넷 브라우저를 통해 접근할 수 있으며, HTML, CSS, JavaScript를 사용하여 구현되기 때문에 운영체제에 구애받지 않아 한번 개발하면 어디서든 활용이 가능하다.
모바일 앱 계산기는 다른 모바일 앱처럼 스마트폰과 태블릿 등의 휴대용 기기에서 실행되며, 사용자가 언제 어디서든 계산 작업을 수행할 수 있는 편리함을 제공한다.
언어 사용자 인터페이스(Language User Interface, LUI) 계산기는 음성 인식 기술을 활용하여 사용자가 음성 명령으로 계산을 수행할 수 있어 운전 중이거나 손이 자유롭지 않은 상황에서도 유용하다.
### CLI 계산기
CLI 계산기는 사용자가 키보드를 통해 연산자와 피연산자를 입력하고, 결과를 텍스트로 출력하는 계산기로 프롬프트를 `write python code of calculator`와 같이 작성하면 계산기 파이썬 코드를 작성해준다. 사용자가 할 일은 파이썬 언어를 컴퓨터에 설치한 다음 프롬프트에 입력한 코드를 복사하여 파일로 저장한 후 실행하면 된다.
#### 프롬프트 작성
평소 사용하는 프로그래밍 언어가 있다면 해당 언어를 선택하고, 처음 프로그래밍을 접하는 사람이라면 파이썬을 선택하는 것이 좋다. 파이썬은 배우기 쉽고, 다양한 분야에서 활용되는 인기있는 언어이다. 프롬프트는 `write python code of calculator`와 같이 작성하면 된다.
::: callout-note
### 프롬프트: write python code of calculator
```{python}
#| eval: false
#| echo: true
# Simple calculator program
# Function to add two numbers
def add(x, y):
return x + y
# Function to subtract two numbers
def subtract(x, y):
return x - y
# Function to multiply two numbers
def multiply(x, y):
return x * y
# Function to divide two numbers
def divide(x, y):
return x / y
# Display menu
print("Select operation.")
print("1. Add")
print("2. Subtract")
print("3. Multiply")
print("4. Divide")
# Take input from the user
choice = input("Enter choice (1/2/3/4): ")
num1 = float(input("Enter first number: "))
num2 = float(input("Enter second number: "))
# Perform operation based on user's choice
if choice == '1':
print(num1, "+", num2, "=", add(num1, num2))
elif choice == '2':
print(num1, "-", num2, "=", subtract(num1, num2))
elif choice == '3':
print(num1, "*", num2, "=", multiply(num1, num2))
elif choice == '4':
print(num1, "/", num2, "=", divide(num1, num2))
else:
print("Invalid input")
```
:::
#### 실행 프롬프트
프롬프트를 작성한 후에는 프로그램을 실행할 수 있는 프롬프트를 작성해야 한다. 프롬프트는 `run python code of calculator`와 같이 작성하면 된다. 챗GPT가 작성한 파이썬 계산기 프로그램을 실행하는 방법을 상세히 알려주어 사용자가 따라하면 된다.
::: callout-note
### how to run this python code
Python 코드를 실행하려면 시스템에 Python이 설치되어 있어야 합니다. 다음 단계에 따라 간단한 계산기를 위한 Python 코드를 실행할 수 있습니다:
1. 메모장이나 서브라인 텍스트와 같은 텍스트 편집기를 열고 Python 코드를 새 파일에 붙여넣습니다.
2. 파일 확장명을 .py로 지정하여 저장합니다(예: calculator.py).
3. 터미널 또는 명령 프롬프트 창을 엽니다.
4. `cd` 명령을 사용하여 파일이 저장된 디렉토리로 이동합니다(예: `cd Documents\Python`).
5. `python calculator.py`를 입력하고 Enter 키를 눌러 프로그램을 실행합니다.
그러면 프로그램이 실행되고 메뉴가 표시되며 사용자에게 원하는 연산과 숫자 두 개를 입력하라는 메시지가 표시됩니다. 사용자가 필요한 입력을 입력하면 프로그램이 해당 산술 연산을 수행하고 결과를 표시합니다.
:::
#### 계산기 실행
터미널 또는 명령 프롬프트 창을 열고, `cd` 명령을 사용하여 파일이 저장된 디렉토리로 이동한다. 파일이 `D:\tcs\chatGPT\code` 폴더에 저장되어 있다면 `cd D:\tcs\chatGPT\code`을 입력한다. 디렉토리로 이동한 후에는 `python calculator.py`를 입력하고 엔터(Enter) 키를 눌르게 되면 파이썬으로 작성된 계산기 프로그램이 실행된다.
![CLI 파이썬 프로그램](images/calculator_cli.jpg){fig-align="center" width="387"}
### GUI 계산기
계산기에 그래픽 사용자 인터페이스(GUI)를 추가하여 사용자가 더욱 편리하게 이용할 수 있도록 개선한다. 다양한 GUI 라이브러리가 존재하지만, 여기서는 `tkinter` 패키지를 선택하여 개발을 진행한다.
#### 프롬프트 작성
챗GPT에 파이썬 언어로 계산기 프로그램을 작성하라는 지시명령어를 내린다. 지시명령어는 `please add gui with tkinter`와 같이 작성하면 된다. CLI 계산기 프로그램보다 GUI 계산기는 사용자에게는 편리하지만 개발해야 되는 코드는 더욱 복잡해진다.
::: {.callout-note collapse="false"}
### please add gui with tkinter
Sure, here is an example of the same calculator program using the Tkinter library to create a graphical user interface (GUI):
...
In this code, we first import the Tkinter library using the alias tk. Then we define four functions add(), subtract(), multiply(), and divide() that perform the corresponding arithmetic operations on the numbers entered by the user. Each function retrieves the input values from the Entry widgets using the get() method, performs the arithmetic operation, and updates the text of the Label widget to display the result.
We then create the main window using the Tk() constructor and set its title using the title() method. Next, we create two Label widgets and two Entry widgets to allow the user to enter the two numbers.
We also create four Button widgets, one for each arithmetic operation, and set their text and width. The command parameter is used to specify the function that should be called when the button is clicked.
Finally, we create a Label widget to display the result of the arithmetic operation, and call the mainloop() method to start the event loop and display the GUI.
```{python}
#| eval: false
#| echo: true
import tkinter as tk
# Function to perform addition
def add():
try:
num1 = float(entry_num1.get())
num2 = float(entry_num2.get())
result = num1 + num2
label_result.config(text="Result: " + str(result))
except ValueError:
label_result.config(text="Invalid input")
# Function to perform subtraction
def subtract():
try:
num1 = float(entry_num1.get())
num2 = float(entry_num2.get())
result = num1 - num2
label_result.config(text="Result: " + str(result))
except ValueError:
label_result.config(text="Invalid input")
# Function to perform multiplication
def multiply():
try:
num1 = float(entry_num1.get())
num2 = float(entry_num2.get())
result = num1 * num2
label_result.config(text="Result: " + str(result))
except ValueError:
label_result.config(text="Invalid input")
# Function to perform division
def divide():
try:
num1 = float(entry_num1.get())
num2 = float(entry_num2.get())
result = num1 / num2
label_result.config(text="Result: " + str(result))
except ValueError:
label_result.config(text="Invalid input")
except ZeroDivisionError:
label_result.config(text="Cannot divide by zero")
# Create the main window
window = tk.Tk()
window.title("Simple Calculator")
# Create the number input fields
label_num1 = tk.Label(window, text="Number 1:")
label_num1.pack()
entry_num1 = tk.Entry(window)
entry_num1.pack()
label_num2 = tk.Label(window, text="Number 2:")
label_num2.pack()
entry_num2 = tk.Entry(window)
entry_num2.pack()
# Create the operation buttons
button_add = tk.Button(window, text="+", width=10, command=add)
button_add.pack()
button_subtract = tk.Button(window, text="-", width=10, command=subtract)
button_subtract.pack()
button_multiply = tk.Button(window, text="*", width=10, command=multiply)
button_multiply.pack()
button_divide = tk.Button(window, text="/", width=10, command=divide)
button_divide.pack()
# Create the result label
label_result = tk.Label(window, text="Result: ")
label_result.pack()
# Run the main loop
window.mainloop()
```
#### GUI 계산기 실행
CLI 계산기 실행방식과 동일하게 `how to run this python code` 지시명령어를 통해 GUI 계산기를 실행하는 방법을 안내받아 작성한 GUI 계산기를 실행한다. 텍스트 편집기를 열어 파이썬 코드를 새 파일에 붙여넣는다. 파일을 `.py` 확장명으로 저장한다(예: `calculator.py`). 터미널이나 명령 프롬프트 창을 연다. `cd` 명령을 사용해 파일이 저장된 디렉토리로 이동한다(예: `cd D:\tcs\chatGPT\code`). 마지막으로 `python calculator.py`를 입력하고 엔터(Enter) 키를 눌러 프로그램을 실행한다.
![GUI 파이썬 프로그램](images/calculator_gui.jpg)
### 웹 계산기
웹 계산기는 CLI(Command Line Interface)나 GUI(Graphical User Interface) 계산기와 비교해보면, 웹 계산기는 브라우저를 통해 접근 가능하므로 별도의 설치 과정이 필요하지 않기 때문에 사용자가 쉽게 접근할 수 있어, 다양한 플랫폼에서 호환성을 보장한다. HTML, CSS, JavaScript와 같은 웹 표준 기술을 활용하여 UI를 구성할 수 있어 GUI 계산기에서 특정 라이브러리나 프레임워크에 의존성을 갖는 것과 대비된다.
CLI 계산기는 텍스트 기반의 인터페이스를 제공하므로 개발이 상대적으로 간단하고 빠르다. 하지만 사용자 친화적인 인터페이스를 제공하기 어렵다는 단점이 있다. GUI 계산기는 이러한 단점을 해결하며, 더 직관적인 사용자 경험을 제공하지만 GUI 라이브러리를 사용해야 하므로 개발 복잡성이 증가한다.
웹 계산기에 서버-클라이언트 아키텍처를 적용할 수 있어, 계산 로직을 서버에 둘 수도 있다. 서버에서 업데이트나 유지보수를 간편하게 할 수 있다는 것은 커다란 장점으로 CLI나 GUI 계산기 대부분 로컬에서 실행되어 이러한 장점을 누리기 어렵다.
#### 프롬프트 작성
챗GPT에 웹 계산기 프로그램을 작성하라는 지시명령어를 내린다. 지시명령어는 `웹 계산기 코드 작성해줘`와 같이 작성하면 된다. 챗GPT 초기 영문으로 프롬프트를 작성할 경우 더 좋은 코드가 나왔으나 간단한 코드 작성은 영문이나 국문이나 큰 차이가 나지 않는다.
::: {.callout-note collapse="false"}
### 웹 계산기 코드 작성해줘
웹 계산기를 만들기 위해 HTML, CSS, 그리고 JavaScript를 사용할 수 있다. 아래는 간단한 예시 코드다.
``` html
<!DOCTYPE html>
<html>
<head>
<title>Simple Calculator</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="calculator">
<input type="text" id="display" readonly>
<div class="buttons">
<button onclick="appendToDisplay('1')">1</button>
<button onclick="appendToDisplay('2')">2</button>
<button onclick="appendToDisplay('3')">3</button>
<button onclick="clearDisplay()">C</button>
<button onclick="appendToDisplay('4')">4</button>
<button onclick="appendToDisplay('5')">5</button>
<button onclick="appendToDisplay('6')">6</button>
<button onclick="appendToDisplay('+')">+</button>
<button onclick="appendToDisplay('7')">7</button>
<button onclick="appendToDisplay('8')">8</button>
<button onclick="appendToDisplay('9')">9</button>
<button onclick="appendToDisplay('-')">-</button>
<button onclick="appendToDisplay('0')">0</button>
<button onclick="calculate()">=</button>
<button onclick="appendToDisplay('*')">*</button>
<button onclick="appendToDisplay('/')">/</button>
</div>
</div>
<script src="script.js"></script>
</body>
</html>
```
CSS (styles.css)
``` css
.calculator {
width: 300px;
margin: auto;
border: 1px solid black;
border-radius: 5px;
padding: 20px;
box-shadow: 0px 0px 10px gray;
}
.buttons {
display: grid;
grid-template-columns: repeat(4, 1fr);
}
button {
width: 68px;
height: 68px;
font-size: 24px;
margin: 5px;
cursor: pointer;
}
input {
width: 95%;
font-size: 24px;
padding: 10px;
text-align: right;
margin-bottom: 20px;
}
```
JavaScript (script.js)
``` javascript
let currentInput = "";
let previousInput = "";
let operator = "";
function clearDisplay() {
currentInput = "";
previousInput = "";
operator = "";
document.getElementById("display").value = "";
}
function appendToDisplay(value) {
currentInput += value;
document.getElementById("display").value = currentInput;
}
function calculate() {
previousInput = parseFloat(previousInput);
currentInput = parseFloat(currentInput);
let result = 0;
switch (operator) {
case '+':
result = previousInput + currentInput;
break;
case '-':
result = previousInput - currentInput;
break;
case '*':
result = previousInput * currentInput;
break;
case '/':
if (currentInput !== 0) {
result = previousInput / currentInput;
} else {
alert("Cannot divide by zero");
clearDisplay();
return;
}
break;
default:
return;
}
document.getElementById("display").value = result;
previousInput = result;
currentInput = "";
}
```
이 코드를 index.html, styles.css, 그리고 script.js 파일로 각각 저장한 후, 웹 브라우저에서 index.html 파일을 열면 간단한 웹 계산기를 사용할 수 있다.
:::
#### 웹 계산기 실행
챗GPT에 웹 계산기를 실행하려면 웹 브라우져를 열고 index.html 파일을 열거나 `index.html` 파일을 파일탐색기로 찾아가서 두번 클릭하여 실행하면 웹브라워저가 열리면서 웹 계산기가 실행된다.
::: columns
::: {.column width="55%"}
```{python}
#| eval: false
#| echo: true
statkclee@dl MINGW32 /d/tcs/gpt-writing/code/calculator_web (main)
$ tree
.
|-- index.html
|-- script.js
`-- style.css
0 directories, 3 files
```
:::
::: {.column width="5%"}
:::
::: {.column width="40%"}
![웹 전자계산기](images/calculator_web.jpg)
:::
:::
## 이미지 생성
**TTI(텍스트-투-이미지)**는 텍스트를 입력으로 받아 그에 맞는 이미지를 생성하는 기술이다. 예를 들어, "해변에서 일몰을 보는 사람"이라는 프롬프트를 입력하면, 해당하는 일몰과 해변, 사람이 함께하는 이미지를 생성한다. 이런 방식으로, 사용자는 자신이 원하는 시나리오나 객체, 장면을 텍스트로 기술하면, TTI 알고리즘이 텍스트를 이미지로 변환한다. 이미지 생성은 GAN(Generative Adversarial Network)와 VAE(Variational Autoencoder) 같은 생성 모형의 발전을 통해 시작되었고 텍스트-이미지 모형은 컴퓨터 비전과 자연어 처리를 결합하면서 성큼 상용화에 가까워졌으며, 최근 GPT-3와 같은 언어 모형을 텍스트-이미지 모형에 적용하여 텍스트를 이미지로 변환하는 기술이 급속히 발전하고 있다.
![Text-to-Image 이미지 생성과정](images/anyang_t2i.jpg)
::: callout-note
### 텍스트에서 이미지로 진화
**프롬프트(Prompt)**는 이전에 학습된 모형 가중치(weight)를 새로운 맥락에서 재사용할 수 있는 메커니즘으로, 새롭게 등장한 극단적인 형태의 **전이학습(Transfer Learning)**으로 볼 수 있다. 수년 동안 자연어 처리(NLP) 작업에 특화된 모델을 개발하면서, 미리 학습된 가중치를 더 효율적으로 재사용하는 방법이 점차 발전해왔다. 2013년에 등장한 `word2vec`은 범용적인 단어 임베딩을 정적 라이브러리 형태로 제공하게 되면서, 이 임베딩을 다양한 NLP 모형의 입력으로 활용되기 시작했다.
2010년대 후반 ELMo와 BERT 같은 모형이 미세조정(Fine-Tuning) 기능을 도입함으로써 사전 학습된 모형의 전체 구조를 재활용하면서 특정 작업에 필요한 최소한의 가중치만 추가하는 방식이 자연어처리(NLP() 분야 표준이 되었다.
2020년에 등장한 GPT-3는 프롬프트를 통해 전이 학습의 새로운 장을 열었다. 이제 추가적인 매개변수나 재학습 없이도, 단순한 텍스트 입력만으로 거의 모든 NLP 작업을 수행할 수 있게 되었다. 이러한 NLP 모형뿐만 아니라 Stable Diffusion, DALL-E와 같은 텍스트-이미지 변환(Text-to-Image) 모형도 전이 학습 스펙트럼의 한 자리를 당당히 차지하고 있다. [@Turc_2022]
:::
### 뉴스 이미지 사례
TTI(Text-to-Image) 기술을 활용하여 뉴스기사에 적합한 이미지를 생성할 수 있다. 예를 들어, 뉴스기사 "[누리호, 힘차게 날아올랐다...美도 달성하지 못한 진기록](https://v.daum.net/v/20230525184307343)"에서는 한국이 독자 기술로 개발한 로켓 '누리호'가 성공적으로 발사되어 우주로 향한 것을 다루고 있다. 이러한 주제에 맞는 이미지를 TTI 기술을 통해 생성할 수 있다.
이미지 생성 엔진을 특정하고 적절한 텍스트 프롬프트를 입력하면, 해당 설명에 부합하는 이미지가 생성될 것이다. 뉴스기사에 실릴 이미지는 뉴스기사의 시각적인 요소를 풍부하게 해주며, 독자들이 기사의 내용을 더 쉽게 이해할 수 있게 도와준다. 하지만, 뉴스기사는 사실도 중요하기 때문에 필히 생성형 AI가 제작한 이미지라는 사실을 밝히고 독자의 이해를 돕기 위한 이미지라는 것을 명기해야 한다.
::: {.callout-note collapse="false"}
### 프롬프트: 아래 뉴스기사는 백틱기호(\`) 세개 사이에 담겨져 있습니다. 다음 뉴스기사를 이미지로 나타내기 위해 midjourney text prompt를 작성해세요.
``` html
누리호, 힘차게 날아올랐다…美도 달성하지 못한 진기록
김진원입력 2023. 5. 25. 18:43수정 2023. 5. 25. 21:14
한국이 독자 기술로 개발한 로켓 ‘누리호’가 25일 우주로 향했다. 실용위성을 탑재한 발사체를 쏘아 올린 첫 사례다. 누리호는 차세대 소형위성 2호를 목표 궤도인 고도 550㎞에 정확하게 올려놨다. 남극 세종기지에서 위성 신호를 정상 수신했다. 작년 6월 누리호 2차 발사에 이어 이번 3차 발사 프로젝트까지 성공적으로 수행하면서 한국은 세계적인 우주 과학 강국으로 우뚝 서게 됐다. 첫 로켓 개발 후 연속 발사 성공은 미국과 러시아, 중국도 달성하지 못한 진기록이다.
누리호는 이날 오후 6시24분 전남 고흥군 나로우주센터 전용 발사대에서 우주로 날아올랐다. 오전 11시 발사를 결정한 이후 오후 5시께 연료와 산화제 주입을 차례로 완료했다. 누리호는 오후 6시24분 정각에 3500도 초고온 고압가스의 힘을 받아 하늘로 힘차게 솟구쳤다.
누리호는 발사 뒤 1단과 위성을 감싼 덮개인 페어링, 2단을 차례로 떼어냈다. 고도 550㎞에선 주탑재 위성인 차세대 소형위성 2호를 분리했다. 이후 20초 간격으로 부탑재 위성인 큐브위성을 차례로 내보냈다. 다만 7기의 큐브위성 중 1기에 대해선 사출 성공 여부를 판단 중이다.
누리호는 과학기술정보통신부와 한국항공우주연구원이 2010년부터 개발한 토종 발사체다. 한국이 지난 2차에 이어 3차 발사까지 성공하면서 50여 년의 세계 우주개발사(史)에서 찾아보기 힘든 발자취를 남기게 됐다. 윤석열 대통령은 “달에 가는 것이 쉽기 때문이 아니라 어렵기 때문에 도전한다”며 “어렵기 때문에 우리의 도전이 되고 꿈이 되는 것”이라고 말했다. 이어 “우리나라가 우주강국 G7에 들어가는 쾌거를 이뤘다”고 강조했다.
고흥(나로우주센터)=김진원 기자 jin1@hankyung.com
```
네, 한국형발사체 누리호 발사 성공에 대한 Midjourney 텍스트 프롬프트는 다음과 같습니다.
- 한국형발사체 누리호가 우주로 발사되는 모습을 나타내는 이미지를 생성해 주세요.
- **한국형발사체 누리호가 성공적으로 발사되어 목표 궤도에 진입하는 모습**을 나타내는 이미지를 생성해 주세요.
- 한국형발사체 누리호가 성공적으로 발사되어 위성을 궤도에 올리는 모습을 나타내는 이미지를 생성해 주세요.
이 프롬프트를 사용하여 한국형발사체 누리호 발사 성공에 대한 이미지를 생성할 수 있습니다.
:::
아직 한글을 이미지 생성 AI 프롬프트로 사용하면 이미지 품질이 영문을 사용할 때와 비교하여 좋지 않기 때문에 챗GPT에서 미드저니 프롬프트를 생성한 후에 딥엘(deepl) 혹은 파파고 한영번역기를 사용하여 영문로 번역한 후에 이미지 생성 프롬프트로 사용할 것을 것을 추천한다.
::: {#fig-nuri layout="[[49,-2,49], [1]]"}
![프롬프트(스타일 적용 전): South Korean launch vehicle Nuri successfully launches and enters its target orbit](images/nuri_image_01.jpg)
![프롬프트(스타일 적용 후): South Korean launch vehicle Nuri successfully launches and enters its target orbit, cinematic light, extreme detail, panoramic, Craig Mullins](images/nuri_image_02.jpg)
![프롬프트: South Korean launch vehicle Nuri successfully launches and enters its target orbit, Max Ernst, volumetric light](images/nuri_finail.jpg){fig-align="center" width="350"}
미드저니 프롬프트를 사용하여 이미지 생성과정
:::
### 이미지 생성 프로세스
프롬프트를 넣어 이미지를 생성하는 것은 쉽지만, 원하는 이미지를 텍스트 프롬프트만으로 생성하는 것은 어려운 일이다. 이미지를 생성하는 과정은 복잡한 작업이며 경우에 따라 다양한 기술과 방법이 필요하지만, 과정을 크게 세 가지 주요 단계로 구분할 수 있다.
첫 번째 단계는 이미지를 생성할 엔진을 선택한다. AI가 생성하는 이미지가 사람마다 평가가 달라 주관적으로 갈리지만 다음과 같이 엔진의 특성을 가늠할 수 있다. 달리(DALL-E)는 텍스트를 기반으로 다양한 스타일과 형태의 이미지를 생성할 수 있으며, 미드저니(Midjourney)는 특정 주제나 컨셉에 초점을 맞춘 이미지 생성이 가능하고, 오픈소스 스테이블 디퓨젼(Stable Diffusion)은 시간에 따른 이미지 변화를 고려한 복잡한 이미지를 생성할 수 있다. 각 엔진마다 고유한 특성과 장점을 가지고 비용도 발생할 수 있으니, 생성하려는 이미지 목적과 요구 사항에 따라 적절한 엔진을 선택한다.
두 번째 단계는 프롬프트를 작성한다. 프롬프트는 생성하려는 이미지에 대한 설명이나 컨셉을 잘 작성하여 이미지 생성엔진에 전달한다. 동일한 프롬프트를 작성해도 엔진마다 생성되는 이미지는 다를 수 있으므로, 프롬프트 작성에 주의해야 한다. 예를 들어, 가장 기본적인 이미지 생성을 위해 "누리호 로켓이 하늘을 향해 발사되는 모습"와 같이 프롬프트를 작성할 수 있다.
마지막으로, 이미지가 생성된 후에는 추가적인 후처리 과정을 거쳐 최종 이미지를 완성한다. AI 가 생성한 이미지는 가로와 세로 길이가 동일한 정사각형 이미지가 대부분으로 '아웃페인팅'(Out-Painting) 기법으로 이미지 프레임의 바깥 부분을 인공지능이 상상해서 그려주는 이미지 확장 기능을 사용하는 등 후처리 과정을 거쳐 최종 이미지를 완성한다.
![생성형 AI 이미지 생성과정](images/kakao_bedit_creator.jpg)
### 이미지 생성 프롬프트
생성형 AI로 고품질 이미지를 빠르게 얻는 비법은 프롬프트 작성에 있다. 프롬프트는 AI가 이미지를 생성할 때 참조하는 지침이기 때문에, 이를 잘 구성하면 원하는 스타일과 특성을 가진 이미지를 쉽고 빠르게 얻을 수 있다. 모든 요소를 고려하여 프롬프트를 작성하면, 더욱 정교하고 다양한 이미지를 생성할 수 있지만, 대체로 대상, 질감, 카메라 각도, 사용할 사진기나 렌즈의 종류, 이미지의 종횡비, 스타일, 화가나 감독의 스타일, 효과, 빛의 종류 등을 프롬프트를 작성할 때 주로 포함시킨다.
![이미지 생성 프롬프트 고려사항](images/image_prompt_overview.jpg)
예를 들어, 고품질의 사진 형식의 자동차 이미지를 원한다면 프롬프트를 "DSRL로 촬영한 금속 표면의 스포츠 자동차, 16:9 비율, Cinematic 라이팅"과 같이 작성할 수 있다. 이렇게 하면 AI는 DSRL 카메라로 촬영된 것처럼 보이는 금속 표면의 스포츠 자동차 이미지를 16:9의 종횡비와 Cinematic 라이팅으로 생성한다.
또는, 웹툰 스타일의 곰 이미지를 원한다면 "웹툰 스타일의 털이 빳빳한 곰, 1:1 비율, Fairy lighting"이라고 프롬프트를 설정할 수 있다. 이 경우, AI는 웹툰 스타일로 털이 빳빳한 곰을 1:1 비율과 Fairy lighting으로 그릴 것이다.
::: {layout="[[49,-2,49]]"}
![고품질 자동차 사진 이미지](images/image_prompt_car.jpg)
![웹툰 스타일의 곰 이미지](images/image_prompt_bear.jpg)
뉴빙 이미지 생성자(Image Creator)를 기반엔진으로 생성한 이미지
:::
## 수능 영어문제
한국교육과정평가원의 대학수학능력시험 웹사이트에서는 다양한 수능 [기출문제](https://www.suneung.re.kr/boardCnts/list.do?boardID=1500234&m=0403&s=suneung)를 PDF 형태로 제공하고 있다. 수능 영어 기출문제를 다운로드 받아 실전과 유사한 조건에서 문제 풀이를 연습할 수 있어 과거 수험생들은 자신의 약점을 파악하고, 효율적인 학습 방법을 모색할 수 있었다. 이제는 챗GPT를 활용하여 2023년 수능 영어 기출문제를 함께 풀어보고 챗GPT가 가져온 변화를 경험해보자.
![2023학년도 대학수학능력시험 영어문제](images/sat_english.jpg)
먼저 챗GPT가 수능 듣기문제를 얼마나 잘 풀 수 있는지 알아보기 위해 듣기문제 대본과 정답지를 준비한다. 문제지와 정답은 PDF에 담겨있고, 영어듣기문제 `*.mp3` 파일 형식로 제공된 데이터를 수집한다. 챗GPT가 문제를 풀 수 있도록 프롬프트를 작성한다. 챗GPT가 문제를 풀고 난 후, 준비해 둔 정답지를 통해 정답을 확인한다.
### 수능 듣기 문제
수능 듣기 문제는 영어듣기파일, 대본과 문제가 함께 제공된다. 영어듣기 `*.mp3` 파일은 음성-텍스트 변환(Speech-to-Text, STT)를 통해서 텍스트로 변화시켜야 하나 대본이 텍스트로 제공되기 때문에 이 과정은 생략하고 PDF에서 텍스트를 추출하여 챗PGT가 문제를 풀 수 있도록 프롬프트 작성으로 넘어간다.
::: columns
::: {.column width="49.5%"}
**대본**
``` html
1. 다음을 듣고, 남자가 하는 말의 목적으로 가장 적절한 것을 고르시오.
M: Hello, Lockwood High School students. This is your school librarian, Mr. Wilkins. I’m sure you’re aware that our school librar y is hosting a bookmark design competition. I encourage students of all grades to par ticipate in the competition. The winning designs will be made into bookmarks, which will be distributed to librar y visitors. We’re also giving out a variety of other prizes. So don’t let this great oppor tunity slip away. Since the registration period for the bookmark design competition ends this Friday, make sure you visit our school librar y to submit your application. Come and par ticipate to display your creativity and talents.
```
:::
::: {.column width="1%"}
:::
::: {.column width="49.5%"}
**문제**
``` html
1. 다음을 듣고, 남자가 하는 말의 목적으로 가장 적절한 것을 고르시오.
① 도서관의 변경된 운영 시간을 안내하려고
② 독후감 쓰기 대회의 일정을 공지하려고
③ 책갈피 디자인 대회 참가를 독려하려고
④ 기한 내 도서 반납을 촉구하려고
⑤ 전자책 이용 방법을 설명하려고
```
:::
:::
### 챗GPT 문제풀이
챗GPT가 수능 듣기문제를 풀 수 있도록 프롬프트를 작성한다. 문제를 풀기 위해서는 문제와 대본을 함께 입력해야 하기 때문에 문제와 대본을 프롬프트에 함께 넣어준다. 챗GPT 문제풀이 능력평가를 위해 출력은 "정답:" 으로 출력형식을 지정하고, "과정은 필요없고 다음과 같이 출력하시면 됩니다." 출력방식도 함께 전달하면 챗GPT 출력결과는 정답만 출력하게 된다.
``` html
다음 문제를 푸세요. 과정은 필요없고 다음과 같이 출력하시면 됩니다.
정답:
다음을 듣고, 남자가 하는 말의 목적으로 가장 적절한 것을 고르시오.
M: Hello, Lockwood High School students. This is your school librarian, Mr. Wilkins. I’m sure you’re aware that our school librar y is hosting a bookmark design competition. I encourage students of all grades to par ticipate in the competition. The winning designs will be made into bookmarks, which will be distributed to librar y visitors. We’re also giving out a variety of other prizes. So don’t let this great oppor tunity slip away. Since the registration period for the bookmark design competition ends this Friday, make sure you visit our school librar y to submit your application. Come and par ticipate to display your creativity and talents.
다음을 듣고, 남자가 하는 말의 목적으로 가장 적절한 것을 고르시오. ① 도서관의 변경된 운영 시간을 안내하려고 ② 독후감 쓰기 대회의 일정을 공지하려고 ③ 책갈피 디자인 대회 참가를 독려하려고 ④ 기한 내 도서 반납을 촉구하려고 ⑤ 전자책 이용 방법을 설명하려고
---
정답: ③ 책갈피 디자인 대회 참가를 독려하려고
```
정답은 물론이고 풀이과정을 보기 위해 영어지문 전체를 한글로 번역하고 이유도 설명하라는 취지로 프롬프트를 다음과 같이 작성하는 것도 가능하다.
```` html
다음 문제를 푸세요. 문제는 백틱(`) 세개로 감싸여 있고 다음과 같이 되어 있습니다.
```
문제
```
출력:
1. 영어지문 전체를 한글로 번역한다.
2. 정답을 제시하고 이유도 설명한다.
```
다음을 듣고, 남자가 하는 말의 목적으로 가장 적절한 것을 고르시오.
M: Hello, Lockwood High School students. This is your school librarian, Mr. Wilkins. I’m sure you’re aware that our school librar y is hosting a bookmark design competition. I encourage students of all grades to par ticipate in the competition. The winning designs will be made into bookmarks, which will be distributed to librar y visitors. We’re also giving out a variety of other prizes. So don’t let this great oppor tunity slip away. Since the registration period for the bookmark design competition ends this Friday, make sure you visit our school librar y to submit your application. Come and par ticipate to display your creativity and talents.
다음을 듣고, 남자가 하는 말의 목적으로 가장 적절한 것을 고르시오. ① 도서관의 변경된 운영 시간을 안내하려고 ② 독후감 쓰기 대회의 일정을 공지하려고 ③ 책갈피 디자인 대회 참가를 독려하려고 ④ 기한 내 도서 반납을 촉구하려고 ⑤ 전자책 이용 방법을 설명하려고
```
````
챗GPT는 번역과 풀이과정 프롬프트를 전달받게 되면 다음과 같이 번역하고 풀이과정도 출력한다.
``` html
1. 영어지문 전체를 한글로 번역한다.
M: 안녕하세요, 록우드 고등학교 학생 여러분. 여러분의 학교 도서관 책사서인 윌킨스 선생님입니다. 학교 도서관에서는 현재 책갈피 디자인 대회를 개최하고 있다는 것을 여러분들도 알고 계실 것 같습니다. 모든 학년의 학생들이 이 대회에 참가하도록 장려하고 있습니다. 우승한 디자인은 책갈피로 제작되어 도서관 방문객들에게 배포될 것입니다. 우리는 또한 다양한 상품도 제공하고 있습니다. 그러니 이 좋은 기회를 놓치지 마세요. 책갈피 디자인 대회의 등록 기간은 이번 주 금요일에 마감되므로, 신청을 제출하기 위해 학교 도서관을 방문하시기 바랍니다. 여러분의 창의력과 재능을 발휘하기 위해 참여해 주세요.
2. 정답을 제시하고 이유도 설명한다.
정답: ③ 책갈피 디자인 대회 참가를 독려하려고
이유: 지문에서 남자가 하는 말의 목적은 책갈피 디자인 대회에 대한 참가를 독려하는 것입니다. 남자는 학교 도서관에서 개최되는 책갈피 디자인 대회에 대해 언급하며, 모든 학년의 학생들이 대회에 참가하도록 장려하고 있음을 알려줍니다. 우승한 디자인이 책갈피로 제작되어 도서관 방문객들에게 배포될 것이며, 다양한 상품도 제공된다고 언급합니다. 따라서, 이 말의 목적은 책갈피 디자인 대회에 대한 참가를 독려하는 것입니다.
```
### 유사 문제 복습
수능 영어시험에 틀린 문항은 챗GPT가 신속하고 정확하게 난이도별로 유사한 문항을 생성하는데 탁월하다. 챗GPT로 GPT-3.5 언어모형으로 영어문제를 풀면 거의 대부분의 문제를 맞출 수 있다. 틀린 문제를 복기하면 이미지와 표가 포함된 문제로 최근에 OpenAI에서 발표한 시각지능을 활용하도록 프롬프트를 조정하면 이러한 문제도 푸는데 큰 문제가 없다. 다음과 같이 수능문제를 난이도를 달리하여 유사 수능문제를 생성하는데 챗GPT를 활용하여 수험생 뿐만 아니라 선생님도 수업준비에 큰 도움이 될 것으로 기대된다.
```` html
당신은 영어문제 전문가로 최선을 다해 정답을 구해야합니다.
다음 영어문제를 단계별로 풀어 해답을 제시하세요.
지문은 백틱(`) 세개로 감싸여 있고 질문은 5지선다형으로 지문 다음에 있습니다.
```
지문
```
출력:
영어지문 전체를 한글로 번역한다.
정답을 제시하고 이유도 설명한다.
```
6. 대화를 듣고, 여자가 지불할 금액을 고르시오. M: Hello, are you enjoying your time here at Magic Unicor n Children’s Far m? W: Yes, thank you. I’d like to buy some snacks to feed the animals. M: Sure. We sell two kinds of food for the animals, vegetable sticks and sliced fruits. W: How much do they cost? M: It’s $5 for a pack of vegetable sticks and $10 for a pack of sliced fruits. W: I’ll take four packs of vegetable sticks. Are there any other activities? M: We offer horseback riding. A ticket for a ride around the far m is $25. W: Oh, my son and daughter will love it. Two tickets, please. M: So, four packs of vegetable sticks and two horseback riding tickets, cor rect? W: Right. And I heard you’re offering a 10% discount as an autumn promotional event. M: I’m sorr y. That event ended last week. W: I see. Here’s my credit card.
```
6. 대화를 듣고, 여자가 지불할 금액을 고르시오.
① $55 ② $63 ③ $70 ④ $81 ⑤ $90
````
챗GPT는 다음과 같이 번역하고 풀이과정도 출력한다.
``` html
지문을 한글로 번역하면 다음과 같습니다:
여자: 안녕하세요, 매직 유니콘 어린이 농장에서 지내는 시간을 즐기고 계시나요?
남자: 네, 감사합니다. 동물들에게 간식을 주고 싶어요.
여자: 그럼요. 우리는 두 종류의 동물용 음식을 판매하고 있어요. 야채 스틱과 과일 슬라이스가 있어요.
남자: 얼마인가요?
여자: 야채 스틱 한 팩은 $5이고, 과일 슬라이스 한 팩은 $10입니다.
여자: 야채 스틱 네 팩 주세요. 다른 활동은 또 있나요?
남자: 저희는 승마도 제공하고 있어요. 농장 주변을 타는 승마 티켓은 $25입니다.
여자: 아, 제 아들과 딸이 그것을 좋아할 거예요. 티켓 두 장 주세요.
남자: 그러면 야채 스틱 네 팩과 승마 티켓 두 장 맞나요?
여자: 맞아요. 그리고 가을 프로모션 이벤트로 10% 할인이 있다고 들었어요.
남자: 죄송합니다. 그 이벤트는 지난 주에 종료되었어요.
여자: 알겠습니다. 여기 신용카드 있습니다.
문제에서 여자가 지불할 금액을 구하는 문제입니다. 문맥을 보면 여자가 구매한 물품과 티켓의 가격을 계산하여 총 금액을 구하면 됩니다.
야채 스틱 한 팩은 $5이고, 여자가 네 팩을 주문했으므로 야채 스틱은 $5 * 4 = $20입니다.
승마 티켓은 $25이고, 여자가 두 장을 주문했으므로 승마 티켓은 $25 * 2 = $50입니다.
따라서 여자가 지불할 총 금액은 $20 + $50 = $70입니다.
따라서 정답은 ③ $70입니다.
```
프롬프트를 다음과 같이 작성하여 챗GPT에 입력하면 유사한 수능문제를 얻을 수 있는데 너무 긴 대화나 중간에 다른 주제로 채팅한 이력이 없다면 챗GPT가 맥락을 가지고 있기 때문에 유사한 문제를 얻는데 큰 어려움은 없을 것이다.
``` html
유사한 문제를 3개 작성해주세요. 문제는 5지선다형 문제로 정답도 제시하고 수식으로 풀이과정도 서술해주세요. 정답은 5지선다 선택지에 반듯이 포함되어 있어야 합니다.
```
챗GPT가 준비한 유사 수능문제 2개를 다음과 같이 얻을 수 있다.
``` html
### 문제 1
1. 대화를 듣고, 남자가 지불할 금액을 고르시오.
W: Welcome to Cool Cats Cafe. How can I assist you today?
M: I'd like to order two cappuccinos and three blueberry muffins.
W: Absolutely, sir. A cappuccino is $4, and a blueberry muffin is $3.
M: Alright. Do you have any offers going on?
W: Yes, sir. We have a "Buy 2 Get 1 Free" offer on muffins.
M: That's perfect. Here's my card.
1. 대화를 듣고, 남자가 지불할 금액을 고르시오.
① $15 ② $18 ③ $20 ④ $22 ⑤ $25
풀이:
1. 캐푸치노: $4 x 2 = $8
2. 블루베리 머핀: $3 x 2 = $6 (3개를 주문했지만 "2개 사면 1개 무료" 이벤트로 인해 2개만 지불)
따라서 총 금액은 $8 (캐푸치노) + $6 (블루베리 머핀) = $14입니다.
따라서 정답은 ① $14입니다.
### 문제 2
2. 대화를 듣고, 여자가 지불할 금액을 고르시오.
M: Welcome to ABC Bookstore. How can I help you?
W: I am looking for two English grammar books and one novel.
M: Each grammar book costs $12 and the novel costs $20.
W: Okay. And do you have any discounts?
M: Yes, we offer a 10% discount on total bill.
W: That's great. I'll pay by card.
2. 대화를 듣고, 여자가 지불할 금액을 고르시오.
① $35.4 ② $38.7 ③ $39.6 ④ $41.4 ⑤ $44
풀이:
1. 영어 문법 책: $12 x 2 = $24
2. 소설: $20 x 1 = $20
따라서 총 금액은 $24 (문법 책) + $20 (소설) = $44입니다. 그리고 총액에서 10% 할인이 적용되므로, 지불할 금액은 $44 - $44*10% = $39.6입니다.
따라서 정답은 ③ $39.6입니다.
### 문제 3
3. 대화를 듣고, 남자가 지불할 금액을 고르시오.
W: Good morning, welcome to our breakfast buffet. It's $15 per person.
M: Sounds good. I'll have breakfast for two please. And two cups of coffee.
W: A cup of coffee costs $3. So, it would be an additional $6 for the coffee
M: Alright. Also, is there any senior citizen discount?
W: Yes, we offer a 20% discount for senior citizens.
M: Great! I am a senior citizen.
대화를 듣고, 남자가 지불할 금액을 고르시오.
① $21 ② $23.2 ③ $24.8 ④ $26.4 ⑤ $28
풀이:
1. 아침 식사 부페: $15 x 2 = $30
2. 커피: $3 x 2 = $6
따라서 총 금액은 $30 (아침 식사 부페) + $6 (커피) = $36입니다. 그리고 총액에서 20% 할인이 적용되므로, 지불할 금액은 $36 - $36*20% = $28.8입니다.
따라서 정답은 ④ $28.8입니다.
```
### TTS 영어듣기문제
TTS 영어듣기문제는 챗GPT가 준비한 유사 수능문제를 읽어주는 TTS 기능을 입혀 원어민 영어음성을 재생시킬 수 있다. 인공지능 기술을 갖춘 많은 회사들이 텍스트를 음성으로 바꾸는 TTS 기능을 제공하고 있는데 음성합성(Speech Synthesis)로 유명한 회사 중 하나가 [11Elevenlabs](https://beta.elevenlabs.io/)다.
듣기평가 문제 1번 영어대본과 음성을 직접 들어보자.
``` html
Hello, Lockwood High School students. This is your school librarian, Mr. Wilkins. I’m sure you’re aware that our school librar y is hosting a bookmark design competition. I encourage students of all grades to par ticipate in the competition. The winning designs will be made into bookmarks, which will be distributed to librar y visitors. We’re also giving out a variety of other prizes. So don’t let this great oppor tunity slip away. Since the registration period for the bookmark design competition ends this Friday, make sure you visit our school librar y to submit your application. Come and par ticipate to display your creativity and talents.
```
**듣기평가 음원**
```{r}
#| echo: false
html_tag_audio <- function(file, type = c("mp3")) {
type <- match.arg(type)
htmltools::tags$audio(
controls = "",
htmltools::tags$source(
src = file,
type = glue::glue("audio/{type}", type = type)
)
)
}
html_tag_audio("data/01_문제 01.mp3", type = "mp3")
```
영어듣기지문 1번 문제를 일레븐랩스 API를 사용하여 음성합성하게 레이첼(Rachel) 인공지능이 생성한 음성이지만 원어민에 가까운 음성을 들을 수 있다.
```{python}
#| eval: false
#| echo: true
from elevenlabslib.helpers import *
from elevenlabslib import *
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
user = ElevenLabsUser(os.getenv('ELEVENLAB_API_KEY'))
voice = user.get_voices_by_name("Rachel")[0]
transcript=r"Hello, Lockwood High School students. This is your school librarian, Mr. Wilkins. I’m sure you’re aware that our school librar y is hosting a bookmark design competition. I encourage students of all grades to par ticipate in the competition. The winning designs will be made into bookmarks, which will be distributed to librar y visitors. We’re also giving out a variety of other prizes. So don’t let this great oppor tunity slip away. Since the registration period for the bookmark design competition ends this Friday, make sure you visit our school librar y to submit your application. Come and par ticipate to display your creativity and talents."
generated_voice = voice.generate_play_audio(transcript, stability=0.7,
playInBackground=False)
save_audio_bytes(generated_voice[0], "data/elevenlabs_transcript.mp3", outputFormat="mp3")
```
**AI 생성 듣기평가 음원**
```{r}
#| echo: false
html_tag_audio("data/elevenlabs_transcript.mp3", type = "mp3")
```
## 디오판토스 묘비
OpenAI에서 제작한 GPT-3.5/GPT-4 언어모형을 메타 라마(Llama)처럼 공개하지 않아 정확한 내용은 파악이 현재로는 어렵지만, 대학생 수준의 '추론'(reasoning) 능력을 가진 것으로 알려져 있다. 방대한 데이터를 학습하여 단순히 사람의 추론을 모방하는 것인지, 아니면 개발자가 알지 못하는 새로운 무언가 있는지 알 수 없지만 분명한 것은 GPT-3.5/GPT-4는 인간의 추론 능력과 버금가는 능력을 갖고 있다는 점이다.
챗GPT는 추상적인 개념이나 복잡한 문제에 대해서도 상당히 정확한 추론을 할 수 있고 약점으로 지적된 수학 계산과 연관된 문제풀이는 울프람 알파 플러그인을 통한 해법도 제시하고 있다. 챗GPT는 단순히 키워드나 문장 패턴을 인식하는 것을 넘어 문맥의 깊은 이해와 논리적인 판단 능력을 갖춘 것처럼 추론 능력을 보여주고 있다는 점이 흥미롭ㄴ다.
"디오판토스 묘비" 문제는 중세 수학자 디오판토스 묘비에 새겨진 수학 문제로 알려져 있다. 디오판토스 나이를 알아내는 데 관련된 대수학 문제로, 묘비에 새겨진 문구를 통해 그의 나이를 알아내는 것이 목표로 문구는 대략 다음과 같이 적혀 있다.
> 신의 축복으로 태어난 그는 인생의 $\frac{1}{6}$을 소년으로 보냈다. 그리고 다시 인생의 $\frac{1}{12}$ 이 지난 뒤에는 얼굴에 수염이 자라기 시작했다. 다시 $\frac{1}{7}$이 지난 뒤 그는 아름다운 여인을 맞이하여 화촉을 밝혔으며, 결혼한 지 5년 만에 귀한 아들을 얻었다. 아! 그러나 그의 가엾은 아들은 아버지의 반 밖에 살지 못했다. 아들을 먼저 보내고 깊은 슬픔에 빠진 그는 그 뒤 4년간 정수론에 몰입하여 스스로를 달래다가 일생을 마쳤다.
::: columns
::: {.column width="65%"}
**수식으로 풀기**
디오판토스가 정확히 언제 태어나고 언제 죽었는지는 명확하지 않지만, 그가 죽었을 때의 나이는 정확히 알 수 있다. 이를 방정식을 통해 풀어보자. 수식을 $x$에 대해 정리해서 풀면 84가 나온다.
$$\frac {x} {6} + \frac {x} {12} + \frac {x} {7} + 5 + \frac {x} {2} + 4 = x$$
:::
::: {.column width="5%"}
:::
::: {.column width="30%"}
**종이와 연필로 풀기**
![](images/inference_hand.jpg)
:::
:::
기호 수학(Symbolic math)은 수학적 표현을 숫자로 계산하는 것이 아니라 기호로 다루는 수학의 한 분야로 미분, 적분, 방정식 풀이 등 다양한 수학적 연산을 기호적으로 수행할 수 있어 정확한 결과를 얻을 수 있다. 예를 들어, $(\sqrt{2})^2$ 루트 2의 제곱을 계산할 때, 숫자로 근사값을 구하는 것이 아니라 기호 수학으로 정확하게 2라고 표현할 수 있어 매력적이다.
기호 수학은 컴퓨터 대수 시스템(Computer Algebra System, CAS)을 통해 지원되고 심파이(SymPy) 라이브러리는 기호 수학 연산을 지원하는 파이썬 라이브러리 중 하나로, 사용자가 복잡한 수학적 문제를 기호적으로 해결할 수 있어, 정확한 결과가 필요한 연구분야와 분석 작업에 매우 유용하다.
파이썬 심파이(Sympy)를 이용해 디오판토스 묘비 문제를 풀어보자. 나이를 미지수 정의는 방정식을 세워 `solve()` 함수로 방정식을 풀면 나이를 알 수 있다.
```{python}
#| label: tombstone
#| echo: true
#| eval: false
from sympy import *
x = Symbol('x')
Diophantus_puzzle = x/6 + x/12 + x/7 + 5 + x/2 + 4 - x
solve(Diophantus_puzzle, x, dict = True)
[{x: 84}]
```
챗GPT로 디오판토스 묘비 문제를 풀 수 있을까? 챗GPT에 디오판토스 묘비 문제를 물어보면 다음과 같이 정확한 답을 준다. 두가지 방식으로 풀 수 있는데 GPT-3.5보다 추론 능력이 뛰어난 GPT-4가 더 정확한 답을 제공하고 수학문제 해결에 특화된 울프람 알파 플러그인을 통하면 챗GPT가 제시한 답을 좀더 신뢰할 수 있다. [^text_to_x-2]
[^text_to_x-2]: [울프람 웹사이트](https://www.wolframalpha.com/input?i=x%2F6+%2B+x%2F12+%2B+x%2F7+%2B+5+%2B+x%2F2+%2B+4+%3D+x)
::: {#fig-math layout="[[1,1]]"}
![GPT-4 문제풀이](images/inference_gpt4.jpg){fig-align="center" width="344"}
![플러그인 문제풀이](images/wolfram_alpha.jpg){fig-align="center" width="313"}
챗GPT 디오판토스 묘비 문제 풀이
:::