"Przetwarzanie języka naturalnego w akcji"
Identyfikator Librowy: 244110
Spis treści
wstęp 15
wprowadzenie 18
o książce 25
podziękowania 27
o autorach 33
o ilustracji na okładce 35
CZĘŚĆ 1 MÓWIĄCE MASZYNY 36
1. Pakiety myśli (przegląd NLP) 38
1.1. Język naturalny a język programowania 39
1.2. Magia 39
1.2.1. Maszyny prowadzące konwersację 40
1.2.2. Matematyka 41
1.3. Zastosowania praktyczne 43
1.4. Język widziany „oczyma” komputera 45
1.4.1. Język zamków 45
1.4.2. Wyrażenia regularne 46
1.4.3. Prosty chatbot 48
1.4.4. Inny sposób 51
1.5. Krótkie spojrzenie na hiperprzestrzeń 55
1.6. Kolejność słów i gramatyka 57
1.7. Potok języka naturalnego chatbota 58
1.8. Szczegóły przetwarzania 61
1.9. IQ języka naturalnego 63
2. Zbuduj swój słownik (tokenizacja słów) 67
2.1. Wyzwania (wprowadzenie do stemmingu) 69
2.2. Tworzenie swojego słownika za pomocą tokenizatora 70
2.2.1. Iloczyn skalarny 79
2.2.2. Pomiar nakładania się wektorów BoW 79
2.2.3. Poprawianie tokenów 80
Jak działają wyrażenia regularne 81
Poprawione wyrażenia regularne do podziału słów 82
2.2.4. Rozszerzenie słownika za pomocą n-gramów 85
Formy skrócone 85
N-gramy 86
Stop listy 89
2.2.5. Normalizacja słownika 92
Ujednolicanie wielkości liter 92
Stemming 94
Lematyzacja 97
Przypadki użycia 99
2.3. Wydźwięk 100
2.3.1. VADER – analizator wydźwięku oparty na regułach 102
2.3.2. Naiwny klasyfikator bayesowski 103
3. Matematyka na słowach (wektory TD-IDF) 108
3.1. Wektor BoW 109
3.2. Wektoryzacja 114
3.2.1. Przestrzenie wektorowe 117
3.3. Prawo Zipfa 122
3.4. Modelowanie tematyczne 124
3.4.1. Powrót Zipfa 127
3.4.2. Ranking trafności 129
3.4.3. Narzędzia 131
3.4.4. Inne możliwości 132
3.4.5. Okapi BM25 133
3.4.6. Co dalej 134
4. Odnajdowanie znaczenia w licznikach słów (analiza semantyczna) 136
4.1. Od liczników słów do wyników dla tematów 138
4.1.1. Wektory TF-IDF i lematyzacja 138
4.1.2. Wektory tematyczne 139
4.1.3. Eksperyment myślowy 140
4.1.4. Algorytm do oceny tematów 145
„Kuzyni” LSA 146
4.1.5. Klasyfikator LDA 146
Inny „kuzyn” 150
4.2. Analiza utajonych własności semantycznych (LSA) 151
4.2.1. Wasz eksperyment myślowy staje się prawdziwy 153
Gra w Mad libs 154
4.3. Rozkład według wartości osobliwej 156
4.3.1. U – lewostronne wektory osobliwe 158
4.3.2. S – wartości osobliwe 159
4.3.3. V T – prawostronne wektory osobliwe 160
4.3.4. Orientacja macierzy SVD 161
4.3.5. Obcinanie tematów 162
4.4. Analiza głównych składowych 163
4.4.1. PCA dla wektorów 3D 165
4.4.2. Przestańmy szaleć i wróćmy do NLP 166
4.4.3. Stosowanie PCA do semantycznej analizy komunikatów SMS 169
4.4.4. Używanie obciętego SVD do analizy semantycznej komunikatu SMS 171
4.4.5. Jak dobrze działa LSA przy klasyfikacji spamu 172
Rozszerzenia LSA i SVD 174
4.5. Ukryta alokacja Dirichleta (LDiA) 175
4.5.1. Idea LDiA 176
4.5.2. Model tematyczny LDiA dla komunikatów SMS 178
4.5.3. LDiA + LDA = klasyfikator spamu 181
4.5.4. Uczciwsze porównanie: 32 tematy LDiA 183
4.6. Odległość i podobieństwo 184
4.7. Sterowanie za pomocą informacji zwrotnej 187
4.7.1. Liniowa analiza dyskryminacyjna 188
4.8. Moc wektorów tematycznych 190
4.8.1. Wyszukiwanie semantyczne 191
4.8.2. Ulepszenia 194
CZĘŚĆ 2 GŁĘBSZE UCZENIE SIĘ (SIECI NEURONOWE) 196
5. Sieci neuronowe krok po kroku (perceptrony i propagacja wsteczna) 198
5.1. Sieci neuronowe – lista składników 199
5.1.1. Perceptron 200
5.1.2. Perceptron numeryczny 200
5.1.3. Zboczenie z drogi spowodowane odchyleniem 201
Neuron w Pythonie 203
Klasa tkwi w sesji 204
Uczenie się logiki to czysta frajda 205
Następny krok 207
Koniec drugiej zimy sztucznej inteligencji 210
Propagacja wsteczna 211
Zróżniczkujmy wszystko 214
5.1.4. Poszusujmy – powierzchnia błędu 216
5.1.5. Z wyciągu prosto na stok 217
5.1.6. Udoskonalmy to nieco 217
5.1.7. Keras: sieci neuronowe w Pythonie 219
5.1.8. Wprzód i w głąb 222
5.1.9. Normalizacja: stylowe wejście 223
6. Wnioskowanie przy użyciu wektorów słów (Word2vec) 225
6.1. Zapytania semantyczne i analogie 226
6.1.1. Pytania o analogię 227
6.2. Wektory słów 228
6.2.1. Wnioskowanie zorientowane wektorowo 232
Jeszcze więcej powodów, by korzystać z wektorów słów 234
6.2.2. Jak obliczać reprezentacje Word2vec 235
Podejście skip-gram 236
Czym jest softmax? 237
W jaki sposób sieć uczy się reprezentacji wektorowej? 238
Odnajdywanie wektorów słów za pomocą algebry liniowej 240
Podejście CBoW 240
Częste bigramy 242
Skip-gram a CBoW. Kiedy korzystać z którego podejścia? 242
Triki obliczeniowe Word2vec 242
Podpróbkowanie często występujących tokenów 243
6.2.3. Jak korzystać z modułu gensim.word2vec 244
Próbkowanie negatywne 244
6.2.4. Jak wygenerować własne reprezentacje wektorów słów 247
Kroki przetwarzania wstępnego 247
Szkolenie dziedzinowego modelu Word2vec 248
6.2.5. Word2vec a GloVe (Global Vectors) 249
6.2.6. fastText 250
6.2.7. Word2vec a LSA 251
Jak korzystać z gotowych modeli fastText 251
6.2.8. Wizualizacja związków między słowami 252
6.2.9. Nienaturalne słowa 259
6.2.10. Doc2vec i podobieństwo dokumentów 260
Jak wyuczyć wektory dokumentów 261
7. Kolejność słów i konwolucyjne sieci neuronowe (CNN) 263
7.1. Uczenie się znaczenia 265
7.2. Zestaw narzędzi 267
7.3. Konwolucyjne sieci neuronowe 268
7.3.1. Elementy składowe 268
7.3.2. Długość kroku 270
7.3.3. Budowa filtra 270
7.3.4. Uzupełnianie 272
7.3.5. Uczenie 273
Potok konwolucyjny 273
7.4. Zaiste, wąskie okna 274
7.4.1. Implementacja w Kerasie: przygotowanie danych 275
7.4.2. Architektura konwolucyjnej sieci neuronowej 282
7.4.3. Warstwa łącząca (pooling) 282
7.4.4. Dropout 285
7.4.5. Wisienka na torcie 286
Dopasowanie (fit) 287
Optymalizacja 287
7.4.6. Czas zabrać się za naukę (trening) 288
7.4.7. Użycie modelu w potoku 290
7.4.8. Gdzie pójdziecie dalej? 291
8. Zapętlone (rekurencyjne) sieci neuronowe (RNN) 294
8.1. Zapamiętywanie za pomocą sieci rekurencyjnych 297
8.1.1. Propagacja wsteczna przez czas 302
8.1.2. Kiedy i co aktualizować? 304
Tl;Dr – Krótka rekapitulacja 304
Czy jednak obchodzi was to, co wyszło z wcześniejszych kroków? 305
8.1.3. Rekapitulacja 306
8.1.4. Zawsze jest jakiś haczyk 307
8.1.5. Rekurencyjne sieci neuronowe z Kerasem 307
8.2. Składanie w całość 312
8.3. Nauczmy się czegoś o przeszłości 314
8.4. Hiperparametry 314
8.5. Przewidywanie 318
8.5.1. Stanowość 319
8.5.2. Ulica dwukierunkowa 319
8.5.3. Co to takiego? 321
9. Lepsza pamięć dzięki sieciom LSTM 323
9.1. LSTM 325
9.1.1. Propagacja wsteczna przez czas 334
W praktyce 334
9.1.2. Próba ognia 336
9.1.3. Brudne dane 338
9.1.4. Powrót do brudnych danych 341
9.1.5. Słowa są trudne. Litery są prostsze 342
9.1.6. Kolej na rozmowę 347
9.1.7. Zwrot ku klarownej mowie 349
9.1.8. Jak mówić i co mówić 357
9.1.9. Inne rodzaje pamięci 357
Zwiększanie użyteczności generatora 357
9.1.10. Idąc głębiej 358
10. Modele ciąg-ciąg i uwaga (attention) 361
10.1. Architektura koder-dekoder 362
10.1.1. Dekodowanie myśli 363
10.1.2. Wygląda znajomo? 365
10.1.3. Konwersacja ciąg-ciąg 367
10.1.4. Powtórzenie LSTM 367
10.2. Składanie potoku ciąg-ciąg 369
10.2.1. Przygotowanie naszego zbioru danych do szkolenia ciąg-ciąg 369
10.2.2. Model ciąg-ciąg w Kerasie 370
10.2.3. Koder ciągów 371
10.2.4. Koder myśli 372
10.2.5. Składanie sieci ciąg-ciąg 373
10.3. Szkolenie sieci ciąg-ciąg 374
10.3.1. Generowanie ciągów wyjściowych 375
10.4. Budowanie chatbota przy użyciu sieci ciąg-ciąg 376
10.4.1. Przygotowanie korpusu do szkolenia 377
10.4.2. Budowanie słownika znaków 378
10.4.3. Generowanie zbiorów treningowych zakodowanych metodą 1 z n 378
10.4.4. Uczenie chatbota ciąg-ciąg 379
10.4.5. Składanie modelu do generowania ciągów 380
10.4.6. Przewidywanie ciągu 380
10.4.7. Generowanie odpowiedzi 381
10.5. Ulepszenia 382
10.4.8. Rozmowa z waszym chatbotem 382
10.5.1. Redukcja złożoności treningu za pomocą sortowania danych (bucketing) 382
10.5.2. Uwaga (attention) 383
10.6. W świecie rzeczywistym 385
CZĘŚĆ 3 PRZEJŚCIE DO RZECZYWISTOŚCI (PRAWDZIWE PROBLEMY NLP) 388
11. Ekstrakcja informacji (rozpoznawanie jednostek nazewniczych i odpowiadanie na pytania) 390
11.1. Jednostki nazewnicze i relacje 391
11.1.1. Baza wiedzy 391
11.2. Regularne wzorce 394
11.1.2. Ekstrakcja informacji 394
11.2.1. Wyrażenia regularne 395
11.2.2. Ekstrakcja informacji jako ekstrakcja cech z wykorzystaniem uczenia się maszyn 396
11.3. Informacje warte wyodrębnienia 398
11.3.1. Ekstrakcja lokalizacji GPS 398
11.3.2. Ekstrakcja dat 399
11.4. Wyodrębnianie relacji 404
11.4.1. Znakowanie częściami mowy 405
11.4.2. Normalizacja jednostek nazewniczych 409
11.4.3. Normalizacja i wyodrębnianie relacji 410
11.4.4. Wzorce słów 410
11.4.5. Segmentacja 411
11.4.6. Dlaczego split('.!?') nie będzie działać? 412
Segmentacja na zdania 412
11.4.7. Segmentacja na zdania za pomocą wyrażeń regularnych 413
11.5. W prawdziwym świecie 415
12. Pogaduszki (silniki dialogowe) 417
12.1. Umiejętności językowe 418
12.1.1. Nowoczesne podejścia 419
Systemy dialogowe odpowiadające na pytania 421
Wirtualni asystenci 421
Chatboty konwersacyjne 422
Chatboty marketingowe 423
Zarządzanie społecznością 423
Obsługa klienta 424
12.1.2. Podejście hybrydowe 425
Terapia 425
12.2. Podejście polegające na dopasowaniu do wzorców 426
12.2.1. Chatbot oparty na dopasowaniu do wzorca i AIML 427
AIML 1.0 428
Interpreter AIML w Pythonie 429
12.2.2. Sieciowe spojrzenie na dopasowanie do wzorców 434
12.3. Oparcie na wiedzy 435
12.4. Wyszukiwanie 437
12.4.1. Problem kontekstu 438
12.4.2. Przykładowy chatbot oparty na wyszukiwaniu danych 439
12.4.3. Chatbot oparty na wyszukiwaniu 443
12.5. Modele generatywne 445
12.5.1. Czat na temat NLPIA 446
12.5.2. Zalety i wady każdego podejścia 448
12.6. Napęd na cztery koła 449
12.6.1. Will osiąga sukces 449
Hello WILL 449
Instalowanie Willa 449
12.7. Proces projektowania 450
12.8. Sztuczki 453
12.8.1. Zadawanie pytań z przewidywalnymi odpowiedziami 453
12.8.2. Bycie zabawnym 454
12.8.3. Gdy wszystko inne zawiedzie, trzeba wyszukać 454
12.8.4. Bycie popularnym 454
12.9. W świecie rzeczywistym 455
12.8.5. Być łącznikiem 455
12.8.6. Stawanie się emocjonalnym 455
13. Skalowanie (optymalizacja, zrównoleglanie i przetwarzanie wsadowe) 457
13.1. Zbyt wiele dobrego (danych) 458
13.2. Optymalizowanie algorytmów NLP 458
13.2.1. Indeksowanie 459
13.2.2. Zaawansowane indeksowanie 460
13.2.3. Zaawansowane indeksowanie za pomocą Annoy 462
13.2.4. Po co w ogóle stosować indeksy przybliżone? 467
13.2.5. Obejście indeksowania: dyskretyzacja 468
13.3. Algorytmy ze stałą pamięcią RAM 469
13.3.1. Gensim 469
13.3.2. Obliczenia graficzne 470
13.4. Zrównoleglanie waszych obliczeń NLP 471
13.4.1. Trenowanie modeli NLP na procesorach graficznych (GPU) 471
13.4.2. Wynajem a kupno 473
13.4.3. Opcje wynajmu GPU 473
13.4.4. Jednostki przetwarzania tensorowego 474
13.5. Zmniejszanie zużycia pamięci podczas trenowania modeli 475
13.6. Uzyskiwanie wglądu w model za pomocą TensorBoard 477
13.6.1. Jak wizualizować zanurzenia słów 478
dodatek A Nasze narzędzia NLP 482
dodatek B Swawolny Python i wyrażenia regularne 490
dodatek C Wektory i macierze (podstawy algebry liniowej) 496
dodatek D Narzędzia i techniki uczenia się maszyn 502
dodatek E Ustawianie własnego AWS GPU 516
dodatek F Mieszanie wrażliwe na lokalizację (LSH) 530
źródła 538
słownik 548
indeks 555
posłowie do wydania polskiego 570