阅读完有效的文本分类技巧包后,我有些困惑。
参数wordNgrams
,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)
输入句子是“我爱你”。
给定minn = 2,maxn = 3,整个句子将转换为[<I, I>], [<l, <lo, lo, lov,.....]
等
对于爱这个词,其快速文本嵌入=(emb(爱)(作为完整词)+ emb([(fasttext emb(I)+fasttext emb(love))/2, (fasttext emb(love)+fasttext emb(you))/2]
。
句子嵌入是2克嵌入的平均值,维数为300。然后通过具有#label个神经元(即乘以大小为[300,#labels]的矩阵)的层来填充该句子。
这是对的吗?如果我错了请纠正我
答案 0 :(得分:1)
拉朱,
你几乎是对的,但平均发生在最后。
首先,一个句子是如何分词的?
整个句子用空格标记。所以“我爱你”会产生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 维的相应列向量求和来完成的,我们除以记号数以获得 this line of code 的平均值。