기획안을 평가하고 요약하는 기능을 프로젝트를 위해 구현하기 전 Evaluation Bot에 대한 MVP를 정의하고 아래와 같이 구현했습니다.
먼저 기획의도에 맞게 아래의 내용들을 MVP에 선정하였습니다.
- 1차 평가: 정량평가
- 2차 평가: 내용평가
- 3차 평가: 영상 심의 평가
그리고 추가적으로 이번 구현과 추후 프로젝트 진행에 있어 핵심인 좋은 기획안과 나쁜 기획안 데이터를 확보했습니다.
먼저 Evaluation Bot의 각 평가에 대한 구현 동기와 과정은 아래와 같습니다.
구현 동기
1차 평가: 먼저 프로젝트 핵심 목표로써 기존의 서비스에서의 효율적이 AI 사용기준이 존재해야 한다고 판단했습니다. 그래서 간단한 수치적인 평가를 통해 2,3차 평가에서의 AI 사용에 대한 기준점으로 삼게 됐습니다.
2차 평가: 현재 데이터 확보에 있어 어려움이 있는 관계로 대규모 데이터를 통한 모델 구현이 아닌 내용의 논리적인 구조를 판단하여 평가를 하려고 판단하게 됐습니다. 그래서 좋은 기획안에서의 논리적인 구조를 기준으로 LLM을 활용해 평가를 진행할 예정입니다. 하지만 여전히 테스트를 위한 데이터가 필요하기 때문에 좋은 반응을 이끈 영상들에 대한 요약을 생성하고 기획안으로 전환할 예정입니다. 또한 나쁜 기획안의 경우 좋은 기획안의 논리구조를 변경한 형태로 준비할 예정입니다.
3차 평가: 영상심의위원회에서 선정한 기준을 바탕으로 기획안을 평가할 예정입니다. 정확한 기준이 있고 주어진 기준을 바탕으로 연령 설정등과 같이 확장이 가능하다는 판단이 됐기에 이와 같은 결정을 하게 됐습니다.
데이터셋 확보: 데이터셋의 경우 기존 예시가 없고 만들어진 결과로 이어진 예시가 충분치 않아 만들어진 영상물을 AI 서비스를 통해 요약해 기획안의 양식으로 전환하는 과정을 수동으로 진행하기로 결정했습니다.
구현 과정
먼저 테스트를 위한 데이터셋을 아래와 같은 방식으로 확보했습니다.
- 기획안 2차 평가와 3차 평가를 둘 다 통과할만한 동영상을 찾는다.
- 기획안 2차 평가는 통과하나 3차 평가는 통과하지 못할 만한 동영상을 찾는다.
- sider.io를 활용하여 해당 영상을 요약하고 ChatGpt를 통해 선정한 양식대로 기획안을 작성하게 한다.
위의 과정을 통해 아래와 같은 양식으로 기본적인 데이터셋을 확보하여 MVP구현에서 사용했습니다.
양식1 | 양식2 | 양식3 | 양식4 |
title genre length director's note detail |
title genre length traget audiences director's note detail |
title genre length traget audiences goals items director's note detail |
title genre length traget audiences selling point director's note detail |
데이터셋 확보 뒤 1,2,3차 평가를 진행하는 함수를 아래와 같이 구현했습니다. 구체적인 코드는 Github 저장소를 확인해 주시기 바랍니다.
def MVP_Evaluation_Bot(proposal):
# 1차 평가: 정량평가
if (not volume_evaluation(proposal)):
return False
# 2차 평가: 기획안 내용평가
if (not content_evaluation(proposal)):
return False
# 3차 평가: 영상심의 평가(유해성 검사)
if (not regulation_evaluation(proposal)):
return False
return True
1차 평가: 정량평가
1차 평가는 다음 단계를 넘어가기 위한 첫 번째 관문으로 기획안에 충분한 토큰이 있는지 없는지를 tiktoken을 활용하였습니다.
import tiktoken
def volume_evaluation(proposal):
print("volume check!")
tokenizer = tiktoken.encoding_for_model("gpt-4o-mini")
print(len(tokenizer.encode(proposal)))
return (len(tokenizer.encode(proposal))) > 200
2차 평가: 기획안 내용평가
2차 평가는 MVP단계로 현재 영상트렌드와 같은 데이터를 확보할 수 없기에 기획안의 구성안의 내용들이 논리적으로 연관되어 있는지를 평가하고 점수로 반환하는 Prompt를 작성했습니다. (구체적인 Prompt는 Github을 참고해 주세요!)
# the proposal's elements should be correleated to each other(logically)
def content_evaluation(proposal):
print("content check!")
llm = ChatOpenAI(model='gpt-4o-mini', temperature=0.4)
prompt_template = ChatPromptTemplate.from_messages(
[("system", content_template), ("user", "{proposal}")]
)
chain = prompt_template | llm | StrOutputParser()
print(chain.invoke({"proposal": proposal}))
return True
3차 평가: 영상심의평가(유해성검사)
3차 평가는 영상심의위원회에서 작성한 청소년 유해성 검사를 기반으로 평가를 진행하도록 구현하였습니다.(구체적인 Prompt는 Github을 참고해 주세요!)
추가적으로 Google이 선정한 숏폼 유해성 판단 기준이 있었다. 그래서 추후 고도화 작업에 있어서 위의 내용과 합쳐서 새로 만들 예정이다.
def regulation_evaluation(proposal):
print("regulation check!")
llm = ChatOpenAI(model='gpt-4o-mini', temperature=0.4)
prompt_template = ChatPromptTemplate.from_messages(
[("system", regulation_template), ("user", "{proposal}")]
)
chain = prompt_template | llm | StrOutputParser()
print(chain.invoke({"proposal": proposal}))
return True
기본적인 MVP 구현은 기획한 로직의 작동여부를 확인하고 추후 고도화 작업에 있어 어떤 방식으로 발전시킬지에 대한 고민을 하기 위해서 진행됐다. 그래서 일단 로직의 작동여부는 아래와 같이 작동한다는 것을 확인했다.
위와 같이 내용평가를 통과해도 유해성 검사에서 통과하지 못하는 로직은 완성 됐다.
동시에 Feedback과 Summary Generator를 추가했다. 여기서도 핵심은 평가 별로 Prompt를 달리하며 하나의 Prompt에 여러 작업을 일임하는 것이 아닌 다양한 Prompt를 상활별로 사용할 수 있도록 준비하는 것이다. 그래서 1차, 2차, 3차 평가별 Feedback 생성 Prompt를 만들어 내는 것이 중요하다.
그래서 각 평가별 Prompt를 준비하였고 Summary의 경우 미리 다른 파트와 협의한 내용을 바탕으로 구현했다.
(구체적인 Prompt는 FastAPI로 전환한 뒤에 확인하는게 좋다.)
그래서 이번 MVP구현을 통해 아래와 같은 내용을 협의하여 고도화 작업에서 진행할 예정이다.
- 기획안 및 평가 방식 확정
- 기획안의 양식을 지정하여 양식 안의 내용의 연관관계를 평가
- 기획안의 양식은 사용자가 자유롭게 작성하게 한 다음 타깃, 목적, 의도 등을 추출해 평가
- 기존의 LLM이 아닌 sLM을 사용하는 방식 고려
다음으로 Profile Evaluation에 대한 MVP 구현을 진행하고 바로 FastAPI로의 전환 및 Prompt변경으로 진행할 예정이다.
아래의 Github 저장소에서 전체 코드를 확인할 수 있다.
Joing-Dev: proposal evaluation
참고자료
'AI > Projects' 카테고리의 다른 글
Project Joing: 결국은 데이터 수집 (4) | 2024.11.09 |
---|---|
Project Joing - MVP 구현: Profile Evaluation (1) | 2024.11.07 |
Project Joing - 기능별 Intro: 기획안 평가 및 요약 (2) | 2024.10.10 |
Project Joing - Intro (4) | 2024.10.04 |
Project: HowAbout - Outro: 회고 (0) | 2024.09.25 |