本周作业分为两部分:
- 词向量运算
- emoji表情包
Part1:词向量运算
由于词嵌入的训练计算量庞大切耗费时间长,绝大部分机器学习人员都会导入一个预训练的词嵌入模型。
本作业中,我们使用50维的 Glove 向量来表示词。导入数据:
1 | words, word_to_vec_map = read_glove_vecs('data/glove.6B.50d.txt') |
- words: 词典中的词集合
- word_to_vec_map: 表示单词到向量映射的map。
one-hot向量不擅长表示向量相似度(内积为0), Glove 向量包含了单词更多的信息,下面看看如何使用 Glove 向量计算相似度。
$$\text{CosineSimilarity(u, v)} = \frac {u . v} {||u||_2 ||v||_2} = cos(\theta)$$
分子表示两个向量的内积,分母是向量的模的乘积,θθ表示向量夹角,向量越近夹角越小,cos 值越大。
1 | # GRADED FUNCTION: cosine_similarity |
单词类比推理
类比推理任务中需要实现”a is to b as c is to __” 比如”man is to woman as king is to queen”。我们需要找到单词 d,使得”e_b−e_a ≈ e_d−e_c”
也就是两组的差向量应该相似(仍然用 cos 来衡量)
1 | # GRADED FUNCTION: complete_analogy |
消除词向量偏见 (可选)
1 | def neutralize(word, g, word_to_vec_map): |
1 | def equalize(pair, bias_axis, word_to_vec_map): |
Part2:Emojify!
你有没有想过让你的短信更具表现力? emojifier APP将帮助你做到这一点。 所以不是写下”Congratulations on the promotion! Lets get coffee and talk. Love you!” emojifier可以自动转换为 “Congratulations on the promotion! ? Lets get coffee and talk. ☕️ Love you! ❤️”
另外,如果你对emojis不感兴趣,但有朋友向你发送了使用太多表情符号的疯狂短信,你还可以使用emojifier来回复他们。
你将实现一个模型,输入一个句子(“Let’s go see the baseball game tonight!”),并找到最适合这个句子的表情符号(⚾️)。 在许多表情符号界面中,您需要记住❤️是”heart”符号而不是”love”符号。 但是使用单词向量,你会发现即使你的训练集只将几个单词明确地与特定的表情符号相关联,你的算法也能够将测试集中相关的单词概括并关联到相同的表情符号上,即使这些词没有出现在训练集中。这使得即使使用小型训练集,你也可以建立从句子到表情符号的精确分类器映射。
在本练习中,您将从使用词嵌入的基本模型(Emojifier-V1)开始,然后构建进一步整合LSTM的更复杂的模型(Emojifier-V2)。
先用average试试
1 | # GRADED FUNCTION: sentence_to_avg |
再用RNN
1 | # GRADED FUNCTION: model |
Emojifier-V2: Using LSTMs in Keras:
1 | # GRADED FUNCTION: sentences_to_indices |
1 | # GRADED FUNCTION: pretrained_embedding_layer |
Building the Emojifier-V2
1 | # GRADED FUNCTION: Emojify_V2 |