神经网络中的预训练(Word2Vec)嵌入

时间:2018-12-25 14:46:38

标签: python tensorflow nlp artificial-intelligence word2vec

如果我必须使用预训练的词向量作为神经网络(例如CNN)的嵌入层,该如何处理索引0?

详细信息:

我们通常从创建零个numpy二维数组开始。稍后,我们从词汇表中填充单词索引。 问题是,0已经是我们词汇表中另一个单词的索引(例如,“ i”是0处的索引)。因此,我们基本上是在初始化填充有“ i”而不是空词的整个矩阵。那么,如何处理所有长度相等的句子的填充呢?

一个简单的弹出窗口就是我们可以使用另一个digit = numberOfWordsInVocab + 1进行填充。但这不会占用更多的空间吗? [帮帮我!]

2 个答案:

答案 0 :(得分:1)

  

一个简单的弹出窗口就是我们可以使用另一个digit = numberOfWordsInVocab + 1进行填充。但这不会占用更多的空间吗?

不!大小一样。

a=np.full((5000,5000), 7)
a.nbytes
200000000

b=np.zeros((5000,5000))
b.nbytes
200000000

编辑:错字

答案 1 :(得分:0)

  

如果我必须使用预训练的词向量作为Neural中的嵌入层   网络(例如CNN),如何处理索引0?

答案

通常,可以通过模型和目标的加权成本来处理空条目。 但是,在处理单词和顺序数据时,可能会有些棘手,需要考虑几件事。让我们做一些假设并加以处理。

假设

  1. 我们从预先训练的word2vec模型开始。
  2. 我们有长度不等的序列,最多包含max_lenght个单词。

详细信息

  • Word2Vec是一个模型,用于学习从离散变量(单词标记=单词唯一ID)到连续向量空间的映射(嵌入)。
  • 向量空间中的表示形式使语料库上的成本函数(CBOW,Skip-gram,本质上是从上下文以双向方式预测单词)最小化。
  • 阅读基础教程(如Google's word2vec tutorial上的Tensorflow tutorials)会揭示该算法的一些细节,包括negative sampling
  • 该实现是一个查找表。它比另一种单次热编码技术快,因为单次热编码矩阵的维数很大(例如10,000个单词对应10,000列,n个连续单词对应n行)。因此,查找(哈希)表的速度明显更快,并且可以从嵌入矩阵中选择行(用于行向量)。

任务

  • 添加缺少的条目(无词)并在模型中使用。

建议

  • 如果丢失数据有一定用处,例如使用该条目的预测,并且该条目有标签,则可以按照建议添加新值(可以是0索引,但所有索引必须移动i=i+1,并且嵌入矩阵的位置0处应有新行。
  • 按照第一个建议,您需要训练添加的行。您可以对NaN类和所有类使用负采样。 我不建议您使用它来处理缺失值。处理“未知单词”类是个好技巧。
  • 您可以为每个短于max_length的样本将这些条目的成本加权为0。也就是说,如果我们有单词标记[0,5,6,2,178,24,0,NaN,NaN]的序列,则相应的权重向量为[1,1,1,1,1,1,1,0,0]
  • 您应该担心重新索引单词及其成本。在内存中,几乎没有区别(1N字,N大)。在复杂性方面,可以稍后将其合并到初始标记化功能中。预测和模型的复杂性是一个更大的问题,也是系统的重要要求。
  • 有很多方法可以解决不同的长度问题(LSTM,RNN,现在我们尝试使用CNN和成本技巧)。阅读有关该问题的最新文献,我相信还有很多工作要做。例如,请参见A Convolutional Neural Network for Modelling Sentences论文。
相关问题