All Projects → ikergarcia1996 → QuestionClustering

ikergarcia1996 / QuestionClustering

Licence: MIT license
Clasificador de preguntas escrito en python 3 que fue implementado en el siguiente vídeo: https://youtu.be/qnlW1m6lPoY

Programming Languages

Jupyter Notebook
11667 projects
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to QuestionClustering

NTUA-slp-nlp
💻Speech and Natural Language Processing (SLP & NLP) Lab Assignments for ECE NTUA
Stars: ✭ 19 (+26.67%)
Mutual labels:  sentiment-analysis, word-embeddings
neuralnets-semantics
Word semantics Deep Learning with Vanilla Python, Keras, Theano, TensorFlow, PyTorch
Stars: ✭ 15 (+0%)
Mutual labels:  sentiment-analysis, word-embeddings
SentimentAnalysis
Sentiment Analysis: Deep Bi-LSTM+attention model
Stars: ✭ 32 (+113.33%)
Mutual labels:  sentiment-analysis, word-embeddings
textlytics
Text processing library for sentiment analysis and related tasks
Stars: ✭ 25 (+66.67%)
Mutual labels:  sentiment-analysis, word-embeddings
Pytorch Sentiment Analysis
Tutorials on getting started with PyTorch and TorchText for sentiment analysis.
Stars: ✭ 3,209 (+21293.33%)
Mutual labels:  sentiment-analysis, word-embeddings
sentiment-analysis-of-tweets-in-russian
Sentiment analysis of tweets in Russian using Convolutional Neural Networks (CNN) with Word2Vec embeddings.
Stars: ✭ 51 (+240%)
Mutual labels:  sentiment-analysis, word-embeddings
ML2017FALL
Machine Learning (EE 5184) in NTU
Stars: ✭ 66 (+340%)
Mutual labels:  sentiment-analysis, clustering
Text Summarizer
Python Framework for Extractive Text Summarization
Stars: ✭ 96 (+540%)
Mutual labels:  clustering, word-embeddings
Datastories Semeval2017 Task4
Deep-learning model presented in "DataStories at SemEval-2017 Task 4: Deep LSTM with Attention for Message-level and Topic-based Sentiment Analysis".
Stars: ✭ 184 (+1126.67%)
Mutual labels:  sentiment-analysis, word-embeddings
Text Analytics With Python
Learn how to process, classify, cluster, summarize, understand syntax, semantics and sentiment of text data with the power of Python! This repository contains code and datasets used in my book, "Text Analytics with Python" published by Apress/Springer.
Stars: ✭ 1,132 (+7446.67%)
Mutual labels:  sentiment-analysis, clustering
Textblob Ar
Arabic support for textblob
Stars: ✭ 60 (+300%)
Mutual labels:  sentiment-analysis, word-embeddings
overview-and-benchmark-of-traditional-and-deep-learning-models-in-text-classification
NLP tutorial
Stars: ✭ 41 (+173.33%)
Mutual labels:  sentiment-analysis, word-embeddings
ml-book
Codice sorgente ed Errata Corrige del mio libro "A tu per tu col Machine Learning"
Stars: ✭ 16 (+6.67%)
Mutual labels:  sentiment-analysis, clustering
Machine Learning
A repository of resources for understanding the concepts of machine learning/deep learning.
Stars: ✭ 29 (+93.33%)
Mutual labels:  clustering, unsupervised-machine-learning
senticnetapi
Simple API to use SenticNet
Stars: ✭ 69 (+360%)
Mutual labels:  sentiment-analysis
RATTLE
Reference-free reconstruction and error correction of transcriptomes from Nanopore long-read sequencing
Stars: ✭ 35 (+133.33%)
Mutual labels:  clustering
Scon-ABSA
[CIKM 2021] Enhancing Aspect-Based Sentiment Analysis with Supervised Contrastive Learning
Stars: ✭ 17 (+13.33%)
Mutual labels:  sentiment-analysis
hfusion
Multimodal sentiment analysis using hierarchical fusion with context modeling
Stars: ✭ 42 (+180%)
Mutual labels:  sentiment-analysis
word2vec-tsne
Google News and Leo Tolstoy: Visualizing Word2Vec Word Embeddings using t-SNE.
Stars: ✭ 59 (+293.33%)
Mutual labels:  word-embeddings
mongodb-cluster
MongoDB sharded cluster
Stars: ✭ 25 (+66.67%)
Mutual labels:  clustering

Clasificador de Preguntas

El objetivo de este proyecto es implementar un algoritmo no supervisado capaz de agrupar preguntas, permitiendo así, dadas un gran número de preguntas, detectar cuales son similares entre ellas. De esta forma, podríamos saber cuales son las preguntas más recurrentes, los temas de interés más relevantes... de un grupo de usuarios. Cree este proyecto por que pensé que sera muy útil para los streaming que realizó en la plataforma youtube donde mis seguidores pueden preguntar sus dudas, en ocasiones en número de preguntas es tan alto que es imposible responder a todas, sin embargo, muchas de las preguntas se repiten constantemente, por lo que esta aplicación podrá ser extremadamente útil.

README OBSOLETO, SE ACTUALIZARÁ A LA VERSIÓN 2.0 CUANDO TENGA TIEMPO. MIENTRAS TANTO AQUÍ ESTÁ EXPLICADO TODO LO QUE HE HECHO Y LOS RESULTADOS OBTENIDOS (https://github.com/ikergarcia1996/QuestionClustering/releases/download/2.0/Measuring_Question_Similarity_GitHub.pdf)

¿Qué se ha hecho hasta ahora?

Ahora mismo hay dos funciones principales que permiten extraer información de un grupo de preguntas:

  • Clustering: Aplica el algoritmo kmeans sobre las preguntas transformadas a una representación vectorial.
  • k_nearest: Dada una pregunta, responde con las k preguntas más cercanas usando como métrica la similitud coseno.

A parte de esto se han implementado funciones para obtener todas las preguntas de un chat de youtube, y un gestor de preguntas que normaliza las preguntas (tokenización, eliminación de palabras poco relevantes, eliminación de símbolos y emoticonos...), calcula las palabras que más se repiten y transforma las preguntas a representaciones vectoriales. Para esto último, se calcula la representación vectorial para una pregunta como la media de los vectores que representan a las palabras que la forman (Tras normalizar la pregunta). Las representaciones vectoriales de palabras se han obtenido aplicando el algoritmo FastText (https://fasttext.cc/) sobre un corpus generado a partir de texto extraído de webs de noticias tecnológicas españolas usando el crawler https://github.com/fhamborg/news-please

Direcciones futuras

De momento, el algoritmo no proporciona resultados de la calidad esperada, por lo que son necesarias mejoras. Algunas ideas son:

  • Modificar el corpus de entrenamiento de los word embeddings para que los word embeddings sean capaces de representar conocimiento del tipo "El 1700X es un procesador Ryzen, el 8700K es un procesador intel, la 2060 es una GPU de Nvidia..." puesto que parece que esa clase de conocimiento no se ha capturado. Una manera de hacer esto es modificando la ventana usada por los algoritmos de generación de word embeddings.

  • Modificar el algoritmo de clustering para usar como medida la similitud coseno. Parece que la función k_nearest si obtiene los resultados esperados, es posible que el clustering de mejores resultados si en vez de usar la implementación por defecto del kmeans (sklearn) usaremos un algoritmo que use como distancia la similitud coseno.

  • Entrenar sentence embeddings en vez de word embeddings, quizá buscar la forma de aplicar encoders como BERT, ELMO... a este problema.

  • Añadir información que conviertan el problema en una tarea supervisada o semi-supervisada, por ejemplo generar un dataset donde dadas dos frases se diga si son similares o no. El problema es que esto llevaría demasiado tiempo...

Autores

Iker García Ferrero - ikergarcia1996

Toda ayuda es bienvenida, si quieres aportar al proyecto te animo a hacerlo, ya sea haciendo un pull request con código que hayas implementado como aportando ideas para mejorar el algoritmo!!!

¿Qué hay en este directorio?

  • QuestionCluster.ipynb: Jupyter Notebook con los algoritmos para clasificar preguntas y descargar preguntas desde un chat de youtube.
  • embedding.py: Código python3 que se encarga de cargar word embeddings y manipularlos (por ejemplo incluye funciones como word_to_vector que dada una palabra devuelve el vector que la representa)
  • vocabulary.py: Gestor del vocabulario de un word embeddings, es una dependencia de embedding.py
  • utils.py: Algunas funciones útiles para diferentes tareas, es una dependencia de embedding.py
  • json_to_text.py: Transoforma el output (archivos json) de news-please (https://github.com/fhamborg/news-please) a un único archivo txt que contiene solo el texto de las noticias descargadas por news-please
  • leidas.txt: Durante el directo de youtube donde se implementó la primera versión de este programa se descargaron una gran cantidad de preguntas realizadas por los espectadores. El programa descargaba el chat completo cada 0.2 segundos, por lo que las preguntas se repiten decenas de veces, una vez eliminadas las duplicadas hay 309 preguntas.
  • test_questions.txt: 68 preguntas recopiladas a mano de este directo: https://youtu.be/aRKSRGDva84

Word Embeddings

Para ejecutar el código necesitas word embeddings. He generado unos en español especializados en el dominio tecnológico. Para ello usando news-please (https://github.com/fhamborg/news-please) he descargado noticias de las principales webs de noticias tecnológicas en español y he aplicado dos algoritmos de generación de word embeddings. FastText (https://fasttext.cc) y GloVe (https://nlp.stanford.edu/projects/glove/). En ambos casos se han usado los parámetros por defecto del algoritmo y todas las letras del corpus se han transformado a minúsculas.

¿Qué puedo hacer con este código?

Lo que quieras :D Eres libre de hacer lo que te de la gana con él, usarlo en tus programas, hacer un nuevo programa basado en él, modificarlo como quieras, redistribuirlo... Lo único que te pido es que cites a todas las personas que hayan aportado su granito de arena al proyecto, se incluirán todas en la sección autores que se encuentra un poco más arriba. Cualquier programa derivado, copia, modificación... de este programa debe usar la licencia MIT al igual que todo el contenido de este github, para más información consulta el archivo LICENSE (https://github.com/ikergarcia1996/QuestionClustering/blob/master/LICENSE)

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].