使用深度学习突出显示句子中的重要单词

2023-12-21

我试图突出显示 imdb 数据集中的重要单词,这些单词最终有助于情感分析预测。

数据集如下:

X_train - 作为字符串的评论。

Y_train - 0 或 1

现在,在使用 Glove 嵌入来嵌入 X_train 值后,我可以将其输入神经网络。

现在我的问题是,如何突出显示最重要的单词概率?就像 Deepmoji.mit.edu 一样?

我尝试过什么:

  1. 我尝试将输入句子分成二元组并使用一维 CNN 来训练它。稍后当我们想要找到 X_test 的重要单词时,我们只需将 X_test 拆分为二元组并找到它们的概率即可。它有效但不准确。

  2. 我尝试使用预构建的分层注意力网络并成功了。我得到了我想要的,但我无法弄清楚代码中的每一行和概念。这对我来说就像一个黑匣子。

我知道神经网络是如何工作的,我可以使用 numpy 对其进行编码,并从头开始手动反向传播。我详细了解了 lstm 的工作原理以及忘记门、更新门和输出门实际输出的内容。但我仍然无法弄清楚如何提取注意力权重以及如何将数据制作为 3D 数组(我们的 2D 数据中的时间步是什么?)

因此,欢迎任何类型的指导


这是一个带有注意力的版本(不是层次结构),但你应该能够弄清楚如何使其与层次结构一起工作 - 如果不是,我也可以提供帮助。诀窍是定义 2 个模型,并使用 1 个进行训练(模型),另一个用于提取注意力值(model_with_attention_output):

# Tensorflow 1.9; Keras 2.2.0 (latest versions)
# should be backwards compatible upto Keras 2.0.9 and tf 1.5
from keras.models import Model
from keras.layers import *
import numpy as np

dictionary_size=1000

def create_models():
  #Get a sequence of indexes of words as input:
  # Keras supports dynamic input lengths if you provide (None,) as the 
  #  input shape
  inp = Input((None,))
  #Embed words into vectors of size 10 each:
  # Output shape is (None,10)
  embs = Embedding(dictionary_size, 10)(inp)
  # Run LSTM on these vectors and return output on each timestep
  # Output shape is (None,5)
  lstm = LSTM(5, return_sequences=True)(embs)
  ##Attention Block
  #Transform each timestep into 1 value (attention_value) 
  # Output shape is (None,1)
  attention = TimeDistributed(Dense(1))(lstm)
  #By running softmax on axis 1 we force attention_values
  # to sum up to 1. We are effectively assigning a "weight" to each timestep
  # Output shape is still (None,1) but each value changes
  attention_vals = Softmax(axis=1)(attention)
  # Multiply the encoded timestep by the respective weight
  # I.e. we are scaling each timestep based on its weight
  # Output shape is (None,5): (None,5)*(None,1)=(None,5)
  scaled_vecs = Multiply()([lstm,attention_vals])
  # Sum up all scaled timesteps into 1 vector 
  # i.e. obtain a weighted sum of timesteps
  # Output shape is (5,) : Observe the time dimension got collapsed
  context_vector = Lambda(lambda x: K.sum(x,axis=1))(scaled_vecs)
  ##Attention Block over
  # Get the output out
  out = Dense(1,activation='sigmoid')(context_vector)

  model = Model(inp, out)
  model_with_attention_output = Model(inp, [out, attention_vals])
  model.compile(optimizer='adam',loss='binary_crossentropy')
  return model, model_with_attention_output

model,model_with_attention_output = create_models()


model.fit(np.array([[1,2,3]]),[1],batch_size=1)
print ('Attention Over each word: ',model_with_attention_output.predict(np.array([[1,2,3]]),batch_size=1)[1])

输出将是包含每个单词的注意力值的 numpy 数组 - 值越高,该单词越重要

编辑:您可能想用 embs 替换乘法中的 lstm 以获得更好的解释,但这会导致性能更差......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用深度学习突出显示句子中的重要单词 的相关文章

  • 如何传递架构以从现有数据帧创建新数据帧?

    要将 schema 传递到 json 文件 我们这样做 from pyspark sql types import StructField StringType StructType IntegerType data schema Stru
  • 让 VoiceChannel.members 和 Guild.members 返回完整列表的问题

    每当我尝试使用 VoiceChannel members 或 Guild members 时 它都不会提供适用成员的完整列表 我从文本命令的上下文中获取 VoiceChannel 和 Guild 如下所示 bot command name
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • Django Rest Framework 是否有第三方应用程序来自动生成 swagger.yaml 文件?

    我有大量的 API 端点编写在django rest framework并且不断增加和更新 如何创建和维护最新的 API 文档 我当前的版本是 Create swagger yaml文件并以某种方式在每次端点更改时自动生成 然后使用此文件作
  • 嵌套列表的重叠会产生不必要的间隙

    我有一个包含三个列表的嵌套 这些列表由 for 循环填充 并且填充由 if 条件控制 第一次迭代后 它可能类似于以下示例 a 1 2 0 0 0 0 0 0 4 5 0 0 0 0 0 0 6 7 根据条件 它们不重叠 在第二次迭代之后 新
  • Pycharm 在 os.path 连接上出现“未解析的引用”

    将pycharm升级到2018 1 并将python升级到3 6 5后 pycharm报告 未解析的引用 join 最新版本的 pycharm 不会显示以下行的任何警告 from os path import join expanduser
  • MongoEngine 查询具有以列表中指定的前缀开头的属性的对象的列表

    我需要在 Mongo 数据库中查询具有以列表中任何前缀开头的特定属性的元素 现在我有一段这样的代码 query mymodel terms term in query terms 并且这会匹配在列表 term 上有一个项目的对象 该列表中的
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • Python 内置的 super() 是否违反了 DRY?

    显然这是有原因的 但我没有足够的经验来认识到这一点 这是Python中给出的例子docs http docs python org 2 library functions html super class C B def method se
  • 当字段是数字时怎么说...在 mongodb 中匹配?

    所以我的结果中有一个名为 城市 的字段 结果已损坏 有时它是一个实际名称 有时它是一个数字 以下代码显示所有记录 db zips aggregate project city substr city 0 1 sort city 1 我需要修
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d
  • 如何使用 PrimaryKeyRelatedField 更新多对多关系上的类别

    Django Rest 框架有一个主键相关字段 http www django rest framework org api guide relations primarykeyrelatedfield其中列出了我的 IDmany to m
  • python 对浮点数进行不正确的舍入

    gt gt gt a 0 3135 gt gt gt print 3f a 0 314 gt gt gt a 0 3125 gt gt gt print 3f a 0 312 gt gt gt 我期待 0 313 而不是 0 312 有没有
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐

  • 关于机器学习的 train_test_split 的想法

    我只是注意到很多人甚至在处理丢失的数据之前就倾向于使用train test split 并且似乎他们一开始就分割了数据 还有很多人 他们倾向于在完成所有数据清理 特征工程 特征选择之后 在模型构建步骤之前分割数据 人们一开始倾向于将数据进行
  • 反应 this.props 未定义或空对象

    构建一个小型反应应用程序 将地理位置 由浏览器确定为子组件作为道具 传递 第一个组件 App jsx import React Component from react import DateTime from components dat
  • 从 Struts1 迁移到 Struts2 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的应用程序位于 Struts1 中 并且我在所有操作中都使用了 Dispatch 操作 现在请告诉我如何转换到 struts 2 以
  • Visual Studio 2012 Express 在格式文档命令上挂起并显示消息“等待后台操作完成”[重复]

    这个问题在这里已经有答案了 这件事是几天前才开始的 每次我使用 Ctrl K D 格式化文档时 VS 都会挂起并显示该消息 似乎由于某种原因 运行格式命令花费了相当长的时间 20 秒左右 有时在较大的文档上需要更长的时间 没有安装任何新的加
  • Rails 错误 - 无法加载此类文件 -- aws-sdk (您可能需要安装 aws-sdk gem)

    我有一个 RoR 应用程序 可以通过回形针和亚马逊 s3 上传图像 一切都工作正常 直到我决定将路由从 myapp com id 更改为 myapp com model name 现在我收到以下错误 LoadError cannot loa
  • 无法绑定多部分标识符[重复]

    这个问题在这里已经有答案了 可能的重复 无法绑定多部分标识符 https stackoverflow com questions 2531924 the multi part identifier could not be bound 这是
  • 在android应用程序中连接oracle

    我正在做多媒体应用 我的问题是我想通过 JDBC 将 Oracle 数据库连接到我的应用程序 每当我尝试连接 jdbc 驱动程序时 它都会显示 Dxwarning 忽略匿名内部类的 InnerClasses 属性 oracle jdbc p
  • 什么可以防止任何恶意软件在 ARM TrustZone 中引发 SMC 异常?

    我正在阅读有关 ARM TrustZone 的内容 我读到 当普通世界想要来自安全世界的功能时 他们会引发 SMC 异常 从而将数据传输到安全世界 我不明白的是 是什么阻止了任何恶意代码引发 SMC 异常 如果任何未经授权的软件都可以导致转
  • 如何让 SwiftUI 列表自动滚动?

    当向 ListView 添加内容时 我希望它自动向下滚动 我正在使用 SwiftUIList and a BindableObject作为控制器 新数据正在添加到列表中 List chatController messages id sel
  • 是否可以同时在多个画布上绘图?

    我所有的画布绘制函数都是这样开始的 function drawMe var canvas document getElementById canvas id var ctx null ctx canvas getContext 2d 但是我
  • WScript.Shell 在 FireFox 中不起作用

    我有以下 JavaScript 代码 实际上我必须在客户端启动一个exe function executeCommands var commandtoRun C WINDOWS notepad exe var oShell new Acti
  • 按自定义排序顺序对 jQuery 中的 Div 进行排序

    我正在尝试重新排序标签的子元素input通过比较 它们的类别属性对应于 Javascript 中的类别顺序 多变的category sort order 然后我需要删除其类别属性的div 没有出现在category sort order 预
  • 如何动态合并android表格布局中一个单元格中的行?

    如何通过表格布局在 android 中获得以下功能 如图所示 我需要将两个单元格合并第 5 行 第 1 列 and 行 6 列 1动态地 我必须替换那里的一张图像 我怎样才能实现这个目标 感谢您的回答 使用 GridLayout 而不是 T
  • 当用户切换电视源时在应用程序上管理 GCKDevices

    ios的Google Chromecast api有以下设备发现方法 void deviceDidComeOnline GCKDevice device manipulate UI self tableView reloadData voi
  • 从 Jenkins 管道中的 shell 步骤访问 Groovy 变量

    使用Jenkins 2 x 中的管道插件 https jenkins io doc book pipeline overview 我如何访问在阶段或节点级别的某个位置定义的 Groovy 变量 sh step 简单的例子 node stag
  • Angular JS ng-include 绑定问题

    我使用模板文件创建了一个寻呼机小部件 我在 HTML 页面中使用了两次 我有一个选择 转到页面 选项以及上一页和下一页的链接 问题是 当我使用选择框更新当前页面 然后使用上一页和下一页链接时 当前页面会更新 但选择框不会更新 请告诉我我做错
  • 类型别名和自引用

    例如 单链表节点可能定义如下 namespace example part1 class node node next int value 假设我们只有一个整数列表 此类允许有一个指向其自身类型的成员 因为无论底层数据结构的大小如何 指针都
  • Delphi 2009 函数被链接器消除

    我想使用该功能DateTimeToStr在调试项目时 我想使用评估 修改窗口或监视窗口 这总是会导致错误 函数被链接器消除 我确保该函数被项目使用 我还在我想要调试的函数中显式放置了一个调用 我还关闭了优化并重新编译了整个项目 我做了以下程
  • Android studio 和设备外部

    是否可以在 android studio 中使用外部设备模拟应用程序 我有一个设备连接到计算机 但是当您运行该应用程序时 它无法识别该设备 注意 接受未知来源的模式和调试模式已激活 转到模块的运行配置并更改 在那里 您可以选择要在模拟器 设
  • 使用深度学习突出显示句子中的重要单词

    我试图突出显示 imdb 数据集中的重要单词 这些单词最终有助于情感分析预测 数据集如下 X train 作为字符串的评论 Y train 0 或 1 现在 在使用 Glove 嵌入来嵌入 X train 值后 我可以将其输入神经网络 现在