I have 3 Questions about it, please help me out, I would really appreciate! Many thanks in advance!
1.当我训练自己的CNN进行文本分类时,我使用word2vec初始化单词,然后我只使用这些预训练的向量作为我的输入功能来训练CNN,所以如果我从未有过嵌入层,那么肯定不能通过反向传播做任何微调。我的问题是,如果我想要做好的话,它是否意味着创建一个嵌入层?以及如何创建它?
2.当我们训练word2vec时,我们使用无监督训练吗?就像在我的情况下,我使用skip-gram模型来获得我预先训练的word2vec;但是当我有vec.bin并在文本分类模型(CNN)中使用它作为我的单词初始化时,如果我可以微调vec.bin中的单词到矢量地图,是否意味着我必须有CNN网络结构与训练我的word2vec完全相同?微调的东西会改变vec.bin还是只是微调计算机内存?
@Franck Dernoncourt谢谢你提醒我。我在这里是绿色的,希望从强大的社区中学到一些东西。有空的时候请看看我的问题,再次感谢你!
答案 0 :(得分:2)
1)您需要的只是a good example of using pretrained word embedding with trainable/fixed embedding layer,代码中有以下更改。在Keras中,您可以默认更新此图层,以将其从训练中排除,您需要将训练设置为False。
Thatit <- function(n){
twin <- c()
twin2 <- Eratosthenes(n)
for(i in twin2){
if((i+2) in twin2){
twin <- c(twin, "(", (i, i+2), ")")
} else next()
} return(twin)
}
2)你的w2v只是用于嵌入层初始化,与你将要使用的CNN结构没有更多关系。只会更新内存中的权重。
答案 1 :(得分:0)
回答第一个问题-
在trainable=True
构造函数中设置Embedding
时。您的预训练嵌入设置为该weights
的{{1}}。现在,在这些embedding layer
上进行的任何微调都与weights
无关。如果要微调,则必须使用以下任何一种技术来微调w2v(CBOW or SG)
模型。 org.openqa.selenium.support.ui.Select。
答案2-
在w2v
的{{1}}上进行的任何微调都不会影响您的weights
。尽管从理论上讲您可以将这些更新的embedding layer
与模型一起保存。
答案3-
vec.bin
仅实现这两个方法(weights
和gensim
)。但是,有多种新方法用于训练单词向量,例如SG
(屏蔽语言建模)。
CBOW
尝试为MLM
个单词的概率建模。
如果要使用自己的自定义方法进行微调。您只需要指定一个任务(例如glove
),然后保存更新的嵌入层权重即可。您将必须适当地进行索引编制,才能为每个单词分配相应的向量。