https://szkolazpieklarodem.pl/
Znajdowanie podobieństwa między dwoma słowami to przypadek użycia, który najczęściej spotykasz w pracy z NLP. Czasami dość ważne staje się ustalenie, czy dwa słowa są podobne. Budując chatboty, często będziesz musiał znaleźć nie tylko słowa o podobnym wyglądzie, ale także to, jak bardzo są one logicznie powiązane. spaCy wykorzystuje wysokiej jakości wektory słów, aby znaleźć podobieństwo między dwoma słowami za pomocą algorytmu GloVe (Global Vectors for Word Representation).
GloVe to algorytm uczenia się bez nadzoru, służący do uzyskiwania reprezentacji wektorowych słów. Algorytm GloVe wykorzystuje zagregowane globalne statystyki współwystępowania słów z korpusu do uczenia modelu. Spróbujmy przyjrzeć się rzeczywistym wartościom wewnątrz wektorów spaCy, korzystając z atrybutu wektorowego tokena.
doc = nlp(u’How are you doing today?’)
for token in doc:
print(token.text, token.vector[:5])
Wyjście:
(u’How’, array([-0.29742685, 0.73939574,
-0.04001453, 0.44034013, 2.8967502 ], dtype=float32))
(u’are’, array([-0.23435134, -1.6145049 , 1.0197453 , 0.9928169 ,
0.28227055], dtype=float32))(u’you’, array([ 0.10252178,
-3.564711 , 2.4822793 , 4.2824993 , 3.590245 ], dtype=float32))
(u’doing’, array([-0.6240922 , -2.0210216 , -0.91014993, 2.7051923 ,
4.189252 ], dtype=float32))(u’today’, array([ 3.5409122 ,
-0.62185854, 2.6274266 , 2.0504875 , 0.20191991], dtype=float32))
(u’?’, array([ 2.8914998 , -0.25079122, 3.3764176 , 1.6942682 ,
1.9849057 ], dtype=float32))
Widząc ten wynik, nie ma to większego sensu i znaczenia. Z punktu widzenia aplikacji najważniejsze jest to, jak podobne są wektory różnych słów, czyli samo znaczenie słowa. Aby znaleźć podobieństwo między dwoma słowami w spaCy, możemy wykonać następujące czynności.
Przykład 1:
hello_doc = nlp(u”hello”)
hi_doc = nlp(u”hi”)
hella_doc = nlp(u”hella”)
print(hello_doc.similarity(hi_doc))
print(hello_doc.similarity(hella_doc))
Wyjście:
0,7879069442766685
0,4193425861242359
Jeśli widzisz słowo hello, jest ono bardziej spokrewnione i podobne do słowa hi, chociaż różnica między słowami hello i hella polega jedynie na znaku.
Weźmy jeszcze jeden przykład zdania i dowiedzmy się, jak spaCy porównuje podobieństwa. Pamiętasz nasz przykład Gry o Tron z poprzednich części? Spróbujemy tego i zobaczymy podobieństwo.
Kod:
GoT_str1 = nlp(u”When will next season of Game of Thrones be releasing?”)
GoT_str2 = nlp(u”Game of Thrones next season release date?”)
GoT_str1.similarity(GoT_str2)
Wyjście:
0,785019122782813
Jak widać na tym przykładzie podobieństwo między obydwoma zdaniami wynosi około 79%, co wystarczy, aby stwierdzić, że oba zdania są dość podobne, co jest prawdą. Może to pomóc nam zaoszczędzić dużo czasu na pisanie niestandardowego kodu podczas tworzenia chatbotów. Dochodzimy więc do faktu, że spaCy daje nam znaczące podobieństwo między dwoma słowami przy użyciu wektorów słów, a nie tylko patrząc na ich pisownię lub alfabet. Weźmiemy bardzo prosty przykład i spróbujemy znaleźć podobieństwo między słowami.
example_doc = nlp(u”car truck google”)
for t1 in example_doc:
for t2 in example_doc:
similarity_perc = int(t1.similarity(t2) * 100)
print “Word {} is {}% similar to word {}”.format(t1.text,
similarity_perc, t2.text)
Wyjście:
Word car is 100% similar to word car
Word car is 71% similar to word truck
Word car is 24% similar to word google
Word truck is 71% similar to word car
Word truck is 100% similar to word truck
Word truck is 36% similar to word google
Word google is 24% similar to word car
Word google is 36% similar to word truck
Word google is 100% similar to word gogle
Znalezienie podobieństwa między słowami lub zdaniami staje się dość ważne, gdy zamierzamy zbudować dowolną aplikację, która jest w ogromnym stopniu zależna od implementacji NLP. Jeśli kiedykolwiek korzystałeś ze StackOverFlow, za każdym razem, gdy próbujemy zadać nowe pytanie, próbuje on wyświetlić listę podobnych pytań zadanych już na platformie. Jest to jeden z najlepszych przykładów, w których pomocne może być znalezienie podobieństwa między dwoma zestawami zdań. Pewność spaCy, że znajdzie podobieństwo między dwoma słowami w oparciu o już wyszkolony model, zależy wyłącznie od rodzaju przyjętego ogólnego założenia. Podczas tworzenia chatbotów znalezienie podobieństw może być bardzo przydatne w następujących sytuacjach:
- Podczas tworzenia chatbotów w celu uzyskania rekomendacji
- Usuwanie duplikatów
- Budowa modułu sprawdzania pisowni
Te rzeczy, których się nauczyliśmy, są naprawdę ważne podczas tworzenia chatbotów, dzięki czemu wiemy, jak analizować dane wejściowe użytkownika, aby miały one sens podczas pisania logiki biznesowej w kodzie.