A principios de 2020, enfrentamos la mayor crisis del siglo XXI: la pandemia de COVID-19. En medio del caos, la generación finalmente encontró una manera de hacer el trabajo mediante la introducción de la automatización en todos los demás aspectos de la vida. Tras el golpe de la pandemia, nos hemos encontrado con un aumento del 87 % en las herramientas de videoconferencia para las comunicaciones diarias. Las comunicaciones que van desde reuniones en línea, conferencias universitarias, reuniones de negocios, casi todo se alojó en Internet, que al ser virtual, invadió las posibilidades de comunicaciones infructuosas. De hecho, los datos recopilados de los empleados de todos los dominios muestran que las personas a menudo pierden puntos importantes porque encuentran que tomar actas de esas reuniones es una tarea que consume mucho tiempo, distrae y es realmente aburrida, y se desperdician más de 37 mil millones de dólares en estas reuniones improductivas. .
El propósito de este proyecto es transcribir reuniones en línea y resumirlas mediante la aplicación de técnicas intensas de aprendizaje automático, con el fin de producir actas de la reunión y audio resumido multilingüe para obtener una mejor comprensión del tema por parte del usuario.
Las características propuestas por la extensión de Chrome son:
- Conoce la transcripción
- Resumen usando Modelos Extractivos y Abstractivos.
- Generación de audio multilingüe.
Características adicionales ofrecidas –
- Resumen de conferencias NPTEL/ MOOC
- Como acortador de tuits de Twitter.
Herramientas y Tecnologías
- Interfaz: Reactjs, Material-UI, Bootstrap, HTML, CSS, Javascript
- Backend: Django, Django resto API
- Base de datos: SQLite
- Bibliotecas ML: NLTK, Antorcha
requisitos previos
Conocimiento de Python, Bibliotecas NLP, uso de Rest API y buena experiencia laboral en Desarrollo Web usando Reactjs.
Flujo de control
- El usuario inicia sesión en el sitio web y habilita la extensión de Chrome.
- La extensión de Chrome extrae el audio de la reunión de Google de cada orador y lo transcribe a través de la extensión de Chrome.
- Esta transcripción extraída se envía al backend donde se aplican técnicas de aprendizaje automático para el resumen del texto.
- Este texto ultraprocesado luego se dirige hacia el traductor para traducir el extracto al idioma deseado por el usuario.
- Esta transcripción se puede descargar o incluso escuchar en el panel de control según el deseo del usuario.
Así es como Multilingual Google Meet Summarizer contribuye a la automatización impulsada por la pandemia.
Paso B Paso Implementación
1. Extensión de cromo
La tarea principal de la extensión de Chrome es extraer el título de Google Meet de los elementos DOM de Google Meet. Hace uso del contenedor de subtítulos generado por la función incorporada de Google Meet: activar subtítulos. La reunión se transcribe de la siguiente manera:
- Con la ayuda de Selenium, se rastrea el Xpath del botón «Activar subtítulos».
- El código activa automáticamente los subtítulos de Google Meet al hacer clic automáticamente en el botón Subtítulos.
- Luego rastreamos el Xpath del contenedor de subtítulos y extraemos el texto generado automáticamente que se encuentra dentro del contenedor.
- Finalmente, agregamos el texto en una string con el nombre del hablante y la marca de tiempo.
Luego, el texto completo se envía al backend para su procesamiento.
2. Front-end y Back-end
- El primer paso será crear un sistema de autenticación para que los usuarios puedan iniciar sesión y guardar las transcripciones de sus reuniones en la base de datos.
- Cree un modelo de usuario en Django.
- Implemente JWT (token web JSON) en Django usando la aplicación djangorestframework_simplejwt.
- Cree vistas REST respectivas para la generación y autenticación de tokens.
- También se puede usar la autenticación social usando JWT en lugar del registro por correo electrónico según las preferencias.
- El siguiente paso será crear una base de datos para almacenar la información de las transcripciones de las reuniones de los usuarios. Cree una relación SQL estándar en líneas similares a las que se indican a continuación.
- Transcripción (transcript_id, propietario_nombre, transcript_date, hostname, transcript_title, meet_duration, content).
- También se pueden usar campos y esquemas adicionales dependiendo de las funcionalidades CRUD que se proporcionarán al usuario.
- Cree una API REST para guardar una nueva transcripción en la base de datos. Esta API será utilizada por la extensión de Chrome que enviará su transcripción junto con metainformación como marca de tiempo, nombre de host, etc.
La API procesa la información recibida y la almacena en la base de datos. - Cree API separadas para cada modelo NLP que se utilizará para el resumen. El front-end enviará la transcripción a esta API. La API usa el modelo NLP y devuelve el texto resumido a la interfaz. La API simplemente ejecuta el script ML NLP que se describe a continuación. Crear API para la traducción del texto a varios idiomas.
Python3
''' Translation Code ''' from googletrans import Translator LANGUAGE_CODES = { 'ENGLISH': 'en', 'HINDI': 'hi', 'MARATHI': 'mr', 'ARABIC': 'ar', 'BENGALI': 'bn', 'CHINESE': 'zh-CN', 'FRENCH': 'fr', 'GUJRATI': 'gu', 'JAPANESE': 'ja', 'KANNADA': 'kn', 'MALAYALAM': 'ml', 'NEPALI': 'ne', 'ORIYA': 'or', 'PORTUGUESE': 'pt', 'PUNJABI': 'pa', 'RUSSIAN': 'ru', 'SPANISH': 'es', 'TAMIL': 'ta', 'TELUGU': 'te', 'URDU': 'ur' } def translate_utility(inp_text, inp_lang, op_lang): inp_lang, op_lang = inp_lang.upper(), op_lang.upper() translator = Translator() text_to_translate = translator.translate( inp_text, src=LANGUAGE_CODES[inp_lang], dest=LANGUAGE_CODES[op_lang]) op_text = text_to_translate.text return(op_text)
3. Algoritmo ML
Python3
''' NLTK MODEL CODE ''' # Tokenizing Sentences from nltk.tokenize import sent_tokenize # Tokenizing Words from nltk.tokenize import word_tokenize import nltk from string import punctuation from nltk.corpus import stopwords nltk.download('stopwords') nltk.download('punkt') # Cleaning text that is got from meet transcript def clean(text): sample = text.split('**') sample.pop(0) clean_text = "" i = 0 for t in sample: if i % 2 != 0: clean_text += str(t) i += 1 return clean_text # Finding list of stopwords ( Stopwords are # those which do not add meaning to sentence) stop_words = set(stopwords.words("english")) # Tokenize def Wtokenize(text): words = word_tokenize(text) return words # Frequency table will be storing frequency of each word # appearing in input text after removing stop words # Need: It will be used for finding most relevant sentences # as we will be applying this dictionary on every sentence # and find its importance over other def gen_freq_table(text): freqTable = dict() words = Wtokenize(text) for word in words: word = word.lower() if word in stop_words: continue if word in freqTable: freqTable[word] += 1 else: freqTable[word] = 1 return freqTable # Sentence Tokenize def Stokenize(text): sentences = sent_tokenize(text) return sentences # Storing Sentence Scores def gen_rank_sentences_table(text): # dictionary storing value for each sentence sentenceValue = dict() # Calling function gen_freq_table to get frequency # of words freqTable = gen_freq_table(text) # Calling list of sentences after tokenization sentences = Stokenize(text) for sentence in sentences: for word, freq in freqTable.items(): if word in sentence.lower(): if sentence in sentenceValue: sentenceValue[sentence] += freq else: sentenceValue[sentence] = freq return sentenceValue def summary(text): sum = 0 sentenceValue = gen_rank_sentences_table(text) for sentence in sentenceValue: sum += sentenceValue[sentence] avg = int(sum / len(sentenceValue)) summary = "" sentences = Stokenize(text) for sentence in sentences: if (sentence in sentenceValue) and (sentenceValue[sentence] > (1.2 * avg)): summary += " " + sentence return summary def mainFunc(inp_text): # getting text cleaned if("**" not in inp_text): text = inp_text else: cleaned_text = clean(inp_text) text = cleaned_text summary_text = summary(text) print("\nModel Summary: ", summary_text) return summary_text
Producción
Aplicación de proyectos en la vida real
- Utilizado en reuniones virtuales de negocios
- Utilizado por los estudiantes para obtener notas concisas de una conferencia
- Una ayuda para los discapacitados visuales
- También como acortador de tuits de Twitter