【发布时间】:2020-09-26 02:14:16
【问题描述】:
我正在将语音转录为文本,但在 Keras 中使用 pad_sequences 时遇到了一个问题(我认为)。我预训练了一个在数据帧上使用pad_sequences 的模型,它将数据放入一个数组中,每个值的列数和行数相同。但是,当我在转录文本时使用 pad_sequences 时,该语音字符串中的字符数是作为 numpy 数组返回的行数。
假设我有一个包含 4 个字符的字符串,那么它将返回一个 4 X 500 Numpy 数组。对于 6 个字符的字符串,它将返回 6 X 500 Numpy 数组等等。
我的澄清代码:
import speech_recognition as sr
import pyaudio
import pandas as pd
from helperFunctions import *
jurors = ['Zack', 'Ben']
storage = []
storage_df = pd.DataFrame()
while len(storage) < len(jurors):
print('Juror' + ' ' + jurors[len(storage)] + ' ' + 'is speaking:')
init_rec = sr.Recognizer()
with sr.Microphone() as source:
audio_data = init_rec.adjust_for_ambient_noise(source)
audio_data = init_rec.listen(source) #each juror speaks for 10 seconds
audio_text = init_rec.recognize_google(audio_data)
print('End of juror' + ' ' + jurors[len(storage)] + ' ' + 'speech')
storage.append(audio_text)
cleaned = clean_text(audio_text)
tokenized = tokenize_text(cleaned)
padded_text = padding(cleaned, tokenized) #fix padded text elongating rows
我使用辅助函数脚本:
def clean_text(text, stem=False):
text_clean = '@\S+|https?:\S|[^A-Za-z0-9]+'
text = re.sub(text_clean, ' ', str(text).lower()).strip()
#text = tf.strings.substr(text, 0, 300) #restrict text size to 300 chars
return text
def tokenize_text(text):
tokenizer = Tokenizer()
tokenizer.fit_on_texts(text)
return tokenizer
def padding(text, tokenizer):
text = pad_sequences(tokenizer.texts_to_sequences(text),
maxlen = 500)
return text
返回的文本将被输入到预先训练的模型中,我很确定不同长度的行会导致问题。
【问题讨论】:
标签: python keras nlp speech-to-text text-processing