Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么Keras.preprocessing.sequence pad_序列处理字符而不是单词?_Python_Keras_Nlp_Speech To Text_Text Processing - Fatal编程技术网

Python 为什么Keras.preprocessing.sequence pad_序列处理字符而不是单词?

Python 为什么Keras.preprocessing.sequence pad_序列处理字符而不是单词?,python,keras,nlp,speech-to-text,text-processing,Python,Keras,Nlp,Speech To Text,Text Processing,我正在将语音转录成文本,在Keras中使用pad_序列时遇到了一个问题(我想)。我对一个模型进行了预训练,该模型在数据帧上使用了pad_序列,它将数据放入一个数组中,每个值的列和行数相同。但是,当我在转录文本时使用pad_序列时,该语音字符串中的字符数是作为numpy数组返回的行数 假设我有一个包含4个字符的字符串,那么它将返回一个4x500Numpy数组。对于包含6个字符的字符串,它将返回6x500Numpy数组,依此类推 我的澄清代码: import speech_recognition a

我正在将语音转录成文本,在Keras中使用
pad_序列时遇到了一个问题(我想)。我对一个模型进行了预训练,该模型在数据帧上使用了
pad_序列
,它将数据放入一个数组中,每个值的列和行数相同。但是,当我在转录文本时使用
pad_序列
时,该语音字符串中的字符数是作为numpy数组返回的行数

假设我有一个包含4个字符的字符串,那么它将返回一个
4x500
Numpy数组。对于包含6个字符的字符串,它将返回
6x500
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

返回的文本将被输入到预先训练好的模型中,我很确定不同长度的行会引起问题。

标记器
的方法,如
fit_on_text
text_to_sequences
需要一个文本/字符串列表作为输入(如其名称所示,即
text
)。但是,您正在向它们传递一个文本/字符串,因此它将迭代其字符,而假设它实际上是一个列表

解决此问题的一种方法是在每个函数的开头添加一个检查,以确保输入数据类型实际上是一个列表。例如:

def padding(text, tokenizer):
    if isinstanceof(text, str):
        text = [text]
    # the rest would not change...
对于
tokenize\u text
函数,您也应该这样做。更改后,自定义函数将同时处理单个字符串和字符串列表



作为一个重要的补充说明,如果您在问题中输入的代码属于预测阶段,则其中存在一个基本错误:您应该使用在培训模型时使用的相同的
标记器
实例,以确保映射和标记化以与培训阶段相同的方式完成。实际上,为每个或所有测试样本创建一个新的
标记器
实例是没有意义的(除非它与培训阶段使用的映射和配置相同)。

谢谢!实际上,我在发布这篇文章后立即阅读了一些文档,其中指定我希望保存和重用标记化权重。不过,您的解释让它更加清晰,代码也起了作用!
def padding(text, tokenizer):
    if isinstanceof(text, str):
        text = [text]
    # the rest would not change...