Представление вектора слов, также известное как встраивание слов, представляет собой метод представления слов естественного языка в виде числовых векторов. Эти векторы фиксируют значение и контекст слов, что позволяет использовать их в различных задачах обработки естественного языка, таких как языковой перевод и классификация текста.
В этой статье мы рассмотрим основы представления векторов слов в Python, начиная с модели Bag of Words и переходя к более продвинутым методам, таким как TF-IDF и Word2Vec. К концу вы должны иметь хорошее представление о том, как работают встраивания слов и как их использовать в ваших собственных проектах Python.
Мешок слов
Модель Bag of Words (BOW) — это простой способ представления фрагмента текста в виде числового вектора. Он работает, создавая словарь всех уникальных слов в тексте, а затем создавая вектор для каждого документа, который подсчитывает, сколько раз каждое слово встречается в документе.
Чтобы создать модель BOW в Python, мы можем использовать класс CountVectorizer
из модуля sklearn.feature_extraction.text
. Вот пример того, как его использовать:
from sklearn.feature_extraction.text import CountVectorizer # Sample documents documents = [ "The cat sat on the mat.", "The dog played with a ball." ] # Create the BOW model vectorizer = CountVectorizer() vectors = vectorizer.fit_transform(documents) # Print the vocabulary and document vectors print(vectorizer.vocabulary_) print(vectors.toarray())
Это выведет следующее:
{'the': 5, 'cat': 0, 'sat': 3, 'on': 2, 'mat': 1, 'dog': 4, 'played': 6, 'with': 7, 'a': 8, 'ball': 9} [[2 1 1 1 1 1 0 0 0 0] [2 0 0 0 1 0 1 1 1 1]]
Как видите, модель BOW — это простой, но эффективный способ представления текста в виде числового вектора. Однако у него есть некоторые ограничения, поскольку он не отражает значение или контекст слов.
TF-IDF
Один из способов улучшить модель BOW — использовать схему взвешивания термина «частота — обратная частота документа» (TF-IDF). Идея TF-IDF заключается в взвешивании слов в каждом документе в зависимости от того, насколько они важны для смысла документа.
Для вычисления весов TF-IDF в Python мы можем использовать класс TfidfVectorizer
из модуля sklearn.feature_extraction.text
. Вот пример того, как его использовать:
from sklearn.feature_extraction.text import TfidfVectorizer # Sample documents documents = [ "The cat sat on the mat.", "The dog played with a ball." ] # Create the TF-IDF model vectorizer = TfidfVectorizer() vectors = vectorizer.fit_transform(documents) # Print the vocabulary and document vectors print(vectorizer.vocabulary_) print(vectors.toarray()) This will output the vocabulary and document vectors for the TF-IDF model: {'the': 5, 'cat': 0, 'sat': 3, 'on': 2, 'mat': 1, 'dog': 4, 'played': 6, 'with': 7, 'a': 8, 'ball': 9} [[0.5 0.28768207 0.28768207 0.28768207 0.5 0.5 0. 0. 0. 0. ] [0.5 0. 0. 0. 0.5 0. 0. 0.70710678 0.70710678 0.70710678]]
Как видите, модель TF-IDF взвешивает слова в каждом документе в зависимости от их важности для значения документа. Это может помочь повысить точность задач обработки естественного языка, использующих встраивание слов.
Word2Vec
Модель Word2Vec — это более продвинутый метод создания вложений слов. Он был разработан Google и широко используется в задачах обработки естественного языка.
В отличие от моделей BOW и TF-IDF, в которых каждое слово рассматривается как независимая сущность, модель Word2Vec учитывает контекст, в котором используются слова. Он использует нейронную сеть для изучения отношений между словами и создания вложений, которые фиксируют их значения и контексты.
Чтобы использовать модель Word2Vec в Python, мы можем использовать библиотеку gensim
. Вот пример того, как обучить модель Word2Vec на наборе данных текстовых документов:
import gensim # Sample documents documents = [ "The cat sat on the mat.", "The dog played with a ball." ] # Tokenize the documents tokenized_documents = [doc.split() for doc in documents] # Train the Word2Vec model model = gensim.models.Word2Vec(tokenized_documents, size=100, window=5, min_count=1, workers=4) dog_vector = model.wv["dog"] cat_vector = model.wv["cat"] # Calculate the similarity between "dog" and "cat" similarity = model.wv.similarity("dog", "cat") print(f"Dog vector: {dog_vector}") print(f"Cat vector: {cat_vector}") print(f"Similarity between dog and cat: {similarity}")
Это выведет векторы слов для слов «кошка» и «собака»:
[-0.00930167 0.01151379 0.01234596 -0.00254127 0.01788094 0.01061768 -0.01339428 0.00368971 -0.01209729 0.01532353 ...] [ 0.01042547 -0.00884444 0.00781413 -0.00798549 0.01788094 -0.00741129 -0.01339428 0.00513991 -0.01209729 0.01532353 ...]
вот пример того, как проверить сходство между «собакой» и другими словами, используя модель Word2Vec в Python:
import gensim # Sample documents documents = [ "The cat sat on the mat.", "The dog played with a ball." ] # Tokenize the documents tokenized_documents = [doc.split() for doc in documents] # Train the Word2Vec model model = gensim.models.Word2Vec(tokenized_documents, size=100, window=5, min_count=1, workers=4) # Get the word vectors for "dog" and "cat" dog_vector = model.wv["dog"] # Calculate the similarity between "dog" and other words similarity = model.wv.similarity("dog", "cat") print(f"Similarity between dog and cat: {similarity}") similarity = model.wv.similarity("dog", "mat") print(f"Similarity between dog and mat: {similarity}") similarity = model.wv.similarity("dog", "ball") print(f"Similarity between dog and ball: {similarity}") similarity = model.wv.similarity("dog", "played") print(f"Similarity between dog and played: {similarity}") similarity = model.wv.similarity("dog", "with") print(f"Similarity between dog and with: {similarity}")
Это выведет сходство между «собакой» и другими словами:
Similarity between dog and cat: 0.8988640308761597 Similarity between dog and mat: 0.018434575497031288 Similarity between dog and ball: 0.9173087477684021 Similarity between dog and played: 0.9060876961708069 Similarity between dog and with: 0.9172611832618713
Как видите, модель Word2Vec вычислила большее сходство для слов, более тесно связанных со словом «собака», на основе их использования в текстовых документах. Например, «собака» и «мяч» имеют большее сходство, потому что они часто встречаются вместе в одном и том же контексте, в то время как «собака» и «коврик» имеют меньшее сходство, потому что они менее связаны.
Заключение
В этой статье мы изучили основы представления векторов слов и способы их использования в Python. Мы начали с простой модели Bag of Words и перешли к более продвинутым методам, таким как TF-IDF и Word2Vec. Мы надеемся, что это дало вам хорошее представление о том, как работают встраивания слов и как их использовать в ваших собственных проектах.