Reprezentacja danych podczas nauki chatbota - Bag of words

LIPIEC 18, 2017

634 SŁÓW

5 MINUTY

Co świadczy o jakości chatbota? Pierwszym co przychodzi na myśl jest zapewne poziom interakcji z użytkownikiem. Jak wiele taki bot jest w stanie zrozumieć? Czy to co pisze dobrze wpasowuje się w kontekst rozmowy i czy jego słowa stanowią zadowalającą odpowiedź na pytanie rozmówcy?

Jak osiągnąć taki poziom zrozumienia?

W języku polskim mamy ponad 140 000 słów. Trudno nawet oszacować, jak dużo poprawnych stylistycznie zdań można ułożyć wykorzystując tak bogaty zasób słownictwa. Nasuwa się pytanie, w jaki sposób nasz bot miałby nauczyć się obsługi tak dużej liczby ścieżek? Sprawdzenie każdej możliwości jest przecież niewykonalne! W takich sytuacjach z pomocą przychodzi Machine Learning. Przyjrzyjmy się jednej z najpopularniejszych i najprostszych metod przetwarzania języka naturalnego o nazwie bag of words.

O co chodzi?

Wykorzystując model worka słów musimy zacząć od… worka słów. Będziemy chcieli wybrać pewien podzbiór słów języka polskiego, który nasz algorytm będzie wykorzystywać podczas klasyfikacji. Dlaczego podzbiór? Korzystając z całego zasobu słownictwa narażamy się na sytuację, gdzie nauka modelu będzie trwać dniami, czy nawet tygodniami, a przecież jaką mamy szansę, że potencjalny użytkownik zechce zapytać bota o kontrawencjonalizacje w prawie polskim?

Nie zawsze jednak słowa, które często występują w zdaniach, wnoszą wiele do nauki modelu. Istnieje pojęcie stop listy (ang. stop words), czyli pewnej grupy słów o małym znaczeniu, które nie pomagają w identyfikacji intencji rozmówcy. Przykładową stop listę dla języka polskiego możemy znaleźć na tutaj.

Wprowadziliśmy odrobinę terminologii, ale jak to wygląda od strony praktycznej? Załóżmy, że rozmówca zapyta naszego chatbota: Jaka będzie jutro pogoda w Krakowie?

Dla uproszczenia przyjmijmy, że nasz worek słów i stop lista wyglądają następująco:

Słowa: “jaka”, “będzie” oraz “w” zostają odfiltrowane, ponieważ znalazły się na naszej stop liście. Następnie tworzymy wektor liczby wystąpień poszczególnych słów, które należą do naszego worka słów.

W efekcie, w polach odpowiadających wyrazom “pogoda” i “jutro”, wartość wzrosła o jeden. Na tym etapie zwróćmy uwagę na fakt, że słowo “Krakowie” nie zostało dopasowane, a przecież wnosi wiele do zadanego pytania. To znaczy, że nasz worek słów nie jest doskonały. Aby zniwelować błąd, moglibyśmy zmienić sposób tworzenia wektora - zamiast inkrementować liczbę wystąpień w przypadku, gdy dane słowo dokładnie zgadza się z tym w worku, możemy zwiększać tą liczbę za każdym razem, gdy słowa pokrywają się np. w 75%. Rozwiązanie takie spowalnia jednak cały algorytm i może prowadzić do błędów w przypadku, gdy dwa słowa o różnych znaczeniach są do siebie bardzo podobne. Co zatem innego możemy zrobić, aby uratować sytuację? Czekać. Nasz bag of words nigdy nie będzie idealny. Musimy obserwować jakie pytania zadają użytkownicy, wprowadzając kolejne korekty, poszerzając worek i coraz lepiej trenować model.

Przedstawiony sposób zastosowania modelu worka słów został uproszczony w celu przekazania idei. W realnej implementacji powinniśmy dokonać więcej preprocessingu. Warto na przykład z analizowanego tekstu odfiltrować polskie znaki, czy też przekształcić wszystkie litery alfabetu na małe.

Mamy wektor i co dalej?

Bag of words stanowi sposób reprezentacji danych tekstowych tak, aby w dalszym etapie można było je łatwiej analizować, na przykład “karmiąc” nimi sieć neuronową. Trenowanie samej sieci to obszerny temat, do którego z pewnością powrócimy w kolejnych wpisach.

Rozszerzenie modelu: N-gram

Jednym z uproszczeń modelu bag of words jest całkowite pominięcie gramatyki zdania. Algorytm liczy jedynie liczbę wystąpień poszczególnych słów, nie zwracając uwagi na kolejność. W celu chociaż częściowego uwzględnienia tego czynnika, powstały rozszerzenia tego modelu: N-gram. W przypadku 2-gramu nasz worek nie będzie już workiem słów, a workiem par słów. Warto jednak zaznaczyć, iż taki zabieg powoduje, że aby wystarczająco wytrenować nasz model potrzebujemy dużo więcej danych. Dlatego też proste modele często dają lepsze rezultaty od tych bardziej złożonych. Kluczem jest dobór odpowiedniego narzędzia do danego problemu.

Podsumowanie

Przybliżyłem dzisiaj jeden z klasycznych sposobów przetwarzania danych tekstowych. Mimo swoich wad stanowi on dobrą podstawę do dalszej pracy. W kolejnych wpisach będę opisywał inne metody i podejścia w budowaniu inteligentnych chatbotów.