1、背景
在初版模型,基于训练数据集,利用VocabularyProcessor构建了词汇表,存储文件为old_vocab.pickle。在以后的增量更新中
如何把已经保存的上版词汇加载上,同时加入增量中的新词汇,最终形成一版新的词汇。而tf中的VocabularyProcessor没有提供
增量更新的api。
2、解决办法
利用VocabularyProcessor已经提供的接口,vocabulary_._reverse_mapping将老的词汇抽取出来,按照分词的格式重新规范化之后
与增量的词,合并成一个语料,送入新的VocabularyProcessor的训练,最后将其保存为一个新文件,新文件就包括了老版词汇和增量词汇,具体实现方法如下:
#基于老的词汇表,增量更新词汇
#old_input_text = ['a b','c d']
vocab_processor = tf.contrib.learn.preprocessing.VocabularyProcessor.restore('old_vocab.pickle')
new_input_text = ['e f','p q']
new_vocab = [" ".join(vocab_processor.vocabulary_._reverse_mapping)] + new_input_text
new_vocab_processor = tf.contrib.learn.preprocessing.VocabularyProcessor(50,0,\
tokenizer_fn=text_tokenizer)
new_vocab_processor.fit(new_vocab)
print(new_vocab_processor.vocabulary_._mapping)
print(new_vocab_processor.vocabulary_._reverse_mapping)
print(list(new_vocab_processor.transform(new_input_text)))
new_vocab_processor.save('new_vocab.pickle')