- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个模型,但我很难弄清楚如何在 Pytorch 中实际实现它,尤其是在训练模型时(例如如何定义小批量等)。首先让我快速介绍一下上下文:
我正在研究 VQA(视觉问答),其中的任务是回答有关图像的问题,例如:
因此,撇开许多细节不谈,我只想在这里关注模型的 NLP 方面/分支。为了处理自然语言问题,我想使用字符级嵌入(而不是传统的词级嵌入),因为它们更健壮,因为它们可以轻松适应单词的形态变化(例如前缀、后缀、复数、动词变位、连字符等)。但同时我也不想在单词层面失去推理的归纳偏见。因此,我想出了以下设计:
如上图所示,我想使用 transformers (甚至更好, universal transformers ),但有点扭曲。我想使用 2 个转换器:第一个转换器将单独处理每个单词字符(字符级转换器),为问题中的每个单词生成初始单词级嵌入。一旦我们拥有所有这些初始词级嵌入,第二个词级更改器(mutator)将细化这些嵌入,以用上下文丰富它们的表示,从而获得上下文感知的词级嵌入。
整个 VQA 任务的完整模型显然更复杂,但我只想在这里关注这个 NLP 部分。所以我的问题基本上是关于在实现这个时我应该注意哪些 Pytorch 功能。例如,由于我将使用字符级嵌入,因此我必须定义一个字符级嵌入矩阵,但随后我必须对该矩阵执行查找以生成字符级转换器的输入,对每个单词重复此操作在问题中,然后将所有这些向量输入到词级转换器中。此外,单个问题中的单词可以有不同的长度,单个 minibatch 中的问题也可以有不同的长度。所以在我的代码中,我必须以某种方式在单个小批量中同时考虑单词和问题级别的不同长度(在训练期间),我不知道如何在 Pytorch 中做到这一点,或者它是否甚至可能在全部。
关于如何在 Pytorch 中实现这一点的任何提示,可以引导我走向正确的方向,我们将不胜感激。
最佳答案
一种实现您在 pyTorch 中所说的方法需要调整 Transformer 编码器:
1) 定义一个自定义标记器,将单词拆分为字符嵌入(而不是单词或词段嵌入)
2)为每个词定义一个掩码(类似于原始论文在解码器中用来掩码 future 标记的),以强制模型被约束到词上下文(在第一阶段)
3)然后使用传统的Transformer with mask(有效限制词级上下文)。
4)然后丢弃掩码并再次应用Transformer(句子级上下文)。
.
需要注意的事项:
1) 请记住,Transformer 编码器的输出长度始终与输入的大小相同(解码器是能够产生更长或更短序列的解码器)。因此,在您的第一阶段,您将没有字级嵌入(如图所示),而是字符级嵌入。如果您想将它们合并到词级嵌入中,您将需要一个额外的中间解码器步骤或使用自定义策略(例如:学习的加权和或使用类似于 BERT 的标记的东西)合并嵌入。
2) 您可能会面临效率问题。记住 Transformer 是 O(n^2),所以序列越长,它的计算成本就越高。在最初的 Transformer 中,如果你有一个长度为 10 个单词的句子,那么 Thansformer 将不得不处理一个 10 个标记的序列。如果您使用词片嵌入,您的模型将在大约 15 个标记的序列中工作。但是,如果您使用字符级嵌入,我估计您将处理约 50 个标记的序列,这对于长句子可能不可行,因此您可能需要截断您的输入(并且您将丢失所有长注意模型的术语依赖能力)。
3) 你确定你会通过添加字符级的 Transformer 有代表性的贡献吗? Transformer 旨在根据上下文(环绕嵌入)丰富嵌入,这就是原始实现使用词级嵌入的原因。 BERT 使用词块嵌入,以利用相关词中的语言规律性,而 GPT-2 使用 Byte-Pais-Embeddings (BPE),我不推荐在您的情况下使用它,因为它更适合下一个 token 预测.在您的情况下,您认为在学习的字符嵌入中会捕获哪些信息,以便可以在单词的字符之间有效共享?你认为它会比对每个单词或单词片段使用学习嵌入更丰富吗?我的猜测是,这就是您想要找出的……对吗?
关于nlp - Pytorch:如何实现嵌套转换器:单词的字符级转换器和句子的单词级转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56602442/
我尝试进行词形还原,即识别动词的词形和可能的阿拉伯语词根,例如: يتصل ==> lemma(动词的不定式)==> اتصل ==> root(三字根/Jidr thoulathi) ==> و ص
在执行 NLP 或 IR/IE 相关任务时,是否有人们通常用来删除标点符号和关闭类别词(例如 he, she, it)的停用词列表? 我一直在尝试使用 gibbs 抽样来进行词义消歧的主题建模,并且它
我不知道StackOverflow是否涵盖NLP,所以我来试试。 我有兴趣从特定 Realm 中找到两个词的语义相关性,即“图像质量”和“噪声”。我正在做一些研究,以确定相机的评论对于相机的特定属性是
是否有算法或方法可以评估文本项之间的共同趋势/主题? 例如,假设有四个数据点(文本条目): “我发现学校今天压力很大” “物理测试非常容易。” “我的物理测试根本没有挑战” “每个人都提早离开了,因为
我有兴趣了解有关 Natural Language Processing 的更多信息(NLP)并且我很好奇目前是否有任何不基于字典识别的策略来识别文本中的专有名词?另外,任何人都可以解释或链接到解释当
特征用于模型训练和测试。自然语言处理中的词汇特征和正字法特征有什么区别?例子首选。 最佳答案 我不知道这样的区别,大多数时候当人们谈论词汇特征时,他们谈论的是使用这个词本身,而不是仅使用其他特征,即它
在 NLP 任务中,人们用 SOC(句子开头)和 EOC(句子结尾)注释句子是很常见的。他们为什么这样做? 这是一个任务相关的表现吗?例如,您在 NER 问题中进行填充的原因与您在翻译问题中进行填充的
我一直在研究 NLP 并使用 notepad++ 来处理文本文件。这很好,在某些情况下,但问题是无法使用包含大量文本的大型文件进行锻炼。 VIM 不支持 UTF-8。哪一个是最好的支持 unicode
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 3年前关闭。 Improve this questi
我在 Stanford CoreNLP demo page 中解析了以下句子和 Stanford parser demo page .尽管两者都会导致可以暗示目的语义的解析(相应地取决于 advcl
语义网和自然语言处理之间究竟有什么区别? 语义网是自然语言处理的一部分吗? 最佳答案 这是两个独立的学科领域,但它们在某些地方确实重叠。因为文档,无论其格式如何,都是由异构语法和语义组成的,所以目标是
我需要解析非结构化文本并将相关概念转换为格式,以便所有三元组可以合并形成一个图。例如如果我有 2 个句子,比如 A improves B 和 B improves C,我应该能够创建一个像这样的图 A
使用 GATE 时,本体在自然语言处理中的作用是什么? 据我了解,在较高层次上,本体允许对由类、它们的实例、这些实例的属性以及域中类之间的关系组成的域进行建模。 但是,在使用 GATE 时创建自定义本
我最后一年的工程项目要求我使用 Java 或 Python 构建一个应用程序,该应用程序使用自然语言处理来总结文本文档。我什至如何开始编写这样的应用程序? 根据一些研究,我刚刚注意到基于提取的摘要对我
我想知道是否可以使用 Stanford CoreNLP检测一个句子是用哪种语言写的?如果是这样,这些算法的精确度如何? 最佳答案 几乎可以肯定,此时斯坦福 COreNLP 中没有语言识别。 “几乎”
我在一家制造可以与 child 交谈的玩具车的公司工作。我们想使用斯坦福核心 NLP 作为解析器。但是,它以 GPL 许可:他们不允许在商业上使用 NLP。我可以从斯坦福 NLP 小组购买其他许可证吗
我想使用 Natural Language Processing Libraries 从句子中找到谓词和主语.这种技术在NLP的世界里有什么名字吗?或者有没有办法做到这一点? Example : He
所以,这个问题可能有点幼稚,但我认为询问 Stackoverflow 的友好人士不会有什么坏处。 我现在的公司已经使用第三方 API 进行 NLP 一段时间了。我们基本上对一个字符串进行 URL 编码
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
这可能是一个愚蠢的问题,但是如何迭代解析树作为 NLP 解析器(如斯坦福 NLP)的输出?它都是嵌套的括号,既不是 array 也不是 dictionary 或我使用过的任何其他集合类型。 (ROOT
我是一名优秀的程序员,十分优秀!