第 6 章 利用嵌入式技术实现情感编程 利用嵌入式技术实现情感编程
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
在第 5 章中,我们了解了如何将单词 并编码成标记。然后,你还看到了如何将包含单词的句子编码成包含标记的序列,并对其进行适当的填充或截断,最终得到一组形状良好的数据,用于训练神经网络。然而,这一切都没有对单词的含义进行任何类型的建模。虽然确实没有绝对的数字编码可以概括词义,但也有相对的数字编码。
在本章中,你将学习封装意义的技术,尤其是嵌入的概念,即在高维空间中创建向量来表示单词。这些向量的方向可以根据语料库中单词的使用情况逐渐学习。然后,当你得到一个句子时,你可以调查单词向量的方向,将它们求和,并从求和的整体方向出发,将句子的情感确立为其单词的乘积。此外,与此相关的是,当模型扫描句子时,句子中单词的定位也有助于训练适当的嵌入。
在本章中,我们还将探讨其工作原理。使用第 5 章中的新闻标题数据集进行讽刺句检测,您将建立嵌入,帮助模型检测句子中的讽刺句。您还将使用一些很酷的可视化工具,帮助您了解语料库中的单词是如何映射到向量的,这样您就可以看到哪些单词决定了整体分类。
从单词中确定意义
在了解用于嵌入的高维向量之前,让我们用一些简单的例子来尝试可视化如何从数字中得出意义。考虑一下:使用第 5 章中的讽刺数据集,如果用正数对构成讽刺性标题的所有单词进行编码,用负数对构成现实性标题的所有单词进行编码,结果会怎样?
一个简单的例子:正方和反方
以数据集中的这个讽刺性标题为例:
christianbalegivenneuteredmalestatuettenamedoscar
假设我们词汇表中所有单词的起始值都是 0,那么我们可以将这句话中每个单词的值都加上 1,最后得到这个结果:
{"christian":1,"bale":1,"given":1,"neutered":1,"male":1,"statuette":1,"named":1,"oscar":1}
注释
这与您在上一章中所做的单词标记化不同。您可以考虑将每个单词(如christian)替换为从语料库中编码的代表该单词的标记,但为了使代码更易于阅读,我还是暂时保留这些单词。
然后,在下一步中,考虑一个普通的标题(不是讽刺性标题),就像这样:
garethbalescoreswondergoalagainstgermany
由于这是一种不同的情绪,我们可以从每个词的当前值中减去 1,这样我们的值集就会是这样:
{"christian":1,"bale":0,"given":1,"neutered":1,"male":1,"statuette":1,"named":1,"oscar":1,"gareth":–1,"scores":–1,"wonder":–1,"goal":–1,"against":–1,"germany":–1}
请注意,讽刺性的bale (来自christian bale )已被非讽刺性的bale (来自gareth bale )所抵消,因此它的得分最终为 0。重复此过程数千次后,您将从语料库中得到一个庞大的单词列表,该列表根据单词的用法进行评分。
现在,想象一下我们想要确定这个句子的情感:
neuteredmalenamedagainst
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access