elasticsearch,nlp,sentence-similarity,huggingface-transformers,Python,elasticsearch,Nlp,Sentence Similarity,Huggingface Transformers" /> elasticsearch,nlp,sentence-similarity,huggingface-transformers,Python,elasticsearch,Nlp,Sentence Similarity,Huggingface Transformers" />

Python 如何为给定域构建语义搜索

Python 如何为给定域构建语义搜索,python,elasticsearch,nlp,sentence-similarity,huggingface-transformers,Python,elasticsearch,Nlp,Sentence Similarity,Huggingface Transformers,我们正试图解决一个问题,我们想对数据集进行语义搜索, i、 我们有一个特定领域的数据(例如:谈论汽车的句子) 我们的数据只是一组句子,我们想要的是给出一个短语,然后返回以下句子: 类似于这个短语 句子中与短语相似的部分 上下文意义相似的句子 让我试着给你举个例子,假设我搜索短语“购买体验”,我会得到如下句子: 我从没想过买车会花不到30分钟的时间签字 然后买 我找到了一辆我喜欢的车,购买过程是 直截了当 我非常讨厌去买汽车,但今天我很高兴我去了 我想强调一个事实,即我们正在寻找上下文相似

我们正试图解决一个问题,我们想对数据集进行语义搜索, i、 我们有一个特定领域的数据(例如:谈论汽车的句子)

我们的数据只是一组句子,我们想要的是给出一个短语,然后返回以下句子:

  • 类似于这个短语
  • 句子中与短语相似的部分
  • 上下文意义相似的句子

  • 让我试着给你举个例子,假设我搜索短语“购买体验”,我会得到如下句子:

    • 我从没想过买车会花不到30分钟的时间签字 然后买
    • 我找到了一辆我喜欢的车,购买过程是
      直截了当

    • 我非常讨厌去买汽车,但今天我很高兴我去了


    我想强调一个事实,即我们正在寻找上下文相似性,而不仅仅是一个蛮力词搜索

    如果句子使用不同的词,那么它也应该能够找到它

    我们已经尝试过的事情:

  • 我们在这里面临的问题是从我们拥有的数据生成本体,或者 因此,从我们感兴趣的不同领域搜索可用的本体

  • 弹性搜索(BM25+Vectors(tf-idf)),我们尝试了这个方法,它给出了几句话,但精度不是很高。准确度很差 也我们尝试了一个人类策划的数据集,它只能得到大约10%的句子

  • 我们尝试了不同的嵌入方式,如中提到的,也通过了测试,并尝试对我们的人类策划集进行评估 而且它的精确度也很低

  • 我们试过了。这是更好的,但仍然低于我们预期的准确性,并有一个 认知负荷决定余弦值,下面我们不考虑句子。这甚至适用于第3点


  • 任何帮助都将不胜感激。非常感谢您提前提供的帮助

    我强烈建议您观看Trey Grainger关于如何构建语义搜索系统=>的讲座。他谈到了语义搜索系统的结构,以及用于组合在一起以提供最终解决方案的每个部分

    Bing的搜索引擎就是一个很好的例子:

    最初的查询中有{罐装苏打水}一词,bing的搜索结果可以指{罐装减肥苏打水}、{软饮料}、{未打开的室温汽水}或{碳酸饮料}。bing是怎么做到的

    意思相似的单词会得到相似的向量,然后这些向量可以被投影到一个二维图形上,很容易被可视化。这些向量通过确保具有相似含义的单词在物理上彼此接近来进行训练。您可以通过训练

    向量之间的距离越近越好。现在,您可以根据向量的距离搜索最近邻查询。例如,对于查询{如何阻止动物破坏我的花园},最近的邻居给出以下结果:

    对于你的情况,你可以找到一个最大距离的阈值,一个句子的向量可以从原始的搜索查询中得到,以考虑上下文相似的句子。


    上下文相似性也可以通过使用LSI(潜在语义索引)之类的方法来减少词汇维度。要在Python中实现这一点,我强烈建议您查看Python的genism库:

    据我所知,我认为不存在任何构建语义搜索引擎的理论模型。然而,我认为语义搜索引擎的设计应该满足手头的特定需求。话虽如此,任何能够成功理解用户意图以及搜索词上下文的语义搜索引擎都需要使用自然语言处理(NLP)和机器学习作为构建块


    尽管搜索引擎的工作方式不同于搜索工具,但您可以参考企业搜索工具来了解有效的语义搜索模型。像3RDi Search这样的新时代平台基于语义搜索的原理,已被证明是企业必须处理的非结构化数据的理想解决方案。谷歌很可能正在开发一种模型,以便在搜索引擎中引入高级语义。

    您可能有兴趣研究如何帮助您解决这个问题。这是一个智能图形的基础上

    如果您有特定于领域的语言(例如缩写),则可以使用扩展Weaviate

    您可以使用语义搜索功能(即,
    Explore{}
    )或自动分类功能来解决问题

    探索功能 由于所有数据对象都得到矢量化,因此可以执行如下语义搜索(本例中,您可以使用GraphQL进行尝试):

    如果您基于(例如)类名“句子”构建结构,则类似的查询可能如下所示:

    {
      Get{
        Things{
          Sentence(
            # Explore (i.e., semantically) for "Buying Experience"
            explore: {
              concepts: ["Buying Experience"]
            }
            # Result must include the word "car" 
            where: {
              operator: Like
              path: ["content"]
              valueString: "*car*"
            }
          ){
            content
          }
        }
      }
    }
    
    注:
    您还可以从整体上理解语义

    自动分类 另一种方法可能是使用或分类功能

    在您的例子中,您可以使用class语句并将它们与名为Experience的类关联,该类具有以下属性:
    buying
    (当然,您可以选择许多其他配置和策略)

    附言:

    如果您愿意,可以提供更多的上下文。

    写得好的问题-您能再添加5个搜索词示例吗?它们是否总是一到三个单词的短语,或者搜索词是否可以更长?你是对的Hi Adnan,搜索词总是一到三个单词的短语。例如:购买体验、驾驶舒适度、,
    {
      Get{
        Things{
          Sentence(
            # Explore (i.e., semantically) for "Buying Experience"
            explore: {
              concepts: ["Buying Experience"]
            }
            # Result must include the word "car" 
            where: {
              operator: Like
              path: ["content"]
              valueString: "*car*"
            }
          ){
            content
          }
        }
      }
    }