首页 > 其他分享 >人工智能是这样理解“情绪”的

人工智能是这样理解“情绪”的

时间:2024-11-12 10:31:30浏览次数:1  
标签:christian 情绪 人工智能 bale 讽刺 单词 理解 我们 向量

前一篇:《人工智能模型训练:从不同格式文件中读取训练数据集》

前言:在前面的内容中,我们经常提到“特征”,那么如何表示特征呢?举个例子,在日常生活中,我们描述一个快递包装盒时可能会提到它的高度、宽度和深度(这三个值就是盒子的特征,当然也可以用颜色、重量、材料等来描述)。当我们仅用高度、宽度和深度三个数据来描述盒子的特征时,我们就说这个盒子的特征是三维的。如果再加上颜色、重量和材料等特征,那么这个特征空间就是六维的了。

在前面的三篇中,我们学到了如何将单词编码成数值(即令牌)。然后又学会了如何将包含多个单词的句子编码成一系列的令牌,并通过填充或截断的方式得到一个适用于神经网络训练的形状良好的数据集。然而,这其中并未涉及任何对单词含义的建模。尽管没有绝对的数值编码可以完全概括单词的含义,但却有相对的编码方式。在接下来的知识中,我们将学习这些编码方式,特别是嵌入的概念,即在高维空间中创建向量来表示单词。这些向量的方向可以随着单词在语料中的使用逐渐被学习出来。之后,当你得到一句话时,可以分析单词向量的方向,将它们相加,从相加结果的整体方向来判断句子的情感,作为单词的产物。

在本知识中,我们将探讨这种方法的工作原理。借助前面几节中的“讽刺”数据集,你将构建嵌入,帮助模型识别句子中的讽刺情感。你还会看到一些很酷的可视化工具,帮助你了解语料库中的单词如何映射为向量,让你看到哪些单词决定了整体的分类。

从单词中建立意义

在进入用于嵌入的高维向量之前,让我们用一些简单的例子来尝试可视化如何通过数值推导出意义。考虑这样一个情况:使用前面几节中的“讽刺”数据集,如果你将组成讽刺标题的所有单词编码为正数,而将现实标题的单词编码为负数,会发生什么?

举一个简单的例子:正数与负数

例如,看看数据集中的这个感觉讽刺情绪的标题:

christian bale given neutered male statuette named Oscar

假设我们词汇表中的所有单词初始值都为0,我们可以将这个句子中的每个单词的值加1,最终得到:

{ "christian" : 1, "bale" : 1, "given" : 1, "neutered": 1, "male" : 1, "statuette": 1, "named" : 1, "oscar": 1}

注意,这并不是上一节中你所做的单词令牌化。你可以考虑将每个单词(例如“christian”)替换为语料库中代表它的令牌,但我会将单词保留在这里,以便于阅读。

然后,考虑一个普通的非讽刺情绪的标题,例如:

gareth bale scores wonder goal against germany

由于这是不同的情感,我们可以改为从每个单词的当前值中减去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。重复这一过程数千次后,你将得到一个庞大的语料库单词列表,根据它们的使用情况进行评分。

现在,假设我们想要判断以下句子的情感:

neutered male named against germany, wins statuette!

使用我们现有的值集,我们可以查看每个单词的分数并将它们相加。我们得到的总分为2,表示(因为这是一个正数)这是一个讽刺句子。

顺带一提,“bale”在讽刺数据集中被使用了五次,其中两次出现在普通标题中,三次出现在讽刺标题中,因此在这样的模型中,“bale”在整个数据集中的得分将是-1。

一个简单的例子:正数与负数

举个例子,看看数据集中的这个讽刺标题:

“克里斯蒂安·贝尔获得一座名为奥斯卡的去势男性雕像”

假设我们词汇表中的所有单词初始值都为0,我们可以将这个句子中的每个单词的值加1,最终得到:

{ "christian" : 1, "bale" : 1, "given" : 1, "neutered": 1, "male" : 1, "statuette": 1, "named" : 1, "oscar": 1}

注意,这并不是上一节中你所做的单词令牌化。你可以考虑将每个单词(比如“christian”)替换为语料库中代表它的令牌,但我会将单词保留在这里,以便于阅读。

接着,我们来考虑一个普通的非讽刺标题,例如:

gareth bale scores wonder goal against germany

因为这是不同的情感,我们可以从每个单词的当前值中减去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。重复这一过程数千次后,你将得到一个庞大的语料库单词列表,根据它们的使用情况进行评分。

现在,假设我们想要判断以下句子的情感:

neutered male named against germany, wins statuette!

使用我们现有的值集,我们可以查看每个单词的分数并将它们相加。我们得到的总分为2,表示(因为这是一个正数)这是一个讽刺句子。

顺带一提,“bale”在讽刺数据集中被使用了五次,其中两次出现在普通标题中,三次出现在讽刺标题中,因此在这样的模型中,“bale”在整个数据集中的得分将是-1。

向量

希望前面的例子帮助你理解了通过将单词与同一“方向”中的其他单词关联,来为单词建立某种相对意义的思维模型。在我们的例子中,尽管计算机并不理解单个单词的意义,但它可以将来自已知讽刺标题的令牌单词向一个方向移动(加1),而将来自已知正常标题的令牌单词向另一个方向移动(减1)。这给了我们对单词意义的基本理解,但确实会丢失一些细微之处。

如果我们增加方向的维度以尝试捕捉更多的信息会怎么样?例如,假设我们看一下简·奥斯汀小说《傲慢与偏见》中的人物,考虑性别和贵族维度。我们可以将性别映射到x轴,贵族身份映射到y轴,并用向量的长度表示每个人物的财富(图6-1)。

                        图6-1. 《傲慢与偏见》中的人物作为向量

从图中我们可以推测出每个人物的相当多的信息。三个人是男性。达西先生非常富有,但他的贵族身份不明确(他被称为“先生”,而不是像威廉·卢卡斯爵士那样的贵族称号)。另一位“先生”本内特先生显然不是贵族,且经济困难。本内特先生的女儿伊丽莎白与他类似,但性别不同。示例中的另一位女性角色凯瑟琳夫人是贵族,且非常富有。达西先生与伊丽莎白之间的爱情造成了紧张关系——偏见来自向量中贵族方向对非贵族的偏见。

这个例子表明,通过考虑多个维度,我们可以开始看到单词(这里是人物名称)中的真实意义。我们并不是在谈论具体的定义,而是基于坐标轴以及一个单词的向量与其他向量之间的关系,得出相对的意义。

这就引出了嵌入的概念,即在训练神经网络的过程中学习的单词的向量表示。我们将在接下来的部分探讨这个概念。

总结:本章深入探讨了如何通过多维空间的向量表示来构建和理解特征。在前面的内容中,我们学习了如何将单词编码成数值(令牌)并构建适合神经网络训练的数据集。然而,这些编码方式尚未涉及单词的实际含义。通过引入嵌入的概念,我们可以在高维空间中用向量表示单词,捕捉其相对意义。

为解释嵌入的工作原理,文中提供了一个使用讽刺数据集的示例:为不同情感的句子分别赋予正数和负数值,通过累加词向量来判断整体情感。这种方法模拟了不同情感间的偏移效果。此外,通过借助《傲慢与偏见》中的人物关系例子,展示了如何在多个维度中表示特征,如性别、贵族身份和财富,以便更丰富地体现含义。整体上,嵌入向量的引入使我们能够从数据中捕捉出单词间的相对关系与含义。

这为后续神经网络训练中的词向量学习打下了基础。

标签:christian,情绪,人工智能,bale,讽刺,单词,理解,我们,向量
From: https://www.cnblogs.com/jellyai/p/18541307

相关文章

  • 深入理解 LangChain 文档分割技术
    引言随着大语言模型(LLM)的快速发展,检索增强生成(Retrieval-AugmentedGeneration,RAG)技术已成为构建知识密集型AI应用的关键方法。本文将深入介绍RAG应用开发中的核心环节-文档处理,重点讲解LangChain框架中的文档处理组件和工具。RAG应用架构概述在RAG应用中,文档......
  • 深入理解Java线程池:线程任务完成检测的原理与实现
    在Java中,线程池(ThreadPool)是用于管理和复用线程的机制,通过它可以高效地管理多线程任务。一个常见的问题是:线程池是如何知道某个线程的任务已经完成的?本篇文章将深入探讨线程池任务完成的检测原理,并结合代码示例,让大家深入理解线程池的工作方式。推荐正在找工作的朋友们:就......
  • Java中包装类型和基本类型的区别:深入理解与应用
    Java中包装类型和基本类型的区别:深入理解与应用引言在Java编程中,基本类型(PrimitiveTypes)和包装类型(WrapperTypes)是两种不同的数据类型。基本类型是Java语言的核心部分,而包装类型则是为了提供更多的功能和灵活性。本文将深入探讨Java中包装类型和基本类型的区别,帮助你更......
  • 深入理解Java动态代理:原理、实现与应用
    深入理解Java动态代理:原理、实现与应用在现代软件开发中,面向对象编程(OOP)和面向切面编程(AOP)是两种重要的编程范式。Java语言中的动态代理(DynamicProxy)是实现AOP的关键技术之一,它允许我们在运行时创建一个代理对象,该代理对象可以拦截对真实对象方法的调用,并在方法调用前......
  • c++ 对于传递引用和传递值的理解
    首先先上一段c++代码,可以看出foo函数参数是引用类型,bar函数参数是值类型typedefstructA{intx;inty;}A;voidfoo(A&a){ra.x++;}voidbar(Aa){a.x++;}intmain(){Aa={1,2};foo(a);bar(a);return0;}在vscode......
  • 关于有源蜂鸣器和无源蜂鸣器、时钟极性与时钟相位的理解
    有源蜂鸣器和无源蜂鸣器是两种常见的蜂鸣器类型,它们的主要区别在于驱动方式和工作原理:有源蜂鸣器(ActiveBuzzer)1.驱动方式:有源蜂鸣器内置了振荡电路,只需要提供电源即可发出声音。它自身会生成震动信号,因此不需要外部频率信号。2.工作原理:当电源接入时,蜂鸣器会自动产生固定频率......
  • 人工智能之机器学习(概念整合部分)
    文章目录前言一、机器学习介绍与定义1、机器学习定义机器学习的发展历史机器学习分类监督学习半监督学习无监督学习强化学习机器学习需要具备的基础的知识,如何学习机器学习机器学习的应用场合机器学习的应用场合机器学习项目开发步骤前言在上篇笔记中所提到的关......
  • 理解@Transactional
    在SpringBoot中,@Transactional注解仍然是Spring框架提供的一个核心注解,用于声明式事务管理。SpringBoot通过自动配置和简化配置,使得在SpringBoot应用程序中使用@Transactional注解变得更加方便。本文将深入探讨@Transactional注解在SpringBoot中的使用方法、......
  • 深入理解Linux内核中的虚拟文件系统(VFS)
    深入理解Linux内核中的虚拟文件系统(VFS)1.引言今天我们要探讨的是Linux内核中的虚拟文件系统(VFS)。VFS作为一层抽象,为各种不同的文件系统提供了一个统一的接口。无论是你常用的ext4,还是远程的NFS,都能通过VFS提供的相同接口进行交互。这期教程我会带你深入了解VFS的核心原理......
  • 深入理解Java对象结构
    一、Java对象结构实例化一个Java对象之后,该对象在内存中的结构是怎么样的?Java对象(Object实例)结构包括三部分:对象头、对象体和对齐字节,具体下图所示1、Java对象的三部分(1)对象头对象头包括三个字段,第一个字段叫作MarkWord(标记字),用于存储自身运行时的数据,例如GC标志位......