WEBVTT 00:00.920 --> 00:02.690 Get it 여기까지 못 올 줄 알았죠? 00:02.720 --> 00:07.910 주피터 연구소에서 개척지 모델을 세밀하게 조정하고 있어요 00:07.910 --> 00:10.580 수입 부품부터 시작하죠 00:10.580 --> 00:12.860 테스트 데이터도 가져오죠 00:12.860 --> 00:19.250 기억하신다면 이건 250개의 테스트 예제를 실행할 수 있는 실용적인 코드입니다 아름다운 00:19.250 --> 00:21.140 차트를 제공하죠 00:21.140 --> 00:28.880 마지막에 우리 환경에서 끌어안는 얼굴 토큰을 로드합니다 이번에는 사용하지 않겠지만 00:28.910 --> 00:34.280 이전처럼 항상 끌어안고 얼굴을 안는 건 어떨까요? 00:34.310 --> 00:36.800 오픈AI를 사용할 거예요 00:36.830 --> 00:41.000 그래서 저 선을 저기와 여기에 실행해야 해요 00:41.000 --> 00:46.610 피클 파일에서 훈련 데이터와 테스트 데이터를 열어 이걸 하도록 하겠습니다 00:46.700 --> 00:51.200 모든 걸 처음부터 다시 만들 필요가 없도록요 00:51.470 --> 00:52.340 좋아요 00:52.340 --> 00:54.500 이제 뭘 할지 얘기해보죠 00:54.500 --> 01:04.680 오픈AI는 여러분이 훈련할 때 훈련에 사용한 예시를 50-100개 정도 사용하라고 01:04.830 --> 01:06.210 권장해요 01:06.210 --> 01:14.160 개척지 모델의 세밀한 조정은 음색과 스타일을 바꾸는 거예요 오류를 01:14.160 --> 01:19.860 수정하고 어떤 상황에서는 정확도를 높이는 거죠 01:20.010 --> 01:28.860 중요한 건 아니고 예시를 많이 넣는 것도 큰 의미가 없어요 GPT 4 시리즈 같은 모델은 너무 많은 데이터를 바탕으로 01:28.980 --> 01:35.070 훈련되어서 여러분이 정말 하려는 건 여러분이 원하는 특정 작업의 예시를 충분히 01:35.070 --> 01:39.150 제공하는 거예요 그래야 거기서 배울 수 있죠 01:39.390 --> 01:46.980 네, 아주 많은 숫자를 추천하지 않는 건 아니지만 적어도 500은 01:46.980 --> 01:50.970 뽑을 거예요 권장량보다 많죠 01:51.060 --> 01:55.830 그리고 제가 실험해 봤는데 작은 수치보다 결과가 좋았어요 01:56.130 --> 01:59.040 500가지 예시를 들어볼게요 01:59.070 --> 02:00.540 지금은 아주 작은 사례만 있죠 02:00.570 --> 02:07.310 텍스트는 아주 작아요 일반적으로 훨씬 더 큰 훈련 문서를 생각하고 있죠 02:07.310 --> 02:10.220 그래서 저는 전혀 미안하지 않아요 02:10.430 --> 02:14.510 지금은 미세한 조율이에요 02:14.660 --> 02:19.850 한동안은 비어요 9월 23일까지는요 9월 말까지는요 02:19.850 --> 02:26.840 하지만 무료가 아니게 되더라도 여러분이 지불하는 비용은 500개에 대한 추론만 수행하는 02:26.840 --> 02:30.830 비용과 비슷합니다 이것도 역시 몇 센트로 측정되죠 02:30.830 --> 02:38.480 그럼 지금으로서는 0달러 정도 되겠네요 5천 달러요, 그 정도 금액으로요 02:38.570 --> 02:41.930 여전히 적은 금액이네요 02:41.930 --> 02:46.490 말씀드렸듯이 9월 말까지는 무료예요 02:46.730 --> 02:54.170 500개의 훈련 세트를 만들었어요 실제 훈련 세트인 400,000개와 02:54.200 --> 02:56.600 비교해서요 02:56.780 --> 03:00.020 50달러로 검증 받을게요 03:00.020 --> 03:05.240 아까 언급했듯이 검증은 필요 없습니다 훈련 세트에서 한 번만 03:05.240 --> 03:07.190 할 것이기 때문이죠 03:07.460 --> 03:12.470 하지만 여러분께 보여드리면 유용할 것 같았어요 나중에 여러분 프로젝트에서 어떻게 사용할지 03:12.470 --> 03:13.340 알 수 있게요 03:13.340 --> 03:16.970 이 모든 게 여러분의 프로젝트에 따라 복제될 수 있거든요 03:16.970 --> 03:18.560 이걸 실행해요 03:19.010 --> 03:28.160 첫 단계는 Jsonl JSON 라인 데이터를 준비하는 거라고 말씀드렸죠 훈련 데이터를 이 포맷으로 03:28.160 --> 03:30.020 변환하는 거예요 03:30.020 --> 03:37.730 먼저 여러분이 잘 아는 메서드 함수를 작성했어요 메시지를 전달하는 함수죠 지난 시간에 했던 03:37.730 --> 03:40.040 것과 정확히 일치해요 03:40.130 --> 03:46.580 물품의 가격을 추정하고 가격으로만 답해야 해요 설명하지 말고요 03:46.580 --> 03:51.380 사용자 프롬프트는 아이템에서 테스트 프롬프트를 가져오고요 03:51.590 --> 03:58.850 그리고 1달러가 될 만한 건 다 빼고 빈 지폐로 바꿔요 03:58.850 --> 04:04.780 최저 금액을 제시하는 게 아닙니다 개척지 연구소는 그런 추측이 04:04.810 --> 04:05.740 필요 없죠 04:05.740 --> 04:10.900 그리고 이것도 빼요 그게 사용자 프롬프트에 가는 거죠 04:10.900 --> 04:17.350 그럼 전 보조에게 가격을 말하고 가격을 알려줘요 04:17.350 --> 04:19.090 실행해 보죠 04:19.090 --> 04:24.760 무슨 일인지 잘 모르실 수 있으니 예를 들어볼게요 04:24.790 --> 04:34.210 모델이 처음 보는 0번 열차에 보내는 메시지예요 04:34.210 --> 04:36.910 Get 롤 시스템이에요 04:36.910 --> 04:38.560 시스템 프롬프트죠 04:38.590 --> 04:42.970 만족스러운지 확인하고 사용자를 롤해요 04:43.090 --> 04:45.070 이게 사용자 프롬프트예요 04:45.430 --> 04:51.040 우리가 이 질문을 한 것 같네요 물음표는 얼마일까요? 04:51.040 --> 04:58.270 델포이 어쩌고 하는 장황한 얘기도 들었어요 연료 펌프 모듈요 04:58.690 --> 05:04.900 그리고 이건 비서의 대답이에요 05:04.900 --> 05:07.330 가격은 226달러예요 05:07.330 --> 05:12.310 그런 건 상상도 못 했어요 그런 건 상상도 못 했죠 05:12.520 --> 05:14.080 자, 보세요 05:14.080 --> 05:15.700 매일 새로운 걸 배우네요 05:15.700 --> 05:20.200 어쨌든 이게 메시지 형식입니다 이 단계에선 아주 익숙할 05:20.200 --> 05:21.040 거예요 05:21.040 --> 05:28.270 이게 어떻게 완벽하게 만들어진 테스트, 아니 훈련 데이터 포인트인지 알 수 있습니다 우리가 모델에 05:28.300 --> 05:29.410 제공할 것이죠 05:29.770 --> 05:36.910 좋아요, 여기 JSON L을 만드는 함수가 있어요 여러분이 예상하는 대로 항목을 여러 05:36.910 --> 05:38.530 개 받아들이죠 05:38.530 --> 05:40.570 그런 항목을 반복할 거예요 05:40.570 --> 05:47.560 각각의 객체를 위해 텍스트를 생성하죠 05:47.560 --> 05:54.340 그런 다음 Json을 사용하죠 덤프 스트링을 덤프 스트링으로 전환해 단순한 문자열로 변환하죠 05:54.340 --> 06:00.820 보세요, 문자열 하나에 추가하고 끝에 캐리지 리턴을 하죠 06:00.850 --> 06:05.020 그리고 다시 리턴합니다 마지막 캐리지 리턴을 제거하고요 06:05.020 --> 06:07.360 어떻게 작동하는지 보죠 06:07.360 --> 06:10.240 먼저 실행해 보죠 06:10.450 --> 06:12.340 나처럼 실수하지 마요 06:12.640 --> 06:13.600 됐어요 06:13.600 --> 06:15.730 이제 만들기를 해요 JSON 06:15.730 --> 06:22.180 훈련 데이터를 제출하도록 하죠 06:22.210 --> 06:27.370 앞의 세 곡만 통과시키죠 그래야 사람들이 안 몰려요 06:27.370 --> 06:29.860 get get get 문자열이죠 06:29.860 --> 06:34.090 그리고 문자열도 있어요 06:34.090 --> 06:35.830 인쇄하는 게 더 쉬울 것 같아요 06:35.860 --> 06:40.090 get을 해서 빈 선이 잘 보이게 만들어 줄게요 06:40.420 --> 06:48.130 문자열입니다 문자열에 1, 2, 3개의 줄이 있죠 06:48.370 --> 06:50.290 좀 휘감기고 있어요 06:50.290 --> 07:02.290 각 행에 있는 메시지를 보면 훈련 데이터 포인트를 나타내요 07:02.740 --> 07:03.400 네 07:03.410 --> 07:04.760 지금까진 좋아요 07:04.940 --> 07:08.240 이제 그 위에 구축된 함수가 있어요 07:08.240 --> 07:08.810 그렇죠? 07:08.840 --> 07:12.110 Jsonl은 항목을 취하고 파일 이름을 취해요 07:12.110 --> 07:13.850 아주 간단해요 07:13.880 --> 07:18.950 파일 이름을 열고 위의 함수를 호출해 써요 07:18.950 --> 07:23.270 그에 대한 데모는 드릴 필요가 없을 것 같네요 07:23.300 --> 07:26.180 실행해야 하지만 실제로 실행할 수 있어요 07:26.180 --> 07:34.190 이제 훈련 데이터 집합을 볼게요. 잘 조율된 트레인 기억하시죠? 500개의 아이템이 있어요. 07:34.190 --> 07:34.940 확인해 보죠 07:34.970 --> 07:40.550 됐어요, 훈련 데이터 세트 전체에서 500개, 400,000개예요 07:40.580 --> 07:45.590 전부 파일에 작성해 GPT 4에 업로드 하진 않아요 07:45.920 --> 07:52.550 파인 튠 트레인 닷 JSON 파일에 그걸 적어요 07:52.550 --> 07:58.700 그걸 실행하고 유효성 검증 세트를 가져다가 정확히 같은 걸 실행하죠 07:58.700 --> 08:03.170 저 두 파일을 작성했는데 몇 초 전에 작성된 걸 보실 수 있죠 08:03.170 --> 08:05.790 이걸 열면 열 수 있어요 08:05.790 --> 08:12.450 JupyterLab에도 JSON 라인 편집기가 있어요 일반 편집기로 08:12.450 --> 08:13.530 넘어가 보죠 08:13.560 --> 08:18.420 여러분이 기대하는 대로 500개의 행이 있네요 08:18.420 --> 08:24.270 자, 끝까지 갑니다 500줄이네요 08:24.300 --> 08:27.960 모두 우리가 바라는 구조로 이루어져 있어요 08:28.170 --> 08:35.010 잘 구성된 JSON이 아닌 걸 알 수 있어요 각 행은 잘 구성된 JSON 문서거든요 08:35.010 --> 08:39.330 제가 장황하게 말하고 있지만 이걸 읽을 수 없고 JSON 문서로 파싱할 08:39.330 --> 08:42.990 수 없는 게 중요해요 구성이 잘 된 JSON이 아니니까요 08:42.990 --> 08:44.910 선이 분리돼 있어요 08:45.240 --> 08:50.730 에디터로 여는 검증 파일이 50개 정도 될 거예요 08:50.760 --> 08:54.780 50줄은 거의 비슷하게 말했어요 08:54.900 --> 08:58.680 JSON 라인에서 어떻게 보이는지 보여드릴게요 08:58.680 --> 08:59.130 편집자요 08:59.130 --> 09:01.140 이렇게 생긴 멋진 편집기예요 09:01.140 --> 09:04.290 각각을 열 수 있어요 JSON 개체 같죠 09:04.720 --> 09:05.110 네 09:05.200 --> 09:06.310 보세요 09:07.060 --> 09:08.260 그렇게 시작을 했어야죠 09:08.260 --> 09:08.980 아마도요 09:09.010 --> 09:11.380 어떤 상황인지 잘 알 수 있죠 09:11.650 --> 09:17.080 메시지가 왜 포장되는지에 대한 직관적인 감각을 발휘하죠 09:17.080 --> 09:18.280 포장된 방식요 09:19.180 --> 09:23.950 좋아요, 그게 파일이에요 09:24.100 --> 09:26.080 그게 마지막 단계예요 09:26.080 --> 09:27.310 이 부분요 09:27.700 --> 09:33.550 오픈AI에 업로드 할 때가 된 것 같아요 09:33.550 --> 09:38.350 OpenAI.Files.Create라고 이름 붙였어요 09:38.350 --> 09:42.880 파일을 전달하고 목적이 미세하다고 말하죠 09:43.270 --> 09:47.350 한 가지 주의할 게 있어요 09:47.350 --> 09:50.560 이 파일을 전달할 때 반드시 전달해야 해요 09:50.590 --> 09:56.680 이진법 파일로 열어야 합니다. 왜냐하면 그 파일은 바이너리 바이트로 되어 있어서 OpenAI로 스트리밍 09:56.680 --> 09:58.270 될 것이니까요. 09:58.300 --> 10:02.980 R이 아니라 RB로 해야 해요 10:02.980 --> 10:07.160 아주 작은 뉘앙스만 조심하면 돼요 10:07.160 --> 10:12.140 파일의 모든 내용을 OpenAI로 보내고 있어요 10:12.290 --> 10:15.950 그 라인을 실행하는 데 1초가 걸리죠 10:15.980 --> 10:20.960 무엇이 돌아왔는지 검사하면 파일 객체를 가져오죠. 10:21.650 --> 10:24.410 특정 바이트의 개수가 있고요 10:24.620 --> 10:28.070 객체는 파일이고 목적은 잘 조정되었고 상태는 처리되었어요 10:28.070 --> 10:32.660 OpenAI는 이미 파일을 가져와서 처리하고 있어요 10:32.660 --> 10:35.930 검증도 똑같이 할 거예요 10:36.260 --> 10:38.660 실행하면 다 됐어요 10:38.660 --> 10:41.420 다시 한 번 처리하죠 10:41.420 --> 10:45.350 이 시점에서 우린 두 개의 JSON 파일을 만들었죠 10:45.350 --> 10:50.180 하나는 훈련용이고 하나는 검증용이죠 10:50.180 --> 10:53.000 우리 파일 시스템에 적어뒀어요 10:53.000 --> 11:00.560 그리고 OpenAI에 업로드했습니다 OpenAI에서 파일 객체로 자리 잡고 있죠 11:00.590 --> 11:05.150 다음 시간에는 미세한 조정을 할 거예요 11:05.180 --> 11:06.170 거기서 봐요