이 포스트에서는 OpenAI API를 통한 ChatGPT 이용하고자 한다. OpenAI API는 유료지만 필자의 경우, 교수님께서 Lab 멤버들의 연구를 위해 OpenAPI를 구독해주셔서 부담 없이 쓰는 중이다 ㅎㅎ
아래는 이 포스트에서 사용할 패키지들이다.
from openai import OpenAI
import os
KeyOpenAI.txt 파일은 필자가 저장해놓은 API key이다. API key는 OpenAI 사이트에서 생성이 가능한데, 생성할 때 딱 한번만 key를 볼 수 있으므로 안전하게 key를 저장해놓는 것이 좋다.
(주의!) 절대로 다른 사람과 공유해서는 안 되므로 주의하자.
매번 이렇게 coding을 하는 것이 귀찮다면, 아예 Windows 시스템 세팅에서 환경변수로 설정하는 방법도 있다.
(참고: https://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety)
file = "KeyOpenAI.txt"
with open(os.path.normpath(file), "r") as f:
api_key = f.readline().strip()
os.environ["OPENAI_API_KEY"] = api_key
client = OpenAI()
이제 아래의 코드로 gpt-3.5 turbo를 직접 이용해보자.
여기서 가장 중요한건 messages 변수인데, role과 content를 설정해주는 방식이다. role은 system, user, assistant가 존재한다. user는 말 그대로 사용자로, 원하는 질문이나 텍스트를 자유롭게 content로 설정하면 된다. 반면에, system은 gpt의 역할을 설정해주는 것이라고 보면 된다. 이를 통해서 생성되는 텍스트를 더욱 사용 목적에 맞게 조정할 수 있다.
필자는 수학에 관심이 많아 수학과 관련된 질문을 해보았다.
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "수학에 대한 전문적인 지식을 갖춘 연구 보조"},
{"role": "user", "content": "Lie group 이란 무엇인가? 다른 일반적인 group과 어떤 차이가 있나?"}
]
)
print(completion.choices[0].message.content)
Lie 그룹은 'Lie' 이론에 기반한 수학적 개념으로, 잘 정의된 특정한 성질을 갖춘 군(Group)의 한 종류이다. Lie 그룹은 매끄러운(manifold) 공간과 군이라는 두 가지 수학적 구조를 함께 가지는 특별한 형태의 그룹이다.
Lie 그룹은 군 그룹의 원소들이 매끄럽게 연속적으로 이루어진 공간인 매끄러운 다양체(Manifold) 위에 정의된 그룹이다. 다시 말해, Lie 그룹은 군의 구조와 함께 매끄러운 구조를 가지고 있기 때문에, Lie 그룹 내의 변환(Transformation)들이 미분가능하며, 이러한 미분 가능성이 Lie 그룹의 중요한 특징 중 하나이다.
이러한 Lie 그룹의 특성으로 인해 Lie 그룹은 물리학, 공학, 컴퓨터 과학 및 다양한 수학적 분야에서 광범위하게 응용되고 있다. 이에 비해, 다른 일반적인 군(그룹)은 매끄럽지 않은 구조를 가질 수 있으며, 그 종류에 따라 미분가능하지 않거나 미분 가능성과 관련이 없는 경우도 있다.
따라서 Lie 그룹은 군(Group) 이론과 더불어 매끄럽고 미분 가능한 변환을 다루는 데 필수적이며, 이러한 특징을 통해 Lie 그룹은 다양한 응용 분야에서 중요한 수학적 개념으로 활용되고 있다.
다른 parameter들을 조정하여, 내 목적에 더욱 맞는 텍스트를 생성시킬 수도 있다.
temperature: 생성되는 텍스트의 랜덤한 정도, 또는 창의성 이라고 보면 된다. 0~2의 값을 줄 수 있는데 클수록 랜덤성이 커진다. 보통 논문이나 보고서 같은 경우에는 값을 낮게 설정하는 것이 좋다.
max_token: token의 최대 개수. 생성되는 텍스트의 길이를 조정하는 parameter이다.
presence_penalty: 반복 되는 토큰을 penalize 하는 정도이다. -2~2의 값을 가지며, 높을 수록 같은 단어나 표현을 반복하지 않는다.
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "수학에 대한 전문적인 지식을 갖춘 연구 보조"},
{"role": "user", "content": "Lie group 이란 무엇인가? 다른 일반적인 group과 어떤 차이가 있나?"}
],
temperature=0.8,
max_tokens=512,
presence_penalty=1.0,
)
print(completion.choices[0].message.content)
Lie group는 군(group)이면서 동시에 미분 가능한 매니폴드(manifold)인 수학적 객체를 가리킵니다. Lie group은 그룹적인 구조와 미분 가능한 매니폴드의 구조를 모두 가지고 있기 때문에 대칭성, 변환 등을 연구하는데 유용하게 활용됩니다.
일반적인 그룹은 집합과 이항 연산(주로 곱셈 또는 덧셈)으로 이루어져 있습니다. 예를 들어, 실수의 덧셈으로 이루어진 (R, +)는 일반적인 그룹입니다. 반면, Lie group은 이러한 그룹의 원소가 미분 가능한 매니폴드를 이루는 특징을 가지고 있습니다. 즉, Lie group은 군의 구조를 지닌 공간입니다.
Lie group은 대각화 가능한 행렬들로 이루어진 그룹이나 회전행렬들로 이루어진 그룹 등 다양한 형태를 가질 수 있습니다. Lie group은 대칭성, 변환, 물리학, 공업수학 등 다양한 분야에서 중요하게 활용되고 있습니다.