推荐系统中,得Embedding者得天下,这也是面试中被高频提问的,所以务必要搞清楚其原理与基础的使用方法。
Embedding就是将正整数(索引值)转换为固定尺寸的稠密向量。 例如: [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]
把Embedding讲的通俗易懂的建议看这篇
接下来我将以IMDB数据集进行实操(虽然很多人做过了,但我总觉得讲的不够清楚,所以自己重新注释和整合一下)
IMDB 数据集介绍 IMDB 数据集包含来自互联网电影数据库(IMDB)的 50 000 条严重两极分化的评论。
数据集被分为用于训练的 25 000 条评论与用于测试的 25 000 条评论,训练集和测试集都包含 50% 的正面评论和 50% 的负面评论。 train_labels 和 test_labels 都是 0 和 1 组成的列表,其中 0代表负面(negative),1 代表正面(positive)。
IMDB 数据集内置于 Keras 库。它已经过预处理:评论(单词序列)已经被转换为整数序列,其中每个整数代表字典中的某个单词。
熟悉数据集
看字不如直接看数据集:
from keras.datasets import imdb
from keras import preprocessing
from keras.models import Sequential
from keras.layers import Flatten, Dense, Embedding
# 特征单词数
max_words = 10000
# 在20单词后截断文本
# 这些单词都属于max_words中的单词
maxlen = 20
# 嵌入维度
embedding_dim = 8
# 加载数据集
# 加载的数据已经序列化过了,每个样本都是一个sequence列表
#仅保留训练数据中前 10 000 个最常出现的单词。低频单词将被舍弃。这样得到的向量数据不会太大,便于处理。
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_words)
详细看一下:
可以看出输入的训练数据是个序列化数据。这时候你再去看那一段字就很清晰了。
特征单词数 max_words = 10000的设置就是限制了只出现前10000个高频词语,也就是说,在x_train当中的数值,只会出现高频TOP10000.
x_train中,例如x_train[0]就是一条评论,有218个词;x_train[1]这条评论有189个词。
通过以下代码可转换为原来的句子,可以看一下(这段代码和后续建模无关)
# word_index is a dictionary mapping words to an integer index
word_i