gpt4 book ai didi

tensorflow - 如何在 SGNN(自治神经网络)中实现散列?

转载 作者:行者123 更新时间:2023-12-04 15:50:43 24 4
gpt4 key购买 nike

所以我阅读了名为 Self-Governing Neural Networks for On-Device Short Text Classification 的论文它提出了一种将单词转换到神经表征中的无嵌入方法。引用他们:

The key advantage of SGNNs over existing work is that they surmount the need for pre-trained word embeddings and complex networks with huge parameters. [...] our method is a truly embedding-free approach unlike majority of the widely-used state-of-the-art deep learning techniques in NLP

基本上,据我了解,他们是这样进行的:

  1. 您首先需要计算 n-grams(附带问题:skip-gram 是像旧的 skip-gram,还是像 word2vec 的新 skip-gram?我认为它是剩下的第一个) 在单词的字符上获得文本中单词的特征化表示,例如,使用 4-grams 你可以为每个单词生成一个 1M 维的稀疏特征向量。希望它是稀疏的,因此不需要为此完全使用内存,因为它几乎是单热的(或计数向量化或 tf-idf 向量化 ngram,其中有很多零)。
  2. 然后您需要使用 Locality-sensitive hashing (LSH) 对这些 n-gram 稀疏向量进行哈希处理.他们似乎使用 Random Projection据我了解。此外,他们不使用 ngram 向量,而是使用 n-gram 特征索引的元组及其非零 n-gram 特征的值(根据定义,这也是一个动态计算的“稀疏矩阵”,例如从非零特征的默认字典而不是完整向量)。
  3. 我找到了一个 implementation of Random Projection in scikit-learn .从我的测试来看,它似乎没有产生二进制输出,尽管整个过程都是在 scikit-learn 的稀疏矩阵中使用稀疏的即时计算,正如预期的那样具有内存效率(非零类字典特征)我猜是实现。

在所有这些中不起作用的地方,以及我的问题所在,是它们如何最终得到来自稀疏投影(散列)的二进制特征。他们似乎在说散列是在计算特征的同时完成的,这令人困惑,我本以为散列会按照我上面写的顺序进行,如 1-2-3 步骤,但他们的步骤 1和 2 似乎以某种方式合并。

我的困惑主要来自于以短语“即时计算”开头的段落。在 the paper 的第 888 页(PDF 的第 2 页)在右栏中。这是一张描述令我困惑的段落的图片:

what doesn't work

我想让我的学校项目取得成功(尝试将 BERT 与 SGNN 混合使用,而不是使用词嵌入)。那么,您将如何揭开它的神秘面纱?更准确地说,如何使用 scikit-learn、TensorFlow 或 PyTorch 实现类似的随机哈希投影?尝试将这些点连接起来,我进行了大量研究,但他们的论文没有提供实现细节,而这正是我想要重现的。我至少知道 SGNN 在字符级别的单词 n-gram 上使用了 80 个十四维 LSH(首先我的理解是正确的吗?)。

谢谢!


编辑:开始编写代码后,我意识到 scikit-learn 的 SparseRandomProjection() 的输出如下所示:

[0.7278244729081154,
-0.7278244729081154,
0.0,
0.0,
0.7278244729081154,
0.0,
...
]

现在,这看起来不错,它更接近于二进制,但它仍然可以通过首先使用良好的比率转换为整数而不是 float 。我仍然想知道 skip-gram 的事情,我现在假设单词字符的 n-gram 但这可能是错误的。将很快将代码发布到 GitHub。


编辑 #2:我在这里编写了一些代码,但使用的是 n-gram 而不是 skip-gram:https://github.com/guillaume-chevalier/SGNN-Self-Governing-Neural-Networks-Projection-Layer

此处有更多讨论主题:https://github.com/guillaume-chevalier/SGNN-Self-Governing-Neural-Networks-Projection-Layer/issues?q=is%3Aissue

最佳答案

首先,感谢您实现了投影层,它帮助我开始了自己的工作。

我阅读了你与@thinline72 的讨论,我同意他的观点,即特征是在整行文本中逐字符计算的,而不是逐字计算的。不过,我不确定这种功能差异是否相关。

回答您的问题:我认为他们按照您的建议和所做的那样分别执行步骤 1 和 2。是的,在您包含的文章摘录中,他们谈到了特征构建和投影中的散列,但我认为这是两种不同的散列。我解释说第一个散列(特征构造)是由 CountVectorizer 方法自动完成的。

随时看my implementation论文的一部分,我在其中构建了端到端网络并在 SwDA 数据集上进行了训练,如 SGNN 论文中所述。我获得的最高准确率为 71%,这比论文声称的要低一些。我还使用了 @thinline72 推荐的二进制哈希器,以及 nltk 的 skipgrams 实现(我很确定 SGNN 论文谈论的是“旧”skipgrams,而不是“word2vec”skipgrams)。

关于tensorflow - 如何在 SGNN(自治神经网络)中实现散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53876974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com