何时将数据转换为 NLP 中的词嵌入

人工智能 自然语言处理 数据预处理 词嵌入
2021-11-09 17:38:02

在使用词嵌入训练网络时,添加嵌入层以首先将输入向量转换为嵌入是标准做法。

然而,假设嵌入是预先训练和冻结的,还有另一种选择。我们可以简单地在将训练数据提供给模型之前对其进行预处理,以便它已经转换为嵌入。这将加快训练速度,因为这种转换只需要执行一次,而不是在每个 epoch 中即时执行。

因此,第二种选择似乎更好。但首选似乎更常见。假设嵌入是预先训练和冻结的,我是否有理由选择第一个选项而不是第二个?

3个回答

如果你必须在训练期间移动大量数据(比如从磁盘/网络/你有什么检索批次),那么作为 [批次、文档、索引] 的 rank-3 张量比作为排名要快得多[批次、文档、索引、向量]的 -4 张量。在这种情况下,尽管无论您将其放在何处,嵌入都是 O(1),但将其作为图形的一部分这样做会更有效。

有多种方法可以从语料库中获取词嵌入。

  • Count Vectorizer:如果语料库已被转换为句子列表,您可以使用CountVectorizer()fromsklearn.feature_extraction.text然后使用fit_transform()
  • TF-IDF Vectorizer:您可以在句子列表上使用TfidfVectorizerfromsklearn.feature_extraction.text然后再次使用 thefit_transform()
  • word2vec:可以word2vec使用gensim.models. word2vec.Word2vec

假设您的模型提出的单词字典是预训练嵌入的子集,例如 Google 的预训练 word2vec,那么如果您的模型可以处理这种尺寸的维度,那么遵循这些嵌入可能是一个更好的选择.

然而,考虑到问题的性质,有时这并不总是最好的解决方案。例如,如果您尝试在包含稀有和特殊单词的医学文本上使用 NLP,那么您可能应该使用嵌入层,假设您有足够的数据大小,或者两者兼而有之。这只是我的一个想法。当然,可能还有其他几个应该提出嵌入层的用例。