比方说,我有一个由评论列组成的数据集,每个评论正好有100个字,那么训练我的模型可能很容易,因为我可以简单地将每个评论的100个字标记化,然后将其转换为一个数字数组,然后将其输入到一个输入_形状=(1,100)的序列模型中。但在现实世界中,评论的大小永远不一样。如果我使用CountVectorizer这样的函数,那么句子的结构就没有预留,一个热编码可能不够高效。
那么,正确的方法是什么,来预处理这个特殊的数据集,以便我把它输入到一个可训练的NN中呢?
将文本表示为向量的一种常见方法是利用词嵌入。主要的想法是,你使用一个大型的文本语料库来计算该数据集中出现的所有单词的向量表示。所以现在对于每篇评论,你可以运行以下算法来计算它的向量表示。
在执行步骤1-3之前,你还可以应用更多的预处理步骤,并删除 "和"、"或 "等填充词,因为它们通常不带有任何意义,你可以将单词转换为小写,并应用其他标准的NLP(自然语言处理技术),这可能会影响评论的向量表示。但关键的想法是将评论的单词向量相加,并将其平均向量作为评论的表示。通过平均化,评论的长度就不重要了。同样,在词嵌入中,词向量的维度是固定的(100D,200D,......),所以你可以试验最合适的维度。
请注意,有很多不同的模型可以计算词嵌入,所以你可以选择其中任何一种。一个很好地集成到Python中的模型是 word2vec.而目前谷歌正在使用的一个最先进的模型叫做? BERT.