Descifrando la audiencia del Senado de los Estados Unidos sobre la supervisión de la IA análisis de NLP en Python.

Análisis de NLP en Python de la audiencia del Senado de los EE. UU. sobre la supervisión de la IA descifrada.

Foto de Harold Mendoza en Unsplash

Análisis de frecuencia de palabras, visualización y puntuaciones de sentimiento usando la herramienta NLTK

El domingo pasado por la mañana, mientras cambiaba de canal tratando de encontrar algo para ver mientras desayunaba, me topé con una repetición de la Audiencia del Senado sobre la Supervisión de la Inteligencia Artificial. Solo habían pasado 40 minutos desde que comenzó, así que decidí ver el resto (¡Hablando de una forma interesante de pasar un domingo por la mañana!).

Cuando suceden eventos como la Audiencia del Subcomité Judicial del Senado sobre la Supervisión de la IA y quieres ponerte al día sobre los puntos clave, tienes cuatro opciones: presenciarlo en vivo, buscar futuras grabaciones (ambas opciones requerirían tres horas de tu vida); leer la versión escrita (transcripciones), que tiene alrededor de 79 páginas y más de 29,000 palabras; o leer reseñas en sitios web o redes sociales para obtener diferentes opiniones y formar la tuya (si no es de otros).

Hoy en día, con todo moviéndose tan rápido y nuestros días sintiéndose demasiado cortos, es tentador optar por el atajo y confiar en las reseñas en lugar de ir a la fuente original (yo también he estado allí). Si eliges el atajo para esta audiencia, es altamente probable que la mayoría de las reseñas que encuentres en la web o en las redes sociales se centren en el llamado del CEO de OpenAI, Sam Altman, para regular la IA. Sin embargo, después de ver la audiencia, sentí que había más por explorar más allá de los titulares.

Así que, después de mi actividad del domingo, decidí descargar la transcripción de la Audiencia del Senado y utilizar el paquete NLTK (un paquete de Python para el procesamiento del lenguaje natural – NLP) para analizarlo, comparar las palabras más utilizadas y aplicar algunas puntuaciones de sentimiento a través de diferentes grupos de interés (OpenAI, IBM, Academia, Congreso) y ver qué podría haber entre líneas. ¡Advertencia de spoiler! De las 29,000 palabras analizadas, solo 70 (0.24%) estaban relacionadas con palabras como regulación, regular, regulatorio o legislación.

Es importante tener en cuenta que este artículo no se trata de mis conclusiones de esta audiencia de IA o del Sr. ChatGPT Sam Altman. En cambio, se enfoca en lo que se esconde detrás de las palabras de cada parte de la sociedad (Privada, Academia, Gobierno) representada en esta sesión bajo el techo del Capitolio, y lo que podemos aprender de esas palabras mezclándose entre sí.

Teniendo en cuenta que los próximos meses son tiempos interesantes para el futuro de la regulación en Inteligencia Artificial, ya que el borrador final del Acta de IA de la UE espera el debate en el Parlamento Europeo (se espera que tenga lugar en junio), vale la pena explorar lo que se esconde detrás de las discusiones sobre la IA en este lado del Atlántico.

PASO 01: OBTENER LOS DATOS

Utilicé la transcripción publicada por Justin Hendrix en Tech Policy Press (accesible aquí).

Accede a la transcripción de la audiencia del Senado aquí

Aunque Hendrix menciona que es una transcripción rápida y sugiere confirmar las citas viendo el video de la Audiencia del Senado, todavía la encontré bastante precisa e interesante para este análisis. Si quieres ver la Audiencia del Senado o leer los testimonios de Sam Altman (Open AI), Christina Montgomery (IBM) y Gary Marcus (Profesor en la Universidad de Nueva York), puedes encontrarlos aquí.

Inicialmente, planeé copiar la transcripción a un documento de Word y crear manualmente una tabla en Excel con los nombres de los participantes, sus organizaciones representantes y sus comentarios. Sin embargo, este enfoque fue largo e ineficiente. Así que, recurrí a Python y cargué la transcripción completa de un archivo de Microsoft Word en un marco de datos. Aquí está el código que usé:

# PASO 01 - Leer el documento de Word# recuerda instalar  pip install python-docximport docximport pandas as pddoc = docx.Document('D:\....tu archivo de Word en Microsoft Word')items = []names = []comments = []# Iterar sobre los párrafosfor paragraph in doc.paragraphs:    text = paragraph.text.strip()    if text.endswith(':'):        name = text[:-1]      else:        items.append(len(items))        names.append(name)        comments.append(text)dfsenate = pd.DataFrame({'item': items, 'name': names, 'comment': comments})# Eliminar filas con comentarios vacíosdfsenate = dfsenate[dfsenate['comment'].str.strip().astype(bool)]# Restablecer el índicedfsenate.reset_index(drop=True, inplace=True)dfsenate['item'] = dfsenate.index + 1print(dfsenate)

La salida debería verse así:

 nombre del artículo comentario0 1 Sen. Richard Blumenthal (D-CT) Ahora, algunas observaciones introductorias.1 2 Sen. Richard Blumenthal (D-CT) "Con demasiada frecuencia hemos visto lo que sucede cuando la tecnología supera la regulación, la explotación desenfrenada de los datos personales, la proliferación de la desinformación y el agravamiento de las desigualdades sociales. Hemos visto cómo los sesgos algorítmicos pueden perpetuar la discriminación y el prejuicio, y cómo la falta de transparencia puede socavar la confianza pública. Este no es el futuro que queremos".2 3 Sen. Richard Blumenthal (D-CT) Si estuviera escuchando desde casa, podría haber pensado que esa voz era mía y las palabras mías, pero de hecho, esa voz no era mía. Las palabras no eran mías. Y el audio era un software de clonación de voz de IA capacitado en mis discursos en el piso. Los comentarios fueron escritos por ChatGPT cuando se le preguntó cómo abriría esta audiencia. Y acabas de escuchar el resultado. Le pregunté a ChatGPT por qué eligió esos temas y ese contenido. Y respondió. Y cito: Blumenthal tiene un sólido historial de defensa de la protección del consumidor y los derechos civiles. Ha sido vocal sobre temas como la privacidad de los datos y el potencial de discriminación en la toma de decisiones algorítmicas. Por lo tanto, la declaración enfatiza estos aspectos.3 4 Sen. Richard Blumenthal (D-CT) Sr. Altman, aprecio el respaldo de ChatGPT. En serio, este razonamiento aparente es bastante impresionante. Estoy seguro de que miraremos hacia atrás en una década y veremos a ChatGPT y GPT-4 como lo hacemos con el primer teléfono celular, esas grandes cosas torpes que solíamos llevar. Pero reconocemos que estamos al borde, realmente, de una nueva era. El audio y mi interpretación, puede parecerte curioso o humorístico, pero lo que resonó en mi mente fue ¿qué pasaría si se lo hubiera preguntado? ¿Y si hubiera proporcionado un respaldo de Ucrania, rindiéndose o el liderazgo de Vladimir Putin? Eso habría sido realmente aterrador. Y la perspectiva es más que un poco aterradora al usar la palabra, Sr. Altman, que usted mismo ha usado, y creo que ha sido muy constructivo al llamar la atención sobre las trampas, así como sobre la promesa.4 5 Sen. Richard Blumenthal (D-CT) Y esa es la razón por la que queríamos que estuvieras aquí hoy. Y te agradecemos a ti y a nuestros otros testigos por unirte a nosotros durante varios meses. Ahora, el público ha estado fascinado con GPT, dally y otras herramientas de IA. Estos ejemplos, como la tarea realizada por ChatGPT o los artículos y editoriales que puede escribir, parecen novedades. Pero los avances subyacentes de esta era son más que simples experimentos de investigación. Ya no son fantasías de ciencia ficción. Son reales y presentan las promesas de curar el cáncer o desarrollar nuevas comprensiones de la física y la biología o modelar el clima y el tiempo. Todo muy alentador y esperanzador. Pero también conocemos los posibles daños y ya los hemos visto: la desinformación armada, la discriminación en la vivienda, el acoso a las mujeres y la suplantación, el fraude, la clonación de voz y las falsificaciones profundas. Estos son los riesgos potenciales a pesar de las otras recompensas. Y para mí, tal vez la mayor pesadilla sea la inminente nueva revolución industrial. El desplazamiento de millones de trabajadores, la pérdida de un gran número de empleos, la necesidad de prepararse para esta nueva revolución industrial en la capacitación de habilidades y la reubicación que puede ser necesaria. Y ya los líderes de la industria están llamando la atención sobre esos desafíos.5 6 Sen. Richard Blumenthal (D-CT) Para citar a ChatGPT, este no es necesariamente el futuro que queremos. Necesitamos maximizar lo bueno sobre lo malo. El Congreso tiene una opción. Ahora. Tuvimos la misma opción cuando nos enfrentamos a las redes sociales. No aprovechamos ese momento. El resultado son depredadores en Internet, contenido tóxico que explota a los niños, creando peligros para ellos. Y la senadora Blackburn y yo y otros como el senador Durbin en el Comité Judicial estamos tratando de lidiar con él en la Ley de Seguridad en Línea para Niños. Pero el Congreso no estuvo a la altura del momento en las redes sociales. Ahora tenemos la obligación de hacerlo en IA antes de que las amenazas y los riesgos se vuelvan reales. Las medidas sensatas de protección no están en oposición a la innovación. La responsabilidad no es una carga, todo lo contrario. Son la base de cómo podemos avanzar protegiendo la confianza pública. Son cómo podemos liderar el mundo en tecnología y ciencia, pero también en la promoción de nuestros valores democráticos.6 7 Sen. Richard Blumenthal (D-CT) De lo contrario, en ausencia de esa confianza, creo que bien podríamos perder ambos. Estas son tecnologías sofisticadas, pero hay expectativas básicas comunes en nuestra ley. Podemos empezar por la transparencia. Las empresas de IA deberían estar obligadas a probar sus sistemas, divulgar los riesgos conocidos y permitir el acceso de investigadores independientes. Podemos establecer tarjetas de puntuación y etiquetas de nutrición para fomentar la competencia basada en la seguridad y la confiabilidad, limitaciones de uso. Hay lugares donde el riesgo de IA es tan extremo que deberíamos restringir o incluso prohibir su uso, especialmente cuando se trata de invasiones comerciales de la privacidad con fines de lucro y decisiones que afectan los medios de vida de las personas. Y, por supuesto, responsabilidad, confiabilidad. Cuando las empresas de IA y sus clientes causan daño, deben ser responsables. No debemos repetir nuestros errores pasados, por ejemplo, la Sección 230, obligando a las empresas a pensar con anticipación y ser responsables de las ramificaciones de sus decisiones comerciales puede ser la herramienta más poderosa de todas. Basura adentro, basura afuera. El principio sigue siendo válido. Debemos tener cuidado con la basura, ya sea que entre en estas plataformas o salga de ellas.

Luego, consideré agregar algunas etiquetas para futuros análisis, identificando a los individuos por el segmento de la sociedad que representaban

def assign_sector(name):    if name in ['Sam Altman', 'Christina Montgomery']:        return 'Privado'    elif name == 'Gary Marcus':        return 'Academia'    else:        return 'Congreso'# Aplicar la función dfsenate['sector'] = dfsenate['name'].apply(assign_sector)# Asignar organizaciones basadas en nombresdef assign_organization(name):    if name == 'Sam Altman':        return 'OpenAI'    elif name == 'Christina Montgomery':        return 'IBM'    elif name == 'Gary Marcus':        return 'Academia'    else:        return 'Congreso'# Aplicar la funcióndfsenate['Organización'] = dfsenate['name'].apply(assign_organization)print(dfsenate)

Finalmente, decidí agregar una columna que cuente las palabras de cada declaración, lo que también podría ayudarnos para análisis posteriores.

dfsenate['ConteoPalabras'] = dfsenate['comment'].apply(lambda x: len(x.split()))

En esta parte, su dataframe debería verse así:

   item                            name  ... Organización ConteoPalabras0       1  Sen. Richard Blumenthal (D-CT)  ...     Congreso         51       2  Sen. Richard Blumenthal (D-CT)  ...     Congreso        552       3  Sen. Richard Blumenthal (D-CT)  ...     Congreso       1253       4  Sen. Richard Blumenthal (D-CT)  ...     Congreso       1454       5  Sen. Richard Blumenthal (D-CT)  ...     Congreso       197..    ...                             ...  ...          ...       ...399   400         Sen. Cory Booker (D-NJ)  ...     Congreso       156400   401                      Sam Altman  ...       OpenAI       180401   402         Sen. Cory Booker (D-NJ)  ...     Congreso        72402   403  Sen. Richard Blumenthal (D-CT)  ...     Congreso       154403   404  Sen. Richard Blumenthal (D-CT)  ...     Congreso        98

PASO 02: VISUALIZAR LOS DATOS

Echemos un vistazo a los números que tenemos hasta ahora: 404 preguntas o testimonios y casi 29,000 palabras. Estos números nos dan el material que necesitamos para comenzar. Es importante saber que algunas declaraciones se dividieron en partes más pequeñas. Cuando había declaraciones largas con diferentes párrafos, el código las dividía en declaraciones separadas, aunque en realidad eran parte de una sola contribución. Para obtener una mejor comprensión de la participación de cada participante, también considero la cantidad de palabras que utilizaron. Esto dio otra perspectiva sobre su compromiso.

Audiencia sobre la supervisión de la IA: Figura 01

Como se puede ver en la Figura 01, las intervenciones de los miembros del Congreso representaron más de la mitad de todas las audiencias, seguidas del testimonio de Sam Altman. Sin embargo, una vista alternativa obtenida contando las palabras de cada lado muestra una representación más equilibrada entre el Congreso (11 miembros) y el panel compuesto por Altman (OpenAI), Montgomery (IBM) y Marcus (Academia).

Es interesante notar los diferentes niveles de compromiso entre los miembros del Congreso que participaron en la audiencia del Senado (ver tabla a continuación). Como era de esperar, el Sen. Blumenthal, como presidente del subcomité, estuvo altamente comprometido. ¿Pero qué pasa con los otros miembros? La tabla muestra variaciones significativas en el compromiso entre los once participantes. Recuerde, la cantidad de contribuciones no necesariamente indica su calidad. Lo dejo a su juicio mientras revisa los números.

Por último, aunque Sam Altman recibió mucha atención, vale la pena señalar que Gary Marcus, a pesar de que puede parecer que tuvo pocas oportunidades de participación, tuvo mucho que decir, como indica su conteo de palabras, que es similar al de Altman. ¿O es tal vez porque la academia a menudo proporciona explicaciones detalladas, mientras que el mundo de los negocios prefiere la practicidad y la claridad?

De acuerdo, profesor Marcus, si pudiera ser específico. Esta es su oportunidad, hombre. Hable en inglés común y dígame qué reglas, si las hay, debemos implementar. Y por favor, no solo use conceptos. Estoy buscando especificidad.

Sen. John Kennedy (R-LA). Audiencia del Senado de EE. UU. sobre la supervisión de la IA (2023)

#*****************************GRÁFICOS CIRCULARES************************************import pandas as pdimport matplotlib.pyplot as plt# Gráfico circular - Agrupación por 'Organización' Preguntas y Testimoniosorg_colors = {'Congreso': '#6BB6FF', 'OpenAI': 'verde', 'IBM': 'celeste claro', 'Academia': 'amarillo claro'}org_counts = dfsenate['Organización'].value_counts()plt.figure(figsize=(8, 6))patches, text, autotext = plt.pie(org_counts.values, labels=org_counts.index,                                   autopct=lambda p: f'{p:.1f}%\n({int(p * sum(org_counts.values) / 100)})',                                   startangle=90, colors=[org_colors.get(org, 'gris') for org in org_counts.index])plt.title('Audiencia sobre la supervisión de la IA: Preguntas o Testimonios')plt.axis('equal')plt.setp(text, fontsize=12)plt.setp(autotext, fontsize=12)plt.show()# Gráfico circular - Agrupación por 'Organización' (Conteo de Palabras)org_colors = {'Congreso': '#6BB6FF', 'OpenAI': 'verde', 'IBM': 'celeste claro', 'Academia': 'amarillo claro'}org_wordcount = dfsenate.groupby('Organización')['Conteo de Palabras'].sum()plt.figure(figsize=(8, 6))patches, text, autotext = plt.pie(org_wordcount.values, labels=org_wordcount.index,                                   autopct=lambda p: f'{p:.1f}%\n({int(p * sum(org_wordcount.values) / 100)})',                                   startangle=90, colors=[org_colors.get(org, 'gris') for org in org_wordcount.index])plt.title('Audiencia sobre la supervisión de la IA: Conteo de Palabras')plt.axis('equal')plt.setp(text, fontsize=12)plt.setp(autotext, fontsize=12)plt.show()#************Participación de los miembros del Congreso**********************# Agrupar por nombre y contar las filasSummary_Name = dfsenate.groupby('nombre').agg(conteo_comentarios=('comentario', 'size')).reset_index()# Columna de Conteo de Palabras para cada nombreSummary_Name ['Total_Palabras'] = dfsenate.groupby('nombre')['Conteo de Palabras'].sum().values# Distribución porcentual para el conteo de comentariosSummary_Name ['porcentaje_conteo_comentarios'] = Summary_Name['conteo_comentarios'] / Summary_Name['conteo_comentarios'].sum() * 100# Distribución porcentual para el conteo total de palabrasSummary_Name ['porcentaje_contador_palabras'] = Summary_Name['Total_Palabras'] / Summary_Name['Total_Palabras'].sum() * 100Summary_Name  = Summary_Name.sort_values('Total_Palabras', ascending=False)print (Summary_Name)+-------+--------------------------------+---------------+-------------+------------------------+-------------------------+| index |              nombre            | Intervenciones| Total_Palabras | porcentaje_intervenciones | porcentaje_contador_palabras |+-------+--------------------------------+---------------+-------------+------------------------+-------------------------+|     2 | Sam Altman                     |            92 |        6355 |     22.77227723         |  22.32252626 ||     1 | Gary Marcus                    |            47 |        5105 |     11.63366337         |  17.93178545 ||    15 | Sen. Richard Blumenthal (D-CT) |            58 |        3283 |     14.35643564         |  11.53184165 ||    10 | Sen. Josh Hawley (R-MO)        |            25 |        2283 |     6.188118812         |  8.019249008 ||     0 | Christina Montgomery           |            36 |        2162 |     8.910891089         |  7.594225298 ||     6 | Sen. Cory Booker (D-NJ)        |            20 |        1688 |      4.95049505         |  5.929256384 ||     7 | Sen. Dick Durbin (D-IL)        |             8 |        1143 |      1.98019802         |  4.014893393 ||    11 | Sen. Lindsey Graham (R-SC)     |            32 |         880 |     7.920792079         |  3.091081527 ||     5 | Sen. Christopher Coons (D-CT)  |             6 |         869 |     1.485148515         |  3.052443008 ||    12 | Sen. Marsha Blackburn (R-TN)   |            14 |         869 |     3.465346535         |  3.052443008 ||     4 | Sen. Amy Klobuchar (D-MN)      |            11 |         769 |     2.722772277         |  2.701183744 ||    13 | Sen. Mazie Hirono (D-HI)       |             7 |         755 |     1.732673267         |  2.652007447 ||    14 | Sen. Peter Welch (D-VT)        |            11 |         704 |     2.722772277         |  2.472865222 ||     3 | Sen. Alex Padilla (D-CA)       |             7 |         656 |     1.732673267         |  2.304260775 |+-------+--------------------------------+---------------+-------------+------------------------+-------------------------+

PASO 03: TOKENIZACIÓN

Aquí es donde comienza la diversión del procesamiento de lenguaje natural (NLP). Para analizar el texto, utilizaremos el paquete NLTK en Python. Proporciona herramientas útiles para el análisis y visualización de la frecuencia de palabras. Las siguientes bibliotecas y módulos proporcionarán las herramientas necesarias para el análisis y visualización de la frecuencia de palabras:

#pip install nltk#pip install spacy#pip install wordcloud#pip install subprocess#python -m spacy download en

Primero, comenzaremos con la Tokenización, que significa dividir el texto en palabras individuales, también conocidas como “tokens”. Para ello, usaremos spaCy, una biblioteca de NLP de código abierto que puede manejar contracciones, puntuación y caracteres especiales. Luego, eliminaremos las palabras comunes que no agregan mucho significado, como “a”, “an”, “the”, “is” y “and”, utilizando el recurso de palabra de parada de la biblioteca NLTK. Por último, aplicaremos la Lematización, que reduce las palabras a su forma base, conocida como el lema. Por ejemplo, “running” se convierte en “run” y “happier” se convierte en “happy”. Esta técnica nos ayuda a trabajar con el texto de manera más efectiva y a entender su significado.

Para resumir:

o Tokenizar el texto.

o Eliminar palabras comunes.

o Aplicar Lematización.

#***************************FRECUENCIA DE PALABRAS*******************************import subprocessimport nltkimport spacyfrom nltk.probability import FreqDistfrom nltk.corpus import stopwords# Descargar recursos subprocess.run('python -m spacy download en', shell=True)nltk.download('punkt')# Cargar modelo spaCy y establecer palabras de paradanlp = spacy.load('en_core_web_sm')stop_words = set(stopwords.words('english'))def preprocess_text(text):    words = nltk.word_tokenize(text)    words = [word.lower() for word in words if word.isalpha()]    words = [word for word in words if word not in stop_words]    lemmas = [token.lemma_ for token in nlp(" ".join(words))]    return lemmas# Agregar palabras y crear distribución de frecuenciasall_comments = ' '.join(dfsenate['comment'])processed_comments = preprocess_text(all_comments)fdist = FreqDist(processed_comments)#**********************AUDIENCIA DE LAS 30 PALABRAS MÁS COMUNES*********************import matplotlib.pyplot as pltimport numpy as np# Palabras más comunes y sus frecuenciastop_words = fdist.most_common(30)words = [word for word, freq in top_words]frequencies = [freq for word, freq in top_words]# Gráfico de barras - Audiencia sobre la supervisión de la IA: 30 palabras más comunesfig, ax = plt.subplots(figsize=(8, 10))ax.barh(range(len(words)), frequencies, align='center', color='skyblue')ax.invert_yaxis()ax.set_xlabel('Frecuencia', fontsize=12)ax.set_ylabel('Palabras', fontsize=12)ax.set_title('Audiencia sobre la supervisión de la IA: 30 palabras más comunes', fontsize=14)ax.set_yticks(range(len(words)))ax.set_yticklabels(words, fontsize=10)ax.spines['right'].set_visible(False)ax.spines['top'].set_visible(False)ax.spines['left'].set_linewidth(0.5)ax.spines['bottom'].set_linewidth(0.5)ax.tick_params(axis='x', labelsize=10)plt.subplots_adjust(left=0.3)for i, freq in enumerate(frequencies):    ax.text(freq + 5, i, str(freq), va='center', fontsize=8)plt.show()
Audiencia sobre la supervisión de la IA: Figura 02

Como se puede ver en el gráfico de barras (Figura 02), hubo mucho “pensamiento”. Tal vez las primeras cinco palabras nos den una pista interesante de lo que deberíamos hacer hoy y en el futuro en términos de IA:

“Necesitamos pensar y saber hacia dónde debería ir la IA”.

Como mencioné al principio de este artículo, a primera vista, la “regulación” no destaca como una palabra de uso frecuente en la audiencia del Senado sobre IA. Sin embargo, concluir que no fue un tema de gran preocupación podría ser inexacto. El interés en si la IA debe o no ser regulada se expresó en diferentes palabras como “regulación”, “regular”, “agencia” o “regulatorio”. Por lo tanto, hagamos algunos ajustes en el código, agreguemos estas palabras y volvamos a ejecutar el gráfico de barras para ver cómo afecta esto al análisis.

nlp = spacy.load('en_core_web_sm')
stop_words = set(stopwords.words('english'))

def preprocess_text(text):
    words = nltk.word_tokenize(text)
    words = [word.lower() for word in words if word.isalpha()]
    words = [word for word in words if word not in stop_words]
    lemmas = [token.lemma_ for token in nlp(" ".join(words))]
    return lemmas

# Agregando palabras y creando la distribución de frecuencia
all_comments = ' '.join(dfsenate['comment'])
processed_comments = preprocess_text(all_comments)
fdist = FreqDist(processed_comments)
original_fdist = fdist.copy() # Guardando el objeto original
aggregate_words = ['regulación', 'regular','agencia', 'regulador','legislación']
aggregate_freq = sum(fdist[word] for word in aggregate_words)
df_aggregatereg = pd.DataFrame({'Palabra': aggregate_words, 'Frecuencia': [fdist[word] for word in aggregate_words]})

# Removiendo palabras individuales y agregando la agregación
for word in aggregate_words:
    del fdist[word]
fdist['regulación+agencia'] = aggregate_freq

# Gráfico de torta para la distribución de regulación+agencia
import matplotlib.pyplot as plt
labels = df_aggregatereg['Palabra']
values = df_aggregatereg['Frecuencia']
plt.figure(figsize=(8, 6))
plt.subplots_adjust(top=0.8, bottom=0.25) 
patches, text, autotext = plt.pie(values, labels=labels,
                                  autopct=lambda p: f'{p:.1f}%\n({int(p * sum(values) / 100)})',
                                  startangle=90, colors=['#6BB6FF', 'green', 'lightblue', 'lightyellow', 'gray'])
plt.title('Regulación+Agencia: Distribución', fontsize=14)
plt.axis('equal')
plt.setp(text, fontsize=8) 
plt.setp(autotext, fontsize=8) 
plt.show()
Audiencia sobre supervisión de IA: Figura 03

Como se puede observar en la Figura-03, el tema de la regulación fue mencionado en numerosas ocasiones durante la Audiencia del Senado sobre IA.

PASO 04: LO QUE SE ESCONDE DETRÁS DE LAS PALABRAS

Las palabras por sí solas pueden proporcionarnos algunas pistas, pero es la interconexión de las palabras la que realmente nos ofrece una perspectiva. Entonces, tomemos un enfoque utilizando nubes de palabras para explorar si podemos descubrir información que no pueda ser mostrada por simples gráficos de barras o tortas.

# Nube de palabras - Audiencia del Senado sobre la supervisión de IA
from wordcloud import WordCloud
wordcloud = WordCloud(width=800, height=400, background_color='white').generate_from_frequencies(fdist)
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title('Nube de Palabras - Audiencia del Senado sobre la supervisión de IA')
plt.show()
Audiencia sobre supervisión de IA: Figura 04

Exploramos más a fondo y comparamos las nubes de palabras para los diferentes grupos de interés representados en la Audiencia de IA (Privado, Congreso, Academia) para ver si las palabras revelan diferentes perspectivas sobre el futuro de la IA.

# Nubes de palabras para cada grupo de interés
organizations = dfsenate['Organization'].unique()
for organization in organizations:
    comments = dfsenate[dfsenate['Organization'] == organization]['comment']
    all_comments = ' '.join(comments)
    processed_comments = preprocess_text(all_comments)
    fdist_organization = FreqDist(processed_comments)
    # Nubes de palabras
    wordcloud = WordCloud(width=800, height=400, background_color='white').generate_from_frequencies(fdist_organization)
    plt.figure(figsize=(10, 5))
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis('off')
    if organization == 'IBM':
        plt.title(f'Nube de Palabras: {organization} - Christina Montgomery')
    elif organization == 'OpenAI':
        plt.title(f'Nube de Palabras: {organization} - Sam Altman')
    elif organization == 'Academia':
        plt.title(f'Nube de Palabras: {organization} - Gary Marcus')
    else:
        plt.title(f'Nube de Palabras: {organization}')
    plt.show()
Audiencia sobre Supervisión de la IA: Figura 05

Es interesante cómo algunas palabras aparecen (o desaparecen) para cada grupo de interés representado en la Audiencia de la IA del Senado mientras hablan sobre inteligencia artificial.

En cuanto al gran título, “El llamado de Sam Altman para regular la IA”; bueno, si él está a favor de la regulación o no, realmente no puedo decirlo, pero no parece tener muchas regulaciones en sus palabras. En lugar de eso, Sam Altman parece tener un enfoque centrado en las personas cuando habla sobre IA, repitiendo palabras como “pensar”, “personas”, “saber”, “importante” y “usar” y se apoya más en palabras como “tecnología”, “sistema” o “modelo” en lugar de usar la palabra “IA”.

Alguien que tuvo algo que decir sobre “riesgo” e “problemas” fue Christina Montgomery (IBM) quien repitió estas palabras constantemente al hablar de ” tecnología“, ” empresas” y “IA”. Un hecho interesante en su testimonio es encontrar palabras que la mayoría espera escuchar de las empresas involucradas en el desarrollo de tecnología; “confianza”, “gobernanza” y “pensar” en lo que es “correcto” en términos de IA.

Necesitamos responsabilizar a las empresas hoy y hacerlas responsables de la IA que están implementando…..

Christina Montgomery. Audiencia del Senado de EE. UU. sobre Supervisión de la IA (2023)

Gary Marcus en su declaración inicial dijo: “Vengo como científico, alguien que ha fundado empresas de IA y alguien que realmente ama la IA…” Así que, por el bien de este análisis de procesamiento del lenguaje natural, lo consideramos como una representación de la voz de la Academia. Palabras como “necesidad”, “pensar”, “saber”, “ir”, “personas” destacan entre otras. Un hecho interesante es que la palabra “sistema” parece repetirse más que ” IA” en su testimonio. Tal vez la IA no sea una sola tecnología solitaria que cambie el futuro, el impacto en el futuro vendrá de múltiples tecnologías o sistemas interactuando entre sí (IoT, robótica, BioTech, etc.) en lugar de depender únicamente de uno de ellos.

Al final, la primera hipótesis mencionada por el Senador John Kennedy no parece ser del todo falsa (no solo para el Congreso sino para la sociedad en su conjunto). Todavía estamos en esa etapa en la que estamos tratando de entender la dirección hacia la que se dirige la IA.

Permítanme compartir con ustedes tres hipótesis que me gustaría que asumieran por el momento que son verdaderas. Hipótesis número uno, muchos miembros del Congreso no entienden la inteligencia artificial. Hipótesis número dos, esa falta de comprensión no impedirá que el Congreso se sumerja con entusiasmo e intente regular esta tecnología de una manera que pueda dañarla. Hipótesis número tres, me gustaría que asumieran que es probable que haya un ala frenética de la comunidad de inteligencia artificial que intencional o involuntariamente podría usar la inteligencia artificial para matarnos a todos y hacernos daño todo el tiempo que estamos muriendo…..

Sen. John Kennedy (R-LA). Audiencia del Senado de EE. UU. sobre Supervisión de la IA (2023)

PASO 05: LA EMOCIÓN DETRÁS DE TUS PALABRAS

Utilizaremos la clase SentimentIntensityAnalyzer de la biblioteca NLTK para el análisis de sentimientos. Este modelo pre-entrenado utiliza un enfoque basado en léxico, donde cada palabra en el léxico (VADER) tiene un valor de polaridad de sentimiento predefinido. Las puntuaciones de sentimiento de las palabras en un fragmento de texto se agregan para calcular una puntuación global de sentimiento. El valor numérico varía de -1 (sentimiento negativo) a +1 (sentimiento positivo), con 0 que indica un sentimiento neutral. El sentimiento positivo refleja una emoción, actitud o entusiasmo favorable, mientras que el sentimiento negativo transmite una emoción o actitud desfavorable.

#************ANÁLISIS DE SENTIMIENTO************from nltk.sentiment import SentimentIntensityAnalyzernltk.download('vader_lexicon')sid = SentimentIntensityAnalyzer()dfsenate['Sentiment'] = dfsenate['comment'].apply(lambda x: sid.polarity_scores(x)['compound'])#************BOXPLOT-GRUPO DE INTERÉS************import seaborn as snsimport matplotlib.pyplot as pltsns.set_style('white')plt.figure(figsize=(12, 7))sns.boxplot(x='Sentiment', y='Organization', data=dfsenate, color='yellow',             width=0.6, showmeans=True, showfliers=True)# Personalización de los ejes def add_cosmetics(title='Distribución del Análisis de Sentimiento por Grupo de Interés',                  xlabel='Sentimiento'):    plt.title(title, fontsize=28)    plt.xlabel(xlabel, fontsize=20)    plt.xticks(fontsize=15)    plt.yticks(fontsize=15)    sns.despine()def customize_labels(label):    if "OpenAI" in label:        return label + "-Sam Altman"    elif "IBM" in label:        return label + "-Christina Montgomery"    elif "Academia" in label:        return label + "-Gary Marcus"    else:        return label# Aplicar etiquetas personalizadas al eje yyticks = plt.yticks()[1]plt.yticks(ticks=plt.yticks()[0], labels=[customize_labels(label.get_text())                                           for label in yticks])add_cosmetics()plt.show()
Hearing on Oversight of AI: Figure 06

Un diagrama de caja siempre resulta interesante, ya que muestra los valores mínimo y máximo, la mediana, el primer (Q1) y tercer (Q3) cuartil. Además, se agregó una línea de código para mostrar el valor promedio. (Agradecimiento a Elena Kosourova por diseñar la plantilla de código del diagrama de caja; solo hice ajustes para mi conjunto de datos).

En general, todos parecían estar de buen humor durante la audiencia del Senado, especialmente Sam Altman, quien destacó con la puntuación de sentimiento más alta, seguido de Christina Montgomery. Por otro lado, Gary Marcus parecía tener una experiencia más neutral (mediana alrededor de 0,25) y puede haberse sentido algo incómodo en ocasiones, con valores cercanos a 0 o incluso negativos. Además, el Congreso en su conjunto mostró una distribución sesgada hacia la izquierda en sus puntuaciones de sentimiento, lo que indica una tendencia hacia la neutralidad o la positividad. Curiosamente, si observamos más de cerca, ciertas intervenciones destacan con puntuaciones de sentimiento extremadamente altas o bajas.

Hearing on Oversight of AI: Figure 07

Tal vez deberíamos interpretar los resultados no como si las personas en la audiencia del Senado estuvieran felices o incómodas. Tal vez esto sugiera que aquellos que participan en la audiencia no tienen una visión excesivamente optimista de hacia dónde se dirige la IA, pero al mismo tiempo, tampoco son pesimistas. Las puntuaciones pueden indicar que existen ciertas preocupaciones y se está siendo cauteloso acerca de la dirección que debe tomar la IA.

¿Y qué pasa con una línea de tiempo? ¿El estado de ánimo durante la audiencia se mantuvo igual en todo momento? ¿Cómo evolucionó el estado de ánimo de cada grupo de interés? Para analizar la línea de tiempo, organicé las declaraciones en el orden en que se capturaron y realicé un análisis de sentimiento. Dado que hay más de 400 preguntas o testimonios, definí un promedio móvil de las puntuaciones de sentimiento para cada grupo de interés (Congreso, Academia, Privado), utilizando un tamaño de ventana de 10. Esto significa que el promedio móvil se calcula promediando las puntuaciones de sentimiento sobre cada 10 declaraciones consecutivas:

#**************************LÍNEA DE TIEMPO DE LA AUDIENCIA SOBRE LA IA DEL SENADO DE EE. UU.**************************************import seaborn as snsimport matplotlib.pyplot as pltimport numpy as npfrom scipy.interpolate import make_interp_spline# Promedio móvil para cada organizaciónwindow_size = 10  organizations = dfsenate['Organization'].unique()# Crear el gráfico de línea paleta_de_colores = sns.color_palette('Set2', len(organizations))plt.figure(figsize=(12, 6))for i, org in enumerate(organizations):    df_org = dfsenate[dfsenate['Organization'] == org]        # promedio móvil    df_org['Sentiment'].fillna(0, inplace=True) # los valores faltantes se rellenan con 0    df_org['Promedio_móvil'] = df_org['Sentiment'].rolling(window=window_size, min_periods=1).mean()        x = np.linspace(df_org.index.min(), df_org.index.max(), 500)    spl = make_interp_spline(df_org.index, df_org['Promedio_móvil'], k=3)    y = spl(x)    plt.plot(x, y, linewidth=2, label=f'{org} {window_size}-Promedio móvil de Puntos', color=paleta_de_colores[i])plt.xlabel('Número de Declaración', fontsize=12)plt.ylabel('Puntuación de Sentimiento', fontsize=12)plt.title('Evolución de la Puntuación de Sentimiento durante la Audiencia sobre la Supervisión de la IA', fontsize=16)plt.legend(fontsize=12)plt.grid(color='lightgray', linestyle='--', linewidth=0.5)plt.axhline(0, color='black', linewidth=0.5, alpha=0.5)for org in organizations:    df_org = dfsenate[dfsenate['Organization'] == org]    plt.text(df_org.index[-1], df_org['Promedio_móvil'].iloc[-1], f'{df_org["Promedio_móvil"].iloc[-1]:.2f}', ha='right', va='top', fontsize=12, color='black')plt.tight_layout()plt.show()
Audiencia sobre la supervisión de la Inteligencia Artificial: Figura 08

Al principio, parecía que la sesión era amistosa y optimista, con todos discutiendo el futuro de la IA. Pero a medida que avanzaba la sesión, el ambiente comenzó a cambiar. Los miembros del Congreso se volvieron menos optimistas y sus preguntas se volvieron más desafiantes. Esto afectó las calificaciones de los panelistas, incluso algunos obtuvieron puntajes bajos (puede ver esto hacia el final de la sesión). Curiosamente, Altman fue visto por el modelo como neutral o ligeramente positivo, incluso durante los momentos tensos con los miembros del Congreso.

Es importante recordar que el modelo tiene sus limitaciones y podría rozar la subjetividad. Si bien el análisis de sentimientos no es infalible, nos ofrece una interesante visión de la intensidad de las emociones que predominaron ese día en Capitol Hill.

Pensamiento final

En mi opinión, las lecciones detrás de esta audiencia de la IA del Senado de EE. UU. residen en las cinco palabras más repetidas: “Necesitamos pensar y saber hacia dónde debería ir la IA”. Es destacable que palabras como “personas” e “importancia” estuvieran presentes inesperadamente en la nube de palabras de Sam Altman, yendo más allá del titular de una “llamada a la regulación”. Si bien esperaba encontrar más palabras como “transparencia”, “responsabilidad”, “confianza”, “gobernanza” y “justicia” en el análisis NLP de Altman, fue un alivio encontrar algunas de ellas repetidas con frecuencia en el testimonio de Christina Montgomery. Esto es lo que todos esperamos escuchar con más frecuencia cuando se trata de IA.

Gary Marcus enfatizó “sistema” tanto como “IA”, invitándonos quizás a ver la Inteligencia Artificial en un contexto más amplio. Múltiples tecnologías están emergiendo en este momento y su impacto combinado en la sociedad, el trabajo y el empleo en el futuro vendrá del choque de estas múltiples tecnologías, no solo de una de ellas. La academia desempeña un papel vital en guiar este camino, y si se necesita algún tipo de regulación, digo esto “literalmente” no “espiritualmente” (broma interna de la carta de moratoria de seis meses).

Finalmente, la palabra “Agencia” se repitió tanto como “Regulación” en sus diferentes formas. Esto sugiere que el concepto de una “Agencia para la IA” y su papel probablemente será tema de debate en un futuro cercano. Una reflexión interesante sobre este desafío fue mencionada en la Audiencia de la IA del Senado por el Sen. Richard Blumenthal:

… La mayor parte de mi carrera ha sido una aplicación. Y te diré algo, puedes crear 10 nuevas agencias, pero si no les das los recursos, y no estoy hablando solo de dólares, estoy hablando de experiencia científica, ustedes los superarán. Y no se trata solo de los modelos o la IA generativa que ejecutará modelos alrededor de ellos, sino que son los científicos en sus compañías. Por cada historia de éxito en la regulación gubernamental, puedes pensar en cinco fracasos… Y espero que nuestra experiencia aquí sea diferente…

Sen. Richard Blumenthal (D-CT). Audiencia del Senado de EE. UU. sobre la supervisión de la IA (2023)

Aunque para mí es difícil conciliar la innovación, la conciencia y la regulación, estoy a favor de crear conciencia sobre el papel de la IA en nuestro presente y futuro, pero también de entender que “investigación” y “desarrollo” son cosas diferentes. El primero debe ser alentado y promovido, no contenido, el segundo es donde se necesita el esfuerzo adicional en el “pensamiento” y el “conocimiento”.

Espero que haya encontrado interesante este análisis NLP y quiero agradecer a Justin Hendrix y Tech Policy Press por permitirme utilizar su transcripción en este artículo. Puede acceder al código completo en este repositorio de GitHub. (Agradecimiento también a ChatGPT por ayudarme a ajustar algunos de mis códigos para una mejor presentación).

¿Me faltó algo? Tus sugerencias siempre son bienvenidas y mantienen la conversación en marcha.