배경 및 목적
외국 사람들이 K 드라마를 좋아하는 점을 고려하여 K 드라마 제작사들이 유튜브에 올린 홍보용 드라마 영상 클립을 활용하여 한국어를 배우는 외국 사람을 위한 한국어교육 콘텐츠를 제작해보기로 했습니다.
참고 자료
지난 글에서 소개해드린 아래 책을 더 살펴보기도 했습니다.
타무라 하루카. (2024). 랭체인 완벽 입문 (최용 역). 위키북스.
서지영. (2024). 랭체인으로 LLM 기반의 AI 서비스 개발하기. 길벗.
하지만 이번에는 주로 Claude를 사용했습니다. 코딩 도움을 받아야 해서요.^^
활용 툴
VSCode: 코딩 환경입니다
Obsidian: 프로젝트에서 완성된 자료를 보관하고, 더 나아가 활용하는 툴입니다.
OpenAI, LangChain, SpaCy: 데이터 분석과 콘텐츠 생성 및 처리 과정에 활용했습니다.
실행 과정
아래는 프로젝트의 폴더 구조입니다.
KoreanDrama/
│
├── config/
│ └── settings.yaml # 프로젝트 설정 파일
│
├── data/
│ ├── audio/ # 드라마 영상에서 추출한 오디오 파일
│ └── script_stt/ # 오디오에서 추출한 원본 대본
│
├── generated/ # 자동 생성된 중간 데이터
│ ├── list_word/ # 대본에서 추출한 어휘와 표현 목록
│ ├── list_grammar/ # 대본에서 추출한 문법 목록
│ ├── question_word/ # 어휘와 표현 문제 (초안)
│ ├── question_grammar/ # 문법 문제 (초안)
│ └── question_comprehension/ # 읽기 이해 문제 (초안)
│
├── KoreanDrama_vault/ # 옵시디언 볼트 (최종 데이터 저장소)
│ ├── data/ # 검토 완료된 최종 데이터
│ │ ├── script/ # 완성된 드라마 대본
│ │ ├── list_word/ # 완성된 어휘와 표현 목록
│ │ ├── list_grammar/ # 완성된 문법 목록
│ │ ├── question_word/ # 완성된 어휘 문제
│ │ ├── question_grammar/ # 완성된 문법 문제
│ │ └── question_comprehension/ # 완성된 읽기 문제
│ │
│ └── Resources/ # 기타 참고 자료
│
├── src/ # 소스 코드
│ ├── audio_from_youtube.py # 유튜브 동영상에서 mp3 추출
│ ├── script_from_youtube.py # 유튜브 동영상에서 대본 추출
│ ├── list_word.py # 대본에서 어휘/표현 목록 추출
│ ├── list_grammar.py # 대본에서 문법 목록 추출
│ ├── question_word.py # 어휘/표현 문제 생성
│ ├── question_grammar.py # 문법 문제 생성
│ ├── question_comprehension.py # 읽기 문제 생성
│ └── utils.py # 유틸리티 함수
│
├── notebooks/
│ └── analysis.ipynb # 데이터 분석용 주피터 노트북
│
├── datalist.csv # 작업 중인 데이터 목록 및 처리 현황
├── requirements.txt # 프로젝트 의존성 목록
└── README.md # 프로젝트 개요 및 사용 방법
아래는 업무단계별 설명입니다.
드라마 콘텐츠 수집:
YouTube에서 한국 드라마 영상의 오디오를 추출합니다. (파이썬 코드를 이용할 수도 있으나 yout.com이 편리해서 이 웹사이트를 이용했습니다.)
추출된 오디오에서 음성 인식(STT)을 통해 대본을 생성합니다. (작성한 파이썬 코드의 결과물이 만족스럽지 않아 daglo 사이트를 이용했습니다. 향후 파이썬 코드의 내용을 개선한다면 만족스러운 결과를 얻을지도 모르겠습니다.)
언어 학습 자료 생성:
대본에서 어휘, 표현, 문법 목록을 추출 합니다. (OpenAI API, LangChain, SpaCy 등을 이용해서 자동생성하였습니다. 옵시디언 볼트에 저장된 완성된 기존 샘플을 참고해서 작성하라고 하니 완성도가 높아졌습니다)
추출된 요소를 바탕으로 어휘, 문법, 독해 문제를 자동으로 생성합니다. (OpenAI API, LangChain 등을 이용해서 자동생성하였습니다. 옵시디언 볼트에 저장된 완성된 기존 샘플을 참고해서 작성하라고 하니 완성도가 높아졌습니다)
데이터 관리 및 정제:
자동 생성된 학습 자료(어휘, 표현, 문법 목록과 어휘, 문법, 독해 문제)를 검토하고 수정합니다. (자동 생성된 자료에서 의도에 맞지 않은 부분과 정확성과 완성도가 미흡한 부분을 수작업으로 검토하였습니다.)
최종 데이터를 Obsidian vault에 체계적으로 저장합니다. (검토를 마친 완성된 데이터를 옵시디언 노트로 저장했습니다. 이 노트들은 이후 자동 생성 콘텐츠의 샘플 역할을 합니다.)
데이터 분석:
생성된 데이터를 분석하여 학습 자료의 품질을 평가하거나 개선점을 찾습니다. (향후 해보려고 합니다. 연계 프로젝트도 가능할 것 같고요.)
프로젝트 관리:
작업 중인 드라마 목록과 처리 현황을 추적합니다. (CSV 파일을 만들어 각 동영상별로 단계별 진행상황을 정리하는 간단한 자료입니다. 이 자료를 바탕으로 필요하면 대쉬보드를 만들 수 있지 않을까 싶습니다.)
프로젝트 설정을 관리하고 필요한 라이브러리를 관리합니다. (프로젝트 설정 및 관리를 위한 부분입니다.)
결과 및 인사이트
이 프로젝트를 진행하면서 랭체인을 어느 정도 사용할 것인지 Claude에 물어보았더니 다음과 같이 답을 하네요.
이 프로젝트에서 LangChain의 다양한 기능을 활용할 수 있습니다. 주요 사용 영역과 정도를 살펴보겠습니다:
텍스트 처리 및 분석: LangChain의 텍스트 처리 기능을 사용하여 대본(script_stt)에서 어휘, 표현, 문법을 추출하는 데 활용할 수 있습니다. (list_word.py, list_grammar.py)
사용 정도: 높음자연어 생성:
LangChain의 LLM(Large Language Model) 통합 기능을 사용하여 어휘, 문법, 읽기 이해 문제를 생성할 수 있습니다. (question_word.py, question_grammar.py, question_comprehension.py)
사용 정도: 매우 높음프롬프트 엔지니어링: 문제 생성 시 LangChain의 프롬프트 템플릿을 사용하여 일관성 있고 유연한 문제 생성이 가능합니다.
사용 정도: 높음
체인 및 에이전트: 여러 단계의 처리 과정(예: 대본 추출 → 어휘 추출 → 문제 생성)을 LangChain의 체인으로 구현할 수 있습니다.
사용 정도: 중간
문서 로더 및 변환: LangChain의 문서 로더를 사용하여 다양한 형식의 대본 파일을 로드하고 처리할 수 있습니다.
사용 정도: 중간
벡터 저장소 및 임베딩: 추출된 어휘, 표현, 문법을 벡터화하여 저장하고 유사성 검색에 활용할 수 있습니다.
사용 정도: 낮음-중간
메모리: 문제 생성 시 이전에 생성된 문제의 컨텍스트를 유지하기 위해 LangChain의 메모리 컴포넌트를 활용할 수 있습니다.
사용 정도: 낮음-중간
유틸리티 기능: LangChain의 다양한 유틸리티 기능(예: 텍스트 분할, 요약 등)을 utils.py에서 활용할 수 있습니다.
사용 정도: 중간
전반적으로 이 프로젝트에서는 LangChain의 텍스트 처리, 자연어 생성, 프롬프트 엔지니어링 기능을 가장 많이 활용할 것으로 보입니다. 체인, 문서 로더, 벡터 저장소 등의 기능도 프로젝트의 효율성을 높이는 데 도움이 될 수 있습니다.
실제로 텍스트 처리, 자연어 생성, 프롬프트 엔지니어링 부분에서 랭체인을 많이 사용한 것 같습니다. 그러면서 효과를 확인할 수 있었습니다.
이제는 다음 단계로 랭체인의 '체인, 문서 로더, 벡터 저장소' 등의 기능을 이용해서 프로젝트의 효율성을 높일 수 있을지 생각해보면 좋을 것 같습니다. 배보다 배꼽이 더 커지면 안 되듯이 프로젝트의 목적에 맞게 LangChain과 같은 툴을 사용하는 것이 필요한 것 같고요.^^