Jak wytrenować chatbota

10

Chciałem zacząć eksperymentować z siecią neuronową i jako problem z zabawką chciałem wytrenować jedną z czatów, tj. Wdrożyć bota czatującego, takiego jak cleverbot. W każdym razie nie takie sprytne.

Rozejrzałem się za dokumentacją i znalazłem wiele samouczków na temat ogólnych zadań, ale niewiele na ten temat. Ten, który znalazłem, ujawnił wyniki bez wglądu w implementację. Te, które to zrobiły, zrobiły to dość płytkie (na stronie dokumentacji tensorflow na seq2seq brakuje imho).

Teraz czuję, że mogłem mniej więcej zrozumieć tę zasadę, ale nie jestem pewien, a nawet nie jestem pewien, jak zacząć. Wyjaśnię zatem, w jaki sposób poradzę sobie z tym problemem, i chcę uzyskać informację zwrotną na temat tego rozwiązania, mówiąc mi, gdzie się mylę i ewentualnie mam link do szczegółowych wyjaśnień i praktycznej wiedzy na temat tego procesu.

  1. Zestaw danych, którego użyję do tego zadania, to zrzut całej mojej historii czatów na Facebooku i WhatsApp. Nie wiem, jak duży będzie, ale być może wciąż nie jest wystarczająco duży. Językiem docelowym nie jest angielski, dlatego nie wiem, gdzie szybko zebrać znaczące próbki konwersacji.

  2. Z każdego zdania wygeneruję wektor myślowy. Nadal nie wiem jak właściwie; Znalazłem dobry przykład dla word2vec na stronie deeplearning4j, ale nie dla zdań. Zrozumiałem, jak budowane są wektory słów i dlaczego, ale nie mogłem znaleźć wyczerpującego wyjaśnienia dla wektorów zdań.

  3. Używając wektorów myślowych jako danych wejściowych i wyjściowych zamierzam trenować sieć neuronową. Nie wiem, ile warstw powinien mieć, a które muszą to być warstwy pierwsze.

  4. Następnie powinna istnieć inna sieć neuronowa, która jest w stanie przekształcić wektor myślowy w sekwencję znaków tworzących zdanie. Czytam, że powinienem używać dopełnienia, aby nadrobić różne długości zdań, ale brakuje mi sposobu kodowania znaków (czy wystarczą znaki kodowe?).

Totem
źródło

Odpowiedzi:

7

Poleciłbym zacząć od przeczytania tego wpisu na blogu . Prawdopodobnie można kanibalizować kod, aby utworzyć RNN, który przyjmuje jedną instrukcję dialogu, a następnie przesyła odpowiedź na tę instrukcję.

To byłaby łatwa wersja twojego projektu, wszystko bez wektorów słów i wektorów myślowych. Po prostu wpisujesz znaki, więc literówki nie muszą Cię martwić.

Kolejnym bardziej złożonym krokiem byłoby wprowadzenie wektorów słów zamiast znaków. To pozwoli ci uogólnić na słowa, które nie są częścią twoich danych treningowych. I prawdopodobnie jest to tylko niewielka modyfikacja kodu.

Jeśli nalegasz na użycie wektorów myślowych, powinieneś zacząć czytać o tłumaczeniu NN . I prawdopodobnie spróbuj uzyskać wstępnie przeszkoloną sieć enkoderów. Lub przygotuj go sam na dużym korpusie tłumaczeń dla swojego języka.

Z małym zestawem treningowym najlepsze, co możesz zrobić, to najprawdopodobniej ogromne obciążenie, dopóki system nie odtworzy danych treningowych dosłownie. Użycie wektorów słów pozwoli twojemu systemowi na udzielenie tej samej odpowiedzi na „Dzisiaj pokonałem kota”. jak podałeś w danych treningowych do „Wykopałem psa wczoraj”.

Nie jestem pewien, czy wektory zrobią dużą różnicę. Jeśli dekoder w ogóle się nauczy.

BlindKungFuMaster
źródło
Już jakiś czas temu przeczytałem pierwszy artykuł i uważam, że postacie nie są na odpowiednim poziomie abstrakcji. Nie myślałem o pojedynczych wektorach słów, ale wydaje mi się, że jest to również interesujący i mniej skomplikowany sposób. Przeczytam gazetę, po której chyba chyba chciałem ...
Totem
Znalazłem rdzeń bota do użycia ... Ale utknąłem na generowaniu tekstu. ai.stackexchange.com/questions/5963/ ... Zastanawiam się, pomimo różnych wektorów i tempa uczenia się, nadal nie działa tak, jak powinien ... Martwię się, że może to być wada biblioteki, której jestem za pomocą, ale nie sądzę, że byłoby to możliwe w przypadku rozmiaru warstwy 300 ... Czy też ilość wymaganego szkolenia jest związana z rozmiarem warstwy? Każda pomoc będzie mile widziana. Uwaga: używana biblioteka.
FreezePhoenix
0

Zgodnie z koncepcją twojego projektu, na początek chciałbym poprosić cię o zastosowanie technik testowych opartych na testach. Najpierw spróbuj utworzyć bazę danych o mniejszych rozmiarach, której można użyć do obsługi niewielkiej ilości zestawu danych, co może zapewnić pożądaną poprawę.

To powiedziawszy, użyj tej bazy danych, aby utworzyć zorganizowane drzewo zgodne z Twoimi danymi, jako węzłami, więc jeśli bot zacznie generować jakieś informacje zwrotne, z bazy danych, oznaczonej punktami danych z określonego zestawu danych. W ten sposób odpowiedź lub odpowiedź jest sposobem do następnego węzła w drzewie.

Uwaga : Na początek nie używaj całej historii czatów jako całości, ponieważ jest to proste zadanie .. np. zbyt wiele danych wejściowych == Przeregulowanie.

kwintumnia
źródło