{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "4d1e4157-e611-48b4-bf9a-b01aeff6db36", "metadata": {}, "source": [ "# __오디오 파일을 받아쓰는 음성 인식 모델 사용하기__" ] }, { "attachments": {}, "cell_type": "markdown", "id": "97601609-0725-4cbf-a8b8-92973214fdbd", "metadata": {}, "source": [ "- 튜토리얼 난이도: ★☆☆☆☆\n", "- 읽는데 걸리는 시간: 5분\n", "- 사용 언어: [SQL](https://ko.wikipedia.org/wiki/SQL) (100%)\n", "- 실행 파일 위치: tutorial/thanosql_ml/audio_recognition/speech_recognition2.ipynb\n", "- 참고 문서: [(AI-Hub) 한국어음성 데이터](https://aihub.or.kr/aihubdata/data/view.do?currMenu=115&topMenu=100&aihubDataSe=realm&dataSetSn=123), [whisper](https://github.com/openai/whisper)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "d15a2fa0", "metadata": { "tags": [] }, "source": [ "## 튜토리얼 소개 \n", "\n", "
\n", "

음성 인식 기술 이해하기

\n", "

컴퓨터 음성 인식 또는 음성-텍스트 변환(Speech-to-Text)이라고도 부르는 음성 인식 기술은 프로그램이 사람의 음성을 텍스트 형식으로 처리할 수 있도록 해줍니다. 최근 자동차, 의료 분야, 인공지능 스피커나 스마트폰을 이용한 일상 생활까지 광범위한 분야에서 활용되고 있습니다. 최근 머신러닝(기계학습/Machine Learning) 알고리즘을 활용한 음성 인식 기술은 문법, 구문, 구조, 오디오와 음성 신호의 구성을 통합하여 음성을 이해하고 처리합니다.

\n", "
\n", "\n", "
\n", "

일반적으로 음성 인식(Voice Recognition)과 혼동 될 수 있는데, 음성 인식은 개별 사용자의 목소리를 식별하는 데만 집중합니다.

\n", "
\n", "\n", "오늘날 음성 인식 기술은 다양한 산업 분야에서 응용되고 있습니다. 음성 인식 기술의 발전은 단순 여행용 자동 통역에서 난이도가 높은 비즈니스 회의 통역까지 확대되고 있습니다. 또한, 음성 인식 기술은 음성 합성 기술로 발전하여 가상 안내원이나 비서 역할을 수행하기도 하고 특정 연예인이나 유명인의 목소리를 흉내내어 정해진 지문을 목소리로 변환하기도 하며 응용되고 있습니다.\n", "\n", "__아래는 ThanoSQL 음성 인식 모델의 활용 및 예시입니다.__\n", "\n", "- 음성 인식 기술은 전화 상담 데이터를 텍스트로 변환하여 고객의 감정 분석이나 상담 트렌드 분석 등을 가능하게 합니다. 상담자는 음성 인식 기술을 통해, 고객의 문의에 대한 답변이 되는 정보나 과거의 유사 사례 등을 빠르게 제공받아 고객 상담을 개선할 수 있습니다.\n", "또한, 상담 종료 후에는 음성으로 저장되어 있는 데이터를 활용하여 감정 분석을 통해 고객의 만족도 등을 간접적으로 측정하여 트렌드 별 고객의 만족도를 확인할 수 있습니다.\n", "- 음성 인식 기술을 사용하면 키보드로 작성하는 메모보다 빠르게 작성이 가능하고, 긴 음성 파일에서도 빠르게 특정 키워드를 검색 할 수 있습니다.\n", "\n", "
\n", "

본 튜토리얼에서는

\n", "

👉 Whisper [Alec Radford et al. 2022]는 OpenAI에서 공개한 범용 음성 인식 딥러닝 모델로, 다양한 오디오의 대규모 데이터 세트에 대한 학습을 지원하며, 다국어 음성 인식은 물론 음성 번역 및 언어 식별을 수행할 수 있게 하는 다중 작업 모델입니다. 일반적인 음성 인식 문제에 적용해도 좋은 성능을 보입니다. 본 튜토리얼에서는 Whisper의 기능 중 일반적으로 사용되는 음성 인식과 영어로 번역을 실행합니다.

\n", "
" ] }, { "attachments": {}, "cell_type": "markdown", "id": "3ec036c9-489c-4661-b5e2-4cbccef0b8cf", "metadata": {}, "source": [ "## __0. 데이터 세트 및 모델 준비__\n", "\n", "ThanoSQL의 쿼리 구문을 사용하기 위해서는 [ThanoSQL 워크스페이스](https://docs.thanosql.ai/1.5/ko/getting_started/paas/workspace/lab/)에서 언급된 것처럼 API 토큰을 생성하고 아래의 쿼리를 실행해야 합니다." ] }, { "cell_type": "code", "execution_count": null, "id": "e9c2f3c6-40c7-49a4-93f6-879ec4722433", "metadata": { "tags": [] }, "outputs": [], "source": [ "%load_ext thanosql\n", "%thanosql API_TOKEN=<발급받은_API_TOKEN>" ] }, { "attachments": {}, "cell_type": "markdown", "id": "5e6658d6-6718-4580-8d01-2c64f776a213", "metadata": {}, "source": [ "### __데이터 세트 준비__" ] }, { "cell_type": "code", "execution_count": 2, "id": "5346e951-62fe-4e68-be0c-56bcae8a11ea", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Success\n" ] } ], "source": [ "%%thanosql\n", "GET THANOSQL DATASET korean_voice_data\n", "OPTIONS (overwrite=True)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "58a5ecaf", "metadata": {}, "source": [ "
\n", "

쿼리 세부 정보

\n", " \n", "
" ] }, { "cell_type": "code", "execution_count": 3, "id": "15bd3bcb-ac55-4fb1-a591-9e0538d363f0", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Success\n" ] } ], "source": [ "%%thanosql\n", "COPY korean_voice\n", "OPTIONS (if_exists='replace')\n", "FROM 'thanosql-dataset/korean_voice_data/korean_voice.csv'" ] }, { "attachments": {}, "cell_type": "markdown", "id": "c727ada5", "metadata": {}, "source": [ "
\n", "

쿼리 세부 정보

\n", " \n", "
" ] }, { "attachments": {}, "cell_type": "markdown", "id": "0a6b90e5-40a5-4d8b-a822-dc835fa9996b", "metadata": {}, "source": [ "### __모델 준비__" ] }, { "cell_type": "code", "execution_count": 4, "id": "942f7835-2619-4103-ad1d-7055b528b33e", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Success\n" ] } ], "source": [ "%%thanosql\n", "GET THANOSQL MODEL whisper_s\n", "OPTIONS (\n", " model_name='tutorial_whisper_small',\n", " overwrite=True\n", " )" ] }, { "attachments": {}, "cell_type": "markdown", "id": "d8964acd-1a78-4152-aa7b-7c06ed086137", "metadata": {}, "source": [ "
\n", "

쿼리 세부 정보

\n", " \n", "
" ] }, { "attachments": {}, "cell_type": "markdown", "id": "4cbb21b3", "metadata": {}, "source": [ "## __1. 데이터 세트 확인__\n", "\n", "본 튜토리얼을 진행하기 위해 ThanoSQL 워크스페이스 데이터베이스에 저장되어 있는 __korean_voice__ 테이블을 사용합니다. 아래의 쿼리 구문을 실행하고 테이블의 내용을 확인합니다." ] }, { "cell_type": "code", "execution_count": 5, "id": "049828aa-8a83-40b3-9517-6cd5c35c876e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
audio_pathsampling_ratetranscript_phonetictranscript_spellingduration
0thanosql-dataset/korean_voice_data/audio/broad...16000가를 보면 한국어 사용하는 인구 수가 십이 위입니다. 일위가 중국어고 이위가 스페인...가를 보면 한국어 사용하는 인구 수가 십이 위입니다. 일위가 중국어고 이위가 스페인...8.70
1thanosql-dataset/korean_voice_data/audio/broad...16000말을 사랑하고 아껴서 규정에 맞게 파괴하지 않고 네 잘.말을 사랑하고 아껴서 규정에 맞게 파괴하지 않고 네 잘.5.89
2thanosql-dataset/korean_voice_data/audio/broad...16000진행하고 있습니다. 자 오늘의 목표 확인해 보도록 하겠습니다. 오늘의 목표 네.진행하고 있습니다. 자 오늘의 목표 확인해 보도록 하겠습니다. 오늘의 목표 네.4.86
3thanosql-dataset/korean_voice_data/audio/broad...16000그리고 이번에는 다른 친구의 글을 평가해보는 것을 하는 겁니다.그리고 이번에는 다른 친구의 글을 평가해보는 것을 하는 겁니다.4.61
4thanosql-dataset/korean_voice_data/audio/broad...16000쓰기가 된 글 완성된 글 또는 쓰기 전의 개요 뭐 자료 이런 것들을 보여주면서 그것...쓰기가 된 글 완성된 글 또는 쓰기 전의 개요 뭐 자료 이런 것들을 보여주면서 그것...11.52
\n", "
" ], "text/plain": [ " audio_path sampling_rate \\\n", "0 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "1 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "2 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "3 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "4 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "\n", " transcript_phonetic \\\n", "0 가를 보면 한국어 사용하는 인구 수가 십이 위입니다. 일위가 중국어고 이위가 스페인... \n", "1 말을 사랑하고 아껴서 규정에 맞게 파괴하지 않고 네 잘. \n", "2 진행하고 있습니다. 자 오늘의 목표 확인해 보도록 하겠습니다. 오늘의 목표 네. \n", "3 그리고 이번에는 다른 친구의 글을 평가해보는 것을 하는 겁니다. \n", "4 쓰기가 된 글 완성된 글 또는 쓰기 전의 개요 뭐 자료 이런 것들을 보여주면서 그것... \n", "\n", " transcript_spelling duration \n", "0 가를 보면 한국어 사용하는 인구 수가 십이 위입니다. 일위가 중국어고 이위가 스페인... 8.70 \n", "1 말을 사랑하고 아껴서 규정에 맞게 파괴하지 않고 네 잘. 5.89 \n", "2 진행하고 있습니다. 자 오늘의 목표 확인해 보도록 하겠습니다. 오늘의 목표 네. 4.86 \n", "3 그리고 이번에는 다른 친구의 글을 평가해보는 것을 하는 겁니다. 4.61 \n", "4 쓰기가 된 글 완성된 글 또는 쓰기 전의 개요 뭐 자료 이런 것들을 보여주면서 그것... 11.52 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%thanosql\n", "SELECT *\n", "FROM korean_voice\n", "LIMIT 5" ] }, { "attachments": {}, "cell_type": "markdown", "id": "9e9d609f", "metadata": {}, "source": [ "
\n", "

데이터 테이블 이해하기

\n", "

korean_voice 테이블은 아래와 같은 정보를 담고 있습니다.

\n", " \n", "
" ] }, { "cell_type": "code", "execution_count": 6, "id": "ddeca28a-cbe5-4666-99ec-7dc2e47d4f16", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/jovyan/thanosql-dataset/korean_voice_data/audio/broadcast_00033030.flac\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "/home/jovyan/thanosql-dataset/korean_voice_data/audio/broadcast_00033057.flac\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "/home/jovyan/thanosql-dataset/korean_voice_data/audio/broadcast_00033066.flac\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%thanosql\n", "PRINT AUDIO\n", "AS\n", "SELECT audio_path\n", "FROM korean_voice\n", "LIMIT 3" ] }, { "attachments": {}, "cell_type": "markdown", "id": "38da606c-07f3-43ee-9e05-2de397d5cad9", "metadata": {}, "source": [ "## __2. 사전 학습된 모델을 사용하여 음성 인식 결과 예측__\n", "\n", "다음 쿼리 구문을 실행하여 __tutorial_whisper_small__ 모델을 사용하여 결과를 예측합니다.\n", "\n", "- `task='transcribe'` 옵션을 지정하면 음성 인식을 합니다." ] }, { "cell_type": "code", "execution_count": 7, "id": "5804d0ce-2311-49e8-9013-b32b17832a21", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
audio_pathsampling_ratetranscript_phonetictranscript_spellingdurationpredict_result
0thanosql-dataset/korean_voice_data/audio/broad...16000가를 보면 한국어 사용하는 인구 수가 십이 위입니다. 일위가 중국어고 이위가 스페인...가를 보면 한국어 사용하는 인구 수가 십이 위입니다. 일위가 중국어고 이위가 스페인...8.70가를 보면 한국어 사용하는 인구수가 12위입니다 1위가 중국어고 2위가 스페인어고 ...
1thanosql-dataset/korean_voice_data/audio/broad...16000말을 사랑하고 아껴서 규정에 맞게 파괴하지 않고 네 잘.말을 사랑하고 아껴서 규정에 맞게 파괴하지 않고 네 잘.5.89를 사랑하고 아껴서 규정에 맞게 파괴하지 않고 잘
2thanosql-dataset/korean_voice_data/audio/broad...16000진행하고 있습니다. 자 오늘의 목표 확인해 보도록 하겠습니다. 오늘의 목표 네.진행하고 있습니다. 자 오늘의 목표 확인해 보도록 하겠습니다. 오늘의 목표 네.4.86오늘의 목표 확인해보도록 하겠습니다.
3thanosql-dataset/korean_voice_data/audio/broad...16000그리고 이번에는 다른 친구의 글을 평가해보는 것을 하는 겁니다.그리고 이번에는 다른 친구의 글을 평가해보는 것을 하는 겁니다.4.61그리고 이번에는 다른 친구에게를 평가해 보는 것을 하는 겁니다
4thanosql-dataset/korean_voice_data/audio/broad...16000쓰기가 된 글 완성된 글 또는 쓰기 전의 개요 뭐 자료 이런 것들을 보여주면서 그것...쓰기가 된 글 완성된 글 또는 쓰기 전의 개요 뭐 자료 이런 것들을 보여주면서 그것...11.52쓰기가 될 글 완성된 글 또는 쓰기 전에 개요, 자료 이런 것들을 보여주면서 그것을...
.....................
95thanosql-dataset/korean_voice_data/audio/broad...16000희곡 같은 데서 제일 중요한 한 단어는 뭐라고요.희곡 같은 데서 제일 중요한 한 단어는 뭐라고요.3.20키곡 같은 데에서 제일 중요한 한 단어는 뭐라고요?
96thanosql-dataset/korean_voice_data/audio/broad...16000수필이라는 이름 자체가 무슨 뜻인지 아나요.수필이라는 이름 자체가 무슨 뜻인지 아나요.2.94수필이라는 이름 자체가 무슨 뜻인지 알아요?
97thanosql-dataset/korean_voice_data/audio/broad...16000당근 씨를 막 뿌리려는 남편에게 나는 몇 번이나 말했다 그랬습니다.당근 씨를 막 뿌리려는 남편에게 나는 몇 번이나 말했다 그랬습니다.3.58당근실을 막 뿌리려는 남편에게 나는 몇 번이나 말했다.
98thanosql-dataset/korean_voice_data/audio/broad...16000작년에도 너무 얕게 씨를 뿌려 낭패를 본 적이 있기 때문이다.작년에도 너무 얕게 씨를 뿌려 낭패를 본 적이 있기 때문이다.4.22작년에도 너무 얕게 씨를 뿌려 낭패를 본 적이 있기 때문이다.
99thanosql-dataset/korean_voice_data/audio/broad...16000하나는 새를 위해서 하나는 또.하나는 새를 위해서 하나는 또.2.69하나는 새, 하나는 또
\n", "

100 rows × 6 columns

\n", "
" ], "text/plain": [ " audio_path sampling_rate \\\n", "0 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "1 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "2 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "3 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "4 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", ".. ... ... \n", "95 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "96 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "97 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "98 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "99 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "\n", " transcript_phonetic \\\n", "0 가를 보면 한국어 사용하는 인구 수가 십이 위입니다. 일위가 중국어고 이위가 스페인... \n", "1 말을 사랑하고 아껴서 규정에 맞게 파괴하지 않고 네 잘. \n", "2 진행하고 있습니다. 자 오늘의 목표 확인해 보도록 하겠습니다. 오늘의 목표 네. \n", "3 그리고 이번에는 다른 친구의 글을 평가해보는 것을 하는 겁니다. \n", "4 쓰기가 된 글 완성된 글 또는 쓰기 전의 개요 뭐 자료 이런 것들을 보여주면서 그것... \n", ".. ... \n", "95 희곡 같은 데서 제일 중요한 한 단어는 뭐라고요. \n", "96 수필이라는 이름 자체가 무슨 뜻인지 아나요. \n", "97 당근 씨를 막 뿌리려는 남편에게 나는 몇 번이나 말했다 그랬습니다. \n", "98 작년에도 너무 얕게 씨를 뿌려 낭패를 본 적이 있기 때문이다. \n", "99 하나는 새를 위해서 하나는 또. \n", "\n", " transcript_spelling duration \\\n", "0 가를 보면 한국어 사용하는 인구 수가 십이 위입니다. 일위가 중국어고 이위가 스페인... 8.70 \n", "1 말을 사랑하고 아껴서 규정에 맞게 파괴하지 않고 네 잘. 5.89 \n", "2 진행하고 있습니다. 자 오늘의 목표 확인해 보도록 하겠습니다. 오늘의 목표 네. 4.86 \n", "3 그리고 이번에는 다른 친구의 글을 평가해보는 것을 하는 겁니다. 4.61 \n", "4 쓰기가 된 글 완성된 글 또는 쓰기 전의 개요 뭐 자료 이런 것들을 보여주면서 그것... 11.52 \n", ".. ... ... \n", "95 희곡 같은 데서 제일 중요한 한 단어는 뭐라고요. 3.20 \n", "96 수필이라는 이름 자체가 무슨 뜻인지 아나요. 2.94 \n", "97 당근 씨를 막 뿌리려는 남편에게 나는 몇 번이나 말했다 그랬습니다. 3.58 \n", "98 작년에도 너무 얕게 씨를 뿌려 낭패를 본 적이 있기 때문이다. 4.22 \n", "99 하나는 새를 위해서 하나는 또. 2.69 \n", "\n", " predict_result \n", "0 가를 보면 한국어 사용하는 인구수가 12위입니다 1위가 중국어고 2위가 스페인어고 ... \n", "1 를 사랑하고 아껴서 규정에 맞게 파괴하지 않고 잘 \n", "2 오늘의 목표 확인해보도록 하겠습니다. \n", "3 그리고 이번에는 다른 친구에게를 평가해 보는 것을 하는 겁니다 \n", "4 쓰기가 될 글 완성된 글 또는 쓰기 전에 개요, 자료 이런 것들을 보여주면서 그것을... \n", ".. ... \n", "95 키곡 같은 데에서 제일 중요한 한 단어는 뭐라고요? \n", "96 수필이라는 이름 자체가 무슨 뜻인지 알아요? \n", "97 당근실을 막 뿌리려는 남편에게 나는 몇 번이나 말했다. \n", "98 작년에도 너무 얕게 씨를 뿌려 낭패를 본 적이 있기 때문이다. \n", "99 하나는 새, 하나는 또 \n", "\n", "[100 rows x 6 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%thanosql\n", "PREDICT USING tutorial_whisper_small\n", "OPTIONS (\n", " audio_col='audio_path',\n", " language='ko',\n", " task='transcribe',\n", " result_col='predict_result'\n", " )\n", "AS\n", "SELECT *\n", "FROM korean_voice" ] }, { "attachments": {}, "cell_type": "markdown", "id": "10385afe-e8f5-493e-9c0d-72441ec36ec4", "metadata": { "tags": [] }, "source": [ "
\n", "

쿼리 세부 정보

\n", "
    \n", "
  • \"PREDICT USING\" 쿼리 구문을 사용하여 tutorial_whisper_small 모델을 예측에 사용합니다.
  • \n", "
  • \"OPTIONS\" 쿼리 구문을 통해 예측에 사용할 옵션을 지정합니다.\n", "
      \n", "
    • \"audio_col\": 예측에 사용할 오디오의 경로가 기록되어 있는 컬럼의 이름 (str, default: 'audio_path')
    • \n", "
    • \"batch_size\": 한 번의 학습에 사용하는 데이터 묶음 속의 데이터 수 (int, optional, default: 16)
    • \n", "
    • \"language\": 오디오 파일의 주요 사용 언어를 지정. ‘auto’일 경우 모델이 인식할 수 있는 99가지 언어 중 하나로 인식 (str, default: 'auto')
    • \n", "
    • \"task\": 실행할 작업의 종류 (str, 'transcribe'|'translate', default: 'transcribe')
    • \n", "
    • \"result_col\": 데이터 테이블에서 예측 결과를 담을 컬럼 이름 (str, optional, default: 'predict_result')
    • \n", "
    \n", "
  • \n", "
\n", "
" ] }, { "attachments": {}, "cell_type": "markdown", "id": "e8fcbacd-0913-403e-a715-dd425491181e", "metadata": {}, "source": [ "## __3. 사전 학습된 모델을 사용하여 영어로 자동 번역__\n", "\n", "다음 쿼리 구문을 실행하여 __tutorial_whisper_small__ 모델을 사용하여 결과를 예측합니다.\n", "\n", "- `task='translate'` 옵션을 지정하면 인식된 음성을 영어로 출력합니다. 이 과정은 '한국어 음성'을 바로 '영어 텍스트'로 번역하는 것으로, 중간에 '한국어 텍스트'를 거치지 않는 다는 점이 일반적인 번역 태스크와 다릅니다." ] }, { "cell_type": "code", "execution_count": 8, "id": "0ef8ffaf-40e4-4ae1-b872-d5fafd9c9f4f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
audio_pathsampling_ratetranscript_phonetictranscript_spellingdurationpredict_result
0thanosql-dataset/korean_voice_data/audio/broad...16000가를 보면 한국어 사용하는 인구 수가 십이 위입니다. 일위가 중국어고 이위가 스페인...가를 보면 한국어 사용하는 인구 수가 십이 위입니다. 일위가 중국어고 이위가 스페인...8.70The number of people using Korean is 12.
1thanosql-dataset/korean_voice_data/audio/broad...16000말을 사랑하고 아껴서 규정에 맞게 파괴하지 않고 네 잘.말을 사랑하고 아껴서 규정에 맞게 파괴하지 않고 네 잘.5.89Love and cherish the words and don't destroy t...
2thanosql-dataset/korean_voice_data/audio/broad...16000진행하고 있습니다. 자 오늘의 목표 확인해 보도록 하겠습니다. 오늘의 목표 네.진행하고 있습니다. 자 오늘의 목표 확인해 보도록 하겠습니다. 오늘의 목표 네.4.86Let's check today's goal.
3thanosql-dataset/korean_voice_data/audio/broad...16000그리고 이번에는 다른 친구의 글을 평가해보는 것을 하는 겁니다.그리고 이번에는 다른 친구의 글을 평가해보는 것을 하는 겁니다.4.61And this time, I'm going to evaluate other fri...
4thanosql-dataset/korean_voice_data/audio/broad...16000쓰기가 된 글 완성된 글 또는 쓰기 전의 개요 뭐 자료 이런 것들을 보여주면서 그것...쓰기가 된 글 완성된 글 또는 쓰기 전의 개요 뭐 자료 이런 것들을 보여주면서 그것...11.52It is a problem of the order and writing area.
.....................
95thanosql-dataset/korean_voice_data/audio/broad...16000당근 씨를 막 뿌리려는 남편에게 나는 몇 번이나 말했다 그랬습니다.당근 씨를 막 뿌리려는 남편에게 나는 몇 번이나 말했다 그랬습니다.3.58I told my husband that I would pour carrots a ...
96thanosql-dataset/korean_voice_data/audio/broad...16000작년에도 너무 얕게 씨를 뿌려 낭패를 본 적이 있기 때문이다.작년에도 너무 얕게 씨를 뿌려 낭패를 본 적이 있기 때문이다.4.22I've seen a lot of people who put too little s...
97thanosql-dataset/korean_voice_data/audio/broad...16000하나는 새를 위해서 하나는 또.하나는 새를 위해서 하나는 또.2.69One is for the new year. Another is for the ne...
98thanosql-dataset/korean_voice_data/audio/broad...16000많이 씨앗들을 넣어가지고 너무 촘촘하게 여러 개가 한꺼번에 자라는 거야 여러 줄기가.많이 씨앗들을 넣어가지고 너무 촘촘하게 여러 개가 한꺼번에 자라는 거야 여러 줄기가.6.14I put a lot of seeds in it and it grew into a ...
99thanosql-dataset/korean_voice_data/audio/broad...16000텃밭 농사짓는 정도일 겁니다.텃밭 농사짓는 정도일 겁니다.2.30It's about the same as the picture in the Tupp...
\n", "

100 rows × 6 columns

\n", "
" ], "text/plain": [ " audio_path sampling_rate \\\n", "0 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "1 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "2 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "3 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "4 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", ".. ... ... \n", "95 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "96 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "97 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "98 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "99 thanosql-dataset/korean_voice_data/audio/broad... 16000 \n", "\n", " transcript_phonetic \\\n", "0 가를 보면 한국어 사용하는 인구 수가 십이 위입니다. 일위가 중국어고 이위가 스페인... \n", "1 말을 사랑하고 아껴서 규정에 맞게 파괴하지 않고 네 잘. \n", "2 진행하고 있습니다. 자 오늘의 목표 확인해 보도록 하겠습니다. 오늘의 목표 네. \n", "3 그리고 이번에는 다른 친구의 글을 평가해보는 것을 하는 겁니다. \n", "4 쓰기가 된 글 완성된 글 또는 쓰기 전의 개요 뭐 자료 이런 것들을 보여주면서 그것... \n", ".. ... \n", "95 당근 씨를 막 뿌리려는 남편에게 나는 몇 번이나 말했다 그랬습니다. \n", "96 작년에도 너무 얕게 씨를 뿌려 낭패를 본 적이 있기 때문이다. \n", "97 하나는 새를 위해서 하나는 또. \n", "98 많이 씨앗들을 넣어가지고 너무 촘촘하게 여러 개가 한꺼번에 자라는 거야 여러 줄기가. \n", "99 텃밭 농사짓는 정도일 겁니다. \n", "\n", " transcript_spelling duration \\\n", "0 가를 보면 한국어 사용하는 인구 수가 십이 위입니다. 일위가 중국어고 이위가 스페인... 8.70 \n", "1 말을 사랑하고 아껴서 규정에 맞게 파괴하지 않고 네 잘. 5.89 \n", "2 진행하고 있습니다. 자 오늘의 목표 확인해 보도록 하겠습니다. 오늘의 목표 네. 4.86 \n", "3 그리고 이번에는 다른 친구의 글을 평가해보는 것을 하는 겁니다. 4.61 \n", "4 쓰기가 된 글 완성된 글 또는 쓰기 전의 개요 뭐 자료 이런 것들을 보여주면서 그것... 11.52 \n", ".. ... ... \n", "95 당근 씨를 막 뿌리려는 남편에게 나는 몇 번이나 말했다 그랬습니다. 3.58 \n", "96 작년에도 너무 얕게 씨를 뿌려 낭패를 본 적이 있기 때문이다. 4.22 \n", "97 하나는 새를 위해서 하나는 또. 2.69 \n", "98 많이 씨앗들을 넣어가지고 너무 촘촘하게 여러 개가 한꺼번에 자라는 거야 여러 줄기가. 6.14 \n", "99 텃밭 농사짓는 정도일 겁니다. 2.30 \n", "\n", " predict_result \n", "0 The number of people using Korean is 12. \n", "1 Love and cherish the words and don't destroy t... \n", "2 Let's check today's goal. \n", "3 And this time, I'm going to evaluate other fri... \n", "4 It is a problem of the order and writing area. \n", ".. ... \n", "95 I told my husband that I would pour carrots a ... \n", "96 I've seen a lot of people who put too little s... \n", "97 One is for the new year. Another is for the ne... \n", "98 I put a lot of seeds in it and it grew into a ... \n", "99 It's about the same as the picture in the Tupp... \n", "\n", "[100 rows x 6 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%thanosql\n", "PREDICT USING tutorial_whisper_small\n", "OPTIONS (\n", " audio_col='audio_path',\n", " language='ko',\n", " task='translate',\n", " result_col='predict_result'\n", " )\n", "AS\n", "SELECT *\n", "FROM korean_voice" ] }, { "attachments": {}, "cell_type": "markdown", "id": "10385afe-e8f5-493e-9c0d-72441ec36ec4", "metadata": { "tags": [] }, "source": [ "
\n", "

쿼리 세부 정보

\n", "
    \n", "
  • \"PREDICT USING\" 쿼리 구문을 사용하여 tutorial_whisper_small 모델을 예측에 사용합니다.
  • \n", "
  • \"OPTIONS\" 쿼리 구문을 통해 예측에 사용할 옵션을 지정합니다.\n", "
      \n", "
    • \"audio_col\": 예측에 사용할 오디오의 경로가 기록되어 있는 컬럼의 이름 (str, default: 'audio_path')
    • \n", "
    • \"batch_size\": 한 번의 학습에 사용하는 데이터 묶음 속의 데이터 수 (int, optional, default: 16)
    • \n", "
    • \"language\": 오디오 파일의 주요 사용 언어를 지정. ‘auto’일 경우 모델이 인식할 수 있는 99가지 언어 중 하나로 인식 (str, default: 'auto')
    • \n", "
    • \"task\": 실행할 작업의 종류 (str, 'transcribe'|'translate', default: 'transcribe')
    • \n", "
    • \"result_col\": 데이터 테이블에서 예측 결과를 담을 컬럼 이름 (str, optional, default: 'predict_result')
    • \n", "
    \n", "
  • \n", "
\n", "
" ] }, { "attachments": {}, "cell_type": "markdown", "id": "3c05cd4c", "metadata": {}, "source": [ "## __4. 튜토리얼을 마치며__\n", " \n", "이번 튜토리얼에서는 korean_voice 데이터 세트를 사용하여 Whisper의 기능 중 일반적으로 사용되는 음성 인식과 영어로의 번역을 실행해 보았습니다. 초급 단계 튜토리얼인 만큼 정확도 향상을 위한 과정 설명보다는 작동 위주의 설명으로 진행했습니다.\n", "\n", "* [나만의 데이터 업로드하기](https://docs.thanosql.ai/1.5/ko/getting_started/data_upload/)\n", "* [나만의 데이터 테이블 생성하기](https://docs.thanosql.ai/1.5/ko/how-to_guides/ThanoSQL_query/COPY_SYNTAX/)\n", "* [나만의 모델 업로드하기](https://docs.thanosql.ai/1.5/ko/how-to_guides/ThanoSQL_query/UPLOAD_MODEL_SYNTAX/)\n", "\n", "
\n", "

나만의 서비스를 위한 모델 배포 관련 문의

\n", "

ThanoSQL을 활용해 나만의 모델을 만들거나, 나의 서비스에 적용하는데 어려움이 있다면 언제든 아래로 문의주세요😊

\n", "

음성 인식 모델 구축 관련 문의: contact@smartmind.team

\n", "
" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10 (default, Nov 14 2022, 12:59:47) \n[GCC 9.4.0]" }, "vscode": { "interpreter": { "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" } } }, "nbformat": 4, "nbformat_minor": 5 }