Введение
Компьютеры, умеющие обращаться с числами, с трудом справляются с человеческим языком. Язык состоит из таких частей, как буквы, слова, предложения и абзацы, и они соединяются друг с другом, чтобы помочь нам общаться. Но разные языки и то, что слова могут иметь несколько значений, затрудняют правильное понимание языка компьютерами.
Модели машинного обучения требуют ввода тензоров или векторов, составные элементы которых имеют числовую форму. В этой статье мы углубимся в трансформацию языка в математические формы. Этот подход позволяет алгоритмам машинного обучения и глубокого обучения решать различные задачи обработки естественного языка, устраняя разрыв между человеческим общением и вычислительным анализом.
Различные методы преобразования текста при его встраивании
Сопоставление на основе идентификаторов. Текстовые данные связаны с уникальными идентификаторами (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, также обеспечивают мощное встраивание слов и даже больших текстовых единиц.