본문 바로가기

활동/SK네트웍스 Family AI 캠프 2기

SK네트웍스 Family AI 캠프 2기 : 23th week (10월 3주차)

이번 주에는 여러모로 힘든 일이 많았어요.

제 개인적인 일... 중간 프로젝트 이슈... 취업 준비 등...

 

솔직히 안 속상하다면 거짓말이에요.

힘들고 속상해요.

 

그치만 어쩌겠어요.

다 울었으면 할 일을 다시 해야 하는 게 맞죠.

사실 울지는 않았어요.

아마 그건 옛날에 미리 많이 울어서 그랬나 봐요.

 

괜찮아질 거라고 생각해요.

다시 일어서서 제 길을 가면 되는 거니까... 힘낼게요!

저는 그런 거 잘해요. 다시 힘내는 거 잘하거든요.

 

 

● 성취

이번 주에는 중간 프로젝트 발표회가 있었어요.

SK네트웍스, 엔코아 현직자분들께서 참여해 주셨습니다.

 

현재 진행하고 있는 프로젝트 방향에 대해 조언을 해주셨습니다.

저희 팀의 경우에는 마케팅 방향 쪽으로 조언을 많이 들었습니다.

어떤 방향으로 프로젝트를 어필하면 좋을지 생각해 봐야겠어요.

 

처음에는 마냥 난해하게만 느껴졌던 'LLM 활용 인공지능 인플루언서 만들기' 주제였지만 자주 보니까 꽤 정감이 가요.

제가 책임져야 하는 주제인데 제가 미워하면 어쩌겠어요.

지속적으로 애정을 쏟아부으면 상호작용으로 인해 더 좋은 결과로 흘러갈 것이라 생각해요!

난해함이 개성으로 보일 수 있도록 많은 애정을 줘야겠어요.

 

덕분에 이용자 및 개발 관점에서 되돌아볼 수 있는 계기가 되었습니다. 감사합니다!

그리고 우리 팀원들도 이슈 견디느라 수고 많았어요~ 앞으로도 잘해보자!

 

 

● 학습 & 개선

프로젝트 아이디어 논의를 하다가 키워드 추출 이야기가 나와서 '엔티티 추출 방법'에 대해 공부하는 시간을 가졌습니다.

오늘은 제가 개인적으로 공부했던 코드를 작성해 보도록 할게요!

 

# 라이브러리 설치

!pip install langchain openai

 

먼저 langchain과 openai 라이브러리를 설치해 줍니다.

 

 

# OpenAI API Key 설정

OPENAI_KEY = "여러분의_OPENAI_API_KEY"

 

다음으로 OpenAI API Key를 설정해 줍니다.

해당 예제에서는 GPT 모델을 사용할 것이므로 OpenAI API Key가 필요합니다.

 

 

# 간단 예제

from langchain.chains import create_extraction_chain
from langchain.chat_models import ChatOpenAI

# 스키마(Schema) 설정
schema = {
    "properties": {
        "name": {"type": "string"},
        "height": {"type": "integer"},
        "hair_color": {"type": "string"},
    },
    "required": ["name", "height"],
}

# Input
inp = """알렉스는 키가 5피트입니다. 클라우디아는 알렉스보다 1피트 더 크고 그보다 더 높이 점프합니다. 클라우디아는 갈색 머리이고 알렉스는 금발입니다."""

# Run chain
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo", openai_api_key=OPENAI_KEY)
chain = create_extraction_chain(schema, llm)
chain.run(inp)

'''
[{'name': '알렉스', 'height': 5, 'hair_color': '금발'},
 {'name': '클라우디아', 'height': 6, 'hair_color': '갈색'}]
'''

 

먼저 스키마를 설정해 줍니다.

저는 특정인의 이름(name), 키(height), 머리카락 색상(hair_color)에 관심이 있어요.

특히 추출한 각각의 entity들이 가진 이름과 키는 꼭 알고 싶어서 required로 명시했습니다!

 

인풋으로 위와 같은 예시(알렉스와 클라우디아)를 줍니다.

 

그 다음으로 llm 셋팅을 마친 후, 스키마와 llm을 엮어서 chain을 생성해 줍니다.

그러면 하단에 닥스트링으로 표시한 것처럼 결과가 나타납니다.

특징들이 entity 형태로 잘 추출되었지요?

 

 

# required 정보를 부여하지 않을 경우

schema = {
    "properties": {
        "person_name": {"type": "string"},
        "person_height": {"type": "integer"},
        "person_hair_color": {"type": "string"},
        "dog_name": {"type": "string"},
        "dog_breed": {"type": "string"},
    },
    "required": [],
}

chain = create_extraction_chain(schema, llm)

inp = """알렉스는 키가 5피트입니다. 클라우디아는 알렉스보다 1피트 더 크고 그보다 더 높이 점프합니다.
클라우디아는 갈색 머리이고 알렉스는 금발입니다. 윌로우는 다른 개들과 놀기를 좋아하는 독일 셰퍼드이며, 항상 근처에 사는 밀로라는 보더 콜리와 놀고 있는 것을 볼 수 있습니다."""

chain.run(inp)

'''
[{'person_name': '알렉스',
  'person_height': 5,
  'person_hair_color': '금발',
  'dog_name': '윌로우',
  'dog_breed': '독일 셰퍼드'},
 {'person_name': '클라우디아', 'person_height': 6, 'person_hair_color': '갈색'},
 {'dog_name': '밀로', 'dog_breed': '보더 콜리'}]
 '''

 

 

entity 구분 단위가 당장 떠오르지 않는 상황이라면... 일단 위 예시처럼 required에 빈 리스트를 입력하셔도 됩니다.

그래도 결과가 나오긴 해요!

 

 

# 서술형 정보(extra_info) 추출

schema = {
    "properties": {
        "person_name": {"type": "string"},
        "person_height": {"type": "integer"},
        "person_hair_color": {"type": "string"},
        "dog_name": {"type": "string"},
        "dog_breed": {"type": "string"},
        "dog_extra_info": {"type": "string"},
    },
}

chain = create_extraction_chain(schema, llm)

inp = """알렉스는 키가 5피트입니다. 클라우디아는 알렉스보다 1피트 더 크고 그보다 더 높이 점프합니다.
클라우디아는 갈색 머리이고 알렉스는 금발입니다. 윌로우는 다른 개들과 놀기를 좋아하는 독일 셰퍼드이며, 항상 근처에 사는 밀로라는 보더 콜리와 놀고 있는 것을 볼 수 있습니다."""

chain.run(inp)

'''
[{'person_name': '알렉스',
  'person_height': 5,
  'person_hair_color': '금발',
  'dog_name': '윌로우',
  'dog_breed': '독일 셰퍼드',
  'dog_extra_info': '근처에 사는 밀로라는 보더 콜리와 놀고 있는 것을 볼 수 있습니다.'},
 {'person_name': '클라우디아', 'person_height': 6, 'person_hair_color': '갈색'}]
 '''

 

entity 특성에 extra_info를 입력하면, 관심 있는 영역의 서술형 정보를 획득할 수 있습니다!

메인 기능이라 보기는 어렵지만 가끔씩 필요할 때가 있을 것 같긴 합니다.


이번 주에는 헤쳐나가야 할 난관이 많네요.

그렇지만 이번에도 잘 풀어나갈 것이라 생각해요.

늘 그렇게 살았으니까 이번에도 할 수 있을 것이라 믿어요.

힘내보겠습니다!

 

+) 부족한 부분이 있으면 댓글로 말씀해 주세요! 겸허한 마음으로 더 공부하겠습니다.