OpenAI ChatGPT Fine-tuning Data Format / 학습데이터 작성 방법

파일 확장자는 .jsonl 으로 작성하여야 한다.

*대화형 학습데이터 형식

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}

*프롬프트 쌍 형식

{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}

*멀티턴 형식

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Python 을 활용해 간단히 출력하는 기능을 만들 수 있다.

#파일 입출력 시작
f = open("data_s.jsonl", 'w', encoding="utf-8")
f2 = open("data_f.jsonl", 'w', encoding="utf-8")

while 조건식:
    print(data)
    f.write("{\"prompt\": \"" + 변수 + "\", \"completion\": \"" + 변수 + "\"}\n")
    f2.write("{\"messages\": [{\"role\": \"system\", \"content\": \"" + 변수 + "\"}, {\"role\": \"user\", \"content\": \"" + 변수 + "\"}, {\"role\": \"assistant\", \"content\": \"" + 변수 + "\"}]}\n")

#파일 입출력 해제
f.close()
f2.close()

또는, 다른 라이브러리(json 및 전용 라이브러리) 를 활용할 수 있다.

Ubuntu APM 빠른설치 (Apache, PHP, MySQL)

우분투 APM(Apache, PHP, MySQL) 설치하는데 필요 없는 내용 모두 제외 후 필수 핵심 명령어만 정리합니다.

1. Ubuntu 초기설정

sudo apt-get update

2. Apache 설치

sudo apt-get install apache2

3. 방화벽 허용 설정

sudo ufw allow 'Apache'

4. Mysql 설치

sudo apt install mysql-server

5. Mysql 암호 설정

sudo mysql_secure_installation

6. 만약 위 명령어에서 암호 설정이 안 뜬 경우 아래 명령어 실행 후 5번 재실행

sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'mynewpassword';

PHP 설치

sudo apt install php libapache2-mod-php php-mysql

*웹 서버 동작 후 php 작동이 안되는 경우 > 아래 파일 수정

vi /etc/apache2/mods-enabled/mime.conf

적당한 곳에 아래 코드 추가 후 Apache2 재실행

AddType application/x-httpd-php .html .htm .php

워드프레스 멀티도메인 사용 설정하기 / WordPress using Multi-domain with Single-site

한개의 워드프레스 사이트에서 여러개 도메인을 연결해 사용하며 Redirection 이 아닌 각 도메인이 개별적으로 정상 작동하기 위해서는 wp-config.php 파일 수정이 필요하다.

wp-config.php 를 수정하지 않고 여러 도메인을 사용하는 경우 처음 설정한 메인도메인을 제외한 나머지 도메인에서는 이미지 엑스박스가 뜨기 때문에 아래 설정이 필수이다.

*원본 wp-config.php의 내용

<?php
/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the installation.
 * You don't have to use the web site, you can copy this file to "wp-config.php"
 * and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * Database settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * @link https://wordpress.org/support/article/editing-wp-config-php/
 *
 * @package WordPress
 */

// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'database' );

/** Database username */
define( 'DB_USER', 'user' );

/** Database password */
define( 'DB_PASSWORD', 'password' );

/** Database hostname */
define( 'DB_HOST', 'localhost' );

/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );

/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

/**#@+
 * Authentication unique keys and salts.
 *
 * Change these to different unique phrases! You can generate these using
 * the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
 *
 * You can change these at any point in time to invalidate all existing cookies.
 * This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define( 'AUTH_KEY',         'key1' );
define( 'SECURE_AUTH_KEY',  'key2' );
define( 'LOGGED_IN_KEY',    'key3' );
define( 'NONCE_KEY',        'key4' );
define( 'AUTH_SALT',        'key5' );
define( 'SECURE_AUTH_SALT', 'key6' );
define( 'LOGGED_IN_SALT',   'key7' );
define( 'NONCE_SALT',       'key8' );

/**#@-*/

/**
 * WordPress database table prefix.
 *
 * You can have multiple installations in one database if you give each
 * a unique prefix. Only numbers, letters, and underscores please!
 */
$table_prefix = 'wp_';

/**
 * For developers: WordPress debugging mode.
 *
 * Change this to true to enable the display of notices during development.
 * It is strongly recommended that plugin and theme developers use WP_DEBUG
 * in their development environments.
 *
 * For information on other constants that can be used for debugging,
 * visit the documentation.
 *
 * @link https://wordpress.org/support/article/debugging-in-wordpress/
 */
define( 'WP_DEBUG', false );

/* Add any custom values between this line and the "stop editing" line. */

/* That's all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
	define( 'ABSPATH', __DIR__ . '/' );
}

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';

멀티 도메인의 원활한 사용을 위해서는 “Add any custom values between this line and the “stop editing” line.” 이 라인 아래에 코드 추가가 필요하다.

define('COOKIE_DOMAIN', $_SERVER['HTTP_HOST']);
define('WP_CONTENT_URL', "https://{$_SERVER['HTTP_HOST']}/wp-content");
define( 'WP_ALLOW_MULTISITE', true );

위 코드를 추가하면 어떠한 도메인으로 접근하여도 이미지가 잘 보이게 된다.