"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