尝试使用 Tensorflow 理解用于 NLP 教程的 CNN

     2023-03-12     219

关键词:

【中文标题】尝试使用 Tensorflow 理解用于 NLP 教程的 CNN【英文标题】:Trying to understand CNNs for NLP tutorial using Tensorflow 【发布时间】:2017-05-30 15:01:04 【问题描述】:

我关注 this tutorial 是为了了解 NLP 中的 CNN。尽管我面前有代码,但仍有一些我不明白的事情。我希望有人可以在这里澄清一些事情。


第一个相当小的事情是TextCNN 对象的sequence_length参数。在 github 上的示例中,这只是 56,我认为这是训练数据中所有句子的最大长度。这意味着self.input_x 是一个 56 维向量,它将仅包含每个单词的句子字典中的索引。

此列表进入tf.nn.embedding_lookup(W, self.intput_x),它将返回一个矩阵,该矩阵由self.input_x 给出的这些单词的单词嵌入组成。根据this answer,此操作类似于使用 numpy 进行索引:

matrix = np.random.random([1024, 64]) 
ids = np.array([0, 5, 17, 33])
print matrix[ids]

但这里的问题是self.input_x 大部分时间看起来像[1 3 44 25 64 0 0 0 0 0 0 0 .. 0 0]。如果我假设 tf.nn.embedding_lookup 忽略值 0,我是否正确?


我不明白的另一件事是tf.nn.embedding_lookup 是如何在这里工作的:

# Embedding layer
with tf.device('/cpu:0'), tf.name_scope("embedding"):
    W = tf.Variable(
        tf.random_uniform([vocab_size, embedding_size], -1.0, 1.0),
            name="W")
    self.embedded_chars = tf.nn.embedding_lookup(W, self.input_x)
    self.embedded_chars_expanded = tf.expand_dims(self.embedded_chars, -1)

我假设,self.embedded_chars 是一个矩阵,它是 CNN 的 实际 输入,其中每一行代表 一个 词的词嵌入。但是tf.nn.embedding_lookup 怎么知道self.input_x 给出的那些索引呢?


我在这里不明白的最后一件事是

W 是我们在训练期间学习的嵌入矩阵。我们使用随机均匀分布对其进行初始化。 tf.nn.embedding_lookup 创建实际的嵌入操作。嵌入操作的结果是一个形状为[None, sequence_length, embedding_size]的3维张量。

这是否意味着我们实际上在这里学习词嵌入?教程开头说:

我们不会将预训练的 word2vec 向量用于我们的词嵌入。相反,我们从头开始学习嵌入。

但我没有看到实际发生这种情况的代码行。 code of the embedding layer 看起来不像是在训练或学习任何东西 - 那么它发生在哪里?

【问题讨论】:

【参考方案1】:

回答问题 1(如果我假设 tf.nn.embedding_lookup 忽略值 0,我是否正确?):

输入向量中的0是词汇表中第0个符号的索引,也就是PAD符号。我认为执行查找时它不会被忽略。将返回嵌入矩阵的第 0 行。

回答问题 2(但是 tf.nn.embedding_lookup 怎么知道 self.input_x 给出的那些索引?):

嵌入矩阵的大小为 [V * E],其中是词汇的大小,E 是嵌入向量的维度。矩阵的第 0 行是词汇表第 0 个元素的嵌入向量,矩阵的第 1 行是词汇表第一个元素的嵌入向量。 从输入向量 x 中,我们得到词汇表中单词的索引,用于对嵌入矩阵进行索引。

回答问题 3(这是否意味着我们实际上是在这里学习词嵌入?)。

是的,我们实际上是在学习嵌入矩阵。 在嵌入层中,W = tf.Variable( tf.random_uniform([vocab_size, embedding_size], -1.0, 1.0),name="W") 行中的 W 是嵌入矩阵,默认情况下,在 tensorflow 中,trainable=TRUE 为变量。因此,W 也将是一个学习参数。要使用预训练模型,请设置trainable = False

代码详细解释可以关注博客:https://agarnitin86.github.io/blog/2016/12/23/text-classification-cnn

【讨论】:

RNN 的 TensorFlow 示例

】RNN的TensorFlow示例【英文标题】:TensorflowexamplesforRNN【发布时间】:2017-06-1110:25:49【问题描述】:我正在尝试在Tensorflow中实现基本的NLP任务,但尽可能不使用内置模块(只是为了学习)我一直在尝试使用来自http://www.cnts.ua.ac.be/... 查看详情

将 pandas 数据帧传递给 FastAPI 用于 NLP ML

...PML【发布时间】:2020-11-2017:48:15【问题描述】:我第一次尝试部署NLPML模型。为此,建议我使用FastAPI和uvicorn。我在让FastAPI做出响应方面取得了一些成功;但是,我无法成功传递数据帧并让它处理它。我尝试过使用字典,甚至尝... 查看详情

无法理解 tensorflow 文档中使用的 GAN 模型的损失函数

】无法理解tensorflow文档中使用的GAN模型的损失函数【英文标题】:Can\'tunderstandthelossfunctionsfortheGANmodelusedinthetensorflowdocumentation【发布时间】:2020-08-1218:31:29【问题描述】:我无法理解TensorFlow文档中GAN模型中的损失函数。为什么... 查看详情

论文泛读186qa数据集爆炸:用于问答和阅读理解的nlp资源分类

...建模进度所需的基准数据集进行了大量工作。问答和阅读理解在这方面特别 查看详情

论文泛读186qa数据集爆炸:用于问答和阅读理解的nlp资源分类

...建模进度所需的基准数据集进行了大量工作。问答和阅读理解在这方面特别 查看详情

用于 tensorflow 和 pymysql 的 Sagemaker 内核

】用于tensorflow和pymysql的Sagemaker内核【英文标题】:SagemakerKernelfortensorflowandpymysql【发布时间】:2020-03-1606:39:53【问题描述】:我在使用conda_python3内核时使用pymysql从数据库中读取,但是当我想使用用于深度学习的tensorflow/keras,... 查看详情

如何理解 TensorFlow 中的静态形状和动态形状?

】如何理解TensorFlow中的静态形状和动态形状?【英文标题】:HowtounderstandstaticshapeanddynamicshapeinTensorFlow?【发布时间】:2016-09-0222:25:55【问题描述】:在TensorFlowFAQ中,它说:在TensorFlow中,张量同时具有静态(推断)形状和动态(... 查看详情

如何使用 Tensorflow2.0 alpha 堆叠卷积层和 LSTM?

】如何使用Tensorflow2.0alpha堆叠卷积层和LSTM?【英文标题】:HowtostackConvolutionalLayerandLSTMusingTensorflow2.0alpha?【发布时间】:2019-09-0819:11:15【问题描述】:我正在尝试为NLP任务实现一个神经网络,其中包含一个卷积层,后跟一个LSTM... 查看详情

Python - 如何使用 NLP 从缩写文本中直观地理解单词?

】Python-如何使用NLP从缩写文本中直观地理解单词?【英文标题】:Python-HowtointuitwordfromabbreviatedtextusingNLP?【发布时间】:2017-09-1613:42:56【问题描述】:我最近正在研究一个使用各种单词缩写的数据集。例如,wtrbtl=waterbottlebwlingbl=... 查看详情

我真的将 GPU 用于 tensorflow 吗?

】我真的将GPU用于tensorflow吗?【英文标题】:AmIreallyusingGPUfortensorflow?【发布时间】:2021-12-1521:13:53【问题描述】:我正在学习神经网络,并尝试使用GPU。我正在使用:Python3.8tensorflow-gpu2.6.0PyCharmPyCharm的Jupiter插件显卡NVIDIA3080TI-12... 查看详情

nlp(十八)利用albert提升模型预测速度的一次尝试(代码片段)

前沿??在文章NLP(十七)利用tensorflow-serving部署kashgari模型中,笔者介绍了如何利用tensorflow-serving部署来部署深度模型模型,在那篇文章中,笔者利用kashgari模块实现了经典的BERT+Bi-LSTM+CRF模型结构,在标注了时间的文本语料(大... 查看详情

用于推理的 TensorFlow Lite C++ API 示例

】用于推理的TensorFlowLiteC++API示例【英文标题】:TensorFlowLiteC++APIexampleforinference【发布时间】:2019-11-1204:56:17【问题描述】:我正在尝试让TensorFlowLite示例在配备ARMCortex-A72处理器的机器上运行。不幸的是,由于缺乏有关如何使用C... 查看详情

GATE 如何将本体用于 NLP?

...ogiesforNLP?【发布时间】:2014-01-0718:58:59【问题描述】:在使用GATE时,本体在自然语言处理中的作用是什么?据我了解,在高层次上,本体允许对由类、它们的实例、这些实例的属性以及域中类之间的关系组成的域进行建模。但... 查看详情

使用 Tensorflow、Python 进行 OCR

】使用Tensorflow、Python进行OCR【英文标题】:OCRusingTensorflow,Python【发布时间】:2018-12-3100:46:52【问题描述】:我是Python和ML的新手。我正在尝试使用张量流获取用于字符识别的简单代码。一个简单的python代码,用于搜索输入的文... 查看详情

从 NodeJS、NLP 中的文本中提取人名

...1-2821:50:23【问题描述】:我是使用nodejs的NLP新手,我正在尝试找出NLP库,这些库可用于确定一个单词是否是给定文本中的人名。非常感谢任何与库或代码示例相关的帮助,或者关于如何在nodeJS中解决此问题的任何想法。谢谢。【... 查看详情

用于 VGG19 模型参数的 Tensorflow Float16

】用于VGG19模型参数的TensorflowFloat16【英文标题】:TensorflowFloat16forVGG19modelparameters【发布时间】:2019-09-1217:22:07【问题描述】:我正在使用Python中的TensorFlow(带有19.01NvidiaTensorFlowDocker映像)做neuralstyletransfer。我有一个Nvidia2070显... 查看详情

自然语言处理nlp星空智能对话机器人系列:深入理解transformer自然语言处理位置编码(positional_encoding)

...台。它为50多个语料库和词汇资源(如WordNet)提供了易于使用的界面,以及一套用于分类、标记、词干、标记、解析和语义推理的文本处理库、工业级NLP库包装器和一个活跃的讨论论坛。NLTK适合语言学家、工程师、学生、教育... 查看详情

TensorFlow 嵌入查找

】TensorFlow嵌入查找【英文标题】:TensorFlowEmbeddingLookup【发布时间】:2016-10-2006:11:11【问题描述】:我正在尝试学习如何使用TensorFlow构建用于语音识别的RNN。作为开始,我想尝试一些示例模型放在TensorFlow页面TF-RNN根据建议,我... 查看详情