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ą:
- Podobne do tego zdania
- Ma część zdania podobną do frazy
- 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 łatwyAbsolutnie 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:
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.
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ń.
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ść.
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
Odpowiedzi:
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:
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 GloVe
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:
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 .
źródło
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):
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:
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.
źródło
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.
źródło