Este es el décimo artículo de mi serie de artículos sobre Python para PNL. En mi artículo anterior, expliqué cómo StanfordCoreNLP La biblioteca se puede utilizar para realizar diferentes tareas de PNL.
En este artículo, exploraremos el Gensim library, que es otra biblioteca de PNL extremadamente útil para Python. Gensim se desarrolló principalmente para modelar temas. Sin embargo, ahora admite una variedad de otras tareas de PNL, como convertir palabras en vectores (word2vec), documentos en vectores (doc2vec), encontrar similitudes de texto y resúmenes de texto.
En este artículo y en el próximo artículo de la serie, veremos cómo se utiliza la biblioteca Gensim para realizar estas tareas.
Instalación de Gensim
Contenido
Si usa el instalador pip para instalar sus bibliotecas de Python, puede usar el siguiente comando para descargar la biblioteca de Gensim:
$ pip install gensim
Alternativamente, si usa la distribución Anaconda de Python, puede ejecutar el siguiente comando para instalar la biblioteca Gensim:
$ conda install -c anaconda gensim
Veamos ahora cómo podemos realizar diferentes tareas de PNL usando la biblioteca Gensim.
Crear diccionarios
Los algoritmos estadísticos funcionan con números, sin embargo, los lenguajes naturales contienen datos en forma de texto. Por lo tanto, se necesita un mecanismo para convertir palabras en números. De manera similar, después de aplicar diferentes tipos de procesos en los números, necesitamos convertir los números nuevamente en texto.
Una forma de lograr este tipo de funcionalidad es crear un diccionario que asigne un ID numérico a cada palabra única del documento. El diccionario se puede usar para encontrar el equivalente numérico de una palabra y viceversa.
Creación de diccionarios utilizando objetos en memoria
Es muy fácil crear diccionarios que mapeen palabras a ID utilizando la biblioteca Gensim de Python. Mira el siguiente guión:
Te puede interesar:Visión general de los métodos de clasificación en Python con Scikit-Learnimport gensim
from gensim import corpora
from pprint import pprint
text = ["""In computer science, artificial intelligence (AI),
sometimes called machine intelligence, is intelligence
demonstrated by machines, in contrast to the natural intelligence
displayed by humans and animals. Computer science defines
AI research as the study of intelligent agents: any device that
perceives its environment and takes actions that maximize its chance
of successfully achieving its goals."""]
tokens = [[token for token in sentence.split()] for sentence in text]
gensim_dictionary = corpora.Dictionary(tokens)
print("The dictionary has: " +str(len(gensim_dictionary)) + " tokens")
for k, v in gensim_dictionary.token2id.items():
print(f'{k:{15}} {v:{10}}')
En el script anterior, primero importamos el gensim
biblioteca junto con la corpora
módulo de la biblioteca. A continuación, tenemos un texto (que es la primera parte del primer párrafo del artículo de Wikipedia sobre Inteligencia Artificial) almacenado en el text
variable.
Para crear un diccionario, necesitamos una lista de palabras de nuestro texto (también conocidas como tokens). En la siguiente línea, dividimos nuestro documento en oraciones y luego las oraciones en palabras.
tokens = [[token for token in sentence.split()] for sentence in text]
Ahora estamos listos para crear nuestro diccionario. Para hacerlo, podemos usar el Dictionary
objeto de la corpora
módulo y pasarle la lista de tokens.
Finalmente, para imprimir el contenido del diccionario recién creado, podemos usar el token2id
objeto de la Dictionary
clase. La salida del script anterior se ve así:
The dictionary has: 46 tokens
(AI), 0
AI 1
Computer 2
In 3
achieving 4
actions 5
agents: 6
and 7
animals. 8
any 9
artificial 10
as 11
by 12
called 13
chance 14
computer 15
contrast 16
defines 17
demonstrated 18
device 19
displayed 20
environment 21
goals. 22
humans 23
in 24
intelligence 25
intelligence, 26
intelligent 27
is 28
its 29
machine 30
machines, 31
maximize 32
natural 33
of 34
perceives 35
research 36
science 37
science, 38
sometimes 39
study 40
successfully 41
takes 42
that 43
the 44
to 45
La salida muestra cada palabra única en nuestro texto junto con el ID numérico que se le ha asignado a la palabra. La palabra o token es la clave del diccionario y el ID es el valor. También puede ver el ID asignado a la palabra individual usando el siguiente script:
print(gensim_dictionary.token2id["study"])
En el guión anterior, pasamos la palabra «estudiar» como clave de nuestro diccionario. En la salida, debería ver el valor correspondiente, es decir, el ID de la palabra «estudio», que es 40.
Del mismo modo, puede utilizar el siguiente script para encontrar la clave o la palabra de una identificación específica.
print(list(gensim_dictionary.token2id.keys())[list(gensim_dictionary.token2id.values()).index(40)])
Para imprimir los tokens y sus ID correspondientes, usamos un bucle for. Sin embargo, puede imprimir directamente los tokens y sus ID imprimiendo el diccionario, como se muestra aquí:
print(gensim_dictionary.token2id)
El resultado es el siguiente:
Te puede interesar:Python para PNL: Trabajar con la biblioteca Gensim (Parte 2){'(AI),': 0, 'AI': 1, 'Computer': 2, 'In': 3, 'achieving': 4, 'actions': 5, 'agents:': 6, 'and': 7, 'animals.': 8, 'any': 9, 'artificial': 10, 'as': 11, 'by': 12, 'called': 13, 'chance': 14, 'computer': 15, 'contrast': 16, 'defines': 17, 'demonstrated': 18, 'device': 19, 'displayed': 20, 'environment': 21, 'goals.': 22, 'humans': 23, 'in': 24, 'intelligence': 25, 'intelligence,': 26, 'intelligent': 27, 'is': 28, 'its': 29, 'machine': 30, 'machines,': 31, 'maximize': 32, 'natural': 33, 'of': 34, 'perceives': 35, 'research': 36, 'science': 37, 'science,': 38, 'sometimes': 39, 'study': 40, 'successfully': 41, 'takes': 42, 'that': 43, 'the': 44, 'to': 45}
Es posible que el resultado no sea tan claro como el que se imprimió utilizando el bucle, aunque todavía cumple su propósito.
Veamos ahora cómo podemos agregar más tokens a un diccionario existente usando un nuevo documento. Mira el siguiente guión:
text = ["""Colloquially, the term "artificial intelligence" is used to
describe machines that mimic "cognitive" functions that humans
associate with other human minds, such as "learning" and "problem solving"""]
tokens = [[token for token in sentence.split()] for sentence in text]
gensim_dictionary.add_documents(tokens)
print("The dictionary has: " + str(len(gensim_dictionary)) + " tokens")
print(gensim_dictionary.token2id)
En el guión de arriba tenemos un nuevo documento que contiene la segunda parte del primer párrafo del artículo de Wikipedia sobre Inteligencia Artificial. Dividimos el texto en tokens y luego simplemente llamamos al add_documents
método para agregar los tokens a nuestro diccionario existente. Finalmente, imprimimos el diccionario actualizado en la consola.
La salida del código se ve así:
The dictionary has: 65 tokens
{'(AI),': 0, 'AI': 1, 'Computer': 2, 'In': 3, 'achieving': 4, 'actions': 5, 'agents:': 6, 'and': 7, 'animals.': 8, 'any': 9, 'artificial': 10, 'as': 11, 'by': 12, 'called': 13, 'chance': 14, 'computer': 15, 'contrast': 16, 'defines': 17, 'demonstrated': 18, 'device': 19, 'displayed': 20, 'environment': 21, 'goals.': 22, 'humans': 23, 'in': 24, 'intelligence': 25, 'intelligence,': 26, 'intelligent': 27, 'is': 28, 'its': 29, 'machine': 30, 'machines,': 31, 'maximize': 32, 'natural': 33, 'of': 34, 'perceives': 35, 'research': 36, 'science': 37, 'science,': 38, 'sometimes': 39, 'study': 40, 'successfully': 41, 'takes': 42, 'that': 43, 'the': 44, 'to': 45, '"artificial': 46, '"cognitive"': 47, '"learning"': 48, '"problem': 49, 'Colloquially,': 50, 'associate': 51, 'describe': 52, 'functions': 53, 'human': 54, 'intelligence"': 55, 'machines': 56, 'mimic': 57, 'minds,': 58, 'other': 59, 'solving': 60, 'such': 61, 'term': 62, 'used': 63, 'with': 64}
Puede ver que ahora tenemos 65 tokens en nuestro diccionario, mientras que anteriormente teníamos 45 tokens.
Crear diccionarios usando archivos de texto
En la sección anterior, teníamos texto en memoria. ¿Qué pasa si queremos crear un diccionario leyendo un archivo de texto del disco duro? Para hacerlo, podemos usar el simple_process
método del gensim.utils
biblioteca. La ventaja de utilizar este método es que lee el archivo de texto línea por línea y devuelve los tokens en la línea. No tiene que cargar el archivo de texto completo en la memoria para crear un diccionario.
Antes de ejecutar el siguiente ejemplo, cree un archivo «file1.txt» y agregue el siguiente texto al archivo (esta es la primera mitad del primer párrafo del artículo de Wikipedia sobre el calentamiento global).
Global warming is a long-term rise in the average temperature of the Earth's climate system, an aspect of climate change shown by temperature measurements and by multiple effects of the warming. Though earlier geological periods also experienced episodes of warming, the term commonly refers to the observed and continuing increase in average air and ocean temperatures since 1900 caused mainly by emissions of greenhouse gasses in the modern industrial economy.
Ahora creemos un diccionario que contendrá tokens del archivo de texto «file1.txt»:
from gensim.utils import simple_preprocess
from smart_open import smart_open
import os
gensim_dictionary = corpora.Dictionary(simple_preprocess(sentence, deacc=True) for sentence in open(r'E:\text files\file1.txt', encoding='utf-8'))
print(gensim_dictionary.token2id)
En el script de arriba leemos el archivo de texto «file1.txt» línea por línea usando el simple_preprocess
método. El método devuelve tokens en cada línea del documento. Luego, los tokens se utilizan para crear el diccionario. En la salida, debería ver los tokens y sus ID correspondientes, como se muestra a continuación:
{'average': 0, 'climate': 1, 'earth': 2, 'global': 3, 'in': 4, 'is': 5, 'long': 6, 'of': 7, 'rise': 8, 'system': 9, 'temperature': 10, 'term': 11, 'the': 12, 'warming': 13, 'an': 14, 'and': 15, 'aspect': 16, 'by': 17, 'change': 18, 'effects': 19, 'measurements': 20, 'multiple': 21, 'shown': 22, 'also': 23, 'earlier': 24, 'episodes': 25, 'experienced': 26, 'geological': 27, 'periods': 28, 'though': 29, 'air': 30, 'commonly': 31, 'continuing': 32, 'increase': 33, 'observed': 34, 'ocean': 35, 'refers': 36, 'temperatures': 37, 'to': 38, 'caused': 39, 'economy': 40, 'emissions': 41, 'gasses': 42, 'greenhouse': 43, 'industrial': 44, 'mainly': 45, 'modern': 46, 'since': 47}
Del mismo modo, podemos crear un diccionario leyendo varios archivos de texto. Cree otro archivo «file2.txt» y agregue el siguiente texto al archivo (la segunda parte del primer párrafo del artículo de Wikipedia sobre el calentamiento global):
In the modern context the terms global warming and climate change are commonly used interchangeably, but climate change includes both global warming and its effects, such as changes to precipitation and impacts that differ by region.[7][8] Many of the observed warming changes since the 1950s are unprecedented in the instrumental temperature record, and in historical and paleoclimate proxy records of climate change over thousands to millions of years.
Guarde el «archivo2.txt» en el mismo directorio que el «archivo1.txt».
La siguiente secuencia de comandos lee ambos archivos y luego crea un diccionario basado en el texto de los dos archivos:
from gensim.utils import simple_preprocess
from smart_open import smart_open
import os
class ReturnTokens(object):
def __init__(self, dir_path):
self.dir_path = dir_path
def __iter__(self):
for file_name in os.listdir(self.dir_path):
for sentence in open(os.path.join(self.dir_path, file_name), encoding='utf-8'):
yield simple_preprocess(sentence)
path_to_text_directory = r"E:text files"
gensim_dictionary = corpora.Dictionary(ReturnTokens(path_to_text_directory))
print(gensim_dictionary.token2id)
En el script de arriba tenemos un método ReturnTokens
, que toma la ruta del directorio que contiene «file1.txt» y «file2.txt» como único parámetro. Dentro del método iteramos a través de todos los archivos en el directorio y luego leemos cada archivo línea por línea. los simple_preprocess
El método crea tokens para cada línea. Los tokens de cada línea se devuelven a la función de llamada utilizando la palabra clave «yield».
En el resultado, debería ver los siguientes tokens junto con sus ID:
{'average': 0, 'climate': 1, 'earth': 2, 'global': 3, 'in': 4, 'is': 5, 'long': 6, 'of': 7, 'rise': 8, 'system': 9, 'temperature': 10, 'term': 11, 'the': 12, 'warming': 13, 'an': 14, 'and': 15, 'aspect': 16, 'by': 17, 'change': 18, 'effects': 19, 'measurements': 20, 'multiple': 21, 'shown': 22, 'also': 23, 'earlier': 24, 'episodes': 25, 'experienced': 26, 'geological': 27, 'periods': 28, 'though': 29, 'air': 30, 'commonly': 31, 'continuing': 32, 'increase': 33, 'observed': 34, 'ocean': 35, 'refers': 36, 'temperatures': 37, 'to': 38, 'caused': 39, 'economy': 40, 'emissions': 41, 'gasses': 42, 'greenhouse': 43, 'industrial': 44, 'mainly': 45, 'modern': 46, 'since': 47, 'are': 48, 'context': 49, 'interchangeably': 50, 'terms': 51, 'used': 52, 'as': 53, 'both': 54, 'but': 55, 'changes': 56, 'includes': 57, 'its': 58, 'precipitation': 59, 'such': 60, 'differ': 61, 'impacts': 62, 'instrumental': 63, 'many': 64, 'record': 65, 'region': 66, 'that': 67, 'unprecedented': 68, 'historical': 69, 'millions': 70, 'over': 71, 'paleoclimate': 72, 'proxy': 73, 'records': 74, 'thousands': 75, 'years': 76}
Creando el Corpus de Bolsa de Palabras
Los diccionarios contienen asignaciones entre palabras y sus valores numéricos correspondientes. Los corpus de la bolsa de palabras de la biblioteca de Gensim se basan en diccionarios y contienen el ID de cada palabra junto con la frecuencia de aparición de la palabra.
Creación de un corpus de bolsa de palabras a partir de objetos en memoria
Mira el siguiente guión:
import gensim
from gensim import corpora
from pprint import pprint
text = ["""In computer science, artificial intelligence (AI),
sometimes called machine intelligence, is intelligence
demonstrated by machines, in contrast to the natural intelligence
displayed by humans and animals. Computer science defines
AI research as the study of intelligent agents: any device that
perceives its environment and takes actions that maximize its chance
of successfully achieving its goals."""]
tokens = [[token for token in sentence.split()] for sentence in text]
gensim_dictionary = corpora.Dictionary()
gensim_corpus = [gensim_dictionary.doc2bow(token, allow_update=True) for token in tokens]
print(gensim_corpus)
En el script anterior, tenemos texto que dividimos en tokens. A continuación, inicializamos un Dictionary
objeto del corpora
módulo. El objeto contiene un método doc2bow
, que básicamente realiza dos tareas:
- Repite todas las palabras del texto, si la palabra ya existe en el corpus, incrementa el recuento de frecuencia de la palabra.
- De lo contrario, inserta la palabra en el corpus y establece su recuento de frecuencia en 1
La salida del script anterior se ve así:
Te puede interesar:Crear e importar módulos en Python[[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 2), (8, 1), (9, 1), (10, 1), (11, 1), (12, 2), (13, 1), (14, 1), (15, 1), (16, 1), (17, 1), (18, 1), (19, 1), (20, 1), (21, 1), (22, 1), (23, 1), (24, 1), (25, 3), (26, 1), (27, 1), (28, 1), (29, 3), (30, 1), (31, 1), (32, 1), (33, 1), (34, 2), (35, 1), (36, 1), (37, 1), (38, 1), (39, 1), (40, 1), (41, 1), (42, 1), (43, 2), (44, 2), (45, 1)]]
Es posible que la salida no tenga sentido para usted. Déjame explicarte. La primera tupla (0,1) básicamente significa que la palabra con ID 0 apareció 1 vez en el texto. De manera similar, (25, 3) significa que la palabra con ID 25 apareció tres veces en el documento.
Imprimamos ahora la palabra y la frecuencia para aclarar las cosas. Agregue las siguientes líneas de código al final del script anterior:
word_frequencies = [[(gensim_dictionary[id], frequence) for id, frequence in couple] for couple in gensim_corpus]
print(word_frequencies)
La salida se ve así:
[[('(AI),', 1), ('AI', 1), ('Computer', 1), ('In', 1), ('achieving', 1), ('actions', 1), ('agents:', 1), ('and', 2), ('animals.', 1), ('any', 1), ('artificial', 1), ('as', 1), ('by', 2), ('called', 1), ('chance', 1), ('computer', 1), ('contrast', 1), ('defines', 1), ('demonstrated', 1), ('device', 1), ('displayed', 1), ('environment', 1), ('goals.', 1), ('humans', 1), ('in', 1), ('intelligence', 3), ('intelligence,', 1), ('intelligent', 1), ('is', 1), ('its', 3), ('machine', 1), ('machines,', 1), ('maximize', 1), ('natural', 1), ('of', 2), ('perceives', 1), ('research', 1), ('science', 1), ('science,', 1), ('sometimes', 1), ('study', 1), ('successfully', 1), ('takes', 1), ('that', 2), ('the', 2), ('to', 1)]]
En el resultado, puede ver que la palabra «inteligencia» aparece tres veces. Del mismo modo, la palabra «eso» aparece dos veces.
Creación de un corpus de bolsa de palabras a partir de archivos de texto
Como los diccionarios, también podemos crear un bolsa de palabras corpus leyendo un archivo de texto. Mira el siguiente código:
from gensim.utils import simple_preprocess
from smart_open import smart_open
import os
tokens = [simple_preprocess(sentence, deacc=True) for sentence in open(r'E:text filesfile1.txt', encoding='utf-8')]
gensim_dictionary = corpora.Dictionary()
gensim_corpus = [gensim_dictionary.doc2bow(token, allow_update=True) for token in tokens]
word_frequencies = [[(gensim_dictionary[id], frequence) for id, frequence in couple] for couple in gensim_corpus]
print(word_frequencies)
En el script anterior, creamos una bolsa de corpus de palabras usando «file1.txt». En el resultado, debería ver las palabras en el primer párrafo del artículo sobre calentamiento global en Wikipedia.
[[('average', 1), ('climate', 1), ('earth', 1), ('global', 1), ('in', 1), ('is', 1), ('long', 1), ('of', 1), ('rise', 1), ('system', 1), ('temperature', 1), ('term', 1), ('the', 2), ('warming', 1)], [('climate', 1), ('of', 2), ('temperature', 1), ('the', 1), ('warming', 1), ('an', 1), ('and', 1), ('aspect', 1), ('by', 2), ('change', 1), ('effects', 1), ('measurements', 1), ('multiple', 1), ('shown', 1)], [('of', 1), ('warming', 1), ('also', 1), ('earlier', 1), ('episodes', 1), ('experienced', 1), ('geological', 1), ('periods', 1), ('though', 1)], [('average', 1), ('in', 1), ('term', 1), ('the', 2), ('and', 2), ('air', 1), ('commonly', 1), ('continuing', 1), ('increase', 1), ('observed', 1), ('ocean', 1), ('refers', 1), ('temperatures', 1), ('to', 1)], [('in', 1), ('of', 1), ('the', 1), ('by', 1), ('caused', 1), ('economy', 1), ('emissions', 1), ('gasses', 1), ('greenhouse', 1), ('industrial', 1), ('mainly', 1), ('modern', 1), ('since', 1)]]
La salida muestra que las palabras como «de», «el», «por» y «y» aparecen dos veces.
Del mismo modo, puede crear un corpus de bolsa de palabras utilizando varios archivos de texto, como se muestra a continuación:
from gensim.utils import simple_preprocess
from smart_open import smart_open
import os
class ReturnTokens(object):
def __init__(self, dir_path):
self.dir_path = dir_path
def __iter__(self):
for file_name in os.listdir(self.dir_path):
for sentence in open(os.path.join(self.dir_path, file_name), encoding='utf-8'):
yield simple_preprocess(sentence)
path_to_text_directory = r"E:text files"
gensim_dictionary = corpora.Dictionary()
gensim_corpus = [gensim_dictionary.doc2bow(token, allow_update=True) for token in ReturnTokens(path_to_text_directory)]
word_frequencies = [[(gensim_dictionary[id], frequence) for id, frequence in couple] for couple in gensim_corpus]
print(word_frequencies)
La salida del script anterior se ve así:
Te puede interesar:Regresión lineal en Python con Scikit-Learn[[('average', 1), ('climate', 1), ('earth', 1), ('global', 1), ('in', 1), ('is', 1), ('long', 1), ('of', 1), ('rise', 1), ('system', 1), ('temperature', 1), ('term', 1), ('the', 2), ('warming', 1)], [('climate', 1), ('of', 2), ('temperature', 1), ('the', 1), ('warming', 1), ('an', 1), ('and', 1), ('aspect', 1), ('by', 2), ('change', 1), ('effects', 1), ('measurements', 1), ('multiple', 1), ('shown', 1)], [('of', 1), ('warming', 1), ('also', 1), ('earlier', 1), ('episodes', 1), ('experienced', 1), ('geological', 1), ('periods', 1), ('though', 1)], [('average', 1), ('in', 1), ('term', 1), ('the', 2), ('and', 2), ('air', 1), ('commonly', 1), ('continuing', 1), ('increase', 1), ('observed', 1), ('ocean', 1), ('refers', 1), ('temperatures', 1), ('to', 1)], [('in', 1), ('of', 1), ('the', 1), ('by', 1), ('caused', 1), ('economy', 1), ('emissions', 1), ('gasses', 1), ('greenhouse', 1), ('industrial', 1), ('mainly', 1), ('modern', 1), ('since', 1)], [('climate', 1), ('global', 1), ('in', 1), ('the', 2), ('warming', 1), ('and', 1), ('change', 1), ('commonly', 1), ('modern', 1), ('are', 1), ('context', 1), ('interchangeably', 1), ('terms', 1), ('used', 1)], [('climate', 1), ('global', 1), ('warming', 1), ('and', 2), ('change', 1), ('effects', 1), ('to', 1), ('as', 1), ('both', 1), ('but', 1), ('changes', 1), ('includes', 1), ('its', 1), ('precipitation', 1), ('such', 1)], [('in', 1), ('of', 1), ('temperature', 1), ('the', 3), ('warming', 1), ('by', 1), ('observed', 1), ('since', 1), ('are', 1), ('changes', 1), ('differ', 1), ('impacts', 1), ('instrumental', 1), ('many', 1), ('record', 1), ('region', 1), ('that', 1), ('unprecedented', 1)], [('climate', 1), ('in', 1), ('of', 2), ('and', 2), ('change', 1), ('to', 1), ('historical', 1), ('millions', 1), ('over', 1), ('paleoclimate', 1), ('proxy', 1), ('records', 1), ('thousands', 1), ('years', 1)]]
Creación de TF-IDF Corpus
El enfoque de la bolsa de palabras funciona bien para convertir texto en números. Sin embargo, tiene un inconveniente. Asigna una puntuación a una palabra en función de su aparición en un documento en particular. No tiene en cuenta el hecho de que la palabra también puede tener una alta frecuencia de apariciones en otros documentos. TF-IDF resuelve este problema.
El término frecuencia se calcula como:
Term frequency = (Frequency of the word in a document)/(Total words in the document)
Y la frecuencia inversa del documento se calcula como:
IDF(word) = Log((Total number of documents)/(Number of documents containing the word))
Usando la biblioteca Gensim, podemos crear fácilmente un corpus TF-IDF:
import gensim
from gensim import corpora
from pprint import pprint
text = ["I like to play Football",
"Football is the best game",
"Which game do you like to play ?"]
tokens = [[token for token in sentence.split()] for sentence in text]
gensim_dictionary = corpora.Dictionary()
gensim_corpus = [gensim_dictionary.doc2bow(token, allow_update=True) for token in tokens]
from gensim import models
import numpy as np
tfidf = models.TfidfModel(gensim_corpus, smartirs="ntc")
for sent in tfidf[gensim_corpus]:
print([[gensim_dictionary[id], np.around(frequency, decimals=2)] for id, frequency in sent])
Para encontrar el valor de TF-IDF, podemos usar el TfidfModel
clase de la models
módulo de la biblioteca Gensim. Simplemente tenemos que pasar la bolsa de corpus de palabras como parámetro al constructor del TfidfModel
clase. En la salida, verá todas las palabras en las tres oraciones, junto con sus valores TF-IDF:
[['Football', 0.3], ['I', 0.8], ['like', 0.3], ['play', 0.3], ['to', 0.3]]
[['Football', 0.2], ['best', 0.55], ['game', 0.2], ['is', 0.55], ['the', 0.55]]
[['like', 0.17], ['play', 0.17], ['to', 0.17], ['game', 0.17], ['?', 0.47], ['Which', 0.47], ['do', 0.47], ['you', 0.47]]
Descarga de modelos y conjuntos de datos integrados de Gensim
Gensim viene con una variedad de conjuntos de datos integrados y modelos de incrustación de palabras que se pueden usar directamente.
Para descargar un modelo o conjunto de datos incorporado, podemos usar el downloader
clase de la gensim
biblioteca. Luego podemos llamar al método de carga en el downloader
class para descargar el paquete deseado. Mira el siguiente código:
import gensim.downloader as api
w2v_embedding = api.load("glove-wiki-gigaword-100")
Con los comandos anteriores, descargamos el modelo de incrustación de palabras «glove-wiki-gigaword-100», que se basa básicamente en el texto de Wikipedia y tiene 100 dimensiones. Intentemos encontrar las palabras similares a «toyota» usando nuestro modelo de incrustación de palabras. Utilice el siguiente código para hacerlo:
w2v_embedding.most_similar('toyota')
En la salida, debería ver los siguientes resultados:
Te puede interesar:Reconocimiento de imágenes en Python con TensorFlow y Keras[('honda', 0.8739858865737915),
('nissan', 0.8108116984367371),
('automaker', 0.7918163537979126),
('mazda', 0.7687169313430786),
('bmw', 0.7616022825241089),
('ford', 0.7547588348388672),
('motors', 0.7539199590682983),
('volkswagen', 0.7176680564880371),
('prius', 0.7156582474708557),
('chrysler', 0.7085398435592651)]
Puedes ver que todos los resultados son muy relevantes para la palabra «toyota». El número de la fracción corresponde al índice de similitud. Un índice de similitud más alto significa que la palabra es más relevante.
Conclusión
La biblioteca Gensim es una de las bibliotecas de Python más populares para NLP. En este artículo, exploramos brevemente cómo se puede usar la biblioteca Gensim para realizar tareas como la creación de un diccionario y un corpus. También vimos cómo descargar módulos incorporados de Gensim. En nuestro próximo artículo, veremos cómo realizar el modelado de temas a través de la biblioteca Gensim.