최근(작년말)에 회사에서 STT 관련된 개발을 수행한 바 있다. 그 당시에는 외부 라이브러리를 구매해서 사용했고 성능도 나쁘지 않았던 기억이 있다. 이번에는 허깅페이스의 STT 라이브러리를 사용해서 음원 파일을 읽고 한글로 뽑는 작업을 해 보았다.
% brew install ffmpeg portaudio
추가로 필요한 것만 기재한다.
pip install transformers torch langchain
from transformers import pipeline
from langchain.schema import HumanMessage
import torch
from modules.llm.llm_huggingface_hub import getLlmHuggingface
from modules.environment.loadenv import setLoadDotEnv
# 환경 변수 설정
setLoadDotEnv()
# 1. Whisper STT 파이프라인 설정
# - GPU가 사용 가능하면 GPU를 사용하고, 아니면 CPU를 사용
# - OpenAI의 Whisper-medium 모델을 사용하여 한국어 음성 인식 설정
device = 0 if torch.cuda.is_available() else -1
stt_pipe = pipeline(
model="openai/whisper-medium",
task="automatic-speech-recognition",
device=device
)
# 2. 음성 파일을 텍스트로 변환하는 함수
# - 입력: wav_path (음성 파일 경로)
# - 출력: 인식된 텍스트
def transcribe_audio(wav_path):
result = stt_pipe(wav_path, generate_kwargs={"language": "ko"})
return result["text"]
# 3. LangChain을 통한 LLM 설정
# - HuggingFace Hub의 LLM 모델을 사용
llm = getLlmHuggingface();
# 4. LLM에 질문을 보내고 응답을 받는 함수
# - 입력: text (질문 텍스트)
# - 출력: LLM의 응답
def ask_llm(text):
response = llm([HumanMessage(content=text)])
return response.content
# 5. 전체 파이프라인 실행 함수
# - 음성 파일을 텍스트로 변환
# - 변환된 텍스트를 LLM에 전달하여 요약 생성
def run_pipeline(wav_path):
print("음성 인식 중...")
text = transcribe_audio(wav_path)
print("인식된 텍스트:", text)
print("\n LLM 응답 생성 중...")
response = ask_llm(f"""인식된 텍스트는 아래와 같습니다. \n\n {text} \n\n 두 사람의 대화를 요약하여 한글로 답변해 주세요.""")
print("LLM 응답:", response)
# 예시 실행: stt.mp3 파일을 입력으로 사용
run_pipeline("./stt.mp3")
음성 인식 중...
인식된 텍스트: 우리 다음 주 금요일에 보기로 했잖아. 혹시 다른 날로 옮겨도 돼? 응, 괜찮아. 근데 왜? 무슨 일 있어? 그날 회사 회식이 잡혀서, 미안. 뭘, 우린 다음에 보면 되지. 그런데 너네 회사는 회식 진짜 자주 한다. 지난주에도 회식했다고 하지 않았어? 어, 도대체 회식을 왜 이렇게 자주 하는지 이해를 못하겠어. 나는 회식 좋은데, 편하게 업무 얘기도 하고 맛있는 것도 먹고. 업무 얘기는 업무 시간에 하면 되지. 왜 퇴근하고 나서까지 회사 사람들하고 같이 시간을 보내야 하냐고. 게다가 늦게까지 술 마시고 그러다 보면 다음 날 제대로 일도 못할 정도야. 요즘은 그렇게 술 마시는 회식 대신 같이 공연도 보고 취미생활도 하는 그런 회식도 많이 하잖아. 우리 회사도 조금씩 그렇게 바뀌고 있는데. 뭐? 공연 보고 취미생활 하는 것까지 회사 동료하고 같이 한다고? 나는 정말 이해가 안 간다. 일할 때는 일에 집중하다 보니까 서로에 대해 잘 모르는 부분이 많잖아. 이런 시간을 통해 서로 친해지게 되면 일할 때도 도움이 되던데 특히 평소에 좀 어려웠던 선배나 상사들하고 편하게 생각을 나눌 수도 있고 선배나 상사하고 같이 있으면 그건 정말 일의 연장이잖아 그런 자리는 전혀 편하지 않다고
LLM 응답 생성 중...
💬 LLM 응답: <bos><start_of_turn>user
인식된 텍스트는 아래와 같습니다.
우리 다음 주 금요일에 보기로 했잖아. 혹시 다른 날로 옮겨도 돼? 응, 괜찮아. 근데 왜? 무슨 일 있어? 그날 회사 회식이 잡혀서, 미안. 뭘, 우린 다음에 보면 되지. 그런데 너네 회사는 회식 진짜 자주 한다. 지난주에도 회식했다고 하지 않았어? 어, 도대체 회식을 왜 이렇게 자주 하는지 이해를 못하겠어. 나는 회식 좋은데, 편하게 업무 얘기도 하고 맛있는 것도 먹고. 업무 얘기는 업무 시간에 하면 되지. 왜 퇴근하고 나서까지 회사 사람들하고 같이 시간을 보내야 하냐고. 게다가 늦게까지 술 마시고 그러다 보면 다음 날 제대로 일도 못할 정도야. 요즘은 그렇게 술 마시는 회식 대신 같이 공연도 보고 취미생활도 하는 그런 회식도 많이 하잖아. 우리 회사도 조금씩 그렇게 바뀌고 있는데. 뭐? 공연 보고 취미생활 하는 것까지 회사 동료하고 같이 한다고? 나는 정말 이해가 안 간다. 일할 때는 일에 집중하다 보니까 서로에 대해 잘 모르는 부분이 많잖아. 이런 시간을 통해 서로 친해지게 되면 일할 때도 도움이 되던데 특히 평소에 좀 어려웠던 선배나 상사들하고 편하게 생각을 나눌 수도 있고 선배나 상사하고 같이 있으면 그건 정말 일의 연장이잖아 그런 자리는 전혀 편하지 않다고
두 사람의 대화를 요약하여 한글로 답변해 주세요.<end_of_turn>
<start_of_turn>model
회의 날짜를 바꾸고 싶다면서 회사 회식이 자주 즐겨 하는데 왜 그런지 이해가 안 되는 이야기를 털어놓고 있다. 회사 사람들과 퇴근 후 술 마시고 늦게까지 보낼 때 술 마시는 회식 대신 공연과 취미활동을 같이 하도록 하고 회사는 점차 바뀌고 있다고 말하고 있다. 회식을 통해 서로 친해지면 일할 때도 도움이 되지만, 퇴근 후 술 마시는 회식은 참 힘들다고 말했다.
**핵심 내용:**
* **회식 날짜 변경:** 다른 날로 회식을 옮길 수 있는지 물어보고, 회식이 자주 열리는 이유를 묻는다.
* **회식에 대한 불만:** 회식을 즐기지만, 늦게까지 술 마시고, 회사 사람들과 퇴근 후 시간을 보내는 것이 업무에 부정적인 영향을 준다는 생각을 털어놓는다.
* **회사의 변화:** 회식을 위한 새로운 방식으로 회사는 변화하고 있다.
* **직접적인 관계 형성:** 회식을 통해 서로 친해지면 일하는 데 도움이 되지만, 퇴근 후 술 마시는 회식은 일상에서 좋지 않다는 생각을 털어놓았다.