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

时间:2020-07-10 06:18:04

标签: text-classification supervised-learning fasttext

阅读完有效的文本分类技巧包后,我有些困惑。 参数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)

输入句子是“我爱你”。 给定minn = 2,maxn = 3,整个句子将转换为[<I, I>], [<l, <lo, lo, lov,.....]等 对于爱这个词,其快速文本嵌入=(emb(爱)(作为完整词)+ emb([I love, love you](因为wordNgrams = 2),并且这些2 gram嵌入为[(fasttext emb(I)+fasttext emb(love))/2, (fasttext emb(love)+fasttext emb(you))/2]。 句子嵌入是2克嵌入的平均值,维数为300。然后通过具有#label个神经元(即乘以大小为[300,#labels]的矩阵)的层来填充该句子。

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

1 个答案:

答案 0 :(得分:1)

拉朱,

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

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

整个句子用空格标记。所以“我爱你”会产生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 的平均值。