Osadzanie Worda i model Word2Vec z przykładem

Co to jest osadzanie słów?

Osadzanie słów jest typem reprezentacji słowa, który pozwala algorytmom uczenia maszynowego rozumieć słowa o podobnym znaczeniu. Jest to technika modelowania języka i uczenia się cech, która mapuje słowa na wektory liczb rzeczywistych za pomocą sieci neuronowych, modeli probabilistycznych lub redukcji wymiarów macierzy współwystępowania słów. Niektóre modele osadzania słów to Word2vec (Google), Glove (Stanford) i Faster (Facebook).

Osadzanie słów jest również nazywane rozproszonym modelem semantycznym lub rozproszoną reprezentowaną lub semantyczną przestrzenią wektorową lub modelem przestrzeni wektorowej. Czytając te nazwy, natkniesz się na słowo semantyczny, które oznacza wspólne kategoryzowanie podobnych słów. Na przykład owoce takie jak jabłko, mango, banan powinny być umieszczone blisko tych słów, a książki z dala 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.

Gdzie stosuje się osadzanie słów?

Osadzanie słów pomaga w generowaniu funkcji, grupowaniu dokumentów, klasyfikowaniu tekstu i zadaniach przetwarzania języka naturalnego. Wypiszmy 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 podlegającego modelowi predykcyjnemu. Oprócz tego sugeruje również słowa odmienne, a także najczęściej spotykane.
  • Utwórz grupę powiązanych słów: Służy do grupowania semantycznego, które grupuje rzeczy o podobnych cechach razem i różniące się od siebie.
  • Funkcja klasyfikacji tekstu: Tekst jest mapowany na tablice wektorów, które są podawane do modelu w celu uczenia i przewidywania. Modeli klasyfikatorów opartych na tekście nie można trenować na ciągu znaków, dlatego tekst zostanie przekonwertowany na formę, którą można wytrenować maszynowo. Dalsze jego funkcje budowania pomocy semantycznej w klasyfikacji tekstowej.
  • Grupowanie dokumentów: to kolejna aplikacja, w której szeroko stosowane jest osadzanie Word2vec
  • Przetwarzanie języka naturalnego: Istnieje wiele zastosowań, w których osadzanie słów jest przydatne i wygrywa z fazami ekstrakcji cech, takimi jak oznaczanie części mowy, analiza sentymentalna i analiza syntaktyczna. Teraz mamy już pewną wiedzę na temat osadzania słów. Rzucono także trochę światła na różne modele, jeśli chodzi o implementację osadzania słów. Cały ten samouczek dotyczący osadzania programu Word koncentruje się na jednym z modeli (Word2vec).

Co to jest Word2vec?

Word2vec to technika/model umożliwiający osadzanie słów w celu lepszej reprezentacji słów. Jest to metoda przetwarzania języka naturalnego, która rejestruje dużą liczbę precyzyjnych relacji syntaktycznych i semantycznych między wyrazami. Jest to płytka dwuwarstwowa sieć neuronowa, która po przeszkoleniu może wykrywać słowa synonimiczne i sugerować dodatkowe słowa do częściowych zdań.

Zanim przejdziesz dalej w tym samouczku Word2vec, zobacz różnicę między płytką i głęboką siecią neuronową, jak pokazano na poniższym przykładowym diagramie osadzania w programie Word:

Płytka sieć neuronowa składa się tylko z warstwy ukrytej pomiędzy wejściem a wyjściem, podczas gdy głęboka sieć neuronowa zawiera wiele ukrytych warstw pomiędzy wejściem a wyjściem. Wejście podporządkowane jest węzłom, natomiast warstwa ukryta i wyjściowa zawierają neurony.

Uczenie płytkie a głębokie
Uczenie płytkie a głębokie

Word2vec to sieć dwuwarstwowa, w której dostępna jest jedna warstwa ukryta i wyjściowa.

Word2vec został opracowany przez grupę badaczy kierowaną przez Tomasa Mikolova z Google. Word2vec jest lepszy i wydajniejszy niż ukryty model analizy semantycznej.

Dlaczego Word2vec?

Word2vec reprezentuje słowa w reprezentacji przestrzeni wektorowej. Słowa są reprezentowane w formie wektorów, a ich rozmieszczenie jest wykonywane w taki sposób, że słowa o podobnym znaczeniu pojawiają się razem, a słowa o różnym znaczeniu są zlokalizowane daleko. Jest to również określane jako relacja semantyczna. Sieci neuronowe nie rozumieją tekstu, zamiast tego rozumieją tylko liczby. Osadzanie słów zapewnia sposób na konwersję tekstu na wektor liczbowy.

Word2vec rekonstruuje kontekst językowy słów. Zanim przejdziemy dalej, pozwól nam zrozumieć, czym jest kontekst językowy? Ogólnie rzecz biorąc, kiedy mówimy lub piszemy, aby się porozumieć, inni ludzie próbują dowiedzieć się, jaki jest cel zdania. Na przykład „Jaka jest temperatura Indii”, tutaj kontekstem jest to, że użytkownik chce poznać „temperaturę Indii”, co jest kontekstem. 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.

Co robi Word2vec?

Przed osadzeniem programu Word

Ważne jest, aby wiedzieć, jakie podejście jest stosowane przed osadzaniem słów i jakie są jego wady, a następnie przejdziemy do tematu, w jaki sposób przezwycięża się wady poprzez osadzanie słów w programie Word przy użyciu podejścia Word2vec. Na koniec omówimy, jak działa Word2vec, ponieważ ważne jest, aby zrozumieć, że to działa.

Podejście do ukrytej analizy semantycznej

Jest to podejście stosowane przed osadzaniem słów. Wykorzystano koncepcję 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 ono liczone, w przeciwnym razie nie. Aby zrozumieć więcej, zapoznaj się z poniższym programem.

Przykład Word2veca

Przykład Word2veca

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
data_corpus = ["guru99 is the best site for online tutorials. I love to visit guru99."]
vocabulary = vectorizer.fit(data_corpus)
X = vectorizer.transform(data_corpus)

print(X.toarray())
print(vectorizer.get_feature_names_out())

Wyjście:

[[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

  1. CountVectorizer to moduł służący do przechowywania słownictwa na podstawie dopasowania występujących w nim słów. Jest to importowane ze sklearn.
  2. Utwórz obiekt za pomocą klasy CountVectorizer.
  3. Wpisz dane na listę, która ma zostać zmieszczona w CountVectorizer.
  4. Dane mieszczą się w obiekcie utworzonym z klasy CountVectorizer.
  5. Zastosuj podejście oparte na worku słów, aby policzyć słowa w danych za pomocą słownictwa. Jeśli w słowniku nie ma słowa lub tokenu, wówczas pozycja indeksu jest ustawiana na zero.
  6. Zmienna w linii 5, czyli x, jest konwertowana na tablicę (metoda dostępna dla x). To zapewni liczbę każdego tokenu w zdaniu lub liście podanej w wierszu 3.
  7. Spowoduje to pokazanie cech, które są częścią słownictwa po jego dopasowaniu przy użyciu danych z wiersza 4.

W podejściu ukrytej semantyki wiersz reprezentuje unikalne słowa, podczas gdy kolumna reprezentuje liczbę wystąpień tego słowa w dokumencie. Jest to reprezentacja słów w formie matrycy dokumentu. Odwrotna częstotliwość dokumentu (TFIDF) służy do zliczania częstotliwości słów w dokumencie, która jest częstotliwością występowania terminu w dokumencie/częstotliwością terminu w całym korpusie.

Wady metody Bag of Words

  • Ignoruje kolejność słów, na przykład to jest złe = złe jest to.
  • Ignoruje kontekst słów. Załóżmy, że napiszę zdanie „On kochał książki. Edukację najlepiej znaleźć w książkach”. Stworzyłoby to dwa wektory, jeden dla „Uwielbiał książki”, a drugi dla „Edukację najlepiej znaleźć w książkach”. Traktowałoby to oba z nich ortogonalnie, co czyni je niezależnymi, ale w rzeczywistości są ze sobą powiązane

Aby przezwyciężyć te ograniczenia, opracowano osadzanie słów, a Word2vec jest podejściem do wdrożenia takiego.

Jak działa Word2vec?

Word2vec uczy się słowa, przewidując otaczający go kontekst. Weźmy na przykład słowo „On”. kocha Piłka nożna."

Chcemy obliczyć Word2vec dla słowa: kocha.

Przypuszczać

loves =  Vin. P(Vout / Vin) is calculated	
where,	
Vin is the input word. 	
P is the probability of likelihood.	
Vout is the output word. 	

słowo 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 znalezieniu słów podobnych i analogii.

Wszystkie losowe cechy tego słowa kocha jest wyliczone. Funkcje te można zmieniać lub aktualizować w odniesieniu do słów sąsiadujących lub kontekstowych za pomocą a Powrót do propagacji Metoda.

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.

Word2vec Architektura

Word2vec wykorzystuje dwie architektury:

  1. Ciągły zbiór słów (CBOW)
  2. Pomiń gram

Zanim przejdziemy dalej w tym samouczku Word2vec, omówmy, dlaczego te architektury lub modele są ważne z punktu widzenia reprezentacji słów. Nauka reprezentacji słów jest zasadniczo nienadzorowana, ale do trenowania modelu potrzebne są cele/etykiety. Skip-gram i CBOW konwertują nienadzorowaną reprezentację na formę nadzorowaną w celu trenowania modelu.

W CBOW bieżące słowo jest przewidywane za pomocą okna otaczających okien kontekstowych. Na przykład, jeśli wi-1,wi-2,wi + 1,wi + 2podano słowa lub kontekst, model ten zapewni wi

Skip-Gram działa odwrotnie niż CBOW, co oznacza, że ​​przewiduje daną sekwencję lub kontekst na podstawie słowa. Możesz odwrócić przykład, aby go zrozumieć. Jeśli wi jest podany, będzie to przewidywać kontekst lub wi-1,wi-2,wi + 1,wja+2.

Word2vec oferuje opcję wyboru pomiędzy CBOW (ciągły Bag of words) i skim-gram. Takie parametry są dostarczane podczas trenowania modelu. Można mieć możliwość użycia negatywnego próbkowania lub hierarchicznej warstwy softmax.

Ciągły worek słów

Narysujmy prosty przykładowy diagram Word2vec, aby zrozumieć architekturę ciągłego worka słów.

Ciągły worek słów Architektura

Ciągły worek słów Architektura

Obliczmy równania matematycznie. Załóżmy, że V to rozmiar słownika, a N to rozmiar warstwy ukrytej. Dane wejściowe definiuje się jako {xi-1Xi-2, xja+1, xi + 2}. Uzyskujemy macierz wagową przez pomnożenie V * N. Inną macierz uzyskujemy przez pomnożenie wektora wejściowego przez macierz wagową. Można to również zrozumieć za pomocą następującego równania.

h=xitW

gdzie xit? W to odpowiednio wektor wejściowy i macierz wag,

Aby obliczyć dopasowanie kontekstu do następnego słowa, skorzystaj z poniższego równania

u=przewidywana reprezentacja*h

gdzie przewidywaną reprezentację uzyskuje się modelem h w powyższym równaniu.

Model pomijania grama

Metoda pomijania grama służy do przewidywania zdania na podstawie wprowadzonego słowa. Aby lepiej to zrozumieć, narysujmy diagram jak pokazano na poniższym przykładzie Word2vec.

Model pomijania grama

Model pomijania grama

Można to potraktować jako odwrotność modelu ciągłego worka słów, w którym danymi wejściowymi jest słowo, a model zapewnia kontekst lub sekwencję. Możemy również stwierdzić, że cel jest podawany do warstwy wejściowej, a wyjściowa jest replikowana wielokrotnie, aby pomieścić wybraną liczbę słów kontekstu. Wektor błędów ze wszystkich warstw wyjściowych jest sumowany w celu dostosowania wag metodą propagacji wstecznej.

Jaki model wybrać?

CBOW jest kilka razy szybszy niż pomijanie gramów i zapewnia lepszą częstotliwość dla częstych słów, podczas gdy pomijanie gramów wymaga niewielkiej ilości danych szkoleniowych i reprezentuje nawet rzadkie słowa lub frazy.

Związek między Word2vec i NLTK

NLTK jest naturalnym zestawem narzędzi językowych. Służy do wstępnego przetwarzania tekstu. Można wykonywać różne operacje, takie jak tagowanie części mowy, lematyzowanie, stemming, usuwanie słów pomijanych, usuwanie rzadkich lub najmniej używanych słów. Pomaga w czyszczeniu tekstu, a także pomaga w przygotowywaniu cech ze słów skutecznych. Z drugiej strony Word2vec jest używany do dopasowywania semantycznego (ściśle powiązane elementy) i składniowego (sekwencja). Używając Word2vec, można znaleźć podobne słowa, niepodobne słowa, redukcję wymiarową i wiele innych. Inną ważną cechą Word2vec jest konwersja reprezentacji tekstu o wyższym wymiarze na wektory o niższym wymiarze.

Gdzie używać NLTK i Word2vec?

Jeśli trzeba wykonać pewne zadania ogólnego przeznaczenia, jak wspomniano powyżej, takie jak tokenizacja, tagowanie POS i parsowanie, należy użyć NLTK, natomiast do przewidywania słów na podstawie kontekstu, modelowania tematu lub podobieństwa dokumentów należy użyć Word2vec.

Relacja NLTK i Word2vec za pomocą kodu

NLTK i Word2vec można używać razem, aby znaleźć podobne reprezentacje słów lub dopasowanie składniowe. Zestaw narzędzi NLTK można użyć do załadowania wielu pakietów, które są dostarczane z NLTK, a model można utworzyć za pomocą Word2vec. Następnie można go przetestować na słowach w czasie rzeczywistym. Zobaczmy połączenie obu w poniższym kodzie. Przed dalszym przetwarzaniem zapoznaj się z korpusami, które udostępnia NLTK. Możesz pobrać za pomocą polecenia

nltk(nltk.download('all'))

Relacja NLTK i Word2vec

Korpusy pobrane przy użyciu NLTK

Zobacz zrzut ekranu z kodem.

import nltk
import gensim
from nltk.corpus import abc

model= gensim.models.Word2Vec(abc.sents())
X= list(model.wv.vocab)
data=model.most_similar('science')
print(data)

Relacja NLTK i Word2vec za pomocą kodu

Wyjście:

[('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

  1. Zaimportowana zostanie biblioteka nltk, z której można pobrać korpus abc, którego użyjemy w następnym kroku.
  2. Gensim jest importowany. Jeśli Gensim Word2vec nie jest zainstalowany, zainstaluj go za pomocą polecenia „pip3 install gensim”. Proszę zobaczyć poniższy zrzut ekranu.
Instalowanie Gensima za pomocą PIP

Instalowanie Gensima za pomocą PIP
  1. zaimportuj korpus abc, który został pobrany za pomocą nltk.download('abc').
  2. Przekaż pliki do modelu Word2vec, który zostanie zaimportowany przy użyciu Gensima jako zdania.
  3. Słownictwo jest przechowywane w postaci zmiennej.
  4. Model jest testowany na przykładowym słowie science, ponieważ te pliki są powiązane z nauką.
  5. Tutaj model przewiduje podobne słowo „nauka”.

Aktywatory i Word2Vec

Funkcja aktywacji neuronu definiuje wyjście tego neuronu przy danym zestawie danych wejściowych. Biologicznie inspirowane przez aktywność w naszych mózgach, gdzie różne neurony są aktywowane za pomocą różnych bodźców. Zrozummy funkcję aktywacji za pomocą poniższego diagramu.

Funkcja aktywacji w Word2vec

Zrozumienie funkcji aktywacji

Tutaj x1,x2,..x4 jest węzłem sieci neuronowej.

w1, w2, w3 to waga węzła,

? jest sumą wszystkich wartości wag i węzłów, które działają jako funkcja aktywacji.

Dlaczego funkcja aktywacji?

Jeśli nie zostanie użyta żadna funkcja aktywacji, wyjście będzie liniowe, ale funkcjonalność funkcji liniowej jest ograniczona. Aby osiągnąć złożoną funkcjonalność, taką jak wykrywanie obiektów, klasyfikacja obrazów, pisanie tekstu za pomocą głosu i wiele innych nieliniowych wyjść, potrzebne są funkcje aktywacji.

Jak obliczana jest warstwa aktywacyjna w osadzaniu słów (Word2vec)

Warstwa Softmax (znormalizowana funkcja wykładnicza) jest funkcją warstwy wyjściowej, która aktywuje lub uruchamia każdy węzeł. Innym stosowanym podejściem jest hierarchiczna funkcja softmax, gdzie złożoność jest obliczana przez O(log2V) gdzie softmax wynosi O(V), gdzie V jest rozmiarem słownika. Różnica między nimi polega na redukcji złożoności w hierarchicznej warstwie softmax. Aby zrozumieć jej funkcjonalność (hierarchicznego softmax), zapoznaj się z poniższym przykładem osadzania Worda:

Hierarchiczna struktura drzewa Softmax

Hierarchiczna struktura drzewa softmax

Załóżmy, że chcemy obliczyć prawdopodobieństwo zaobserwowania słowa miłość biorąc pod uwagę określony kontekst. Przepływ od korzenia do węzła liścia będzie pierwszym przejściem 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 to na rozkład, obliczenie prawdopodobieństwa jednego słowa (miłość).

Jakie inne opcje są dostępne oprócz Hierarchical Softmax?

Mówiąc ogólnie, dostępne są opcje osadzania słów: Zróżnicowany Softmax, CNN-Softmax, Próbkowanie ważności, Próbkowanie adaptacyjnej ważności, Oszacowania kontrastu szumu, Próbkowanie negatywne, Samonormalizacja i rzadka normalizacja.

Mówiąc konkretnie o Word2vec, mamy dostępne próbkowanie negatywne.

Próbkowanie ujemne to sposób próbkowania danych szkoleniowych. Przypomina to trochę stochastyczne opadanie gradientowe, ale z pewną różnicą. Próbkowanie negatywne uwzględnia tylko negatywne przykłady szkoleniowe. Opiera się na estymacji kontrastu szumu i losowo próbkuje słowa, a nie w kontekście. Jest to szybka metoda uczenia, w której kontekst wybierany jest losowo. Jeśli przewidywane słowo pojawia się w losowo wybranym kontekście, oba wektory są blisko siebie.

Jaki wniosek można wyciągnąć?

Aktywatory wyzwalają neurony tak samo, jak nasze neurony są wyzwalane za pomocą bodźców zewnętrznych. Warstwa Softmax jest jedną z funkcji warstwy wyjściowej, która wyzwala neurony w przypadku osadzania słów. W Word2vec mamy takie opcje, jak hierarchiczny softmax i negatywne próbkowanie. Używając aktywatorów, można przekształcić funkcję liniową w funkcję nieliniową, a złożony algorytm uczenia maszynowego można zaimplementować za pomocą takich funkcji.

Co to jest Gensim?

Gensim to zestaw narzędzi do modelowania tematów i przetwarzania języka naturalnego o otwartym kodzie źródłowym, który jest zaimplementowany w Python i Cyton. Zestaw narzędzi Gensim umożliwia użytkownikom importowanie Word2vec do modelowania tematycznego w celu odkrycia ukrytej struktury w treści tekstu. Gensim zapewnia nie tylko implementację Word2vec, ale także Doc2vec i FastText.

Ten samouczek dotyczy wyłącznie Word2vec, więc pozostaniemy przy bieżącym temacie.

Jak zaimplementować Word2vec przy użyciu Gensima

Do tej pory omówiliśmy, czym jest Word2vec, jakie są jego różne architektury, dlaczego nastąpiło przejście od zbioru słów do Word2vec, jaki był związek między Word2vec i NLTK z kodem na żywo i funkcjami aktywacji.

Poniżej znajduje się metoda krok po kroku wdrożenia Word2vec przy użyciu Gensim:

Krok 1) Zbieranie danych

Pierwszym krokiem do wdrożenia dowolnego modelu uczenia maszynowego lub wdrożenia przetwarzania języka naturalnego jest zebranie danych

Proszę zwrócić uwagę na dane, aby zbudować inteligentnego chatbota, jak pokazano w poniższym przykładzie Gensim Word2vec.

[{"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

  • Dane te zawierają trzy elementy: tag, wzorzec i odpowiedzi. Tag to intencja (co jest tematem dyskusji).
  • Dane są w formacie JSON.
  • Wzorzec to pytanie, które użytkownicy zadają botowi
  • Odpowiedzi to odpowiedź, jakiej chatbot udzieli na odpowiednie pytanie/wzorzec.

Krok 2) Wstępne przetwarzanie danych

Bardzo ważne jest przetwarzanie surowych danych. Jeśli do maszyny zostaną wprowadzone oczyszczone dane, model będzie reagował dokładniej i efektywniej będzie się uczył danych.

Ten krok obejmuje usunięcie słów kończących, rdzeni, niepotrzebnych słów itp. Przed kontynuowaniem ważne jest załadowanie danych i przekonwertowanie ich na ramkę danych. Zobacz poniższy kod dla takich

import json
json_file =’intents.json'
with open('intents.json','r') as f:
    data = json.load(f)

Wyjaśnienie kodu:

  1. Ponieważ dane są w formacie json, dlatego json jest importowany
  2. Plik jest przechowywany w zmiennej
  3. Plik jest otwarty i załadowany do zmiennej danych

Teraz dane są importowane i nadszedł czas na konwersję danych na ramkę danych. Aby zobaczyć następny krok, zobacz poniższy kod

import pandas as pd
df = pd.DataFrame(data)
df['patterns'] = df['patterns'].apply(', '.join) 

Wyjaśnienie kodu:

1. Dane są konwertowane na ramkę danych za pomocą pand, które zostały zaimportowane powyżej.

2. Konwertuje listę we wzorach kolumn na ciąg znaków.

from nltk.corpus import stopwords
from textblob import Word
stop = 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()]))

Wyjaśnienie kodu:

1. Angielskie słowa stop są importowane przy użyciu modułu stop word z zestawu narzędzi nltk

2. Wszystkie słowa w tekście są konwertowane na małe litery przy użyciu funkcji warunku i lambda. Funkcja Lambdy jest funkcją anonimową.

3. Wszystkie wiersze tekstu w ramce danych są sprawdzane pod kątem znaków interpunkcyjnych w postaci ciągów znaków i są one filtrowane.

4. Znaki takie jak liczby lub kropki są usuwane za pomocą wyrażenia regularnego.

5. Digits zostały usunięte z tekstu.

6. Na tym etapie usuwane są słowa stop.

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.

Wyjście:

, patterns, responses, tag
0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome
1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye
2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful
3,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']",hoursopening
4,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 przyszedł czas na zbudowanie modelu z wykorzystaniem modułu Gensim Word2vec. Musimy zaimportować Word2vec z Gensim. Zróbmy to, a potem zbudujemy i w końcowym etapie sprawdzimy model na danych w czasie rzeczywistym.

from gensim.models import Word2Vec

Teraz, w tym samouczku Gensim Word2vec, możemy z powodzeniem zbudować model przy użyciu Word2Vec. Zapoznaj się z następną linijką kodu, aby dowiedzieć się, jak utworzyć model za pomocą programu Word2Vec. Tekst dostarczany jest do modelu w formie listy, więc przekonwertujemy tekst z ramki danych na listę za pomocą 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)

Wyjaśnienie kodu:

1. Utworzono większą_listę, do której dołączona jest lista wewnętrzna. Jest to format, który jest podawany do modelu Word2Vec.

2. Zaimplementowano pętlę i 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. Lista ta jest dołączona do modelu Word2Vec. Przyjrzyjmy się niektórym parametrom podanym tutaj

Min_count: Zignoruje wszystkie słowa o całkowitej 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ą także inne opcje, a niektóre z nich opisano poniżej

Okno: Maksymalna odległość między bieżącym a przewidywanym słowem w zdaniu.

Sg: Jest to algorytm treningowy i 1 dla skip-gramu i 0 dla Continuous bag of words. Omówiliśmy je szczegółowo powyżej.

HS: Jeśli wartość wynosi 1, to do treningu wykorzystujemy hierarchiczną metodę softmax, a jeśli 0, to używane jest próbkowanie ujemne.

Alfa: Początkowa szybkość uczenia się

Wyświetlmy końcowy kod poniżej:

#list of libraries used by the code
import string
from gensim.models import Word2Vec
import logging
from nltk.corpus import stopwords
from textblob import Word
import json
import pandas as pd
#data in json format
json_file = 'intents.json'
with open('intents.json','r') as f:
    data = json.load(f)
#displaying the list of stopwords
stop = stopwords.words('english')
#dataframe
df = pd.DataFrame(data)

df['patterns'] = df['patterns'].apply(', '.join)
# print(df['patterns'])
#print(df['patterns'])
#cleaning the data using the NLP approach
print(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 list
bigger_list=[]
for i in df['patterns']:
    li = list(i.split(" "))
    bigger_list.append(li)
#structure of data to be taken by the model.word2vec
print("Data format for the overall list:",bigger_list)
#custom data is fed to machine for further processing
model = Word2Vec(bigger_list, min_count=1,size=300,workers=4)
#print(model)

Krok 4) Zapis modelu

Model można zapisać w formie bin i formularza modelu. Bin to format binarny. Aby zapisać model, zobacz poniższe linie

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

Będziemy używać tego modelu do przeprowadzania testów w czasie rzeczywistym, takich jak słowa podobne, słowa odmienne i najczęstsze słowa.

Krok 5) Załadowanie modelu i wykonanie testów w czasie rzeczywistym

Model jest ładowany przy użyciu poniższego kodu:

model = Word2Vec.load('model.bin')

Jeśli chcesz wydrukować z niego słownictwo, możesz to zrobić za pomocą poniższego polecenia:

vocab = list(model.wv.vocab)

Proszę zobaczyć 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 większości podobnych słów

Zaimplementujmy rzeczy praktycznie:

similar_words = model.most_similar('thanks')	
print(similar_words)	

Proszę zobaczyć 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 podanych słów

dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())
print(dissimlar_words)

Dostarczyliśmy słowa 'Do zobaczenia, dziękuję za odwiedziny'. Będzie to wypisz spośród tych słów słowa najbardziej różniące się od siebie. 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 wynik prawdopodobieństwa 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 następujący

0.13706

Możesz dalej znaleźć podobne słowa, wykonując poniższy kod

similar = model.similar_by_word('kind')
print(similar)

Dane wyjściowe 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)] 

Podsumowanie

  • Osadzanie słów to rodzaj reprezentacji słów, który umożliwia algorytmom uczenia maszynowego zrozumienie słów o podobnym znaczeniu
  • Osadzanie słów służy do obliczania podobnych słów, tworzenia grupy powiązanych słów, funkcji klasyfikacji tekstu, grupowania dokumentów, przetwarzania języka naturalnego
  • Wyjaśnienie Word2vec: Word2vec to płytki dwuwarstwowy model sieci neuronowej umożliwiający osadzanie słów w celu lepszej reprezentacji słów
  • Word2vec reprezentuje słowa w reprezentacji przestrzeni wektorowej. Słowa są reprezentowane w postaci wektorów, a rozmieszczenie odbywa się w taki sposób, aby słowa o podobnym znaczeniu pojawiały się razem, a słowa o odmiennym znaczeniu znajdowały się daleko
  • Algorytm Word2vec wykorzystuje dwie architektury: ciągły worek słów (CBOW) i pomijający gram
  • CBOW jest kilka razy szybszy niż pomijanie gramów i zapewnia lepszą częstotliwość dla częstych słów, podczas gdy pomijanie gramów wymaga niewielkiej ilości danych szkoleniowych i reprezentuje nawet rzadkie słowa lub frazy.
  • NLTK i Word2vec można używać razem, tworząc potężne aplikacje
  • Funkcja aktywacji neuronu określa wyjście tego neuronu przy danym zestawie wejść. W Word2vec. Warstwa Softmax (znormalizowana funkcja wykładnicza) to funkcja warstwy wyjściowej, która aktywuje lub uruchamia każdy węzeł. Word2vec udostępnia również próbkowanie negatywne
  • Gensim to zestaw narzędzi do modelowania tematów zaimplementowany w Pythonie