랭체인을 활용하여 K드라마 유튜브 동영상으로 한국어교육 콘텐츠 제작하기 2: 효과 확인하기

배경 및 목적

외국 사람들이 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과 같은 툴을 사용하는 것이 필요한 것 같고요.^^

2
1개의 답글

👉 이 게시글도 읽어보세요