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

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

细节:

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

一个简单的弹出窗口是我们可以使用另一个 digit=numberOfWordsInVocab+1 来填充。但这不是需要更大的尺寸吗?[帮我!]


跃然一笑
浏览 202回答 2
2回答

明月笑刀无情

一个简单的弹出窗口是我们可以使用另一个 digit=numberOfWordsInVocab+1 来填充。但这不是需要更大的尺寸吗?不!那是一样的大小。a=np.full((5000,5000), 7)a.nbytes200000000b=np.zeros((5000,5000))b.nbytes200000000编辑:错别字

POPMUISE

如果我必须使用预训练的词向量作为神经网络中的嵌入层(例如 CNN),我该如何处理索引 0?回答通常,可以通过模型和目标的加权成本来处理空条目。但是,在处理单词和顺序数据时,事情可能有点棘手,可以考虑几件事。让我们做一些假设并进行处理。假设我们从一个预训练的 word2vec 模型开始。我们有不同长度的序列,最多有max_lenght单词。细节Word2Vec 是一种学习从离散变量(词标记 = 词唯一 id)到连续向量空间的映射(嵌入)的模型。向量空间中的表示使得成本函数(CBOW,Skip-gram,本质上是以双向方式从上下文中预测单词)在语料库上被最小化。阅读基础教程(如Google在Tensorflow教程上的 word2vec 教程)揭示了算法的一些细节,包括负采样。实现是一个查找表。它比替代的 one-hot 编码技术更快,因为 one-hot 编码矩阵的维度很大(比如 10,000 个单词的 10,000 列,连续单词的n行n)。因此查找(哈希)表明显更快,并且它从嵌入矩阵中选择行(对于行向量)。任务添加缺少的条目(无单词)并在模型中使用它。建议如果丢失数据的成本有一些用途,例如使用该条目的预测并且该条目有标签,则可以按照建议添加一个新值(可以是 0 索引,但所有索引必须移动i=i+1并且嵌入矩阵应该在位置 0 处有新行)。按照第一个建议,您需要训练添加的行。您可以对 NaN 类与全部使用负采样。我不建议用它来处理缺失值。处理“未知单词”类是一个很好的技巧。对于每个比 更短的样本,您可以通过常量 0 对这些条目的成本进行加权max_length。也就是说,如果我们有一个词标记序列[0,5,6,2,178,24,0,NaN,NaN],那么对应的权重向量是[1,1,1,1,1,1,1,0,0]您应该担心重新索引单词及其成本。在内存中,几乎没有区别(1vs Nwords,N很大)。在复杂性方面,它可以稍后合并到初始标记化函数中。预测和模型复杂度是一个更大的问题,也是对系统更重要的要求。有很多方法可以解决不同长度的问题(LSTM、RNN,现在我们尝试使用 CNN 和成本技巧)。阅读有关该问题的最新文献,我相信有很多工作要做。例如,请参阅A Convolutional Neural Network for Modeling Sentences论文。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python