02 使用词嵌入(Using Word Embeddings)
02 使用词嵌入(Using Word Embeddings)
这一节在讲什么
这节课讲的是:
词嵌入不是只拿来“看着很高级”,而是真的能帮助下游 NLP 任务泛化。
课程重点用命名实体识别(NER)说明这一点,并把它解释成一种迁移学习。
课程里的任务例子:识别人名
句子:
\[\text{Sally Johnson is an orange farmer.}\] 模型需要判断 Sally Johnson 是不是人名。
课程的直觉是:
orange farmer说明说的是“种橙子的人”- 那前面的
Sally Johnson很可能是人
为什么词嵌入能帮助泛化
如果测试集换成:
\[\text{Robert Lin is an apple farmer.}\] 即使你训练时主要见过 orange farmer,
只要词嵌入学到了:
apple和orange接近farmer在语义上还是“从事农业的人”
模型就更容易推断:
Robert Lin也很可能是人名
课程还举了更难的例子
测试句子变成:
\[\text{Robert Lin is a durian cultivator.}\]问题是:
durian(榴莲)可能在标注训练集里几乎没出现过cultivator(培育者)也可能很少出现
但如果你有在超大无标签语料上预训练好的词嵌入,
它可能已经知道:
durian是水果,和orange类似cultivator和farmer相近
于是小数据任务也能借到大语料中的知识。
这本质上是什么
这本质上就是迁移学习:
- 在超大的无标签文本上学习词嵌入
- 把学到的嵌入迁移到小标注数据任务上
也就是:
\[\text{大规模无标签语料} \rightarrow \text{词嵌入} \rightarrow \text{小样本下游任务}\]为什么这件事特别重要
因为很多 NLP 任务都有一个共同问题:
标注数据贵,但无标签文本海量。
词嵌入正好把“无标签数据里的语义知识”搬运到“有标签任务”里。
实操流程,课程怎么讲的
第一步:先学好词嵌入
可以:
- 自己在大语料上训练
- 或直接下载预训练词向量
第二步:把词嵌入作为新任务输入
不再用 10000 维 one-hot,改用更紧凑的 300 维词向量。
第三步:在下游任务上训练
可以选择:
- 冻结词向量
- 或继续微调(fine-tune)
课程提到:如果下游标注数据很小,通常不一定值得大幅微调。
什么时候词嵌入最有帮助
课程特别强调:
当下游任务数据少时,词嵌入帮助最大。
这和一般迁移学习是一样的。
如果你的下游任务本身已经有超大标注数据,比如大型机器翻译或语言模型任务,那么预训练词嵌入带来的提升就没那么明显。
和人脸编码的类比
课程还把词嵌入和人脸编码做了对比。
相同点:
- 都是在学一个紧凑向量表示
- 相似对象会有相似编码
不同点:
- 人脸编码常常面对开放世界的新脸
- 词嵌入通常是对固定词表中的词学习固定向量
所以词嵌入更多像“词典中每个词的查表式语义编码”。
这一节最该记住的要点
要点 1:词嵌入可以显著提升小数据 NLP 任务的泛化能力
尤其对稀有词和近义词帮助很大。
要点 2:它本质上是一种迁移学习
从大规模无标签文本迁移到小规模标注任务。
要点 3:输入维度也更紧凑
比如从 10000 维 one-hot 变成 300 维嵌入。
要点 4:并不是所有任务都同样受益
小数据任务最受益,大数据任务相对没那么明显。
这一节一句话总结
使用词嵌入的真正价值,在于它把大规模无标签文本里学到的语义结构迁移到小标注数据任务中,让模型即使没见过某些词,也能靠相似词关系做出合理判断。
本文由作者按照 CC BY 4.0 进行授权