Co to jest osadzanie słów?
Word Embedding to rodzaj reprezentacji słów, który umożliwia zrozumienie słów o podobnym znaczeniu przez algorytmy uczenia maszynowego. Z technicznego punktu widzenia jest to mapowanie słów na wektory liczb rzeczywistych przy użyciu sieci neuronowej, modelu probabilistycznego lub redukcji wymiarów na macierzy współwystępowania słów. Jest to modelowanie języka i technika uczenia się cech. Osadzanie słów to sposób wykonywania mapowania za pomocą sieci neuronowej. Dostępne są różne modele osadzania słów, takie jak word2vec (Google), Glove (Stanford) i najszybszy (Facebook).
Osadzanie słów jest również nazywane rozproszonym modelem semantycznym lub rozproszoną reprezentacją lub semantyczną przestrzenią wektorową lub modelem przestrzeni wektorowej. Czytając te nazwy, natrafisz na słowo semantyczne, które oznacza kategoryzowanie podobnych słów razem. Na przykład owoce takie jak jabłko, mango, banan powinny być umieszczone blisko siebie, podczas gdy książki będą daleko od tych słów. W szerszym znaczeniu, osadzanie słów stworzy wektor owoców, który zostanie umieszczony z dala od wektorowej reprezentacji książek.
W tym samouczku dowiesz się
- Co to jest osadzanie słów?
- Gdzie jest używane osadzanie słów?
- Co to jest Word2vec?
- Co robi word2vec?
- Dlaczego Word2vec?
- Architektura Word2vec
- Ciągły worek słów.
- Model Skip-Gram
- Relacja między Word2vec i NLTK
- Aktywatory i Word2Vec
- Co to jest Gensim?
- Kod Implementacja word2vec przy użyciu Gensim
Gdzie jest używane osadzanie słów?
Osadzanie tekstu pomaga w generowaniu funkcji, grupowaniu dokumentów, klasyfikacji tekstu i zadaniach przetwarzania języka naturalnego. Wymieńmy je i omówmy każdą z tych aplikacji.
- Oblicz podobne słowa: osadzanie słów służy do sugerowania słów podobnych do słowa poddawanego modelowi predykcji. Wraz z tym sugeruje również odmienne słowa, a także najpopularniejsze słowa.
- Utwórz grupę powiązanych słów: Służy do grupowania semantycznego, które grupuje razem rzeczy o podobnej charakterystyce i różniące się od siebie.
- Funkcja klasyfikacji tekstu: tekst jest odwzorowywany na tablice wektorów, które są podawane do modelu w celu uczenia, a także predykcji. Modele klasyfikatorów oparte na tekście nie mogą być uczone na łańcuchu, więc spowoduje to przekonwertowanie tekstu na formę możliwą do nauczenia przez maszynę. Dalsze cechy budowania pomocy semantycznej w klasyfikacji opartej na tekście.
- Grupowanie dokumentów to kolejna aplikacja, w której osadzanie słów jest szeroko stosowane
- Przetwarzanie języka naturalnego: istnieje wiele aplikacji, w których osadzanie słów jest przydatne i wygrywa z fazami wyodrębniania cech, takimi jak części znakowania mowy, analiza sentymentalna i analiza składniowa.
Teraz mamy pewną wiedzę na temat osadzania słów. Różne modele rzucają trochę światła na implementację osadzania słów. Cały ten samouczek skupia się na jednym z modeli (word2vec).
Co to jest Word2vec?
Word2vec to technika / model do tworzenia osadzania słów w celu lepszej reprezentacji słów. Obejmuje dużą liczbę precyzyjnych związków składniowych i semantycznych. Jest to płytka dwuwarstwowa sieć neuronowa. Zanim przejdziesz dalej, zobacz różnicę między płytką i głęboką siecią neuronową:
Płytka sieć neuronowa składa się z jedynej ukrytej warstwy między wejściem a wyjściem, podczas gdy głęboka sieć neuronowa zawiera wiele ukrytych warstw między wejściem a wyjściem. Wejście jest poddawane węzłom, podczas gdy warstwa ukryta, podobnie jak warstwa wyjściowa, zawiera neurony.
Rys.: Płytkie i głębokie uczenie się
word2vec jest siecią dwuwarstwową, w której na wejściu znajduje się jedna ukryta warstwa i na wyjściu.
Word2vec został opracowany przez grupę naukowców pod kierownictwem Tomasa Mikolova w Google. Word2vec jest lepszym i wydajniejszym niż utajony model analizy semantycznej.
Co robi word2vec?
Word2vec reprezentuje słowa w reprezentacji przestrzeni wektorowej. Słowa są przedstawiane w postaci wektorów, a ich rozmieszczenie odbywa się w taki sposób, że podobne słowa znaczeniowe pojawiają się razem, a odmienne słowa znajdują się daleko. Nazywa się to również relacją semantyczną. Sieci neuronowe nie rozumieją tekstu, zamiast tego rozumieją tylko liczby. Osadzanie w programie Word umożliwia konwersję tekstu na wektor numeryczny.
Word2vec rekonstruuje kontekst językowy słów. Zanim przejdziemy dalej, zrozumiemy, czym jest kontekst językowy? W ogólnym scenariuszu życia, kiedy mówimy lub piszemy, aby się komunikować, inni ludzie próbują dowiedzieć się, jaki jest cel wyroku. Na przykład „Jaka jest temperatura w Indiach”, w tym przypadku użytkownik chce poznać „temperaturę Indii”, czyli kontekst. Krótko mówiąc, głównym celem zdania jest kontekst. Słowo lub zdanie otaczające język mówiony lub pisany (ujawnienie) pomaga w określeniu znaczenia kontekstu. Word2vec uczy się wektorowej reprezentacji słów poprzez konteksty.
Dlaczego Word2vec?
Przed osadzaniem w programie Word
Ważne jest, aby wiedzieć, które podejście jest używane przed osadzaniem słów i jakie są jego wady, a następnie przejdziemy do tematu, w jaki sposób wady są przezwyciężane przez osadzanie Worda przy użyciu podejścia word2vec. Na koniec pokażemy, jak działa word2vec, ponieważ ważne jest, aby zrozumieć, że działa.
Podejście do ukrytej analizy semantycznej
To podejście zostało zastosowane przed osadzaniem słów. Użył koncepcji worka słów, w którym słowa są reprezentowane w postaci zakodowanych wektorów. Jest to rzadka reprezentacja wektorowa, w której wymiar jest równy rozmiarowi słownictwa. Jeśli słowo występuje w słowniku, jest liczone, w przeciwnym razie nie. Aby dowiedzieć się więcej, zapoznaj się z poniższym programem.
from sklearn.feature_extraction.text import CountVectorizervectorizer=CountVectorizer()data_corpus=["guru99 is the best sitefor online tutorials. I love to visit guru99."]vocabulary=vectorizer.fit(data_corpus)X= vectorizer.transform(data_corpus)print(X.toarray())print(vocabulary.get_feature_names())
Wynik:
[[1 2 1 1 1 1 1 1 1 1]]
[u'best', u'guru99', u'is', u'love', u'online', u'sitefor', u'the', u'to', u'tutorials', u'visit']
Objaśnienie kodu
- CountVectorizer to moduł, który służy do przechowywania słownictwa na podstawie dopasowania do niego słów. Jest to importowane ze sklearn
- Utwórz obiekt za pomocą klasy CountVectorizer.
- Zapisz dane na liście, która ma zostać dopasowana w CountVectorizer.
- Dane są dopasowywane do obiektu utworzonego z klasy CountVectorizer.
- Zastosuj podejście oparte na słowach, aby policzyć słowa w danych przy użyciu słownictwa. Jeśli słowo lub token nie jest dostępne w słowniku, to taka pozycja indeksu jest ustawiana na zero.
- Zmienna w linii 5, czyli x, jest konwertowana na tablicę (metoda dostępna dla x). Zapewni to liczbę każdego tokena w zdaniu lub liście podanej w wierszu 3.
- Spowoduje to wyświetlenie funkcji, które są częścią słownika, gdy jest dopasowany przy użyciu danych w wierszu 4.
W podejściu semantycznym utajonym wiersz reprezentuje unikatowe słowa, podczas gdy kolumna reprezentuje liczbę razy, kiedy to słowo pojawia się w dokumencie. Jest to reprezentacja słów w postaci matrycy dokumentu. Częstotliwość odwrotna częstotliwości dokumentu (TFIDF) termin-częstotliwość służy do zliczania częstotliwości słów w dokumencie, która jest częstotliwością terminu w dokumencie / częstotliwości terminu w całym korpusie.
Wada metody Bag of Words
- Ignoruje kolejność słów, na przykład to jest złe = to jest złe.
- Ignoruje kontekst słów. Załóżmy, że jeśli napiszę zdanie „On kochał książki. Edukację najlepiej znaleźć w książkach”. Stworzyłoby to dwa wektory, jeden dla „Kochał książki”, a drugi dla „Edukacji najlepiej jest znaleźć w książkach”. Traktowałby oba z nich ortogonalnie, co czyni je niezależnymi, ale w rzeczywistości są one ze sobą powiązane
Aby przezwyciężyć te ograniczenia, opracowano osadzanie słów, a word2vec jest podejściem do ich implementacji.
Jak działa Word2vec?
Word2vec uczy się słowa, przewidując otaczający go kontekst. Na przykład weźmy słowo „On kocha piłkę nożną”.
Chcemy obliczyć wartość word2vec dla słowa: kocha.
Przypuszczać
loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.
Word kocha przesuwać się po każdym słowie w korpusie. Kodowana jest zarówno syntaktyczna, jak i semantyczna relacja między słowami. Pomaga to w wyszukiwaniu podobnych i analogicznych słów.
Obliczane są wszystkie losowe cechy słowa kocha . Te cechy są zmieniane lub aktualizowane w odniesieniu do słów sąsiednich lub kontekstowych za pomocą metody propagacji wstecznej.
Innym sposobem uczenia się jest to, że jeśli kontekst dwóch słów jest podobny lub dwa słowa mają podobne cechy, to takie słowa są ze sobą powiązane.
Architektura Word2vec
Istnieją dwie architektury używane przez word2vec
- Ciągły worek słów (CBOW)
- pomiń gram
Zanim przejdziemy dalej, omówmy, dlaczego te architektury lub modele są ważne z punktu widzenia reprezentacji słów. Uczenie się reprezentacji słów jest zasadniczo nienadzorowane, ale cele / etykiety są potrzebne do trenowania modelu. Skip-gram i CBOW konwertują nienadzorowaną reprezentację na nadzorowaną formę do treningu modelowego.
W CBOW bieżące słowo jest przewidywane przy użyciu okna otaczających okien kontekstowych. Na przykład, jeśli w i-1 , w i-2 , w i + 1 , w i + 2 zostaną podane słowa lub kontekst, model ten zapewni w i
Skip-Gram wykonuje odwrotność CBOW, co oznacza, że przewiduje daną sekwencję lub kontekst na podstawie słowa. Możesz odwrócić przykład, aby to zrozumieć. Jeśli podano w i , to przewiduje kontekst lub w i-1 , w i-2 , w i + 1 , w i + 2.
Word2vec zapewnia opcję wyboru między CBOW (ciągły worek słów) i skim-gram. Takie parametry są podawane podczas uczenia modelu. Można mieć możliwość korzystania z próbkowania negatywnego lub hierarchicznej warstwy softmax.
Ciągły worek słów.
Narysujmy prosty diagram, aby zrozumieć ciągły worek architektury słów.
Rysunek Ciągły pakiet Word Architecture
Obliczmy równania matematycznie. Załóżmy, że V to rozmiar słownictwa, a N to rozmiar ukrytej warstwy. Wejście definiuje się jako {x i-1 , x i-2, x i + 1, x i + 2 }. Macierz wag otrzymujemy mnożąc V * N. Inną macierz otrzymujemy mnożąc wektor wejściowy przez macierz wag. Można to również zrozumieć za pomocą następującego równania.
h = xi t W
gdzie xi t ∧ W są odpowiednio wektorem wejściowym i macierzą wag,
Aby obliczyć dopasowanie między kontekstem a następnym słowem, zapoznaj się z poniższym równaniem
u = przewidywana reprezentacja * h
gdzie przewidywana reprezentacja jest uzyskiwana z modelu∧h w powyższym równaniu.
Model Skip-Gram
Podejście Skip-Grama służy do przewidywania zdania dla danego słowa wejściowego. Aby lepiej to zrozumieć, narysujmy diagram.
Rysunek Skip-Gram Model
Można to traktować jako odwrotność modelu ciągłego zbioru słów, w którym danymi wejściowymi jest słowo, a model zapewnia kontekst lub sekwencję. Możemy również wywnioskować, że cel jest podawany do warstwy wejściowej, a wyjściowa jest replikowana wiele razy, aby pomieścić wybraną liczbę słów kontekstu. Wektor błędu z całej warstwy wyjściowej jest sumowany w celu dostosowania wag za pomocą metody wstecznej propagacji.
Który model wybrać?
CBOW jest kilka razy szybsze niż pomijanie gramów i zapewnia lepszą częstotliwość dla częstych słów, podczas gdy pomijanie gramów wymaga niewielkiej ilości danych treningowych i reprezentuje nawet rzadkie słowa lub frazy.
Relacja między Word2vec i NLTK
NLTK to zestaw narzędzi języka naturalnego. Służy do wstępnego przetwarzania tekstu. Można wykonywać różne operacje, takie jak tagowanie części mowy, lematyzacja, wyprowadzanie słów, usuwanie słów zatrzymanych, usuwanie rzadkich lub najmniej używanych słów. Pomaga w czyszczeniu tekstu, a także pomaga w przygotowaniu cech z efektywnych słów. Z drugiej strony słowo2vec jest używane do dopasowywania semantycznego (ściśle ze sobą powiązane elementy) i składniowego (sekwencji). Używając word2vec, można znaleźć podobne słowa, odmienne słowa, redukcję wymiarową i wiele innych. Inną ważną cechą word2vec jest konwersja bardziej wymiarowej reprezentacji tekstu do niższych wymiarów wektorów.
Gdzie używać NLTK i Word2vec?
Jeśli ktoś musi wykonać pewne zadania ogólnego przeznaczenia, jak wspomniano powyżej, takie jak tokenizacja, tagowanie POS i parsowanie, należy użyć NLTK, podczas gdy do przewidywania słów zgodnie z jakimś kontekstem, modelowaniem tematu lub podobieństwem dokumentów należy użyć Word2vec.
Relacja NLTK i Word2vec za pomocą kodu
NLTK i Word2vec mogą być używane razem, aby znaleźć podobną reprezentację słów lub dopasowanie składniowe. Zestaw narzędzi NLTK może być używany do ładowania wielu pakietów, które są dostarczane z NLTK, a model można utworzyć za pomocą word2vec. Można go następnie przetestować na słowach w czasie rzeczywistym. Zobaczmy połączenie obu w poniższym kodzie. Przed dalszym przetwarzaniem zapoznaj się z korpusami, które zapewnia NLTK. Możesz pobrać za pomocą polecenia
nltk(nltk.download('all'))
Rysunek Corpora pobrany przy użyciu NLTK
Zobacz zrzut ekranu z kodem.
import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)
Wynik:
[('law', 0.9415997266769409), ('practice', 0.9276568293571472), ('discussion', 0.9259148836135864), ('agriculture', 0.9257254004478455), ('media', 0.9232194423675537), ('policy', 0.922248125076294), ('general', 0.9166069030761719), ('undertaking', 0.916458249092102), ('tight', 0.9129181504249573), ('board', 0.9107444286346436)]
Wyjaśnienie kodu
- Importowana jest biblioteka nltk, z której można pobrać korpus abc, którego użyjemy w następnym kroku.
- Gensim jest importowany. Jeśli Gensim nie jest zainstalowany, zainstaluj go za pomocą polecenia „pip3 install gensim”. Zobacz poniższy zrzut ekranu.
Rysunek Instalacja Gensim za pomocą PIP
- zaimportuj corpus abc, który został pobrany przy użyciu nltk.download ('abc').
- Przekaż pliki do modelu word2vec, który jest importowany przy użyciu Gensima jako zdania.
- Słownictwo jest przechowywane w postaci zmiennej.
- Model jest testowany na przykładowym słowie naukowym, ponieważ te pliki są powiązane z nauką.
- W tym przypadku model przewiduje podobne słowo „nauka”.
Aktywatory i Word2Vec
Funkcja aktywacji neuronu określa wyjście tego neuronu przy danym zestawie danych wejściowych. Biologicznie inspirowane przez aktywność w naszym mózgu, w której różne neurony są aktywowane za pomocą różnych bodźców. Rozumiemy funkcję aktywacji na poniższym schemacie.
Rysunek Opis funkcji aktywacji
Tutaj x1, x2,… x4 to węzeł sieci neuronowej.
w1, w2, w3 to waga węzła,
∑ jest sumą wszystkich wag i wartości węzłów, które działają jako funkcja aktywacji.
Dlaczego funkcja aktywacji?
Jeśli nie jest używana żadna funkcja aktywacji, wyjście byłoby liniowe, ale funkcjonalność funkcji liniowej jest ograniczona. Aby osiągnąć złożoną funkcjonalność, taką jak wykrywanie obiektów, klasyfikacja obrazu, wpisywanie tekstu za pomocą głosu i wiele innych nieliniowych wyjść, co jest osiągane za pomocą funkcji aktywacji.
Jak obliczana jest warstwa aktywacyjna w osadzaniu słów (word2vec)
Warstwa Softmax (znormalizowana funkcja wykładnicza) to funkcja warstwy wyjściowej, która aktywuje lub odpala każdy węzeł. Innym stosowanym podejściem jest hierarchiczne softmax, w którym złożoność jest obliczana przez O (log 2 V), gdzie softmax to O (V), gdzie V jest rozmiarem słownika. Różnica między nimi polega na zmniejszeniu złożoności w hierarchicznej warstwie softmax. Aby zrozumieć jego funkcjonalność (Hierarchical softmax), spójrz na poniższy przykład:
Rysunek Hierarchiczna struktura przypominająca drzewo softmax
Załóżmy, że chcemy obliczyć prawdopodobieństwo zaobserwowania słowa miłość w określonym kontekście. Przepływ z korzenia do węzła liścia będzie pierwszym ruchem do węzła 2, a następnie do węzła 5. Zatem jeśli mamy słownik o rozmiarze 8, potrzebne są tylko trzy obliczenia. Pozwala więc na rozkład, obliczenie prawdopodobieństwa jednego słowa ( miłość ).
Jakie inne opcje są dostępne oprócz hierarchicznego Softmax?
Jeśli mówimy w ogólnym sensie, dostępne opcje osadzania słów to: Zróżnicowana Softmax, CNN-Softmax, Próbkowanie ważności, Próbkowanie adaptacyjnej ważności, Szacowanie kontrastu szumu, Próbkowanie ujemne, Samonormalizacja i Rzadka normalizacja.
Mówiąc konkretnie o Word2vec, mamy dostępne próbkowanie ujemne.
Próbkowanie ujemne to sposób na próbkowanie danych uczących. To jest trochę jak stochastyczne zejście gradientowe, ale z pewną różnicą. Próbkowanie ujemne szuka tylko negatywnych przykładów szkolenia. Opiera się na oszacowaniu kontrastu szumu i losowo próbkuje słowa, a nie w kontekście. Jest to szybka metoda treningowa i losowo wybiera kontekst. Jeśli przewidywane słowo pojawia się w losowo wybranym kontekście, oba wektory są blisko siebie.
Jaki wniosek można wyciągnąć?
Aktywatory odpalają neurony, tak jak nasze neurony są odpalane za pomocą bodźców zewnętrznych. Warstwa Softmax jest jedną z funkcji warstwy wyjściowej, która uruchamia neurony w przypadku osadzania słów. W word2vec mamy takie opcje jak hierarchiczne softmax i próbkowanie ujemne. Za pomocą aktywatorów można przekształcić funkcję liniową w funkcję nieliniową, a za jej pomocą można zaimplementować złożony algorytm uczenia maszynowego.
Co to jest Gensim?
Gensim to zestaw narzędzi do modelowania tematów zaimplementowany w języku Python. Modelowanie tematyczne to odkrywanie ukrytej struktury w treści tekstu. Word2vec jest importowany z zestawu narzędzi Gensim. Zwróć uwagę, że Gensim nie tylko zapewnia implementację word2vec, ale także Doc2vec i FastText, ale ten samouczek dotyczy word2vec, więc będziemy trzymać się obecnego tematu.
Implementacja word2vec przy użyciu Gensim
Do tej pory omawialiśmy, czym jest word2vec, jego różne architektury, dlaczego nastąpiło przejście od worka słów do word2vec, relacja między word2vec i NLTK z kodem na żywo i funkcjami aktywacji. W tej sekcji zaimplementuje word2vec przy użyciu Gensim
Krok 1) Gromadzenie danych
Pierwszym krokiem do wdrożenia dowolnego modelu uczenia maszynowego lub implementacji przetwarzania języka naturalnego jest zebranie danych
Obserwuj dane, aby zbudować inteligentnego chatbota.
[{"tag": "welcome","patterns": ["Hi", "How are you", "Is any one to talk?", "Hello", "hi are you available"],"responses": ["Hello, thanks for contacting us", "Good to see you here"," Hi there, how may I assist you?"]},{"tag": "goodbye","patterns": ["Bye", "See you later", "Goodbye", "I will come back soon"],"responses": ["See you later, thanks for visiting", "have a great day ahead", "Wish you Come back again soon."]},{"tag": "thankful","patterns": ["Thanks for helping me", "Thank your guidance", "That's helpful and kind from you"],"responses": ["Happy to help!", "Any time!", "My pleasure", "It is my duty to help you"]},{"tag": "hoursopening","patterns": ["What hours are you open?", "Tell your opening time?", "When are you open?", "Just your timing please"],"responses": ["We're open every day 8am-7pm", "Our office hours are 8am-7pm every day", "We open office at 8 am and close at 7 pm"]},{"tag": "payments","patterns": ["Can I pay using credit card?", " Can I pay using Mastercard?", " Can I pay using cash only?" ],"responses": ["We accept VISA, Mastercard and credit card", "We accept credit card, debit cards and cash. Please don’t worry"]}]
Oto, co rozumiemy z danych
- Te dane obejmują trzy elementy: tag, wzorzec i odpowiedzi. Tag to intencja (jaki jest temat dyskusji).
- Dane są w formacie JSON.
- Wzorzec to pytanie, które użytkownicy zadadzą botowi
- Odpowiedzi to odpowiedź, którą chatbot udzieli na odpowiednie pytanie / wzorzec.
Krok 2) Wstępne przetwarzanie danych.
Przetwarzanie surowych danych jest bardzo ważne. Jeśli wyczyszczone dane zostaną przesłane do maszyny, model będzie reagował dokładniej i efektywniej nauczy się danych.
Ten krok polega na usunięciu słów pomijanych, słów kluczowych, zbędnych słów itp. Przed kontynuowaniem ważne jest, aby załadować dane i przekonwertować je na ramkę danych. Zapoznaj się z poniższym kodem
import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)
Wyjaśnienie KODU.
- Ponieważ dane są w formacie json, importowany jest plik json
- Plik jest przechowywany w zmiennej
- Plik jest otwarty i załadowany do zmiennej data
Teraz dane są importowane i nadszedł czas na konwersję danych do ramki danych. Zapoznaj się z poniższym kodem, aby zobaczyć następny krok
import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)
Wyjaśnienie KODU
1. Dane są konwertowane do ramki danych przy użyciu pand, które zostały zaimportowane powyżej.
2. Konwertuje listę we wzorach kolumn na ciąg.
from nltk.corpus import stopwordsfrom textblob import Wordstop = stopwords.words('english')df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)df['patterns']= df['patterns'].str.replace('[^\w\s]','')df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
Objaśnienie kodu
1. Angielskie słowa pomijane są importowane za pomocą modułu słów ignorowanych z zestawu narzędzi nltk
2. Wszystkie słowa tekstu są konwertowane na małe litery przy użyciu warunku i funkcji lambda. Funkcja lambda jest funkcją anonimową.
3. Wszystkie wiersze tekstu w ramce danych są sprawdzane pod kątem znaków interpunkcyjnych, które są filtrowane.
4. Znaki, takie jak cyfry lub kropka, są usuwane za pomocą wyrażenia regularnego.
5. Cyfry są usuwane z tekstu.
6. Słowa stopu są usuwane na tym etapie.
7. Słowa są teraz filtrowane, a różne formy tego samego słowa są usuwane za pomocą lematyzacji. Na tym zakończyliśmy wstępne przetwarzanie danych.
Wynik:
, patterns, responses, tag0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments
Krok 3) Budowa sieci neuronowej przy użyciu word2vec
Teraz nadszedł czas, aby zbudować model za pomocą modułu Gensim word2vec. Musimy zaimportować word2vec z Gensim. Zróbmy to, a następnie zbudujemy i na końcowym etapie sprawdzimy model na danych w czasie rzeczywistym.
from gensim.models import Word2Vec
Teraz możemy z powodzeniem zbudować model za pomocą Word2Vec. Zapoznaj się z następną linią kodu, aby dowiedzieć się, jak utworzyć model za pomocą Word2Vec. Tekst jest dostarczany do modelu w postaci listy, więc przekonwertujemy tekst z ramki danych na listę przy użyciu poniższego kodu
Bigger_list=[]for i in df['patterns']li = list(i.split(""))Bigger_list.append(li)Model= Word2Vec(Bigger_list,min_count=1,size=300,workers=4)
Objaśnienia do Kodeksu
1. Utworzono większą_listę, do której dołączona jest lista wewnętrzna. To jest format, który jest podawany do modelu Word2Vec.
2. Pętla jest implementowana, a każdy wpis kolumny wzorców ramki danych jest iterowany.
3. Każdy element wzorców kolumn jest dzielony i zapisywany na wewnętrznej liście li
4. Lista wewnętrzna jest dołączona do listy zewnętrznej.
5. Ta lista jest dostarczana z modelem Word2Vec. Rozumiemy niektóre z przedstawionych tutaj parametrów
Min_count: zignoruje wszystkie słowa o łącznej częstotliwości niższej niż ta.
Rozmiar: mówi o wymiarowości wektorów słów.
Pracownicy: to są wątki do trenowania modelu
Dostępne są również inne opcje, a niektóre ważne z nich wyjaśniono poniżej
Okno: maksymalna odległość między bieżącym a przewidywanym słowem w zdaniu.
Sg: Jest to algorytm uczący i 1 dla skip-gramu i 0 dla ciągłego zbioru słów. Omówiliśmy je szczegółowo powyżej.
Hs: Jeśli jest to 1, to do treningu używamy hierarchicznego softmax, a jeśli 0, to próbkowanie ujemne.
Alfa: początkowa szybkość uczenia się
Pokażmy ostateczny kod poniżej
#list of libraries used by the codeimport stringfrom gensim.models import Word2Vecimport loggingfrom nltk.corpus import stopwordsfrom textblob import Wordimport jsonimport pandas as pd#data in json formatjson_file = 'intents.json'with open('intents.json','r') as f:data = json.load(f)#displaying the list of stopwordsstop = stopwords.words('english')#dataframedf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)# print(df['patterns'])#print(df['patterns'])#cleaning the data using the NLP approachprint(df)df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))df['patterns']= df['patterns'].str.replace('[^\w\s]','')df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))#taking the outer listbigger_list=[]for i in df['patterns']:li = list(i.split(" "))bigger_list.append(li)#structure of data to be taken by the model.word2vecprint("Data format for the overall list:",bigger_list)#custom data is fed to machine for further processingmodel = Word2Vec(bigger_list, min_count=1,size=300,workers=4)#print(model)
Krok 4) Zapisywanie modelu
Model można zapisać w postaci kosza i formularza modelowego. Bin to format binarny. Zapoznaj się z poniższymi wierszami, aby zapisać model
model.save("word2vec.model")model.save("model.bin")
Wyjaśnienie powyższego kodu
1. Model zapisywany jest w postaci pliku .model.
2. model zapisywany jest w postaci pliku .bin
Użyjemy tego modelu do testowania w czasie rzeczywistym, takich jak podobne słowa, niepodobne słowa i najczęściej używane słowa.
Krok 5) Ładowanie modelu i wykonywanie testów w czasie rzeczywistym
Model jest ładowany za pomocą poniższego kodu
model = Word2Vec.load('model.bin')
Jeśli chcesz wydrukować z niego słownictwo, wykonaj poniższe polecenie
Zobacz wynik
['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available']
Krok 6) Sprawdzanie najbardziej podobnych słów
Realizujmy to praktycznie
similar_words = model.most_similar('thanks')print(similar_words)
Zobacz wynik
[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)]
Krok 7) Nie pasuje do słowa z podanych słów
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)
Dodaliśmy słowa „Do zobaczenia później, dzięki za odwiedziny”. Spowoduje to wydrukowanie najbardziej odmiennych słów z tych słów. Uruchommy ten kod i znajdźmy wynik
Wynik po wykonaniu powyższego kodu.
Thanks
Krok 8) Znalezienie podobieństwa między dwoma słowami
To pokaże prawdopodobieństwo podobieństwa między dwoma słowami. Zobacz poniższy kod, jak wykonać tę sekcję.
similarity_two_words = model.similarity('please','see')print("Please provide the similarity between these two words:")print(similarity_two_words)
Wynik powyższego kodu jest jak poniżej
0,13706
Możesz dalej znaleźć podobne słowa, wykonując poniższy kod
similar = model.similar_by_word('kind')print(similar)
Wyjście powyższego kodu
[('credit', 0.11764447391033173), ('cash', 0.11440904438495636), ('one', 0.11151769757270813), ('hour', 0.0944807156920433), ('using', 0.0705675333738327), ('thats', 0.05206916481256485), ('later', 0.04502468928694725), ('bye', 0.03960943967103958), ('back', 0.03837274760007858), ('thank', 0.0380823090672493)]
Wniosek
- Word Embedding to rodzaj reprezentacji słów, który umożliwia zrozumienie słów o podobnym znaczeniu przez algorytmy uczenia maszynowego
- Osadzanie słów służy do obliczania podobnych słów, Utwórz grupę powiązanych słów, Funkcja klasyfikacji tekstu, Grupowanie dokumentów, Przetwarzanie języka naturalnego
- Word2vec to płytki model dwuwarstwowej sieci neuronowej do tworzenia osadzania słów w celu lepszej reprezentacji słów
- Word2vec reprezentuje słowa w reprezentacji przestrzeni wektorowej. Słowa są przedstawiane w postaci wektorów, a ich rozmieszczenie odbywa się w taki sposób, że podobne słowa znaczeniowe pojawiają się razem, a odmienne słowa znajdują się daleko
- Word2vec używał 2 architektur Continuous Bag of words (CBOW) i pomija gram
- CBOW jest kilka razy szybsze niż pomijanie gramów i zapewnia lepszą częstotliwość dla częstych słów, podczas gdy pomijanie gramów wymaga niewielkiej ilości danych treningowych i reprezentuje nawet rzadkie słowa lub frazy.
- NLTK i word2vec mogą być używane razem, tworząc potężne aplikacje
- Funkcja aktywacji neuronu określa wyjście tego neuronu przy danym zestawie danych wejściowych. W word2vec. Warstwa Softmax (znormalizowana funkcja wykładnicza) to funkcja warstwy wyjściowej, która aktywuje lub odpala każdy węzeł. Word2vec ma również dostępne próbkowanie ujemne
- Gensim to zestaw narzędzi do modelowania tematów zaimplementowany w języku Python