如何在训练我们的CNN进行文本分类时微调word2vec?

时间:2016-10-20 00:01:57

标签: machine-learning nlp artificial-intelligence deep-learning

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还是只是微调计算机内存?

  1. skip-gram模型和CBOW模型是否仅用于无监督的word2vec培训?或者他们还可以申请其他一般文本分类任务?什么是word2vec无监督培训监督微调之间的网络不同?
  2. @Franck Dernoncourt谢谢你提醒我。我在这里是绿色的,希望从强大的社区中学到一些东西。有空的时候请看看我的问题,再次感谢你!

2 个答案:

答案 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仅实现这两个方法(weightsgensim)。但是,有多种新方法用于训练单词向量,例如SG(屏蔽语言建模)。 CBOW尝试为MLM个单词的概率建模。

如果要使用自己的自定义方法进行微调。您只需要指定一个任务(例如glove),然后保存更新的嵌入层权重即可。您将必须适当地进行索引编制,才能为每个单词分配相应的向量。