Python para NLP: Trabajar con la biblioteca Gensim (Parte 1)

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 se puede usar la biblioteca StanfordCoreNLP para realizar diferentes tareas de NLP.
En este artículo, exploraremos la biblioteca Gensim , que es otra biblioteca de PNL extremadamente útil para Python. Gensim fue desarrollado principalmente para el modelado de temas. Sin embargo, ahora admite una variedad de otras tareas de PNL, como la conversión de palabras a vectores (word2vec), documento a vectores (doc2vec), búsqueda de similitud de texto y resumen de texto.
En este artículo y en el siguiente artículo de la serie, veremos cómo se utiliza la biblioteca Gensim para realizar estas tareas.

Instalando Gensim

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 utilizando la biblioteca Gensim.

Creación de 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 a números. De manera similar, después de aplicar diferentes tipos de procesos en los números, necesitamos convertir los números nuevamente al texto.
Una forma de lograr este tipo de funcionalidad es crear un diccionario que asigne una identificación numérica a cada palabra única en el documento. El diccionario se puede usar para encontrar el equivalente numérico de una palabra y viceversa.

Creando diccionarios usando objetos en memoria

Es muy fácil crear diccionarios que asignen palabras a las ID utilizando la biblioteca Gensim de Python. Mira el siguiente script:
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(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 la gensimbiblioteca junto con el corporamódulo de la biblioteca. A continuación, tenemos algo de texto (que es la primera parte del primer párrafo del artículo de Wikipedia sobre Inteligencia Artificial) almacenado en la textvariable.
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 Dictionaryobjeto del corporamódulo y pasarle la lista de tokens.
Finalmente, para imprimir los contenidos del diccionario recién creado, podemos usar el token2idobjeto de la Dictionaryclase. La salida de la secuencia de comandos 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 la palabra ha sido asignada. La palabra o token es la clave del diccionario y la ID es el valor. También puede ver la identificación asignada a la palabra individual utilizando el siguiente script:
print(gensim_dictionary.token2id["study"])  
En la secuencia de comandos anterior, pasamos la palabra "estudio" como la clave de nuestro diccionario. En la salida, debería ver el valor correspondiente, es decir, el ID de la palabra "estudio", que es 40.
De manera similar, puede usar la siguiente secuencia de comandos para encontrar la clave o la palabra para una ID específica.
print(list(gensim_dictionary.token2id.keys())[list(gensim_dictionary.token2id.values()).index(40)])  
Para imprimir los tokens y sus ID correspondientes, utilizamos un bucle for. Sin embargo, puede imprimir directamente los tokens y sus ID al imprimir el diccionario, como se muestra aquí:
print(gensim_dictionary.token2id)  
La salida es la siguiente:
{'(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 la salida no sea tan clara como la que se imprimió usando 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 script:
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 anterior 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_documentsmé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.

Creación de diccionarios utilizando archivos de texto

En la sección anterior, teníamos texto en memoria. ¿Qué sucede si queremos crear un diccionario leyendo un archivo de texto del disco duro? Para ello, podemos utilizar el simple_processmétodo de la gensim.utilsbiblioteca. La ventaja de usar este método es que lee el archivo de texto línea por línea y devuelve los tokens en la línea. No es necesario 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 vamos a crear 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 anterior leemos el archivo de texto "file1.txt" línea por línea usando el simple_preprocessmétodo. El método devuelve tokens en cada línea del documento. Las fichas 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 "file2.txt" en el mismo directorio que "file1.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 anterior tenemos un método ReturnTokens, que toma la ruta del directorio que contiene "file1.txt" y "file2.txt" como el ú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. El simple_preprocessmétodo crea fichas para cada línea. Los tokens para cada línea se devuelven a la función de llamada usando la palabra clave "yield" .
En la salida, 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 Bolsa de Palabras Corpus

Los diccionarios contienen mapeos entre palabras y sus valores numéricos correspondientes. La bolsa de palabras corpora en la biblioteca de Gensim se basa en los diccionarios y contiene el ID de cada palabra junto con la frecuencia con que aparece la palabra.

Creando bolsa de palabras Corpus a partir de objetos en memoria

Mira el siguiente script:
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 Dictionaryobjeto desde el corporamódulo. El objeto contiene un método doc2bow, que básicamente realiza dos tareas:
  • Se itera a través de todas las palabras en el texto, si la palabra ya existe en el corpus, incrementa el conteo de frecuencia para la palabra
  • De lo contrario, inserta la palabra en el corpus y establece su conteo de frecuencia en 1
La salida de la secuencia de comandos anterior se ve así:
[[(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)]]
La salida podría no tener sentido para usted. Déjame explicarlo. La primera tupla (0,1) básicamente significa que la palabra con ID 0 ocurrió 1 vez en el texto. De manera similar, (25, 3) significa que la palabra con ID 25 apareció tres veces en el documento.
Ahora imprimamos 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)]]
Desde la salida, puede ver que la palabra "inteligencia" aparece tres veces. Del mismo modo, la palabra "que" aparece dos veces.

Creando bolsa de palabras Corpus desde archivos de texto

Al igual que los diccionarios, también podemos crear una bolsa de palabras al leer 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 files\file1.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 palabras con "file1.txt". En la salida, debería ver las palabras en el primer párrafo del artículo sobre el 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 una bolsa de corpus 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 de la secuencia de comandos anterior se ve así:
[[('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 Corpus TF-IDF

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 ocurrencias 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 de documentos inversa 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 la TfidfModelclase del modelsmódulo de la biblioteca Gensim. Simplemente tenemos que pasar la bolsa de word corpus como parámetro al constructor de la TfidfModelclase. 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 Gensim incorporados

Gensim viene con una variedad de conjuntos de datos incorporados y modelos de integración de palabras que se pueden usar directamente.
Para descargar un modelo o conjunto de datos incorporado, podemos usar la downloaderclase de la gensimbiblioteca. Luego podemos llamar al método de carga en la downloaderclase 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 incorporación de palabras "glove-wiki-gigaword-100", que se basa básicamente en el texto de Wikipedia y es 100 dimensional. Intentemos encontrar las palabras similares a "toyota" usando nuestro modelo de inserción de palabras. Usa el siguiente código para hacerlo:
w2v_embedding.most_similar('toyota')  
En la salida, deberías ver los siguientes resultados:
[('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 en 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 la PNL. En este artículo, exploramos brevemente cómo se puede utilizar la biblioteca Gensim para realizar tareas como un diccionario y la creación de un corpus. También vimos cómo descargar módulos Gensim incorporados. En nuestro próximo artículo, veremos cómo realizar el modelado de temas a través de la biblioteca Gensim.

Acerca de: Programator

Somos Instinto Programador

0 comentarios:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Con tecnología de Blogger.