Ekstrakcja danych – tokenizacja tekstu – PHP-ML

pay-1036470_1920Analiza tekstu jest jednym z głównych poligonów dla zastosowań algorytmów uczenia maszynowego. Jednak surowe dane tekstowe (czyli sekwencja symboli) nie mogą być poddawane bezpośrednio pod działanie algorytmów jak większość liczbowych wektorów o stałej wielkości.

W celu łatwiejszego dokonywania analizy danych tekstowych w bibliotece PHP-ML powstała klasa TokenCountVectorizer. Jej zadaniem jest zamiana treści na tokeny, a następnie zliczenie ich ilości. W efekcie na wyjściu otrzymamy macierz z ilościami wystąpień tokenów.

Parametry konstruktora klasy TokenCountVectorizer:

  • $tokenizer (Tokenizer) – obiekt tokenizatora (implementuje interfejs Tokenizer, opis poniżej)
  • $minDF (float) – ignoruj tokeny których ilość wystąpień w cały zbiorze jest niższa niż zadany próg (tzw. cut-off, domyślnie 0)
use Phpml\FeatureExtraction\TokenCountVectorizer;
use Phpml\Tokenization\WhitespaceTokenizer;

$vectorizer = new TokenCountVectorizer(new WhitespaceTokenizer());

 

Transformacja danych wejściowych

W celu transformacji danych wejściowych używamy metody transform(). Przykład:

$samples = [
    'Lorem ipsum dolor sit amet dolor',
    'Mauris placerat ipsum dolor',
    'Mauris diam eros fringilla diam',
];

$vectorizer = new TokenCountVectorizer(new WhitespaceTokenizer());
$samples = $vectorizer->transform($samples);

Na wyjściu otrzymamy tablicę z wyliczonymi tokenami:

$samples = [
    [0 => 1, 1 => 1, 2 => 2, 3 => 1, 4 => 1],
    [5 => 1, 6 => 1, 1 => 1, 2 => 1],
    [5 => 1, 7 => 2, 8 => 1, 9 => 1],
];

Klucze poszczególnych tablic to indeksy tokenów, a wartości to liczba ich wystąpień w danej próbce.

Słownik

Otrzymane dane wyjściowe mogą okazać się kłopotliwe w interpretacji. Tokeny są symbolizowane przez wartości numeryczne. Aby dokonać przekształcenia lub analizy możemy skorzystać z metody getVocabulary():

$vocabulary = $vectorizer->getVocabulary();

// $vocabulary = ['Lorem', 'ipsum', 'dolor', 'sit', 'amet', 'Mauris', 'placerat', 'diam', 'eros', 'fringilla'];

 

Tokenizatory

Na chwilę obecną zaimplementowane zostały dwie klasy tokenizatorów:

  • WhitespaceTokenizer – separatorem poszczególnych tokenów są białe znaki
  • WordTokenizer – tokenem staje się słowo mające co najmniej dwa znaki alfanumeryczne (punkcja jest kompletnie ignorowana i traktowana zawsze jako separator)

Przykładowe użycie samego tokenizatora:

use Phpml\Tokenization\WordTokenizer;

$text = 'Lorem ipsum-dolor sit amet, consectetur/adipiscing elit.
                 Cras consectetur, dui et lobortis;auctor. 
                 Nulla vitae ,.,/ congue lorem.';

$tokenizer = new WordTokenizer();
$tokens = $tokenizer->tokenize($text);

W ten sposób na wyjściu otrzymamy:

$tokens = [
    'Lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit', 
    'Cras', 'consectetur', 'dui', 'et', 'lobortis', 'auctor',
    'Nulla', 'vitae', 'congue', 'lorem'
];

 



Więcej w Machine Learning
Walidacja krzyżowa – RandomSplit – PHP-ML

Sprawdzian krzyżowy (z ang. cross-validation) to technika polegająca na podziale kolekcji danych wejściowych na co najmniej dwa zbiory: uczący i testowy....

Zamknij