Jic*_*son 24 python nlp elasticsearch sentence-similarity huggingface-transformers
我们正在尝试解决一个问题,我们想对我们的数据集进行语义搜索,即我们有一个特定领域的数据(例如:关于汽车的句子)
我们的数据只是一堆句子,我们想要的是给出一个短语并取回以下句子:
让我试着给你举个例子,假设我搜索短语“购买体验”,我应该得到这样的句子:
我找到了我喜欢的汽车,购买过程
简单明了
我非常讨厌去买车,但今天我很高兴我做到了
我想强调这样一个事实,即我们正在寻找上下文相似性,而不仅仅是一个蛮力的词搜索。
如果句子使用不同的词,那么它也应该能够找到它。
我们已经尝试过的事情:
开放语义搜索我们在这里面临的问题是从我们拥有的数据中生成本体,或者为此从我们感兴趣的不同领域搜索可用的本体。
Elastic Search(BM25 + Vectors(tf-idf)),我们尝试了这个,它给出了几句话,但精度不是那么好。准确性也很差。我们尝试了一个人工策划的数据集,它只能得到大约 10% 的句子。
我们尝试了不同的嵌入,比如在句子转换器中提到过的嵌入,并且还通过示例并尝试根据我们的人工策划集进行评估,但准确性也非常低。
我们尝试了ELMO。这比我们预期的要好,但仍然比我们预期的准确度低,并且有一个认知负荷来决定我们不应该考虑低于这个值的余弦值。这甚至适用于第 3 点。
任何帮助将不胜感激。非常感谢您的帮助
我强烈建议您观看 Trey Grainger 关于如何构建语义搜索系统的讲座 => https://www.youtube.com/watch?v=4fMZnunTRF8。他谈到了语义搜索系统的解剖结构以及用于组合在一起以提供最终解决方案的每个部分。
原始查询包含术语 {canned soda},bing 的搜索结果可以参考 {canned diet soda}、{soft Drinks}、{unopened room temperature pop} 或 {carbonated Drinks}。bing是怎么做到的?:
那么,具有相似含义的单词会得到相似的向量,然后这些向量可以投影到二维图上,以便于可视化。通过确保具有相似含义的单词在物理上彼此靠近来训练这些向量。您可以通过训练GloVe 模型来训练您自己的基于向量的模型
向量之间的距离越近越好。现在,您可以根据向量的距离搜索最近邻查询。例如,对于查询{如何阻止动物破坏我的花园},最近的邻居给出以下结果:
您可以在此处了解更多信息。对于您的情况,您可以找到一个句子的向量可以与原始搜索查询的最大距离的阈值,以便将其视为上下文相似的句子。
上下文相似性也可以通过使用诸如 LSI(潜在语义索引)之类的东西来减少词汇维度来完成。要在 Python 中执行此操作,我强烈建议您查看 Python 的 genism 库:https : //radimrehurek.com/gensim/about.html。