Введение

Компьютеры, умеющие обращаться с числами, с трудом справляются с человеческим языком. Язык состоит из таких частей, как буквы, слова, предложения и абзацы, и они соединяются друг с другом, чтобы помочь нам общаться. Но разные языки и то, что слова могут иметь несколько значений, затрудняют правильное понимание языка компьютерами.

Модели машинного обучения требуют ввода тензоров или векторов, составные элементы которых имеют числовую форму. В этой статье мы углубимся в трансформацию языка в математические формы. Этот подход позволяет алгоритмам машинного обучения и глубокого обучения решать различные задачи обработки естественного языка, устраняя разрыв между человеческим общением и вычислительным анализом.

Различные методы преобразования текста при его встраивании

Сопоставление на основе идентификаторов. Текстовые данные связаны с уникальными идентификаторами (ID) (например, 123 для «красного» и 345 для «синего»). контекстуальные нюансы. Управление обширными словарями и устранение опечаток становится сложной задачей.

Горячее кодирование: текст представлен вектором, в котором все элементы равны нулю, за исключением элемента, соответствующего категории, для которой установлено значение 1.

Например, рассмотрим простой словарь из трех слов: [“красный”, “синий”, “зеленый”]. Горячее кодирование этих слов будет выглядеть так:

  • "красный": [1, 0, 0]
  • «синий»: [0, 1, 0]
  • «зеленый»: [0, 0, 1]

Bag of Words (BoW): текст представлен путем подсчета частотности каждого слова в документе и создания вектора, в котором каждое измерение соответствует слову.

Term Frequency-Inverse Document Frequency (TF-IDF): вариант BoW, который учитывает важность слов в документе относительно их частоты во всем корпусе.

Встраивание слов. Сопоставление слов с плотными векторами в непрерывном пространстве с использованием таких методов, как Word2Vec, GloVe или FastText. Они фиксируют семантические отношения между словами.

Одна горячая кодировка

import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
# Sample text documents
documents = [
    "The cat sat on the mat.",
    "The dog barked.",
    "The mat is blue."
]
# Create an instance of CountVectorizer
vectorizer = CountVectorizer(binary=True)
# Fit and transform the documents
one_hot_encoded = vectorizer.fit_transform(documents)
# Get the one-hot encoded matrix (sparse matrix)
print("One-Hot Encoded Matrix:\n", one_hot_encoded.toarray())
# Get the vocabulary (word to index mapping)
print("Vocabulary:", vectorizer.vocabulary_)

Экземпляр CountVectorizer из библиотеки sklearn создается с параметром binary=True, что приводит к двоичному горячему кодированию. Векторизатор применяется к документам, что дает матрицу, в которой наличие каждого слова представлено как 1, а отсутствие как 0. one_hot_encoded.toarray() печатает матрицу в плотной форме.

Этот метод преобразует слова в двоичные представления, указывая на их существование в тексте без учета их частоты. Однако он скудный и требует большого объема памяти, что непрактично для обширных словарей.

Мешок слов

from sklearn.feature_extraction.text import CountVectorizer
# Sample text documents
documents = [
    "The cat sat on the mat.",
    "The dog barked.",
    "The mat is blue."
]
# Create an instance of CountVectorizer
vectorizer = CountVectorizer()
# Fit and transform the documents
bag_of_words = vectorizer.fit_transform(documents)
# Get the bag-of-words matrix (sparse matrix)
print("Bag of Words Matrix:\n", bag_of_words.toarray())
# Get the vocabulary (word to index mapping)
print("Vocabulary:", vectorizer.vocabulary_)

Мы используем CountVectorizer из библиотеки sklearn для преобразования набора текстовых документов в матрицу «мешок слов». Векторизатор настраивается и применяется к документам, в результате чего получается матрица, подсчитывающая вхождения каждого слова в тексте. Строка bag_of_words.toarray() выводит матрицу в плотном формате

Матрица «мешка слов» представляет частоту каждого слова в каждом документе. Каждая строка соответствует документу, а каждый столбец соответствует уникальному слову во всем корпусе. Значение в каждой ячейке матрицы указывает, сколько раз соответствующее слово встречается в соответствующем документе.

TF-IDF

from sklearn.feature_extraction.text import TfidfVectorizer
# Sample text documents
documents = [
    "The cat sat on the mat.",
    "The dog barked.",
    "The mat is blue."
]
# Create an instance of TfidfVectorizer
vectorizer = TfidfVectorizer()
# Fit and transform the documents
tfidf_matrix = vectorizer.fit_transform(documents)
# Get the TF-IDF matrix (sparse matrix)
print("TF-IDF Matrix:\n", tfidf_matrix.toarray())
# Get the vocabulary (word to index mapping)
print("Vocabulary:", vectorizer.vocabulary_)

Мы используем TfidfVectorizer из библиотеки sklearn для преобразования набора текстовых документов в матрицу значений TF-IDF (Term Frequency-Inverse Document Frequency). Векторизатор настраивается и применяется к documents, в результате чего получается матрица TF-IDF. Строка tfidf_matrix.toarray() печатает матрицу TF-IDF в плотном формате.

Матрица TF-IDF представляет важность каждого слова в каждом документе с учетом как его частоты в документе (частота терминов), так и его редкости во всем корпусе (обратная частота документа). Более высокие значения TF-IDF указывают на то, что слово более значимо в конкретном документе по сравнению с остальной частью корпуса.

Вложения слов

Используйте модель Word2Vec из библиотеки gensim для создания вложений слов.

from gensim.models import Word2Vec
from nltk.tokenize import word_tokenize
import nltk
nltk.download('punkt')
# Sample text corpus
corpus = [
    "The cat sat on the mat.",
    "The dog barked.",
    "The mat is blue."
]
# Tokenize the sentences
tokenized_corpus = [word_tokenize(sentence.lower()) for sentence in corpus]
# Train a Word2Vec model
model = Word2Vec(sentences=tokenized_corpus, vector_size=100, window=5, min_count=1, sg=0)
# Get the word vector for a specific word
word_vector = model.wv['cat']
print("Word vector for 'cat':\n", word_vector)
# Find similar words to a given word
similar_words = model.wv.most_similar('dog')
print("Similar words to 'dog':\n", similar_words)

Мы можем использовать модель Word2Vec из библиотеки gensim для изучения встраивания слов из корпуса текста. После токенизации предложений в слова модель Word2Vec обучается с такими настройками, как размер вектора 100 измерений, размер окна 5 слов и минимальное количество слов 1. Код извлекает векторное представление слова для слова «кошка». ', используя model.wv['cat'], и отображает его. Кроме того, он находит слова, похожие на слово «собака», используя model.wv.most_similar('dog'), и печатает эти похожие слова.

Word2Vec — это всего лишь один из способов создания встраивания слов. Другие методы, такие как GloVe, FastText и предварительно обученные модели, такие как BERT и GPT, также обеспечивают мощное встраивание слов и даже больших текстовых единиц.