Cómo construir una búsqueda semántica para un dominio dado


19

Hay un problema que estamos tratando de resolver donde queremos hacer una búsqueda semántica en nuestro conjunto de datos, es decir, tenemos datos específicos de dominio (ejemplo: oraciones que hablan de automóviles)

Nuestros datos son solo un montón de oraciones y lo que queremos es dar una frase y recuperar las oraciones que son:

  1. Similar a esa frase
  2. Tiene una parte de una oración que es similar a la frase
  3. Una oración que tiene significados contextualmente similares.


Déjame intentar darte un ejemplo, supongo que busco la frase "Experiencia de compra", debería obtener las siguientes frases:

  • Nunca pensé que la compra de automóviles podría tomar menos de 30 minutos para firmar y comprar.
  • Encontré un auto que me gustó y el proceso de compra fue
    sencillo y sencillo

  • Absolutamente odiaba ir de compras, pero hoy me alegro de haberlo hecho.


Quiero poner énfasis en el hecho de que estamos buscando similitudes contextuales y no solo una búsqueda de palabras de fuerza bruta.

Si la oración usa palabras diferentes, entonces también debería poder encontrarla.

Cosas que ya hemos probado:

  1. Búsqueda semántica abierta El problema que enfrentamos aquí es generar ontología a partir de los datos que tenemos, o por eso buscar ontología disponible de diferentes dominios de nuestro interés.

  2. Búsqueda elástica (BM25 + Vectores (tf-idf)), probamos esto donde daba algunas oraciones, pero la precisión no era tan buena. La precisión también era mala. Intentamos contra un conjunto de datos curado por humanos, solo pudo obtener alrededor del 10% de las oraciones.

  3. Probamos diferentes incrustaciones como las que se mencionaron anteriormente en transformadores de oraciones y también pasamos por el ejemplo e intentamos evaluar contra nuestro conjunto curado por humanos y eso también tenía una precisión muy baja.

  4. Intentamos ELMO . Esto fue mejor pero aún menor precisión de lo que esperábamos y hay una carga cognitiva para decidir el valor del coseno por debajo del cual no deberíamos considerar las oraciones. Esto incluso se aplica al punto 3.

Cualquier ayuda será apreciada. Muchas gracias por la ayuda de antemano


Pregunta bien escrita: ¿puede agregar 5 ejemplos más de términos de búsqueda? ¿Son siempre frases de una a tres palabras o los términos de búsqueda pueden ser más largos? Estás en el camino correcto
Adnan S

Hola Adnan, el término de búsqueda siempre será frases de una a tres palabras. Ej: experiencia de compra, confort de conducción, sistema de información y entretenimiento, interiores, kilometraje, rendimiento, confort de los asientos, comportamiento del personal.
Jickson

Este artículo puede ser interesante para su caso: elastic.co/blog/… (pista: apalancamiento word2vec)
Val

@Val Esto es realmente interesante porque iba a mencionar el mismo artículo que mencionaste y luego vi tu comentario. Creo que este método te acercará a lo que quieres.
nima

es posible que desee analizar la similitud de coseno. Como se explica a continuación, implica convertir las cadenas en vectores que se pueden representar en el espacio 2D. Se calcula el ángulo coseno de esos 2 vectores. Este ángulo representa la "similitud" entre las 2 cuerdas. Aquí hay un buen artículo sobre él medium.com/swlh/playing-with-word-vectors-308ab2faa519
sagar1025

Respuestas:


5

Le sugiero que vea la conferencia de Trey Grainger sobre cómo construir un sistema de búsqueda semántica => https://www.youtube.com/watch?v=4fMZnunTRF8 . Habla sobre la anatomía de un sistema de búsqueda semántica y cada una de las piezas que solían encajar para ofrecer una solución final.

Un gran ejemplo de la similitud contextual es el motor de búsqueda de Bing: ingrese la descripción de la imagen aquí

La consulta original tenía los términos {refresco enlatado} y los resultados de búsqueda de Bing pueden referirse a {refresco dietético enlatado}, {refrescos}, {pop de temperatura ambiente sin abrir} o {bebidas gaseosas}. ¿Cómo hizo esto Bing ?:

Bueno, las palabras que tienen significados similares obtienen vectores similares y luego estos vectores se pueden proyectar en un gráfico bidimensional para visualizarlos fácilmente. Estos vectores se entrenan asegurando que las palabras con significados similares estén físicamente cerca unas de otras. Puede entrenar su propio modelo basado en vectores entrenando el modelo GloVeingrese la descripción de la imagen aquí

Cuanto más cercanas estén las distancias de los vectores entre sí, mejor. Ahora puede buscar consultas vecinas más cercanas en función de la distancia de sus vectores. Por ejemplo, para la consulta {cómo evitar que los animales destruyan mi jardín}, el vecino más cercano da estos resultados:

ingrese la descripción de la imagen aquí

Puedes aprender más acerca de esto aquí. Para su caso, puede encontrar un umbral para la distancia máxima que puede ser un vector de una oración desde la consulta de búsqueda original para que se considere una oración contextualmente similar.

La similitud contextual también puede lograrse reduciendo la dimensión del vocabulario utilizando algo como LSI (indexación semántica latente). Para hacer esto en Python, le recomiendo que revise la biblioteca genism para python: https://radimrehurek.com/gensim/about.html .


1

Es posible que le interese investigar Weaviate para ayudarlo a resolver este problema. Es un gráfico inteligente basado en la vectorización de objetos de datos .

Si tiene un lenguaje específico de dominio (por ejemplo, abreviaturas) puede extender Weaviate con conceptos personalizados .

Es posible que pueda resolver su problema con las funciones de búsqueda semántica (es decir, Explore{}) o las funciones de clasificación automática.

Función de exploración

Como todos los objetos de datos se vectorizan, puede hacer una búsqueda semántica como la siguiente (este ejemplo proviene de los documentos , puede probarlo aquí usando GraphQL):

{
  Get{
    Things{
      Publication(
        explore: {
          concepts: ["fashion"],
          certainty: 0.7,
          moveAwayFrom: {
            concepts: ["finance"],
            force: 0.45
          },
          moveTo: {
            concepts: ["haute couture"],
            force: 0.85
          }
        }
      ){
        name
      }
    }
  }
}

Si estructura su esquema gráfico basado, por ejemplo, en el nombre de la clase "Sentencia", una consulta similar podría verse así:

{
  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
      }
    }
  }
}

Nota:
También puede explorar el gráfico semánticamente como un todo.

Clasificación automática

Una alternativa podría ser trabajar con las características de clasificación contextual o KNN .

En su caso, puede usar la clase Sentencia y relacionarla con una clase llamada Experiencia, que tendría la propiedad: buying(por supuesto, hay muchas otras configuraciones y estrategias entre las que puede elegir).

PD:
este video da un poco más de contexto si lo desea.


0

Hasta donde sé, no creo que exista ningún modelo teórico para construir un motor de búsqueda semántico. Sin embargo, creo que un motor de búsqueda semántico debería estar diseñado para satisfacer los requisitos específicos disponibles. Dicho esto, cualquier motor de búsqueda semántico que pueda comprender con éxito la intención del usuario, así como el contexto del término de búsqueda, necesita trabajar con el procesamiento del lenguaje natural (PNL) y el aprendizaje automático como los componentes básicos.

Aunque los motores de búsqueda funcionan de manera diferente a las herramientas de búsqueda, puede consultar las herramientas de búsqueda empresarial para tener una idea sobre un modelo de búsqueda semántica que funcione. Las plataformas de la nueva era como 3RDi Search funcionan según los principios de la búsqueda semántica y han demostrado ser la solución ideal para los datos no estructurados con los que las empresas tienen que lidiar. Es muy probable que Google esté trabajando en un modelo para introducir semántica avanzada en el motor de búsqueda.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.