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

Raj*_*aju 3 supervised-learning text-classification fasttext

阅读《高效文本分类技巧袋》后,我有点困惑。wordNgramsargs和minn之间有什么区别maxn

例如,文本分类任务和 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)
Run Code Online (Sandbox Code Playgroud)

输入句子是“我爱你”。给定minn=2,maxn=3,整个句子转化为[<I, I>], [<l, <lo, lo, lov,.....]etc 对于love这个词,它的fasttext嵌入= (emb(love)(作为一个完整的词)+ emb(<l)+emb(<lo)+。 ...) / n. 对于句子,它被分成[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] 的矩阵)。

这是正确的吗?如果我错了请纠正我

小智 5

拉朱,

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

首先,一个句子是如何标记化的?

整个句子用空格标记。所以“我爱你”会产生4个词:“我”、“爱”、“你”和一个特殊词EOS(句尾)。到目前为止我们有 4 个代币。然后,对于每个单词,根据您对minn和的设置maxn,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 维列向量求和,然后除以标记数来获得这行代码的平均值来完成的。