fassttext监督学习中args wordNgrams、minn和maxn有什么区别?

What is the difference between args wordNgrams, minn and maxn in fassttext supervised learning?

阅读高效文本分类的 Bag of tricks 后,我有点困惑。 args wordNgramsminnmaxn

之间有什么区别

例如,一个文本分类任务和 Glove 嵌入作为 pretrainedVectors

ft.train_supervised(file_path,lr=0.1,epoch=5,wordNgrams=2,dim=300,loss='softmax', minn=2,maxn=3,pretrainedVectors='glove.300d.txt',verbose=0)

一个输入语句是'I love you'。 给定minn=2,maxn=3,整个句子转化为[<I, I>], [<l, <lo, lo, lov,.....]等 对于 love 这个词,它的 fasttext embedding = (emb(love) (as a complete word) + emb([I love, love you](因为 wordNgrams=2),这些 2-gram 嵌入是 [(fasttext emb(I)+fasttext emb(love))/2, (fasttext emb(love)+fasttext emb(you))/2]。 句子嵌入是 2-gram 嵌入的平均值,维数为 300。然后将其馈入具有#labels 神经元的层(即乘以大小为 [300, #labels] 的矩阵)。

这样对吗?如有错误请指正

拉朱,

你几乎是对的,但平均发生在最后。

首先,一个句子是如何分词的?

整个句子用空格标记。所以“我爱你”会产生4个词:“我”、“爱”、“你”和一个特殊的词EOS(句尾)。到目前为止,我们有 4 个令牌。然后,对于每个单词,根据您为 minnmaxn 设置的内容,fastText 将计算子词并将它们也视为标记。因此,在您使用 minn=2、maxn=3 的情况下,它将是:"<I", "<I>", "I>", "<l", "<lo", "lo", "lov", "ov", "ove", "ve", "ve>", "e>", "<y", "<yo", "yo", "you", "ou", "ou>", "u>"(我们还添加了单词字符的开头和结尾(<>))。

因此总代币将为 "I", "love", "you", EOS, "<I", "<I>", "I>", "<l", "<lo", "lo", "lov", "ov", "ove", "ve", "ve>", "e>", "<y", "<yo", "yo", "you", "ou", "ou>", "u>"

现在 wordNgrams=2,我们还添加对应于词对的标记:"I love", "love you", "you EOS"

一旦我们有了代币:

为了计算隐藏层,句子的嵌入将是上面各个标记的嵌入的平均值。这是通过对输入矩阵中相应的 300 维列向量求和来完成的,然后我们除以标记的数量以获得平均值 this line of code.