Fasttext算法只使用单词和子词?还是句子?

时间:2018-04-13 07:22:51

标签: nlp vectorization word2vec word-embedding fasttext

如果学习方法有任何好的例子(或者更有可能是学习程序),我也会阅读论文并使用google搜索

对于word2vec,假设有语料库句子

  

我带着午餐盒去学校,我的母亲每天早上都会把它包裹起来

然后在窗口大小为2的情况下,它会尝试使用周围的单词

来获取'school'的向量
  

['go','to','with','lunch']

现在,FastText说它使用子词来获取向量,所以它肯定是使用n gram子词,例如n = 3,

  

['sc','sch','cho','hoo','ool','school']

到此为止,我明白了。 但目前尚不清楚,如果其他词语被用于学习“学校”。我只能猜测其他周围的单词也像word2vec一样使用,因为文章提到了

=>术语 Wc Wt 都用于函数

其中Wc是上下文单词,Wt是序列t中的单词。

但是,目前还不清楚FastText如何学习单词的向量。

请清楚说明FastText学习过程如何进行?

更确切地说,我想知道如果FastText也遵循与Word2Vec相同的程序,同时它还学习了n-gram特征子词 。或者只有n-gram表征了使用单词的子词?

它如何在初始时对子字进行矢量化?等

2 个答案:

答案 0 :(得分:2)

任何上下文单词的候选输入向量都是由其全字令牌及其所有字符n-gram组合而成的。因此,如果上下文单词是'school',并且您使用的是3-4个字符的n-gram,则训练中的输入向量是school和<的完整单词向量的组合。 / em> ['sch', 'cho', 'hoo', 'ool', 'scho', 'choo', 'hool']的所有n-gram向量。)

当通过训练调整候选矢量时, all 调整组成矢量。 (这有点像word2vec CBOW中的模式,单个平均上下文输入向量的所有单词一起被调整,当它们预测单个目标输出字的能力被评估和改进时。)

结果,那些碰巧在许多相似单词中有意义的n-gram(例如,常见的词根或前缀/后缀)被定位在它们赋予意义的位置。 (其他n-gram可能仍然主要是低幅度噪声,因为它们出现的位置没有什么有意义的模式。)

训练后,通过组合全字向量和所有n-gram,也可以构建单个词汇表单词的报告向量。

然后,当你还遇到一个词汇外单词时,如果它与形态相似的训练单词共享一些或多个n-gram,它将得到一个类似的计算向量 - 因此比什么都没有,猜测那个词的矢量应该是什么。 (在小错别字或已知单词的轻微变体的情况下,合成矢量可能相当不错。)

答案 1 :(得分:0)

fastText网站states,其中至少有两个已实施的算法确实使用了句子中的周围字词。

此外,原始的fastText实现是open source,因此您可以检查它在探索代码时的工作原理。