在 Fasttext skipgram 训练中,如果语料库中的某些句子只有一个词会怎样?

In Fasttext skipgram training, what will happen if some sentences in the corpus have just one word?

假设您有一个语料库,其中有些行只有一个词,因此有些词周围没有上下文。在这种情况下,Fasttext 如何为这些单个单词提供嵌入? 请注意,其中一些词的出现频率是 1,并且没有删除它们的截断值。

无法为此类词训练 context_word -> target_word skip-gram 对(在 'context' 或 'target' 角色中),因此此类词无法接受训练后的表征。只有具有至少 2 个标记的文本才有助于 word2vec 或 FastText 词向量训练。

(一个可能的例外:FastText 在其 'supervised classification' 模式下 可能 能够利用此类词并为其训练向量,因为这样即使是单个词可用于预测训练文本的已知标签。)

我怀疑这样的语料库仍会导致模型在其初始词汇发现扫描中对单词进行计数,因此它将被分配一个向量(如果它出现至少 min_count 次),并且该向量将接收通常的小随机向量初始化。但是词向量不会接受进一步的训练——所以当你在训练后请求返回向量时,它将是低质量的,唯一有意义的贡献来自与接受过真实训练的其他词共享的任何字符 n-gram。

对于 FastText,您应该将任何导致单个单词文本的文本中断过程视为错误。如果这些单词文本来自另一个有意义的上下文,它们曾经被其他上下文词包围,那么您应该更改文本分解过程,以在保留该上下文的更大块中工作。

另请注意:min_count=1 很少成为词向量模型的好主意,至少当训练文本是真实的自然语言 material 时,词词频率大致如下齐普夫定律。会有很多很多只出现 1 次(或很少出现)的词,但只有一到几个示例使用上下文,不太可能代表该词实际用法的真正广度和微妙之处,这样的词几乎不可能被接受好的向量可以推广到其他地方对这些相同词的其他用途。

训练好的向量需要各种用法示例,与其他词的数十到数百个用法示例相比,仅一个或几个示例实际上是 "noise"。因此,保留这些稀有词,而不是像默认 min_count=5(或更大的语料库中更高)那样丢弃它们,往往会减慢训练速度,减慢模型的收敛速度 ("settling"),并降低质量最后是 other 个更频繁的词向量——由于算法为帮助定位这些罕见词所做的重要但大部分是徒劳的努力。