Как отслеживать упоминания СМИ в подкастах с помощью Python

За последние десять лет количество людей, которые слушают подкасты, удвоилось. С этим ростом увеличиваются и расходы на рекламу. Компании должны отслеживать упоминания СМИ в рекламе подкастов, используя ИИ и Python, как никогда раньше, чтобы определить, какие компании упоминаются — их или конкурентов.

Например, подкасты, которые я слушаю, иногда включают рекламу от нескольких спонсоров. Что если вы — компания, которой необходимо отслеживать упоминания в подкастах ваших конкурентов? Вам нужно определить, что было сказано об этих компаниях, а что было оплачено. Это важное различие.

Существует несколько способов отслеживания упоминаний в подкастах с помощью ИИ «речь в текст» и Python. Давайте рассмотрим метод с использованием диаризации (к вашему сведению, далее в этом посте есть лучший способ).

Метод 1: Мониторинг упоминаний СМИ в подкастах с помощью диаризации и распознавания речи ИИ

Этот метод интересен, но не так эффективен, как я покажу далее в этом посте. В качестве краткого обзора, функция диаризации Deepgram распознает изменения диктора в стенограмме. Например, если есть несколько дикторов, а функция диаризации установлена на True, каждому диктору в стенограмме будет присвоено слово.

Читаемая стенограмма с функцией диаризации речи в текст может выглядеть следующим образом:

[Speaker:0] All alright, guys, before we start, we got a special message from our sponsor.
[Speaker:1] If you wanna rank higher on Google, you gotta look at your page speed time. 
[Speaker:1] The faster website loads, the better off you are.
[Speaker:1] With Google's core vital update that makes it super important to optimize your site or load time.
[Speaker:1] And one easy way to do it is use the host that Eric and I use, Dream Host.
Вход в полноэкранный режим Выход из полноэкранного режима

В подкасте время между выступающими или ведущими обычно распределяется равномерно. Способ ведения дневника используется для мониторинга упоминаний СМИ в подкастах, чтобы определить, является ли один человек спикером в течение более длительного времени, чем другой. В приведенном выше примере стенограммы вы заметите, что спикер 1 говорит дольше всех в этом сегменте. Это может указывать на то, что именно в этот момент зачитывается реклама от имени спонсора.

Я обещал вам лучший способ отслеживать упоминания в подкасте. Давайте посмотрим, как это можно сделать с помощью Python, функции ИИ Deepgram для поиска речи в тексте и обнаружения сущностей с помощью SpaCy.

Метод 2: Мониторинг упоминаний СМИ в подкастах с помощью поиска и обнаружения сущностей

Мне было интересно придумать способ мониторинга упоминаний СМИ в подкастах, который делал бы следующее:

Искать в транскрипте подкаста такие термины, как «спонсор» или «оплачено», которые указывают на рекламный сегмент.
Определить организации, о которых говорят в рекламе, чтобы определить компанию, спонсирующую этот сегмент
И в целом, не создавать для меня еще большую головную боль.

Мне нужно было использовать API для распознавания голоса AI, который бы транскрибировал аудиозаписи подкастов. С этой частью было легко разобраться. Используйте Deepgram Python SDK. В этом сценарии я использовал опцию предварительной записи, чтобы расшифровать уже записанный звук. Я также получил API-ключ Deepgram из нашей консоли, в которой есть игровые миссии, которые можно попробовать, чтобы быстрее войти в курс дела.

Deepgram хорош тем, что он обладает высокой точностью и быстро выдает расшифровку. И то, и другое важно в данном случае. Мне нужна была точность, чтобы правильно отметить организации (я покажу это в коде), а скорость — это преимущество, поэтому мне не пришлось долго ждать расшифровки аудио.

Функция Search из Deepgram стала спасителем при работе над этим проектом. Она ищет термины или фразы по акустическим паттернам в аудио, а затем возвращает результат в виде объекта JSON.

Я добавил функцию поиска в качестве параметра в код Python следующим образом:

'search': 'sponsor'
Войти в полноэкранный режим Выйти из полноэкранного режима

Поскольку я хотел найти, где ведущие подкаста упоминают спонсорство, поиск по миру sponsor имел смысл. Представьте, что они говорят что-то вроде: «А теперь несколько слов от нашего спонсора».

Распечатав результаты, я получил ответ, похожий на этот:

[{'confidence': 1.0, 'end': 23.57, 'snippet': 'our sponsor', 'start': 23.09},
 {'confidence': 0.7023809, 'end': 79.82909, 'snippet': 'spotify', 'start': 79.38954},
 {'confidence': 0.6279762, 'end': 120.18001, 'snippet': 'stocks','start': 119.740005},
 {'confidence': 0.5535714, 'end': 241.19926,'snippet': 'focus on','start': 240.92029}]
Войти в полноэкранный режим Выйти из полноэкранного режима

Ответ представляет собой список словарей с наиболее близким совпадением с моим поисковым термином, обозначенным доверием. Чем выше доверие, тем больше вероятность совпадения с поисковым запросом. Эта функция очень помогла, поскольку все, что мне нужно было сделать, это передать слово для поиска в транскрипте в Python SDK для преобразования речи в текст, и он выдал результат.

Далее я использовал SpaCy для обнаружения сущностей. SpaCy — это библиотека Python, используемая для машинного обучения и обработки естественного языка. Я искал способ пометить объекты в транскрибированном аудио как организации.

SpaCy пометил распознанные компании как ORG, но я также использовал EntityRuler для определения менее известных организаций. Как это работает, вы увидите в следующем разделе, когда я буду разбирать код.

Разбор кода на Python с использованием AI Deepgram Speech-to-Text и SpaCy

Первое, что я сделал, это установил следующие библиотеки Python:

pip install deepgram-sdk
pip install python-dotenv
pip install -U pip setuptools wheel
pip install spacy
python3 -m spacy download en_core_web_md
Войти в полноэкранный режим Выйти из полноэкранного режима

Если вы хотите посмотреть код Python, который я написал для этого проекта упоминания подкаст-медиа, пожалуйста, посмотрите ниже:

from multiprocessing.context import set_spawning_popen
from deepgram import Deepgram
from dotenv import load_dotenv
from spacy.pipeline import EntityRuler
import spacy
import asyncio
import json
import os

load_dotenv()

PATH_TO_FILE = 'podcast-audio-file.mp3'

async def transcribe_with_deepgram():
   # Initializes the Deepgram SDK
   deepgram = Deepgram(os.getenv("DEEPGRAM_API_KEY"))

   options = {
       'punctuate': True,
       'search': 'sponsor'
   }   

   get_start_time = 0.0


   # Open the audio file
   with open(PATH_TO_FILE, 'rb') as audio:
       # ...or replace mimetype as appropriate
       source = {'buffer': audio, 'mimetype': 'audio/mp3'}
       response = await deepgram.transcription.prerecorded(source, options)

       if 'transcript' in response['results']['channels'][0]['alternatives'][0]:
           # search for query word in transcript
           search_term = response['results']['channels'][0]['search'][0]['hits']

           # get search_term with confidence of 1.0
           if search_term[0]['confidence'] == 1.0:
               get_start_time = search_term[0]['start']

           transcript = response['results']['channels'][0]['alternatives'][0]['words']

    get_end_start_time = get_start_time + 30

   start_list = []

   for word in transcript:
       if word['start'] >= get_start_time and word['start'] < get_end_start_time:
           start_list.append(word['punctuated_word'])

   new_transcript = " ".join(start_list)

   return new_transcript


async def get_media_mentions():

   media_transcript = await transcribe_with_deepgram()

   # Build upon the spaCy Medium Model
   nlp = spacy.load("en_core_web_md")

   # Create the EntityRuler (your competition or whichever ORG)
   ruler = nlp.add_pipe("entity_ruler")

   # List of Entities and Patterns
   patterns = [
                   {"label": "ORG", "pattern": "Dream Host"}
              ]

   ruler.add_patterns(patterns)


   doc = nlp(media_transcript)

   #extract entities
   for ent in doc.ents:
       if ent.label_ == "ORG":
           print(ent.text, ent.label_)



asyncio.run(get_media_mentions())
Войти в полноэкранный режим Выход из полноэкранного режима

В методе transcribe_ with_deepgram вы инициализируете API Deepgram и открываете наш файл подкаста .mp3, чтобы прочитать его как аудио. Затем вы используете опцию предварительной транскрипции для транскрибирования записанного файла в текст.

В методе get_media_mentions я загружаю модель носителя SpaCY и создаю EntityRuler. Этот EntityRuler позволил мне создать деталь Dream Host с соответствующей меткой ORG. В данном примере Dream Host не является признанной компанией. Тем не менее, она упоминается в стенограмме, поэтому я хотел убедиться, что код запомнил ее, так как я отслеживал упоминания СМИ в подкасте.

Наконец, я извлек сущности и распечатал текст или название компании, упомянутой в спонсируемом сегменте подкаста, и все метки с ORG, идентифицирующие ее как организацию.

Вот как это выглядело в моем терминале:

Google ORG
Google ORG
Dream Host ORG
Войти в полноэкранный режим Выйти из полноэкранного режима

Как вы можете видеть, ведущие подкаста упомянули компании Google и Dream Host.

Заключение

На этом мы завершаем статью о том, как отслеживать упоминания СМИ в подкастах с помощью Python. Я надеюсь, что это руководство было вам полезно. Если у вас возникли вопросы, пожалуйста, пишите мне в твиттер @DeepgramAI.

Оцените статью
devanswers.ru
Добавить комментарий