머신러닝을 이용하여 오디오 콘텐츠 분류

이 문서에서는 머신러닝을 이용하여 오디오 파일을 검토하고 텍스트로 변환하며 감정용으로 분석을 수행하는 오디오 분류 파이프라인의 아키텍처를 설명합니다. 머신러닝을 이용하면 사람이 작업할 때보다 이러한 프로세스를 더 빠르고 정확하게 수행할 수 있습니다. 이 문서는 Google Cloud 제품 및 Google Cloud Machine Learning API를 사용하여 오디오 콘텐츠를 분류하는 방법을 알아보려는 사용자 또는 설계자를 대상으로 합니다. 개발자는 관련 가이드를 통해 이 패턴을 보여주는 샘플 배포 프로세스를 알아볼 수 있습니다.

소개

비즈니스의 일환으로 오디오 파일을 수집하는 경우 오디오의 텍스트 변환을 추출할 수 있습니다. 검색 색인을 생성하기 위해 콘텐츠를 분류하거나 태그를 추가할 수도 있습니다. 사용자가 텍스트 변환을 만드는 데 시간이 걸리며 오디오 콘텐츠가 너무 많아서 텍스트 변환 또는 분류가 어려운 경우가 많습니다. 또한 자체 태그를 제공하는 경우 사용자가 콘텐츠 태그 시 유용한 태그가 포함되지 않거나 콘텐츠에 정확하게 태그를 지정하지 못할 수 있습니다.

머신러닝을 이용하면 자동화된 분류 파이프라인을 빌드할 수 있습니다. 이 문서에서는 Google Cloud Machine Learning API를 사용하여 오디오 파일에 대한 검토 프로세스를 자동화하는 방법을 설명합니다. 이 접근 방식은 분류 프로세스의 효율성을 높이고 콘텐츠에 자동으로 태그를 추가하는 범위를 확대합니다. 솔루션은 모든 오디오 콘텐츠의 카테고리를 확장하고 태그를 자동으로 생성하여 이를 수행합니다. 이 방식을 사용하면 모든 콘텐츠를 사전에 분류하고 검색 작업에 대한 정확한 태그를 추가할 수 있습니다.

오디오 파일 분류 프로세스의 첫 번째 단계는 오디오 파일을 텍스트로 변환하는 것입니다. 오디오 파일을 텍스트로 변환한 후 머신러닝을 이용하여 콘텐츠 요약을 가져올 수 있습니다. 그런 다음 이 요약 정보를 사용하여 텍스트의 일반 항목(대명사 및 일반 명사)을 추출하고 콘텐츠 전체를 분석한 다음 분류 및 태그를 제공할 수 있습니다.

오디오 처리 파이프라인 빌드의 과제

사용자 제작 오디오 파일을 처리하기 위한 파이프라인을 빌드하면 다음과 같은 과제가 발생합니다.

  • 확장성: 오디오 파일 제출 횟수가 빠르게 증가하거나 감소할 수 있으며 시간이 지나면서 크게 달라질 수 있습니다. 이벤트 또는 캠페인 진행 중 업로드 시간이 가장 길어서 콘텐츠 제출 횟수와 그에 따른 처리 로드가 크게 늘어날 수 있습니다.
  • 성능: 각 오디오 파일을 처리하려면 효율적인 파이프라인이 필요합니다. 오디오 파일은 용량이 크고 처리 시간이 오래 걸릴 수 있습니다. 앱은 제출된 각 오디오 파일을 효율적으로 저장 및 처리할 수 있도록 조정하고 결과 텍스트를 저장한 다음, Machine Learning API를 호출하여 감정과 관점을 분석하고 결과를 저장해야 합니다.
  • 지능: 오디오 형식은 기존 분석에 도움이 되지 않으므로 가장 먼저 텍스트로 변환되어야 합니다. 텍스트로 변환 작업은 사람이 수행하는 집약적인 수동 프로세스이거나 머신러닝 기반 접근 방식을 필요로 합니다. 오디오가 텍스트로 변환된 후에는 항목, 개념, 감정을 분류하고 태그하기 위해 검토되어야 합니다.

아키텍처

아래 다이어그램은 이 문서에 설명된 오디오 분류 파이프라인 솔루션의 아키텍처를 보여줍니다. 파이프라인에는 오디오 파일 처리와 관련된 사용 사례에 활용할 수 있는 다음과 같은 기본 특성이 있습니다.

  • 오디오 콘텐츠가 저장 위치에 업로드될 때 자동으로 시작되는 콘텐츠를 처리하는 이벤트 기반 파이프라인입니다.
  • 파이프라인의 이벤트에 응답하여 자동으로 호출되는 확장 가능한 서버리스 처리입니다.
  • 오디오 파일을 텍스트로 변환하고 감정과 항목을 분석하는 작업을 수행하는 머신러닝입니다. 기존 머신러닝 모델을 사용하므로 커스텀 모델을 만들거나 찾을 필요가 없습니다.

오디오 파일을 처리하는 파이프라인 아키텍처

다이어그램에 표시된 파이프라인은 다음과 같은 처리 단계로 구성됩니다.

  1. 오디오 파일 업로드. 앱 또는 프로세스가 Cloud Storage에 오디오 파일을 업로드합니다. Dataflow 파이프라인 또는 실시간 업로드 프로세스를 사용할 수도 있습니다. 이 단계는 파이프라인 자체와는 별개입니다.
  2. 오디오 파일 저장. 오디오 파일은 파일이 파이프라인의 나머지 부분을 통과하기 전에 파일을 보관하기 위해 스테이징 버킷으로 작동하는 Cloud Storage 버킷에 저장됩니다.
  3. Cloud 함수 트리거. 오디오 파일이 스테이징 버킷에 업로드될 때마다 Cloud Storage 객체 완료 알림이 생성됩니다. 알림이 Cloud 함수를 트리거합니다.
  4. Speech-to-Text API 호출. Cloud 함수는 Speech-to-Text API를 호출하여 오디오 파일의 텍스트 변환을 가져옵니다. 이 프로세스는 비동기식이므로 Speech-to-Text API가 Cloud 함수에 작업 ID를 반환합니다.
  5. Speech-to-Text 작업 ID 게시. 작업 ID와 오디오 파일의 이름이 Pub/Sub 주제에 게시됩니다. 여러 오디오 파일 제출의 작업 ID가 있는 이러한 게시된 Pub/Sub 메시지는 업로드 수가 증가함에 따라 주제에 누적됩니다.
  6. Speech-to-Text 폴링. 예약된 빈도(예: 10분마다)로, Cloud Scheduler는 두 번째 Cloud 함수를 트리거하는 Pub/Sub 주제에 메시지를 게시합니다.
  7. Speech-to-Text API 결과 가져오기. 두 번째 Cloud 함수는 첫 번째 Pub/Sub 주제에서 모든 메시지를 가져와 각 메시지의 작업 ID와 파일 이름을 추출합니다. 그런 다음 Speech-to-Text API를 호출하여 각 작업 ID의 상태를 확인합니다.

    • 작업이 완료되면 해당 작업의 텍스트 변환 결과가 두 번째 Cloud Storage 버킷에 기록됩니다. 그런 다음 Cloud 함수가 스테이징 Cloud Storage 버킷에서 처리된 파일의 Cloud Storage 버킷으로 오디오 파일을 이동합니다.
    • 작업이 완료되지 않으면 작업 ID와 파일 이름이 포함된 Pub/Sub 메시지가 Pub/Sub 주제로 읽혀집니다. 이렇게 하면 다음번에 Cloud Scheduler가 Cloud 함수를 호출할 때 작업이 다시 확인됩니다.

    어떤 이유로든 Speech-to-Text에서 스크립트가 반환되지 않으면 Cloud 함수는 스테이징 버킷에서 Cloud Storage 오류 버킷으로 오디오 파일을 이동합니다.

  8. Speech-to-Text API 결과 저장. 오디오 파일의 스크립트를 포함하는 텍스트 파일이 Cloud Storage 버킷에 작성됩니다.

  9. Cloud Functions 트리거. 텍스트 변환 파일이 Cloud Storage에 업로드되면 또 다른 객체 완료 알림이 전송됩니다. 이 알림은 두 개의 추가적인 Cloud Functions로 인해 추가 처리를 트리거합니다.

  10. Perspective API 호출. 세 번째 Cloud 함수는 Perspective API를 호출합니다. 이 API는 Perspectives API 웹사이트에 설명된 바와 같이 '유해성'의 가능성에 관한 응답을 반환합니다.

    Perspective API 모델은 '매우 유해'에서 '매우 건전'에 이르기까지 인터넷 댓글을 평가하도록 학습되었습니다. 유해한 댓글은 '상대방을 토론에서 나가게 할 수 있는 무례하거나 모욕적이거나 부당한 댓글'로 정의됩니다.

    분석이 완료되면 Cloud 함수는 결과를 다른 Cloud Storage 버킷에 작성합니다.

  11. Cloud Natural Language API 호출. 네 번째 Cloud 함수는 Natural Language API를 호출하여 텍스트 변환의 전체적인 태도나 감정을 분석하고 논의할 항목을 결정합니다. Cloud 함수가 Natural Language API에서 결과를 수신하면 함수는 다른 Cloud Storage 버킷에 결과를 작성합니다.

  12. 결과 분석. Speech-to-Text, Natural Language API, Perspective API를 통해 분석 결과를 가져와서 자신의 리뷰 파이프라인 또는 앱에 정보를 통합합니다. 앞의 다이어그램에서 App Engine에 호스팅된 웹 앱은 결과를 볼 수 있는 간단한 UI를 제공합니다. 웹 앱은 Cloud Storage 버킷에 저장된 출력에서 데이터를 가져옵니다.

오디오 파일 처리

오디오 파일을 업로드하면 여러 API를 통해 파일이 처리됩니다. 먼저 Speech-to-Text를 사용하여 오디오 파일을 텍스트로 변환합니다. 그런 다음 감정과 항목을 추출하기 위해 텍스트가 Natural Language APIPerspective API에 제출됩니다. 오디오 파일을 텍스트로 처리하는 데는 시간이 오래 걸릴 수 있습니다. 따라서 아키텍처는 Cloud Functions, Pub/Sub, Cloud Storage 알림 기능을 사용하여 확장 가능한 비동기 이벤트 처리 파이프라인을 구현합니다.

Cloud Functions

Cloud Functions는 인프라를 관리하지 않고 목적에 맞게 비동기 함수를 구성할 수 있는 방법을 제공합니다. 이 문서에서 설명하는 아키텍처의 세 가지 API를 호출하려면 이벤트 기반 조정자가 필요합니다. Cloud Storage 알림 또는 Pub/Sub 메시지는 Cloud Functions를 트리거할 수 있습니다. 두 가지 트리거 방법을 이용하여 이벤트 기반 아키텍처를 구성할 수 있습니다. Cloud Functions는 새 파일이 추가되고 처리량이 변경되면 동적으로 확장 및 축소될 수 있습니다.

Pub/Sub 메시지

Pub/Sub는 데이터를 보내고 받는 데 사용할 수 있는 확장 가능한 메시지 서비스를 제공하며 Cloud Functions를 트리거하는 데도 사용될 수 있습니다. Pub/Sub는 이 아키텍처에서 다음 두 가지 방법으로 비동기 메시지를 제공합니다.

  1. Speech-to-Text API에서 생성한 작업 ID에 대한 메시지 큐를 제공합니다. 나중에 ID를 사용하여 작업이 완료되었는지 확인할 수 있습니다.
  2. Cloud Scheduler 작업은 아직 처리되지 않은 모든 메시지에 대한 Speech-to-Text 결과를 확인하는 Cloud 함수를 트리거하는 Pub/Sub 메시지를 보냅니다.

Cloud Storage 알림

Cloud Storage 알림은 Cloud Storage에서 발생하는 이벤트에 대한 후크를 제공합니다. 객체가 업로드되거나 수정될 때마다 알림이 생성됩니다. 이 알림을 Cloud Functions와 함께 사용하여 이벤트 기반 시스템을 빌드할 수 있습니다.

Cloud Storage 알림은 아키텍처의 다음 두 위치에서 사용됩니다.

  • 새 오디오 파일이 업로드되었음을 Cloud 함수에 알립니다. 이 알림은 처리 흐름을 시작합니다.
  • Speech-to-Text API의 텍스트 출력이 저장되었음을 Cloud Functions 중 두 개에 알리고 Natural Language API 및 Perspective API를 통해 텍스트 출력을 실행합니다.

음성을 텍스트로 변환

오디오 녹음을 콘텐츠의 텍스트 버전으로 변환(오디오 녹음 스크립트 작성)하는 것이 이 프로세스의 핵심 단계입니다. 이 작업을 수행하는 한 가지 방법은 TensorFlow와 같이 널리 사용되는 머신러닝 프레임워크 중 하나에 커스텀 음성 텍스트 변환 알고리즘을 구현하는 것입니다. 또 다른 방법은 Speech-to-Text API와 같은 사전 학습된 Machine Learning API를 사용하는 것입니다. 각 접근 방식에는 장단점이 있습니다.

옵션 1: TensorFlow에서 나만의 모델 빌드

장점

  • 특정 구문 또는 도메인별 용어에 대해 모델을 학습시킬 수 있습니다.

단점

  • 음성 텍스트 변환을 구현하는 것은 해결된 문제로, 도메인별 용어가 있지 않는 한 커스텀 알고리즘을 만든다고 해서 값이 추가되지 않습니다.
  • 모델을 구현하려면 머신러닝 관련 전문 지식이 필요합니다.
  • 모델을 구현, 선택, 조정하기 위해서는 많은 노력이 필요합니다.
  • 시간이 지남에 따라 모델을 관리하고 조정해야 합니다.

옵션 2: Speech-to-Text 사용

장점

  • 모델을 개발한 후 자체 API를 빌드하여 사용하는 것보다 한 API를 사용하는 것이 쉬우므로 개발자가 쉽게 사용할 수 있습니다.
  • 머신러닝 관련 전문 지식이 필요하지 않습니다.
  • 120개가 넘는 언어를 지원합니다.

단점

  • 특정 구문 또는 도메인별 용어에 대해 모델을 학습시킬 수 없습니다.

오디오에 특정한 기술 용어가 포함되어 있지 않고 일반적이지 않은 문구 또는 단어로서 해독하기 어려운 문구를 포함하지 않는 경우에는 일반적으로 Speech-to-Text가 매우 유용합니다. 앞서 설명한 시나리오는 오디오 녹음에 부적절한 콘텐츠가 포함될 가능성을 평가하기 때문에 전문 용어가 없는 경우에도 Speech-to-Text는 오디오를 정확하게 분류해야 합니다.

Speech-to-Text는 120개가 넘는 다양한 언어를 지원하고 Google Cloud 기반 솔루션에 쉽게 통합할 수 있으므로, 이 문서에 설명된 시나리오에서 권장되는 방법입니다.

Speech-to-Text API 호출

Speech-to-Text API는 동기 및 비동기 텍스트 변환 서비스를 모두 제공합니다. 길이가 긴 오디오 파일을 처리하려면 비동기 텍스트 변환 모드를 사용하는 것이 가장 좋습니다. 비동기 모드를 사용하는 경우 API에 오디오 파일을 제출하면 API가 작업 ID를 반환합니다. 그런 다음 작업 ID로 폴링하여 작업 상태를 확인할 수 있습니다.

이 문서에 설명하는 아키텍처에서 Cloud Scheduler는 대기 중인 모든 작업의 작업 상태를 정기적으로 확인하는 데 사용됩니다. Cloud Scheduler는 Pub/Sub 주제에서 모든 작업 ID를 가져오는 Cloud 함수를 트리거합니다. Cloud 함수는 Speech-to-Text API를 호출하여 각 작업의 상태를 확인합니다. API는 완료된 모든 작업의 결과를 반환합니다. 이러한 결과는 Cloud Storage에 텍스트 파일로 저장됩니다. 아직 완료되지 않은 작업의 경우 다음 반복 중에 처리할 수 있도록 작업 ID가 Pub/Sub 주제로 다시 전송됩니다.

Speech-to-Text API는 특정 오디오 인코딩 목록을 허용합니다. 최상의 결과를 얻으려면 무손실 인코딩(FLAC 또는 LINEAR16)을 사용하여 캡처 및 전송된 오디오 소스를 사용해야 합니다. 특히 녹음에 배경 소음이 있는 경우 손실(lossy) 코덱을 사용하여 오디오를 캡처하거나 전송하게 되면 음성 인식의 정확도가 떨어질 수 있습니다. 손실(lossy) 코덱에는 MULAW, AMR, AMR_WB, OGG_OPUS, SPEEX_WITH_HEADER_BYTE, MP3가 있습니다.

감정 및 항목 분석

오디오 콘텐츠가 텍스트로 변환된 후 오디오에서 언급된 항목을 확인하기 위해 각 콘텐츠에 대한 감정과 함께 콘텐츠에 대한 추가 분석을 수행할 수 있습니다. 텍스트에서 항목과 감정을 추출하는 방법에는 여러 가지가 있습니다. 접근 방식마다 복잡한 정도가 다릅니다.

첫 번째 옵션은 TensorFlow와 같은 머신러닝 프레임워크를 사용하여 자체 항목과 감정 추출기를 빌드하는 것입니다. 또 다른 옵션은 다른 사용자가 이미 수행한 작업을 활용하고, 전이된 학습을 사용하여 기존 모델을 맞춤설정하는 것입니다. 추가 옵션으로는 Natural Language API 또는 AutoML Natural Language 등의 사전 학습된 Machine Learning API를 사용할 수 있습니다. 각 접근 방식에는 장단점이 있습니다.

옵션 1: TensorFlow에서 자체 모델을 빌드하거나 전이된 학습 사용

장점:

  • 특정 항목 또는 도메인별 용어에 대해 모델을 학습시킬 수 있습니다.

단점:

  • 항목 추출 구현은 해결된 문제로, 도메인별 용어가 있지 않는 한 값이 추가되지 않습니다.
  • 모델을 구현하려면 머신러닝 관련 전문 지식이 필요합니다.
  • 모델 구현, 모델 선택, 조정에는 많은 노력이 필요합니다.
  • 시간이 지남에 따라 모델을 관리하고 조정해야 합니다.

옵션 2: Natural Language API 사용

장점:

  • 모델을 개발한 후 API를 빌드하여 사용하는 것보다 한 API를 사용하는 것이 쉬우므로 개발자가 쉽게 사용할 수 있습니다.
  • 모델이 사전 제작되고, 학습되고, 호스팅되기 때문에 머신러닝 관련 전문 지식이 필요하지 않습니다.
  • 감정 분석, 항목 분석, 항목 감정 분석, 콘텐츠 분류, 구문 분석이 포함됩니다.

단점:

  • 특정 항목 또는 도메인별 용어에 대해 학습시킬 수 없습니다.

옵션 3: AutoML Natural Language 사용

장점:

  • 모델이 사전 제작되고, 학습되고, 호스팅되기 때문에 머신러닝 관련 전문 지식이 필요하지 않습니다.
  • 특정 항목 또는 도메인별 용어에 대해 모델을 학습시킬 수 있습니다.
  • 학습된 모델의 결과를 API로 나타냅니다.

단점:

  • 학습 데이터를 제공해야 합니다.
  • 시간이 지남에 따라 모델을 관리하고 조정해야 합니다.

텍스트에 특정한 기술 용어가 포함되어 있지 않고 일반적이지 않은 문구 또는 단어로서 해독하기 어려운 문구를 포함하지 않는 경우에는 일반적으로 Natural Language API가 매우 유용합니다. 이 문서에 설명된 사용 사례에서는 샘플이 텍스트에서 감정과 항목을 추출하므로 Natural Language API가 허용되는 수준의 성능을 제공합니다. 커스텀 머신러닝 모델을 개발하는 것보다 API를 사용하는 것이 쉽기 때문에 Natural Language API를 사용해야 합니다.

Natural Language API 호출

이 문서에 설명된 아키텍처에서 Natural Language API는 항목을 추출하고 항목 감정 분석을 수행하는 데 사용됩니다. 그런 다음이 정보를 사용하여 오디오 파일에서 추출된 텍스트를 태그하고 텍스트의 전체 테마를 파악합니다.

텍스트 관점 분석

분석에서 또 다른 신호는 특정 주제에 대한 의견 또는 댓글의 부정적인 영향입니다. Perspective APIJigsaw와 Google의 악용 방지 기술팀에 의해 만들어져 오픈소스 프로젝트로 출시되었습니다. 특정 댓글이 '유해'한 것으로 인식될 확률을 결정합니다. API는 머신러닝 모델을 사용하여 댓글이 대화에 미칠 수 있는 영향을 평가합니다.

Perspective API

Perspective API는 TOXICITY, PROFANITY, INSULT 등의 여러 모델을 제공합니다. 샘플 아키텍처는 TOXICITY 모델을 사용합니다. 이 모델은 제공된 텍스트가 '상대방을 토론에서 나가게 할 수 있는 무례하거나 모욕적이거나 부당한 댓글을 남길 가능성'을 보고합니다. 텍스트 콘텐츠에는 해당 오디오 파일의 시작 및 종료 시간이 포함되어 있으므로 Perspective API의 결과가 해당 시작 및 종료 시간과 함께 저장됩니다. 이렇게 하면 Perspective API 결과를 원본 오디오 파일의 특정 섹션과 연결할 수 있습니다.

오디오 파이프라인 결과 보기

처리 파이프라인은 Cloud Storage에 오디오 파일을 업로드할 때 시작되며, 실제로는 모든 사용자 업로드 프로세스에 통합될 수 있습니다. 웹 앱을 사용하여 실시간으로 업로드하거나 다수의 오디오 파일을 데이터 파이프라인을 통해 동시에 업로드하여 일괄 업로드할 수 있습니다.

처리가 완료되면 아키텍처에 사용된 API에서 생성된 분석 결과를 읽을 수 있습니다. 아키텍처 다이어그램은 텍스트 콘텐츠, 텍스트에서 식별된 항목 및 감정, 관련 오디오 클립의 시작 및 종료 시간을 표시하는 웹 UI를 보여줍니다. 다이어그램에 표시된 것처럼 웹 앱은 App Engine과 Cloud Storage를 사용합니다.

App Engine

웹 앱은 App Engine 앱으로 구현됩니다. App Engine은 많은 일반적인 웹 프로그래밍 언어를 지원하고 사용자 트래픽에 따라 자동으로 확장 및 축소할 수 있는 Platform as a Service(PaaS) 제품입니다. App Engine은 Google Cloud와 원활하게 통합되어 오디오 파일을 Cloud Storage에 업로드하는 과정을 간소화합니다.

다음 단계