Czy chatbota można złamać?

Czy chatbota można złamać?

Cześć, po krótkiej przerwie wracam ponownie z ciekawym zagadnieniem, na które natrafiłem przeglądając publikacje, poświęcone chatbotom – Czy chatbota można złamać?

W jednym z tekstów autorzy poruszają kwestię łamania botów, w takim sensie, aby odpowiadały w sposób, w jaki chcemy.

Pamiętacie historię chatbota, stworzonego przez Microsoft i udostępnionego na Twitterze? Chatbot o imieniu Tay miał uczyć się od użytkowników i się nauczył, ale niekoniecznie poprawnych politycznie zachowań – m.in. stał się rasistą.

Tego typu zachowanie to tylko jeden z problemów, jakie stoją przed twórcami wirtualnych asystentów.

Kolejnym z nich zajęli się autorzy publikacji o tytule „Say What I Want: Towards the Dark Side of Neural Dialogue Models”. Założyli sobie, że stworzą model, który odpowie im na pytanie, o co spytać bota, aby dostać w odpowiedzi wybraną odpowiedź. Jak to zrobili? Postaram się Wam opisać w tym wpisie.

Dodać należy, że tego typu łamanie chatbota, dotyczy botów opartych na modelach NLP i uczonych za pomocą tzw. deep learning’u, które generują odpowiedzi na podstawie zapytań. Nie są więc tu brane pod uwagę boty oparte na regułach, czy wyrażeniach regularnych.

Jaka jest różnica między nimi?

Tradycyjne boty, zazwyczaj są uczone w sposób manualny – przypisujemy podanym zapytaniom, jedną z możliwych odpowiedzi znajdujących się w bazie danych. Problem pojawia się, gdy zapytania nie ma w naszej bazie danych. Wówczas nie jest w stanie odpowiedzieć użytkownikowi, gdyż nie posiada wiedzy, jak ma to zrobić.

Boty oparte na modelach deep learningowych, są uczone na dużej bazie par fraza – odpowiedź za pomocą technik, które nie zamykają bota na podany zbiór uczący, ale pozwalają dostarczać odpowiedzi nawet jeśli zadana fraza nie była dostarczona do zbioru uczącego. Są one co do zasady „inteligentniejsze”, nie działają w sposób schematyczny, ustalony, lecz na podstawie nauczonych tekstów i kontekstu generują odpowiedzi dynamicznie.

Założenia

Eksperyment, który przeprowadzili autorzy publikacji opiera się na następujących założeniach:

  • Istnieje nauczony model (D), który na podane zapytania (I), generuje użytkownikowi odpowiedź (O). Autorzy traktują ten model jak czarną skrzynkę (black-box), czyli nie interesuje ich w jaki sposób jest model zbudowany i jakie przyjmuje parametry, ważne są tylko odpowiedzi, jakie generuje na zadane wejściowe frazy.
  • Celem jest dla podanych odpowiedzi (O*) znalezienie takiej frazy (I), która po wprowadzeniu do modelu D, wygeneruje odpowiedź O, gdzie O = O* lub O ~ O*. W prostych słowach oznacza to, że odpowiedzi powinny być takie same lub przynajmniej semantycznie* podobne.
  • Aby osiągnąć cel zbudowano agenta (Reverse Dialog Generator), którego przyjmuje potencjalne odpowiedzi (O*) i w odpowiedzi zwraca frazy (I), które po wprowadzeniu do modelu D, powinny dać odpowiedzi podobne do oczekiwanych
  Wyrażenia podobne semantycznie to takie, których znaczenie jest podobne, ale nie koniecznie są zbudowane z dokładnie takich samych słów  

Na rysunku poniżej, zapożyczonym z publikacji, znajdziecie poglądowy schemat.

Czy chatbota można złamać?
https://arxiv.org/pdf/1909.06044.pdf

Testowany model D

W prezentowanej pracy, autorzy zastosowali technikę zwaną seq2seq (sequence to sequence), która umożliwia zamianę jednego ciągu słów w drugi (np. może być wykorzystywane przy tłumaczeniu tekstów).

Więcej o technice seq2seq postaram się napisać w jednym z następnych artkułów.

W skrócie taki model składa się z dwóch elementów:

  • enkoder (encoder) – który przetwarza, słowo po słowie, wejściową sekwencję i w efekcie zwraca zakodowaną wartość
  • dekoder (decoder) – rezultat enkodera (zakodowana sekwencja) stanowi wejście do dekodera, który generuje odpowiedź, słowo po słowie

Nauczony tą techniką model, zostaje „zamrożony” i od tej pory autorzy traktują go jak czarną skrzynkę (black box), jedynie wykorzystując to w jaki sposób został nauczony ( input – output ).

Reverse Dialog Generator

Przejdźmy teraz do zaproponowanego modelu, którego zadaniem jest znalezienie fraz (I), które spowodują wygenerowanie podanych odpowiedzi (O).

Przypomnę założenia. Mamy:
D – model, który chcemy „złamać”
I – input, frazy wejściowe, które mamy znaleźć, powodujące wygenerowanie zadanej odpowiedzi
O* – odpowiedź, którą chcemy uzyskać
O – odpowiedź, która została wygenerowana przed model D

Mając więc takie założenia, problem jaki autorzy chcieli rozwiązać to znalezienie optymalnej frazy wejściowej, takiej, że wygenerowana odpowiedź będzie podobna do oczekiwanej odpowiedzi.

Inaczej można to zapisać wzorem:
O* ~ O = D(I)

Aby rozwiązać ten problem, autorzy zastosowali tu tzw. uczenie przez wzmacnianie (ang. Reinforcement learning). *

 Reinforcement learning to podejście, które możemy określić w prostych słowach, uczeniem metodą prób i błędów. Oparte jest na psychologii behawioralnej i polega na tym, że model po wykonaniu pewnej akcji, wzmacniany jest sygnałem nagrody lub kary, co pozwala algorytmowi określić kolejne kroki algorytmu.  

Agent , który nazwano Reverse Dialog Generator jest trenowany, w taki sposób, aby uzyskać I dla oczekiwanej odpowiedzi O*. Celem algorytmu jest otrzymać jak największą nagrodę, a nagrodą jest podobieństwo do odpowiedzi O, którą pierwotny model wygeneruje na frazę I.

Tak wyglądają założenia – a w jaki sposób trenowano modele? Tego dowiecie się z kolejnej sekcji

Trening

Tak jak wspomniałem wcześniej, łamany model D, nauczony został duża ilością danych z Twittera, techniką seq2seq. (2.5 miliona par fraza – odpowiedź). Model ten jest w kolejntch krokach traktowany, jako czarna skrzynka (black-box), czyli nie interesuje nas jego implementacja, tylko odpowiedzi wygenerowane na zadane frazy wejściowe.

Teraz kolej na model , czyli rozwiązanie zdanego problemu. Tak jak wspomniałem wcześniej, jest on uczony metodą uczenia przez wzmacnianie.

Polega to na tym, że podając mu oczekiwaną odpowiedź O*, model generuję nam potencjalną frazę wejściową I, którą następnie wprowadzamy do modelu D, otrzymując odpowiedź O. Agent w rezultacie otrzymuje nagrodę, którą jest podobieństwo między O i O*. W kolejnych krokach model aktualizuje się tak, aby zmaksymalizować otrzymywaną nagrodę.

W jaki sposób określono podobieństwo dwóch fraz?

W prostych słowach, zastosowano tu technikę tzw. word embedding, czyli kodowanie zdań do postaci wektorowej, co pozwala, porównać ich znaczenie, a nie tylko zgodność słów.

Po dokładny sposób wyliczania takiego podobieństwa, odsyłam do opisywanej publikacji, ponieważ jego opis jest mocno techniczny, a tego chciałem uniknąć w tej publikacji.

Eksperyment

Kluczowym w tym eksperymencie jest model Gθ, którego uczenie przebiegało w 3 fazach:

  • Pretrening (pary pytanie-odpowiedź pobrane z Twittera i przepuszczone przez model D)
  • Uczenie przez wzmacnianie
  • Testowanie

Zbiór testowy odpowiedzi O, na których przeprowadzano eksperyment wybrano następującym kluczem:

  • wprowadzono 10k fraz do modelu D i z odpowiedzi wybrano losowo 200 z nich (Generated target)
  • pobrano 200 losowo wybranych odpowiedzi z Twittera (bez wprowadzania do modelu D) (Real target)

Wyniki? Efekt?

Wszystko zależy oczywiście od ustalonego progu (threshold), dla którego uznajemy, że odpowiedzi są podobne. Przykładowo dla progu = 0.5, success rate wynosi ~ 0.9, więc całkiem niezły wynik.

Dla ciekawskich wrzucam wyniki eksperymentu w postaci wykresów:

Czy chatbota można złamać?

Podsumowanie

Podsumowując autorzy publikacji dowiedli, że istnieje możliwość złamania chatbota, czyli wygenerowania takiej frazy wejściowej, aby w odpowiedzi na nią chatbot odpowiedział ustaloną odpowiedzią. Jest to na pewno ciekawostka, ale też rzuca pewien cień na sztuczną inteligencję, która wykorzystywana jest w chatbotach i może stanowić kolejny rodzaj ataku, jeśli boty wejdą na stałe do naszej społeczności.

Na koniec chciałem Wam pokazać tabelkę z wygenerowanymi frazami wejściowymi oraz porównaniem odpowiedzi (wymaganej oraz otrzymanej).

Widać tu Inputy, wygenerowane przez stworzony model, a w drugiej kolumnie odpowiedzi, które chcieliśmy otrzymać (Target) i te, które otrzymaliśmy (Output).

Jasne, że to tylko reprezentatywny wycinek całego eksperymentu, ale i tak robi wrażenie.