Executar tarefas de classificação para a aprendizagem de máquina
Você pode colocar o processamento de texto em uso para aprendizagem de máquina com tarefas de classificação. Quando você classificar textos, você atribuir um documento a uma classe por causa dos temas que discute.
Você pode descobrir os tópicos em um documento de maneiras diferentes. A abordagem mais simples é solicitado pela ideia de que, se um grupo de pessoas fala ou escreve sobre um tópico, as pessoas tendem a usar palavras de um vocabulário limitado porque se referem ou se relacionam com o mesmo tema. Quando você compartilha algum significado ou são parte do mesmo grupo, você tende a usar a mesma linguagem.
Conseqüentemente, se você tem uma coleção de textos e não sei o que temas as referências de texto, você pode inverter o raciocínio anterior - você pode simplesmente olhar para grupos de palavras que tendem a associar, de modo que seu grupo recém-formado por redução de dimensionalidade pode sugerir nos temas que você gostaria de saber sobre. Esta é uma tarefa típica aprendizado não supervisionado.
Esta tarefa de aprendizagem é um aplicativo perfeito para o valor singular decomposição (SVD) família de algoritmos, porque ao reduzir o número de colunas, as características (que, em um documento, são as palavras) se reunirão em dimensões, e você pode descobrir os temas verificando palavras de alta pontuação. SVD e Análise de Componentes Principais (PCA) fornecem recursos para relacionar tanto positiva como negativamente às dimensões recém-criados.
Assim, um assunto resultante pode ser expresso pela presença de uma palavra (alto valor positivo) ou pela ausência da mesma (alta valor negativo), fazendo interpretação tanto complicado e contra-intuitivo para os seres humanos. O pacote scikit-learn inclui a classe de decomposição não-matriz negativa Factorization (NMF), que permite que uma característica original para referem-se apenas de forma positiva com as dimensões resultantes.
Este exemplo começa com uma nova experiência depois de carregar o 20newsgroups
conjunto de dados, um conjunto de dados coleta newsgroup raspada da web, selecionando apenas os posts sobre objetos para venda e remoção automaticamente cabeçalhos, rodapés e citações. Você pode receber uma mensagem de aviso para o efeito, AVISO: sklearn.datasets.twenty_newsgroups: Transferir conjunto de dados a partir de ...
, com a URL do site usado para a descarga quando se trabalha com este código.
avisos de importação
warnings.filterwarnings ("ignorar")
de fetch_20newsgroups sklearn.datasets importação
conjunto de dados = fetch_20newsgroups (Shuffle = true,
Categorias = [ `misc.forsale`],
remover = ( ``, `cabeçalhos rodapés`, ``) cita, random_state = 101)
print ( `Mensagens:% i` % len (dataset.data))
Mensagens: 585
o TfidVectorizer
classe é importado e configurado para remover palavras de parada (palavras comuns, tais como a ou e) E manter apenas palavras distintas, a produção de uma matriz cujas colunas apontar para palavras distintas.
de TfidfVectorizer importação sklearn.feature_extraction.text
vectorizer = TfidfVectorizer (max_df = 0,95,
min_df = 2, stop_words = `Inglês`)
tfidf = vectorizer.fit_transform (dataset.data)
de sklearn.decomposition NMF importação
n_topics = 5
NMF = NMF (n_components = n_topics, random_state = 101) .fit (tfidf)
Prazo de freqüência-inversa frequência documento (TF-IDF) é um simples cálculo baseado na frequência de uma palavra no documento. Ele é ponderado pela raridade da palavra entre todos os documentos disponíveis. Ponderação palavras é uma maneira eficaz para descartar as palavras que não podem ajudá-lo a classificar ou identificar o documento durante o processamento de texto. Por exemplo, você pode eliminar partes comuns do discurso ou outras palavras.
Tal como acontece com outros algoritmos da sklearn.decomposition
módulo, o n_components
parâmetro indica o número de componentes desejados. Se você gostaria de olhar para mais tópicos, você usar um número maior. À medida que o número necessário de tópicos aumenta, o método reconstruction_err_
relata as taxas de erro inferiores. Cabe a você decidir quando parar dado o trade-off entre mais tempo gasto em cálculos e mais tópicos.
A última parte do script emite os resultantes cinco tópicos. Ao ler as palavras impressas, você pode decidir sobre o significado dos temas extraídos, graças a características do produto (por exemplo, as palavras movimentação, duramente, cartão, e frouxo se referem a computadores) ou o produto exato (por exemplo, história em quadrinhos, carro, aparelho de som, jogos).
feature_names = vectorizer.get_feature_names ()
n_top_words = 15
para topic_idx, tema em enumerate (nmf.components_):
Video: Treinamento em Português das APIs de Watson - Aprendizado de Máquina & Reconhecimento de Padrões 1
impressão ("Tópico #% d:" % (Topic_idx + 1),)
impressão (" ".join ([feature_names [i] for i in
topic.argsort () [: - n_top_words - 1: -1]]))
Tópico # 1:
unidade de cartão duro disquete monitor de meg marca motherboard disco RAM vga SCSI
modem interno cor
Tópico # 2:
00 50 dos 20 10 15 cobertura 1º novos 25 de preços homem 40 quadrinhos de envio
Tópico # 3:
condição excelente oferta Pedindo melhor carro velho venda boas novas milhas 10 000
cd fita
Tópico # 4:
e-mail olhando correio jogo jogos interessado enviar como pacote de preços graças
Lista de venda quer saber
Tópico # 5:
stereo transporte VCR funciona obo incluído amp além de grandes vhs de volume Mathes UNC
Gibbs radley
Você pode explorar o modelo resultante, olhando para o atributo components_
a partir do modelo NMF treinado. Ele consiste em um NumPy ndarray
segurando valores positivos para palavras relacionadas com o tema. Ao utilizar o argsort
método, você pode obter os índices das principais associações, cujos valores elevados indicam que elas são as palavras mais representativas.
de impressão (. nmf.components_ [0,:] argsort () [: - n_top_words-1: -1])
# Obtém palavras principais para tópico 0
[1337 1749 889 1572 2342 2263 2803 1290 2353 3615 3017 806 1022 1938
2334]
Decodificando índices as palavras cria cadeias legíveis, chamando-os a partir da matriz derivada do get_feature_names
método aplicado ao TfidfVectorizer
que foi previamente montado.
impressão (vectorizer.get_feature_names () [1337])
# Transforma índice de 1337 de volta ao texto
dirigir