当前位置: 首页 > 知识库问答 >
问题:

有没有一种内置函数的简单方法可以自动重新训练keras NLP模型?

宋昕
2023-03-14

我有一个使用keras使用keras.preprocessing.text.Tokenizer构建的自然语言处理模型。我知道我可以通过在导入旧模型后调用它的. fit(...)来重新训练旧模型,但我也需要更新我的标记器。标记器做一些事情:通过空格标记字符串,消除符号,转换为较低值,在创建字典后只保留最常用的标记,散列标记并在句子太短时附加0。

Ex:

tokenizer = Tokenizer(num_words=vocab_size)

tokenizer.fit_on_texts(df_train['message'][0:100].values)

x_train = tokenizer.texts_to_sequences(df_train['message'][0:100].values)

x_train = pad_sequences(x_train, padding='post', maxlen=maxlen)

这个过程需要能够将序列输入nlp网络。当我尝试自动重新训练时,问题就出现了。每次我再培训时,标记器都必须更新。如果我尝试添加新文本,标记器类使用的字典中的所有值(表示单词的编码)都会发生变化。

Ex:

如果我像这样更新:tokenizer.fit_on_texts(df_train['消息'][100:200]. value)

然后是

x_train=tokenizer。文本到序列(df_train['message'][0:100]。值)

将为句子输出不同的编码。我需要同样的编码。官方文件中说,“def fit_on_text(self,text)”方法“根据文本列表更新内部词汇表”。它会更新,但也会更改键的所有旧值,旧值或新值。

有没有一种官方方法可以保留单词的旧值,并仅为新单词生成新值?

共有1个答案

松亦
2023-03-14

因此,根据Tokenizer的来源,所有单词都存储在Tokenizer类中。具体而言:

self.word_counts = OrderedDict()
self.word_docs = defaultdict(int)

因此,如果您想删除以前出现在输入字符串中的单词,可以通过在新输入中查找不在单词计数交叉点的任何项目来删除它们。按键()。

然而,还有一个问题:

当您运行.fit_on_texts时,它需要一个文本列表或一个字符串。根据您的操作方式,您可能还会增加文档计数器。如果这是有意的,那么您不需要在这里做任何事情。否则,您至少需要处理递减的self.document_count

(您可能还需要操纵:

self.word_index
self.index_word

如果您不喜欢文件计数器移动)

 类似资料:
  • 问题内容: 我正在建立一个带有flask的网站,其中用户具有帐户并能够登录。我正在使用flask-principal作为登录部分和角色管理。有没有办法让用户的会话在5分钟或10分钟后过期?我在flask文档或flask-principal文档中找不到该文件。 我想到了一种手动方法,在登录时在服务器端设置一个带有时间标签的变量,并在用户执行下一个操作时,服务器会验证该时间戳记上的时间增量并删除会话。

  • 问题内容: 我正在建立一个带有flask的网站,其中用户具有帐户并能够登录。我正在使用flask- principal作为登录部分和角色管理。有没有办法让用户的会话在5分钟或10分钟后过期?我在flask文档或flask- principal文档中找不到该文件。 我想到了一种手动方法,在登录时在服务器端设置一个带有时间标签的变量,并在用户执行下一个操作时,服务器会验证该时间戳记上的时间增量并删除会

  • 问题内容: 我正在研究Java应用程序的一部分,该应用程序将图像作为字节数组,将其读入实例,然后将其传递给第三方库进行处理。 对于单元测试,我想获取一个图像(从磁盘上的文件中获取),并断言它等于代码处理过的同一图像。 我的 预期 是使用从磁盘上的PNG文件读取的。 我的 测试 代码将相同的文件读入A,并将其作为PNG写入字节数组,以提供给被测系统。 当被测系统将字节数组写入新数组时,我想断言这两个

  • 问题内容: 在PHP中,有没有一种简单的方法可以将数字转换为单词?举例来说, 27 到 27 。 问题答案: 我在网上找到了一些(2007/2008)源代码,它具有版权,但是我可以自由使用它,并根据需要对其进行修改,因此将其放在此处并在CC-Wiki下重新许可:

  • 我有一个带文件夹的s3 bucket,文件夹里有大文件。 我想用python3-boto3脚本重命名文件夹。 我读了这个(《如何用Python重命名亚马逊S3文件夹对象》),他正在做的是复制带有新前缀的文件,然后删除原始文件夹。 这是非常不高效的方法,因为我有大文件,所以需要很长时间才能完成。 有没有更简单/更有效的方法?

  • 问题内容: 在此问题中找到了我能找到的最接近的示例:https : //github.com/tensorflow/tensorflow/issues/899 使用此最小的可复制代码: 但是,返回的FLOPS始终为“无”。有没有一种方法可以具体测量FLOPS,尤其是PB文件? 问题答案: 有点晚了,但也许将来对某些访客有帮助。对于您的示例,我成功测试了以下代码段: 也可以将分析器与以下代码段结合使