我一直在尝试掌握谷歌语义体验的概念。通过使用它,我打算实现一个语义查询工具。
使用通用句子编码器,我可以首先对所有句子进行预编码并将它们放入数据库中。当用户想要进行查询时,输入也会被转换为 512 维向量,我们将通过比较余弦相似度对整个数据库进行顺序搜索(选择相似度最高的向量)。但这非常慢......
幸运的是,在他们的语义体验页面上,他们写道:
Universal Sentence Encoder 模型与我们在 Talk to Books 和 Semantris 中使用的非常相似,尽管这些应用程序使用双编码器方法来最大化响应相关性,而 Universal Sentence Encoder 是返回嵌入的单个编码器对于输入,而不是输入对上的分数。
他们用于将句子转换为嵌入向量的一种更简单的方法是DAN(深度平均神经网络)。
据我了解,句子被分割成单词,然后转换成向量(word2vec),然后我们得到所有向量的平均值。平均值最终传递给一个或多个隐藏前馈层,最终输出具有 softmax 激活函数并具有 512 个神经元的层。
但是,如何创建双编码器?我是否使用两个不同的神经网络?或者输出是否只包含一个输出相似性的神经元?
谢谢!
附言
如果这里提到了任何无知的内容,我深表歉意,我对将低维空间投影到 512 维向量空间的概念感到非常困惑。