Update python-chatGPT course
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
parent
8eccfe3a27
commit
71f53b470b
@ -178,12 +178,75 @@ for idx, opcion in enumerate(respuesta.choices):
|
|||||||
print(f"Respuesta {idx + 1}: {texto_generado}\n")
|
print(f"Respuesta {idx + 1}: {texto_generado}\n")
|
||||||
```
|
```
|
||||||
|
|
||||||
3.3. - Procesar y analizar las respuestas de chatgpt
|
## 3.3. - Procesar y analizar las respuestas de chatgpt
|
||||||
|
|
||||||
|
### 3.3.1. - Analizar la respuesta
|
||||||
|
|
||||||
|
Vamos a utilizar bibliotecas python para mejorar el procesamiento del lenguaje natural de la respuesta:
|
||||||
|
|
||||||
|
- **SpaCy**: es una biblioteca de procesamiento del lenguaje natural (NLP) de código abierto y muy eficiente. Proporciona una amplia gama de funcionalidades para el procesamiento de texto, como el análisis morfológico, el etiquetado gramatical, el reconocimiento de entidades nombradas, el análisis de dependencias sintácticas, la lematización y la extracción de frases clave. SpaCy se destaca por su rendimiento rápido y su capacidad para procesar grandes volúmenes de texto de manera eficiente. *Documentación*: https://spacy.io/usage
|
||||||
|
|
||||||
|
- **TextBlob**: es una biblioteca de procesamiento del lenguaje natural (NLP) basada en NLTK. Ofrece una interfaz sencilla y fácil de usar para realizar tareas comunes de procesamiento de texto, como análisis de sentimientos, corrección ortográfica, tokenización, extracción de frases, lematización y etiquetado gramatical. TextBlob es conocido por su facilidad de uso y su capacidad para realizar tareas básicas de NLP con pocas líneas de código.* Documentación*: https://textblob.readthedocs.io/en/dev/
|
||||||
|
|
||||||
|
- **NLTK (Natural Language Toolkit)**: es una biblioteca popular y ampliamente utilizada para el procesamiento del lenguaje natural en Python. Ofrece una amplia gama de herramientas y recursos para tareas de procesamiento de texto, como tokenización, etiquetado gramatical, lematización, análisis sintáctico, análisis de sentimientos, clasificación de texto, entre otras. NLTK también proporciona acceso a diversos corpus de texto y modelos pre-entrenados, lo que facilita el desarrollo y la experimentación en el campo del procesamiento del lenguaje natural. *Documentación*: https://www.nltk.org/
|
||||||
|
|
||||||
|
Se instalan con pip install <biblioteca> y tendremos que añadirlas con import el en código.
|
||||||
|
|
||||||
|
Escogemos spacy para realizar algunas pruebas.
|
||||||
|
|
||||||
|
Se instalan con pip install spacy y tendremos que añadirlas con import spacy el en código.
|
||||||
|
|
||||||
|
Escogemos el modelo en español en el código con:
|
||||||
|
```python
|
||||||
|
modelo_spacy = spacy.load("es_core_news_md")
|
||||||
|
```
|
||||||
|
Este modelo también lo tenemos que instalar en la terminal
|
||||||
|
```shell
|
||||||
|
python3 -m spacy download es_core_news_md
|
||||||
|
```
|
||||||
|
|
||||||
|
Ahora imprimimos el analisis de la respuesta e imprimimos la lista de tokens, de categorías gramaticales y la relación de dependencia con su encabezado:
|
||||||
|
```python
|
||||||
|
analisis = modelo_spacy(texto_generado)
|
||||||
|
for token in analisis:
|
||||||
|
print(token.text, token.pos_, token.dep_, token.head.text)
|
||||||
|
```
|
||||||
|
|
||||||
|
![](img/python-chatgpt02.png)
|
||||||
|
|
||||||
|
Ahora vamos a imprimir las entidades y las etiquetas que los categorizan,
|
||||||
|
```python
|
||||||
|
for ent in analisis.ents:
|
||||||
|
print(ent.text, ent.label_)
|
||||||
|
```
|
||||||
|
|
||||||
|
![](img/python-chatgpt03.png)
|
||||||
|
|
||||||
|
### 3.3.2. - Utilizar la información extraída
|
||||||
|
Podemos utilizar la información que hemos extraído. Por ejemplo, puede sacar información de tipo LOC, de ubicación. Con lo cuál se puede generar una pregunta por cada etiqueta de este tipo. Por ejemplo:
|
||||||
|
```python
|
||||||
|
ubicacion = None
|
||||||
|
|
||||||
|
for ent in analisis.ents:
|
||||||
|
# print(ent.text, ent.label_)
|
||||||
|
if ent.label_ == "LOC":
|
||||||
|
ubicacion = ent
|
||||||
|
break
|
||||||
|
|
||||||
|
if ubicacion:
|
||||||
|
prompt2 = f"Dime más acerca de {ubicacion}"
|
||||||
|
respuesta2 = openai.Completion.create(
|
||||||
|
engine=modelo,
|
||||||
|
prompt=prompt2,
|
||||||
|
n=1,
|
||||||
|
temperature=1,
|
||||||
|
max_tokens=100
|
||||||
|
)
|
||||||
|
|
||||||
|
print(respuesta2.choices[0].text.strip())
|
||||||
|
```
|
||||||
|
|
||||||
|
![](img/python-chatgpt04.png)
|
||||||
|
|
||||||
## TEMA 4 - Aplicaciones Prácticas de Python + ChatGPT
|
## TEMA 4 - Aplicaciones Prácticas de Python + ChatGPT
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import openai
|
import openai
|
||||||
|
import spacy
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
@ -13,22 +14,51 @@ openai.api_key = api_key
|
|||||||
# print(modelos)
|
# print(modelos)
|
||||||
|
|
||||||
modelo = "text-davinci-002"
|
modelo = "text-davinci-002"
|
||||||
prompt = "Elige un buen nombre para un elefante"
|
prompt = "Cuenta una historia breve de algún lugar concreto"
|
||||||
|
|
||||||
respuesta = openai.Completion.create(
|
respuesta = openai.Completion.create(
|
||||||
engine=modelo,
|
engine=modelo,
|
||||||
prompt=prompt,
|
prompt=prompt,
|
||||||
n=3, # Opcional. Número de respuestas
|
n=1, # Opcional. Número de respuestas
|
||||||
temperature=1, # Opcional. Controla la creatividad de la respuesta
|
temperature=1, # Opcional. Controla la creatividad de la respuesta
|
||||||
max_tokens=50 # Opcional. Número máximo de tokens en la respuesta
|
max_tokens=200 # Opcional. Número máximo de tokens en la respuesta
|
||||||
)
|
)
|
||||||
|
|
||||||
# print(respuesta)
|
# print(respuesta)
|
||||||
|
|
||||||
# texto_generado = respuesta['choices'][0]['text']
|
texto_generado = respuesta.choices[0].text.strip()
|
||||||
# print(texto_generado)
|
print(texto_generado)
|
||||||
|
|
||||||
|
|
||||||
for idx, opcion in enumerate(respuesta.choices):
|
# for idx, opcion in enumerate(respuesta.choices):
|
||||||
texto_generado = opcion.text.strip()
|
# texto_generado = opcion.text.strip()
|
||||||
print(f"Respuesta {idx + 1}: {texto_generado}\n")
|
# print(f"Respuesta {idx + 1}: {texto_generado}\n")
|
||||||
|
|
||||||
|
print("***")
|
||||||
|
|
||||||
|
modelo_spacy = spacy.load("es_core_news_md")
|
||||||
|
|
||||||
|
analisis = modelo_spacy(texto_generado)
|
||||||
|
|
||||||
|
# for token in analisis:
|
||||||
|
# print(token.text, token.pos_, token.dep_, token.head.text)
|
||||||
|
|
||||||
|
ubicacion = None
|
||||||
|
|
||||||
|
for ent in analisis.ents:
|
||||||
|
# print(ent.text, ent.label_)
|
||||||
|
if ent.label_ == "LOC":
|
||||||
|
ubicacion = ent
|
||||||
|
break
|
||||||
|
|
||||||
|
if ubicacion:
|
||||||
|
prompt2 = f"Dime más acerca de {ubicacion}"
|
||||||
|
respuesta2 = openai.Completion.create(
|
||||||
|
engine=modelo,
|
||||||
|
prompt=prompt2,
|
||||||
|
n=1,
|
||||||
|
temperature=1,
|
||||||
|
max_tokens=100
|
||||||
|
)
|
||||||
|
|
||||||
|
print(respuesta2.choices[0].text.strip())
|
||||||
|
BIN
python-chatgpt/img/python-chatgpt02.png
Normal file
BIN
python-chatgpt/img/python-chatgpt02.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
BIN
python-chatgpt/img/python-chatgpt03.png
Normal file
BIN
python-chatgpt/img/python-chatgpt03.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
BIN
python-chatgpt/img/python-chatgpt04.png
Normal file
BIN
python-chatgpt/img/python-chatgpt04.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 57 KiB |
Loading…
Reference in New Issue
Block a user