Jak zbudować wyszukiwanie semantyczne dla danej domeny

19

Istnieje problem, który próbujemy rozwiązać, gdy chcemy przeprowadzić wyszukiwanie semantyczne naszego zestawu danych, tj. Mamy dane specyficzne dla domeny (przykład: zdania mówiące o samochodach)

Nasze dane to tylko garść zdań, a my chcemy dać frazę i odzyskać zdania, które są:

  1. Podobne do tego zdania
  2. Ma część zdania podobną do frazy
  3. Zdanie, które ma kontekstowo podobne znaczenie


Pozwól, że podam przykład, że szukam frazy „Kupowanie”. Powinienem uzyskać zdania:

  • Nigdy nie myślałem, że zakup samochodu może zająć mniej niż 30 minut na podpisanie i zakup.
  • Znalazłem samochód, który mi się podobał, a proces zakupu był
    prosty i łatwy

  • Absolutnie nie lubiłem chodzić na zakupy samochodowe, ale dziś cieszę się, że tak zrobiłem


Chcę położyć nacisk na fakt, że szukamy podobieństwa kontekstowego, a nie tylko wyszukiwania słów metodą brutalną siłą.

Jeśli w zdaniu są używane inne słowa, to również powinno być w stanie je znaleźć.

Rzeczy, które już wypróbowaliśmy:

  1. Otwarte przeszukiwanie semantyczne Problemem, który tu napotkaliśmy, jest generowanie ontologii na podstawie danych, które posiadamy, lub w tym celu wyszukiwanie dostępnej ontologii z różnych dziedzin będących przedmiotem naszego zainteresowania.

  2. Elastyczne wyszukiwanie (BM25 + wektory (tf-idf)), próbowaliśmy tego, gdzie dał kilka zdań, ale precyzja nie była tak wielka. Zła była również dokładność. Próbowaliśmy przeciwko zestawowi danych stworzonym przez ludzi, który był w stanie uzyskać tylko około 10% zdań.

  3. Próbowaliśmy różnych osadzeń, takich jak kiedyś wspomniane w transformatorach zdań, a także przeszliśmy przez ten przykład i próbowaliśmy ocenić nasz zestaw opracowany przez człowieka, który również miał bardzo niską dokładność.

  4. Próbowaliśmy ELMO . To była lepsza, ale wciąż niższa dokładność, niż się spodziewaliśmy, i istnieje obciążenie poznawcze, które decyduje o wartości cosinus, poniżej której nie powinniśmy brać pod uwagę zdań. Dotyczy to nawet punktu 3.

Każda pomoc będzie mile widziana. Z góry dziękuję za pomoc

Jickson
źródło
Dobrze napisane pytanie - czy możesz dodać jeszcze 5 przykładów wyszukiwanych haseł? Czy zawsze zawierają one od jednego do trzech wyrazów lub czy wyszukiwane hasła mogą być dłuższe? Jesteś na dobrej drodze
Adnan S
Cześć Adnan, wyszukiwane hasło zawsze będzie zawierać od jednego do trzech słów. Np .: zakup, komfort jazdy, system informacyjno-rozrywkowy, wnętrza, przebieg, osiągi, komfort siedzenia, zachowanie personelu.
Jickson
Ten artykuł może być interesujące sprawy: elastic.co/blog/... (podpowiedź: dźwignia word2vec)
Val
@Val To naprawdę interesujące, że zamierzałem wspomnieć ten sam artykuł, o którym wspomniałeś, a następnie zobaczyłem twój komentarz. Myślę, że ta metoda zbliży cię do tego, czego chcesz.
nima
możesz spojrzeć na podobieństwo cosinusa. Jak wyjaśniono poniżej, obejmuje konwersję ciągów znaków na wektory, które można przedstawić w przestrzeni 2D. Obliczany jest kąt cosinus tych 2 wektorów. Ten kąt reprezentuje „podobieństwo” między 2 łańcuchami. Oto fajny artykuł na ten temat medium.com/swlh/playing-with-word-vectors-308ab2faa519
sagar1025

Odpowiedzi:

5

Gorąco polecam obejrzenie wykładu Trey Graingera na temat budowy semantycznego systemu wyszukiwania => https://www.youtube.com/watch?v=4fMZnunTRF8 . Mówi o anatomii semantycznego systemu wyszukiwania oraz o każdym z elementów, które pasowały do ​​siebie, aby dostarczyć ostateczne rozwiązanie.

Doskonałym przykładem podobieństwa kontekstowego jest wyszukiwarka Binga: wprowadź opis zdjęcia tutaj

Pierwotne zapytanie zawierało terminy {soda w puszkach}, a wyniki wyszukiwania Bing mogą odnosić się do {sody dietetycznej w puszkach}, {napojów bezalkoholowych}, {pop nieotwarta temperatura pokojowa} lub {napoje gazowane}. Jak to zrobił Bing ?:

Cóż, słowa o podobnych znaczeniach mają podobne wektory, a następnie wektory te można rzutować na dwuwymiarowy wykres, aby można je było łatwo wizualizować. Wektory te trenuje się, upewniając się, że słowa o podobnych znaczeniach są fizycznie blisko siebie. Możesz trenować własny model wektorowy, trenując model GloVewprowadź opis zdjęcia tutaj

Im bliższe są odległości między wektorami, tym lepiej. Teraz możesz wyszukiwać zapytania najbliższego sąsiada na podstawie odległości ich wektorów. Na przykład w przypadku zapytania {jak powstrzymać zwierzęta przed zniszczeniem mojego ogrodu} najbliższy sąsiad podaje następujące wyniki:

wprowadź opis zdjęcia tutaj

Możesz dowiedzieć się więcej na ten temat tutaj. W twoim przypadku możesz znaleźć próg maksymalnej odległości, w jakiej wektor zdania może znajdować się od pierwotnego zapytania, aby uznać go za zdanie podobne kontekstowo.

Kontekstowe podobieństwo można również osiągnąć poprzez zmniejszenie wymiaru słownictwa za pomocą czegoś takiego jak LSI (Latent Semantic Indexing). Aby to zrobić w Pythonie, gorąco polecam sprawdzenie biblioteki genizmów dla Pythona: https://radimrehurek.com/gensim/about.html .

Hardit Singh
źródło
1

Być może zainteresuje Cię Weaviate, które pomogą Ci rozwiązać ten problem. Jest to inteligentny wykres oparty na wektoryzacji obiektów danych .

Jeśli masz język specyficzny dla domeny (np. Skróty), możesz rozszerzyć Weaviate o niestandardowe koncepcje .

Możesz być w stanie rozwiązać swój problem za pomocą funkcji wyszukiwania semantycznego (tj. Explore{}) Lub funkcji automatycznej klasyfikacji.

Funkcja eksploracji

Ponieważ wszystkie obiekty danych są wektoryzowane, możesz przeprowadzić wyszukiwanie semantyczne w następujący sposób (ten przykład pochodzi z dokumentacji , możesz wypróbować go tutaj za pomocą GraphQL):

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

Jeśli utworzysz schemat swojego wykresu w oparciu o - na przykład - nazwę klasy „Zdanie”, podobne zapytanie może wyglądać mniej więcej tak:

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

Uwaga:
Możesz także eksplorować wykres semantycznie jako całość.

Automatyczna klasyfikacja

Alternatywą może być praca z funkcjami klasyfikacji kontekstowej lub KNN .

W twoim przypadku możesz użyć Zdania klasy i powiązać je z klasą o nazwie Doświadczenie, która miałaby właściwość: buying(istnieje oczywiście wiele innych konfiguracji i strategii do wyboru).

PS:
Ten film daje trochę więcej kontekstu, jeśli chcesz.

Bob van Luijt
źródło
0

O ile mi wiadomo, nie sądzę, aby istniał jakiś model teoretyczny do budowy semantycznej wyszukiwarki. Uważam jednak, że semantyczna wyszukiwarka powinna zostać zaprojektowana w celu spełnienia określonych wymagań. Powiedziawszy to, każda wyszukiwarka semantyczna, która jest w stanie z powodzeniem zrozumieć intencję użytkownika, a także kontekst wyszukiwanego hasła, musi pracować z przetwarzaniem języka naturalnego (NLP) i uczeniem maszynowym jako elementami składowymi.

Chociaż wyszukiwarki działają inaczej niż narzędzia wyszukiwania, możesz odwołać się do narzędzi wyszukiwania korporacyjnego, aby uzyskać pojęcie o działającym semantycznym modelu wyszukiwania. Nowe platformy wiekowe, takie jak 3RDi Search, działają na zasadach wyszukiwania semantycznego i okazały się idealnym rozwiązaniem dla nieustrukturyzowanych danych, z którymi mają do czynienia firmy. Google prawdopodobnie pracuje nad modelem do wprowadzenia zaawansowanej semantyki w wyszukiwarce.

Solo987
źródło