为什么“[UNK]”这个词是word2vec词汇表中的第一个?

问题描述 投票:0回答:1

如果词汇按照出现频率从高到低的顺序排列,则将“[UNK]”放在开头表示出现次数最多。但如果“[UNK]”不是最常见的单词怎么办?我应该根据它的频率将它放在词汇表中的另一个位置吗?

我在做本教程时发现了这样的问题 -> https://www.tensorflow.org/tutorials/text/word2vec

当我使用函数 tf.random.log_uniform_candidate_sampler 进行负采样时,具有低标记(例如 0,1,2 ...)的负样本将被采样最多。如果“[UNK]”是词汇表中的第一个(或使用填充时的第二个),这意味着它具有标记0(或使用填充时为1),则“[UNK]”将被大量采样为负样本。如果“[UNK]”经常出现,那么没有问题,但如果不出现怎么办?那么它应该收到更高的代币,不是吗?

word2vec zipf
1个回答
0
投票

迟回复你的问题,但我今天也遇到了这个问题。

答案是 TextVectorization.get_vocabulary() 方法的默认值为“include_special_tokens = True”,因此如果您像教程中所述那样调用它:

inverse_vocab = vectorize_layer.get_vocabulary()

然后您将获得“”的填充值和“[UNK]”的OOV值添加到您的词汇表中。

如果您想排除这些,则可以将“include_special_tokens”指定为 false:

inverse_vocab = vectorize_layer.get_vocabulary(include_special_tokens=False)

来源:

https://www.tensorflow.org/api_docs/python/tf/keras/layers/TextVectorization#get_vocabulary

© www.soinside.com 2019 - 2024. All rights reserved.