Algoritmos para agrupamento de texto

17

Eu tenho um problema de agrupar uma quantidade enorme de frases em grupos por seus significados. Isso é semelhante a um problema quando você tem muitas frases e deseja agrupá-las por seus significados.

Quais algoritmos são sugeridos para fazer isso? Não conheço o número de clusters com antecedência (e, à medida que mais dados forem chegando, os clusters também podem mudar), quais recursos são normalmente usados ​​para representar cada frase?

Agora estou tentando os recursos mais simples com apenas uma lista de palavras e a distância entre as frases definidas como:

insira a descrição da imagem aqui

(A e B são conjuntos de palavras correspondentes nas frases A e B)

Faz algum sentido?

Estou tentando aplicar o algoritmo Mean-Shift da biblioteca scikit a essa distância, pois não requer um número de clusters com antecedência.

Se alguém aconselhar métodos / abordagens melhores para o problema - será muito apreciado, pois ainda sou novo no tópico.

Maxim Galushka
fonte

Respostas:

13

Verifique o software de código aberto do Stanford NLP Group ( http://www-nlp.stanford.edu/software ), em particular o Stanford Classifier ( http://www-nlp.stanford.edu/software/classifier.shtml ) . O software está escrito Java, o que provavelmente o encantará, mas também possui ligações para outros idiomas. Observe que o licenciamento - se você planeja usar o código deles em produtos comerciais, precisa adquirir uma licença comercial.

Outro conjunto interessante de bibliotecas de código aberto, o IMHO adequado para esta tarefa e muito mais, é a estrutura paralela para aprendizado de máquina GraphLab ( http://select.cs.cmu.edu/code/graphlab ), que inclui a biblioteca de cluster , implementando vários clusters algoritmos ( http://select.cs.cmu.edu/code/graphlab/clustering.html ). É especialmente adequado para um volume muito grande de dados (como você possui), pois implementa o MapReducemodelo e, portanto, suporta o processamento paralelo de múltiplos núcleos e multiprocessadores .

Você provavelmente está ciente do seguinte, mas vou mencionar apenas por precaução. O Natural Language Toolkit (NLTK) para Python( http://www.nltk.org ) contém módulos para agrupar / classificar / categorizar texto. Verifique o capítulo relevante em NLTK Book: http://www.nltk.org/book/ch06.html .

ATUALIZAR:

Falando em algoritmos , parece que você já tentou a maioria deles scikit-learn, como ilustrado neste exemplo de extração de tópicos: http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf.html . No entanto, você pode encontrar outras bibliotecas úteis, que implementam uma grande variedade de algoritmos de agrupamento , incluindo a NMF (Non-Negative Matrix Factorization) . Uma dessas bibliotecas é a Python Matrix Factorization (PyMF), com a página inicial em https://code.google.com/p/pymf e o código-fonte em https://github.com/nils-werner/pymf . Outra biblioteca ainda mais interessante, também baseada em Python, é a NIMFA, que implementa vários algoritmos NMF : http://nimfa.biolab.si . Aqui está um artigo de pesquisa, descrevendo NIMFA: http://jmlr.org/papers/volume13/zitnik12a/zitnik12a.pdf . Aqui está um exemplo de sua documentação, que apresenta a solução para um problema de processamento de texto muito semelhante ao agrupamento de tópicos : http://nimfa.biolab.si/nimfa.examples.documents.html .

Aleksandr Blekh
fonte
1
Muito obrigado por essa resposta detalhada. Vou passar por todas as suas sugestões, muito trabalho para tentar testar! Também descobri que a ferramenta cenot2 está realmente fazendo um ótimo trabalho no agrupamento não supervisionado de dados textuais. Postando link para referência futura http://project.carrot2.org/
Maxim Galushka
@MaximGalushka: De nada! Estou curioso para aprender sobre suas descobertas e o progresso que você alcançará eventualmente. Sinta-se livre para postar aqui ou se conectar diretamente comigo.
Aleksandr Blekh