2 回答

TA贡献1828条经验 获得超4个赞
一个简单的弹出窗口是我们可以使用另一个 digit=numberOfWordsInVocab+1 来填充。但这不是需要更大的尺寸吗?
不!那是一样的大小。
a=np.full((5000,5000), 7)
a.nbytes
200000000
b=np.zeros((5000,5000))
b.nbytes
200000000
编辑:错别字

TA贡献1765条经验 获得超5个赞
如果我必须使用预训练的词向量作为神经网络中的嵌入层(例如 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]
您应该担心重新索引单词及其成本。在内存中,几乎没有区别(
1
vsN
words,N
很大)。在复杂性方面,它可以稍后合并到初始标记化函数中。预测和模型复杂度是一个更大的问题,也是对系统更重要的要求。有很多方法可以解决不同长度的问题(LSTM、RNN,现在我们尝试使用 CNN 和成本技巧)。阅读有关该问题的最新文献,我相信有很多工作要做。例如,请参阅A Convolutional Neural Network for Modeling Sentences论文。
添加回答
举报