이번 포스트에서는 ChatGPT 활용기에 대해 포스팅하고자 한다.
챗GPT(ChatGPT)는 OpenAI가 개발한 프로토타입 대화형 인공지능 챗봇이다. ChatGPT는 대형 언어 모델 GPT-3의 개선판인 GPT-3.5를 기반으로 만들어졌으며, 지도학습과 강화학습을 모두 사용해 파인 튜닝되었다.
현재는 GPT-4 모델 및 GPT-4o(omni) 모델을 주로 사용하고 있다.
ChatGPT는 인간과 유사한 글자를 생성하는 뛰어난 기능을 입증했지만 훈련 데이터에 존재하는 편견을 쉽게 상속하고 증폭할 수 있다. 이는 인종, 성별, 언어, 문화 집단에 따른 다양한 견해와 태도 등 다양한 인구통계에 대한 허위 진술이나 부당한 태도로 나타날 수 있다.
모른다는 답변을 내놓을 수 없어 잘못된 내용을 전달할 수도 있다는 점을 유의해야 한다.

GPT 활용기를 앞으로도 계속 포스팅할 계획이다
복잡한 코드가 아니라면 간단한 알고리즘은 GPT를 활용하여 짤 수 있다.
지금 설계하고자 하는 알고리즘은 2개의 다각형(사각형이 아님)이 존재할 때 서로 중첩 되는 지의 여부를 확인하는 것이다.
질문 : 파이썬으로 2개 이상의 다각형이 겹치는 알고리즘 만들어줘
GPT 답변 : 다각형이 겹치는지 확인하는 알고리즘은 Computational Geometry의 한 영역으로, "Separating Axis Theorem (SAT)"를 사용하면 2D 다각형의 충돌을 감지하는 데 유용합니다. 이 방법은 각 다각형의 에지에 대해 수직축을 계산하고, 이를 기준으로 투영된 간격이 겹치는지 확인합니다. 모든 에지에 대해 겹치지 않는 축이 하나라도 있으면 다각형이 겹치지 않는다는 것을 알 수 있습니다. 다각형을 정의하고, SAT를 사용하여 겹치는지 확인하는 파이썬 코드를 작성해보겠습니다.
from typing import List, Tuple
import numpy as np
def polygon_edges(polygon: List[Tuple[float, float]]) -> List[Tuple[Tuple[float, float], Tuple[float, float]]]:
"""Return the edges of the polygon as a list of tuples of points."""
edges = []
for i in range(len(polygon)):
start = polygon[i]
end = polygon[(i + 1) % len(polygon)]
edges.append((start, end))
return edges
def normalize(v: Tuple[float, float]) -> Tuple[float, float]:
"""Return the unit vector of the vector."""
norm = np.linalg.norm(v)
return (v[0] / norm, v[1] / norm)
def perpendicular(v: Tuple[float, float]) -> Tuple[float, float]:
"""Return a vector that is perpendicular to the given vector."""
return (-v[1], v[0])
def project_polygon(axis: Tuple[float, float], polygon: List[Tuple[float, float]]) -> Tuple[float, float]:
"""Project a polygon onto an axis and return the minimum and maximum values."""
dots = [np.dot(axis, point) for point in polygon]
return (min(dots), max(dots))
def overlap(proj1: Tuple[float, float], proj2: Tuple[float, float]) -> bool:
"""Check if the projections overlap."""
return proj1[0] <= proj2[1] and proj2[0] <= proj1[1]
def polygons_intersect(polygon1: List[Tuple[float, float]], polygon2: List[Tuple[float, float]]) -> bool:
"""Check if two polygons intersect using the Separating Axis Theorem (SAT)."""
for polygon in [polygon1, polygon2]:
for edge in polygon_edges(polygon):
axis = perpendicular((edge[1][0] - edge[0][0], edge[1][1] - edge[0][1]))
axis = normalize(axis)
proj1 = project_polygon(axis, polygon1)
proj2 = project_polygon(axis, polygon2)
if not overlap(proj1, proj2):
return False
return True
# Example usage
polygon1 = [(0, 0), (2, 0), (2, 2), (0, 2)]
polygon2 = [(1, 1), (3, 1), (3, 3), (1, 3)]
polygon3 = [(3, 3), (5, 3), (5, 5), (3, 5)]
print(polygons_intersect(polygon1, polygon2)) # Should return True
print(polygons_intersect(polygon1, polygon3)) # Should return False
이 코드는 다각형의 에지를 기반으로 수직 축을 구하고, 각 축에 대해 다각형을 투영하여 겹치는지 확인합니다. 다각형 간에 겹침이 없으면 False를 반환하고, 그렇지 않으면 True를 반환합니다. 이 코드는 2D 다각형에 대해 SAT를 사용하여 충돌 감지를 수행합니다.
이와 같이 사람이 일일히 해야했던 구체적인 프로세스를 포함하는 알고리즘을 GPT는 단 몇 초 내에 코드와 부가 설명을 할 수 있다는 것을 알 수 있다.
앞으로도 자주 활용하여 효율이 좋을 것 같다.