Głębsze znaczenie: modelowanie tematyczne w Pythonie

Opublikowany: 2022-03-11

Komputery i procesory, które je obsługują, są zbudowane do pracy z liczbami. W przeciwieństwie do tego, codzienny język e-maili i postów w mediach społecznościowych ma luźną strukturę, która nie nadaje się do obliczeń.

W tym miejscu pojawia się przetwarzanie języka naturalnego (NLP). NLP to gałąź informatyki, która pokrywa się z lingwistyką, stosując techniki obliczeniowe (mianowicie sztuczną inteligencję) do analizy języka naturalnego i mowy. Modelowanie tematyczne skupia się na zrozumieniu, jakich tematów dotyczy dany tekst. Modelowanie tematyczne pozwala programistom wdrażać przydatne funkcje, takie jak wykrywanie najświeższych wiadomości w mediach społecznościowych, polecanie spersonalizowanych wiadomości, wykrywanie fałszywych użytkowników i określanie przepływu informacji.

W jaki sposób programiści mogą nakłonić komputery skoncentrowane na obliczeniach do zrozumienia komunikacji międzyludzkiej na tych poziomach zaawansowania?

Worek słów

Aby odpowiedzieć na to pytanie, musimy umieć matematycznie opisać tekst. Zaczniemy nasz samouczek dotyczący modelowania tematów w Pythonie od najprostszej metody: worka słów.

Ta metoda przedstawia tekst jako zbiór słów. Na przykład zdanie This is an example można opisać jako zbiór słów przy użyciu częstotliwości, z jaką te słowa się pojawiają:

 {"an": 1, "example": 1, "is": 1, "this": 1}

Zauważ, że ta metoda ignoruje kolejność słów. Weź te przykłady:

  • „Lubię Gwiezdne Wojny, ale nie lubię Harry'ego Pottera”.
  • „Lubię Harry'ego Pottera, ale nie lubię Gwiezdnych Wojen”.

Te uczucia są reprezentowane przez te same słowa, ale mają przeciwne znaczenia. Dla celów analizy tematyki tekstów różnice te nie mają jednak znaczenia. W obu przypadkach mówimy o upodobaniach do Harry'ego Pottera i Gwiezdnych Wojen, niezależnie od tego, jakie to gusty. W związku z tym szyk wyrazów jest nieistotny.

Kiedy mamy wiele tekstów i staramy się zrozumieć różnice między nimi, potrzebujemy matematycznej reprezentacji całego naszego korpusu, która uwzględnia każdy tekst osobno. W tym celu możemy użyć macierzy, w której każda kolumna reprezentuje słowo lub termin, a każdy wiersz reprezentuje tekst. Ewentualna reprezentacja korpusu polega na odnotowaniu w każdej komórce częstotliwości, z jaką dane słowo (kolumna) jest używane w danym tekście (wierszu).

W naszym przykładzie korpus składa się z dwóch zdań (naszych wierszy macierzy):

 ["I like Harry Potter", "I like Star Wars"]

Wymieniamy słowa w tym korpusie w kolejności, w jakiej je napotykamy: ja , jak , Harry , Potter , Star , Wars . Odpowiadają one naszym kolumnom macierzy.

Wartości w macierzy oznaczają, ile razy dane słowo zostało użyte w każdej frazie:

 [[1,1,1,1,0,0], [1,1,0,0,1,1]] 

Obraz przedstawia dwie linie tekstu po lewej stronie: lubię Harry'ego Pottera i lubię Gwiezdne Wojny. Ten tekst jest następnie zamieniany w worek słów pośrodku, przy czym po każdym słowie następuje liczba jego użycia: „Lubię Harry'ego Pottera” staje się „{I: 1, jak: 1, Harry: 1, Potter : 1, Gwiazda: 0, Wojny: 0}” i „Lubię Gwiezdne Wojny” stają się „{I: 1, jak: 1, Harry: 0, Potter: 0, Gwiazda: 1, Wojny: 1}” Po prawej , liczby te są następnie układane w reprezentację macierzową: pierwsza staje się wierszem „1 1 1 1 0 0”, a druga staje się „1 1 0 0 1 1”.
Tekst przekształcony w reprezentację macierzową

Zwróć uwagę, że wielkość matrycy określa się, mnożąc liczbę tekstów przez liczbę różnych słów, które pojawiają się w co najmniej jednym tekście. Ten ostatni jest zwykle niepotrzebnie duży i można go zmniejszyć. Na przykład macierz może zawierać dwie kolumny dla czasowników odmienionych, takich jak „play” i „played”, niezależnie od tego, że ich znaczenie jest podobne.

Ale może brakować kolumn opisujących nowe koncepcje. Na przykład „klasyczna” i „muzyka” mają indywidualne znaczenie, ale w połączeniu – „muzyka klasyczna” – mają inne znaczenie.

Ze względu na te kwestie konieczne jest wstępne przetworzenie tekstu w celu uzyskania dobrych wyników.

Modele przetwarzania wstępnego i grupowania tematów

Aby uzyskać najlepsze wyniki, konieczne jest użycie wielu technik przetwarzania wstępnego. Oto niektóre z najczęściej używanych:

  1. Małe litery. Wszystkie słowa należy pisać małymi literami. Wszystkie słowa należy pisać małymi literami. Znaczenie słowa nie zmienia się niezależnie od jego pozycji w zdaniu.
  2. n -gramów. Rozważ wszystkie grupy n słów z rzędu jako nowe terminy, zwane n-gramami . W ten sposób przypadki takie jak „biały dom” zostaną uwzględnione i dodane do listy słownictwa.
  3. Przybitka. Zidentyfikuj przedrostki i przyrostki słów, aby odizolować je od ich korzenia. W ten sposób słowa takie jak „grać”, „grać” lub „gracz” są reprezentowane przez słowo „grać”. Stemming może być przydatny do zmniejszenia liczby słów na liście słownictwa przy jednoczesnym zachowaniu ich znaczenia , ale znacznie spowalnia wstępne przetwarzanie, ponieważ musi być zastosowane do każdego słowa w korpusie.
  4. Zatrzymaj słowa. Nie bierz pod uwagę grup słów pozbawionych znaczenia lub użyteczności. Należą do nich przedimki i przyimki, ale mogą również zawierać słowa, które nie są przydatne w naszym konkretnym studium przypadku, na przykład niektóre popularne czasowniki.
  5. Termin częstotliwość – odwrotność częstotliwości dokumentu (tf–idf). Użyj współczynnika tf-idf zamiast notować częstotliwość każdego słowa w każdej komórce macierzy. Składa się z dwóch liczb, pomnożonych:
    • tf — częstotliwość danego terminu lub słowa w tekście, oraz
    • idf — logarytm całkowitej liczby dokumentów podzielonej przez liczbę dokumentów zawierających dany termin.

    tf–idf jest miarą tego, jak często słowo jest używane w korpusie. Aby móc podzielić słowa na grupy, ważne jest, aby zrozumieć nie tylko, które słowa pojawiają się w każdym tekście, ale także które słowa pojawiają się często w jednym tekście, a w innych wcale.

Poniższy rysunek przedstawia kilka prostych przykładów tych technik przetwarzania wstępnego, w których oryginalny tekst korpusu jest modyfikowany w celu wygenerowania odpowiedniej i łatwej do zarządzania listy słów.

Technika „małych liter” przekształca zdanie „Biały Dom”. w listę słów: "the", "white", "house". Technika „n-gramów” przekształca ją w dłuższą listę: „ten”, „biały”, „dom”, „biały”, „biały dom”. Technika „odbijania” przekształca zdanie „Piłkarz zagrał dobrą grę”. do tej listy: "the", "piłka nożna", "play", "a", "dobry", "gra". Technika „słów stop” przekształca ją w krótszą listę: „piłka nożna”, „graj”, „dobry”, „gra”.
Przykłady technik wstępnego przetwarzania tekstu

Teraz zademonstrujemy, jak zastosować niektóre z tych technik w Pythonie. Po matematycznym przedstawieniu naszego korpusu musimy zidentyfikować omawiane tematy, stosując nienadzorowane algorytmy uczenia maszynowego. W tym przypadku „nienadzorowany” oznacza, że ​​algorytm nie ma żadnych predefiniowanych etykiet tematów, takich jak „science fiction”, które można by zastosować do jego wyników.

Aby utworzyć klaster naszego korpusu, możemy wybrać jeden z kilku algorytmów, w tym nieujemną faktoryzację macierzy (NMF), analizę rzadkich składowych głównych (sparse PCA) i utajoną alokację Dirichleta (LDA). Skoncentrujemy się na LDA, ponieważ jest on powszechnie używany przez społeczność naukową ze względu na dobre wyniki w mediach społecznościowych, naukach medycznych, naukach politycznych i inżynierii oprogramowania.

LDA to model nienadzorowanej dekompozycji tematów: grupuje teksty na podstawie zawartych w nich słów i prawdopodobieństwa przynależności słowa do określonego tematu. Algorytm LDA wyświetla rozkład słów tematu. Dzięki tym informacjom możemy zdefiniować główne tematy na podstawie słów, które najprawdopodobniej są z nimi kojarzone. Po zidentyfikowaniu głównych tematów i powiązanych z nimi słów, możemy wiedzieć, który temat lub tematy dotyczą każdego tekstu.

Rozważmy następujący korpus składający się z pięciu krótkich zdań (wszystkie zaczerpnięte z nagłówków New York Times ):

 corpus = [ "Rafael Nadal Joins Roger Federer in Missing US Open", "Rafael Nadal Is Out of the Australian Open", "Biden Announces Virus Measures", "Biden's Virus Plans Meet Reality", "Where Biden's Virus Plan Stands"]

Algorytm powinien wyraźnie identyfikować jeden temat związany z polityką i koronawirusem, a drugi związany z Nadalem i tenisem.

Stosowanie strategii w Pythonie

W celu wykrycia tematów musimy zaimportować niezbędne biblioteki. Python ma kilka przydatnych bibliotek do NLP i uczenia maszynowego, w tym NLTK i Scikit-learn (sklearn).

 from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformer from sklearn.decomposition import LatentDirichletAllocation as LDA from nltk.corpus import stopwords

Używając CountVectorizer() , generujemy macierz, która oznacza częstotliwość słów każdego tekstu za pomocą CountVectorizer() . Należy zauważyć, że CountVectorizer umożliwia wstępne przetwarzanie, jeśli uwzględnisz parametry, takie jak stop_words , aby uwzględnić słowa stop, ngram_range , aby uwzględnić n -grams, lub smallcase lowercase=True , aby przekonwertować wszystkie znaki na małe litery.

 count_vect = CountVectorizer(stop_words=stopwords.words('english'), lowercase=True) x_counts = count_vect.fit_transform(corpus) x_counts.todense() matrix([[0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0], [1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1]], dtype=int64)

Aby zdefiniować słownictwo naszego korpusu, możemy po prostu użyć atrybutu .get_feature_names() :

 count_vect.get_feature_names() ['announces', 'australian', 'biden', 'federer', 'joins', 'measures', 'meet', 'missing', 'nadal', 'open', 'plan', 'plans', 'rafael', 'reality', 'roger', 'stands', 'virus']

Następnie wykonujemy obliczenia tf–idf za pomocą funkcji sklearn:

 tfidf_transformer = TfidfTransformer() x_tfidf = tfidf_transformer.fit_transform(x_counts)

Aby wykonać dekompozycję LDA, musimy zdefiniować liczbę tematów. W tym prostym przypadku wiemy, że istnieją dwa tematy lub „wymiary”. Ale w ogólnych przypadkach jest to hiperparametr, który wymaga pewnego dostrojenia, co można wykonać za pomocą algorytmów, takich jak wyszukiwanie losowe lub wyszukiwanie w siatce:

 dimension = 2 lda = LDA(n_components = dimension) lda_array = lda.fit_transform(x_tfidf) lda_array array([[0.8516198 , 0.1483802 ], [0.82359501, 0.17640499], [0.18072751, 0.81927249], [0.1695452 , 0.8304548 ], [0.18072805, 0.81927195]])

LDA jest metodą probabilistyczną. Tutaj widzimy prawdopodobieństwo, że każdy z pięciu nagłówków należy do każdego z dwóch tematów. Widzimy, że zgodnie z oczekiwaniami pierwsze dwa teksty mają większe prawdopodobieństwo przynależności do pierwszego tematu, a kolejne trzy do drugiego tematu.

Wreszcie, jeśli chcemy zrozumieć, o co chodzi w tych dwóch tematach, możemy zobaczyć najważniejsze słowa w każdym temacie:

 components = [lda.components_[i] for i in range(len(lda.components_))] features = count_vect.get_feature_names() important_words = [sorted(features, key = lambda x: components[j][features.index(x)], reverse = True)[:3] for j in range(len(components))] important_words [['open', 'nadal', 'rafael'], ['virus', 'biden', 'measures']]

Zgodnie z oczekiwaniami LDA poprawnie przypisało słowa związane z turniejami tenisowymi, a Nadal do pierwszego tematu, a słowa związane z Bidenem i wirusem do drugiego tematu.

Analizy na dużą skalę i rzeczywiste przypadki użycia

W tym artykule można zobaczyć wielkoskalową analizę modelowania tematycznego; Przestudiowałem główne tematy wiadomości podczas wyborów prezydenckich w USA w 2016 r. i obserwowałem tematy, które niektóre środki masowego przekazu – takie jak New York Times i Fox News – włączały do ​​swoich relacji, takie jak korupcja i imigracja. W niniejszym artykule przeanalizowałam również korelacje i związki przyczynowe między treściami środków masowego przekazu a wynikami wyborów.

Modelowanie tematyczne jest również szeroko stosowane poza środowiskiem akademickim do odkrywania ukrytych wzorców tematycznych obecnych w dużych zbiorach tekstów. Na przykład może być stosowany w systemach rekomendacji lub do określenia, o czym klienci/użytkownicy mówią w ankietach, w formularzach informacji zwrotnej lub w mediach społecznościowych.

Blog Toptal Engineering wyraża wdzięczność Juanowi Manuelowi Ortiz de Zarate za przejrzenie próbek kodu przedstawionych w tym artykule.

Zalecana literatura na temat modelowania tematów

Ulepszone modelowanie tematów na Twitterze
Albańczyk, Federico i Esteban Feuerstein. „Ulepszone modelowanie tematów na Twitterze poprzez łączenie społeczności”. (20 grudnia 2021): arXiv:2201.00690 [cs.IR]

Analiza Twittera pod kątem zdrowia publicznego
Paweł, Michał i Marek Dredze. „Jesteś tym, czym tweetujesz: analizowanie Twittera pod kątem zdrowia publicznego”. 3 sierpnia 2021 r.

Klasyfikowanie orientacji politycznej na Twitterze
Cohen, Raviv i Derek Ruths. „Klasyfikacja orientacji politycznej na Twitterze: to nie jest łatwe!” 3 sierpnia 2021 r.

Używanie relacyjnych modeli tematycznych do uchwycenia sprzężeń
Gethers, Malcolm i Denis Poshyvanyk. „Wykorzystywanie relacyjnych modeli tematycznych do przechwytywania sprzężeń między klasami w obiektowych systemach oprogramowania”. 25 października 2010 r.