본문 바로가기
IT/CHATGPT

[ChatGPT] 음성 회의록 만들기-Whisper

by Tony Jung 2023. 10. 19.
반응형

ChatGPT활용 - Voice to Text 

요 근래 기업내에서는  ChatGPT를 어떤 식으로 활용해서 업무 효율성을 높일 수 있을까에 대하여서  많은 고민을 하고 있을 것 입니다.

보통의 회의때 참석자들은  중요한 내용을 다이어리에 적어두고  자리로 돌아와 PC에서 회의록을 따로 작성할 것입니다. 물론 Zoom 이나  Teams를 이용하여 화상회의를 하였다면 해당 솔루션에서 회의록을 잘 정리해줄 것이고,녹음을 하였다면  네이버 클로버 노트를 이용해서 음성파일을 회의록으로 잘 정리 해주곤 합니다. 그러나 우린 GPT 활용해봐야 하니 GPT를 이용해서 회의중 녹음한 파일을  Voice to Text 를 구현 해 볼까 합니다. 음성인식을 위해서는 OpenAI에서 발표한 음성인식 (ASR : Automatic Speech Recognition) 모델인 whisper 를 활용할 것입니다. whisper는 발표되기전 680,000시간동안 다양한 언어로 학습이 진행된 모델로 한글은 약 8,000시간학습이 학습 되었다 합니다. (영어를 제외한 언어 중 7위). 아마  whisper 논문에  공동저자로 기재되고 개발에 직접 참여한 한국분의 영향이지 크지 않을까 합니다. 

 

Python을 이용해서 Voice To Text 진행하려면 우선 openai를 import 시켜줘야 합니다. os는 파일을 업로드 하기 위해 필요한 것일 뿐입니다. 

import openai
import os

 

whisper 에서 지원되는 파일 확장자는 mp4, m4a, m4p,m4b, mp3 파일입니다. 파일 업로드가 되어 있다는 전제하에 음성 파일을 오픈하여  openai.Audio.transcribe("whisper-1", audio_file) 형태로 호출을 하면 음성 파일이 간단하게 텍스트 파일로 변환됩니다. 

audio_file = open("녹음파일.m4a", "rb")
transcript = openai.Audio.transcriptions.create(
	model="whisper-1",
 	file=audio_file
)
#기존 openai.Audio.transcribe 에서 transcriptions.create 로 변경
voice_text = transcript.text

 

위의 코드의  voice_text 변수를 출력하면 단순 텍스트로 변환이 됩니다. 근데 혹시라도 몇분 몇초에 어떤 이야기를 했는지 까지 정리되서 텍스트로 변환하고 싶을때는 아래의 코드를 사용하면 됩니다. 

반응형

 

audio_file = open("음성파일.m4a", "rb")
transcript = openai.Audio.transcriptions.create(
  file=audio_file,
  model="whisper-1",
  response_format="srt"
 )
voice_text = transcript.text

결과값은 아래와 같이 대화내용이 구분되어 텍스트로 변환된답니다. 

 

텍스트 저장을 하여 음성 파일을 텍스트로 만드는 과정까지 진행하였습니다.

이젠 저장된 텍스트를 GPT에게 요약 해달라고 요청을 해야겠지요. 요약에 있어서는 Prompt의 중요성이 강조되는 부분입니다. OpenAI에서 예시로 제공하는 아래의 요약 추출(Summary extraction) Prompt를 활용하면 보다 활용성 있는 결과값을 얻을 수 있을 것입니다. 

OpenAI 사이트에 들어가면 Summary extraction 예시외에 Key points extraction,Action item extraction,Sentiment analysis 등 다양한 Prompt 예제가 있으니 꼭 참조하세요 

You are a highly skilled AI trained in language comprehension and summarization.
I would like you to read the following text and summarize it into a concise abstract paragraph.
Aim to retain the most important points, 
providing a coherent and readable summary that could help a person understand the main points of the discussion without needing to read the entire text.
Please avoid unnecessary details or tangential points.

당신은 언어 이해와 요약 훈련을 받은 고도로 숙련된 AI입니다. 
다음 본문을 읽고 간결하고 추상적인 문단으로 요약해 보시기 바랍니다.
전체 텍스트를 읽지 않고도 토론의 주요 요점을 이해하는 데 도움이 될 수 있는 일관되고
읽기 쉬운 요약을 제공하여 가장 중요한 요점을 유지하는 것을 목표로 하십시오. 
불필요한 세부사항이나 접선점을 피하십시오.

위의 Prompt를 이용하여 GPT4에 전달하면 깔끔하게 요약해서 결과값을 도출 할 것입니다. 역할 기반 모델로 System에게는 요약할하는 전문 AI 역할을 배정하고, User가 요약이 필요한 텍스트 원문을 제공하는 형태입니다. 

response = openai.chat.completion.create(
  model="gpt-4",
  temperature=0,
  messages=[
   {
    "role": "system",
    "content": Prompt #요청 prompt
   },
   {
    "role": "user",
    "content": transcription #음성에서 텍스트로 변환된 값
   }
  ]
 )
 return response['choices'][0]['message']['content']

모델은 gpt4를 사용한 예제 입니다. gpt3.5 Turbo, Davinci 모델도 사용하여 요약은 가능하지만 두 모델은 최대 토큰의 제약 이 있습니다. 아무래도 음성을 텍스트로 변환하면 텍스트의 길이가 꽤 길기 때문에 두 모델을 사용할 경우에는 텍스트의 토큰을 계산 한 후 특정 토큰값 단위로 나누어서 요약하여야 합니다.(토큰을 계산해 가며 요약한 내용을 또 취합한 후  한번에 전체를 요약하는 과정이 필요하겠지요),

아래는 직접 만들어서 활용하고 있는 예시 입니다. 여러분들도 잘 활용하여 업무 효율을 높여 보시기 바랍니다~ ㅎㅎ

 

GPT4 VOICE TO TEXT 활용예시

 

 

반응형

댓글