序列模型 第二周1-5笔记

2.1 词汇表征

上周我们学习的词汇表示方法虽然能很准确地表示词汇,但这种表示方法把每个词都孤立起来,比如如果我们输入的是一个句子,上周我们所讲的方法虽然保存了词汇,但并不对矩形或者短语词汇之间进行表征和研究,算法对于相关词的泛化能力也不强。所以这一节我们来讲一个全新的方法:词嵌入。

  • 原因:如果用上周所讲的向量表示方法来计算词向量与词向量之间的关系的话,任何两个词之间的内积都是0,所有词的距离都一样,所以也没有什么价值。
    所以我们可以这样表示一个词:
    在这里插入图片描述抛弃词典的思维,我们来用一定的性质或者指标来衡量词,比如第一个是性别,显然男人和女人是直接与性别相关的,而苹果和橙子显然就不是了。第二个是皇家的,那么相应的,国王和皇后就与这个词很有关系了,而其他词就没有,第三个是年龄,历史上当选国王与皇后的年龄通常都是成年人,所以显然关系很大,而其他词就与年龄没有什么关系,其次是食物,显然苹果和橙子与其直接相关,但其他词就没什么能吃的了……
    以此类推,比如说我们有三百维的指标,由此组成的三百维的向量就可以表示相应的词了。当然为了表示得更清晰,我们用 e 5391 e_{5391} e5391来表示Man这个词,用 e 9853 e_{9853} e9853来表示Woman这个词,以此类推而表示后续的词语。
    这样一来,苹果和橙子除了在颜色的特征向量上有所不同之外,大多数的向量都是非常相似的。如果我们知道了orange juice这个短语的搭配(算法),那么很大几率上,他也会明白Apple juice这个东西。这样对于相似的词语,算法的泛化能力会强上很多。

我们还有另一个可以清晰地判断词语和词语之间的距离关系的算法:
如果我们可以得到一群词的相同维数的特征向量,比如是300维,那么我们可以把这300维的数据嵌入一个二维空间里,转变成可视化的图像。常用的可视化算法是:t-SNE算法。
在这里插入图片描述
如果观察这种词嵌入的表示方法,你会发现man和woman这些词聚集在一块,king和queen聚集在一块,这些都是人,也都聚集在一起。动物都聚集在一起,水果也都聚集在一起(上图编号5所示),像1、2、3、4这些数字也聚集在一起。如果把这些生物看成一个整体,他们也聚集在一起。
在这里插入图片描述
这种词嵌入算法对于相近的概念,学到的特征也比较类似,在对这些概念可视化的时候,这些概念就比较相似,最终把它们映射为相似的特征向量。这种表示方式用的是在300维空间里的特征表示,这叫做嵌入(embeddings)。

词嵌入在NLP中已经是一个非常重要的概念了,而为了可视化,t-SNE算法把这个空间映射到低维空间。

2.2 使用词嵌入

那么如何把这种表示方法应用到NLP应用中呢?我们来看一个命名实体识别的例子:
在这里插入图片描述
假如有一个句子:“Sally Johnson is an orange farmer.”(Sally Johnson是一个种橙子的农民),你会发现Sally Johnson就是一个人名,所以这里的输出为1。之所以能确定Sally Johnson是一个人名而不是一个公司名,是因为你知道种橙子的农民一定是一个人,前面我们已经讨论过用one-hot来表示这些单词,即 x ( 1 ) , x ( 2 ) x^{(1)},x^{(2)} x(1),x(2)的输出为1。
如果你用特征化表示方法,看到一个新的输入:“Robert Lin is an apple farmer.”(Robert Lin是一个种苹果的农民),因为知道orange和apple很相近,那么你的算法很容易就知道Robert Lin也是一个人,也是一个人的名字。一个有意思的情况是,要是测试集里这句话不是“Robert Lin is an apple farmer.”,而是不太常见的词怎么办?要是你看到:“Robert Lin is a durian cultivator.”(Robert Lin是一个榴莲培育家)怎么办?榴莲(durian)是一种比较稀罕的水果,这种水果在新加坡和其他一些国家流行。如果对于一个命名实体识别任务,你只有一个很小的标记的训练集,你的训练集里甚至可能没有durian(榴莲)或者cultivator(培育家)这两个词。但是如果你有一个已经学好的词嵌入,它会告诉你durian(榴莲)是水果,就像orange(橙子)一样,并且cultivator(培育家),做培育工作的人其实跟farmer(农民)差不多,那么你就有可能从你的训练集里的“an orange farmer”(种橙子的农民)归纳出“a durian cultivator”(榴莲培育家)也是一个人。

词嵌入能够达到这种效果,其中一个原因就是学习词嵌入的算法会考察非常大的文本集,也许是从网上找到的,这样你可以考察很大的数据集可以是1亿个单词,甚至达到100亿。通过考察大量的无标签文本,你可以发现orange(橙子)和durian(榴莲)相近,farmer(农民)和cultivator(培育家)相近。嵌入表达把它们都聚集在一块,通过读取大量的互联网文本发现了orange(橙子)和durian(榴莲)都是水果。接下来你可以把这个词嵌入应用到你的命名实体识别任务当中,尽管你只有一个很小的训练集,也许训练集里有100,000个单词,但你可以使用迁移学习,把你从互联网上免费获得的大量的无标签文本中学习到的知识迁移到这个任务中来,让它能够分辨orange(橙子)、apple(苹果)和durian(榴莲)都是水果,然后把这些知识迁移到一个任务中。当然,这里为了简化只画了单向的RNN,事实上如果你想用在命名实体识别任务上,你应该用一个双向的RNN,而不是这样一个简单的单向RNN。
在这里插入图片描述
总结一下如何用词嵌入做迁移学习:

  • 第一步,先从大量的文本集中学习词嵌入。
    你需要一个非常大的文本集,或者可以下载网上预训练好的词嵌入模型,这种模型网上你可以找到不少,词嵌入模型并且都有许可。
  • 第二步,你可以用这些词嵌入模型把它迁移到你的新的只有少量标注训练集的任务中。
    比如说用这个300维的词嵌入来表示你的单词。这样做的一个好处就是你可以用更低维度的特征向量代替原来的10000维的one-hot向量,现在你可以用一个300维更加紧凑的向量。尽管one-hot向量计算很快,但300维的向量会更加紧凑。
  • 第三步,当你在新的任务上训练模型时,比如在命名实体识别任务只有少量的标记数据集上,你可以自己选择要不要继续微调,选择是否用新的数据调整词嵌入。实际中,只有这个第二步中有很大的数据集你才会这样做,如果你标记的数据集不是很大,通常我不会在微调词嵌入上费力气。
    当你的任务的训练集相对较小时,词嵌入的作用最明显,所以它广泛用于NLP领域。词嵌入在语言模型、机器翻译领域用的少一些
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值