Estou procurando algumas dicas sobre como selecionar uma lista de palavras irrelevantes. Alguém sabe / alguém pode recomendar um bom método para extrair listas de palavras de parada do próprio conjunto de dados para pré-processamento e filtragem?
Os dados:
uma quantidade enorme de texto humano de tamanho variável (termos de busca e frases inteiras (até 200 caracteres)) ao longo de vários anos. O texto contém muito spam (como entrada de máquina de bots, palavras únicas, pesquisas estúpidas, pesquisas de produtos ...) e apenas alguns% parecem ser úteis. Percebi que às vezes (apenas muito raramente) as pessoas pesquisam meu lado fazendo perguntas muito legais. Essas perguntas são tão legais que acho que vale a pena examiná-las mais profundamente para ver como as pessoas pesquisam ao longo do tempo e quais tópicos as pessoas se interessaram em usar meu site.
Meu problema:
é que estou realmente lutando com o pré-processamento (ou seja, eliminando o spam). Eu já tentei algumas listas de palavras irrelevantes da Web (NLTK etc.), mas elas realmente não atendem às minhas necessidades em relação a esse conjunto de dados.
Obrigado por suas idéias e discussão pessoal!
stop words
. Stop-wrods é uma lista da maioria das palavras em alguma língua, por exemploI
,the
,a
e assim por diante. Você apenas removerá essas palavras do seu texto antes de começar a treinar seu algoritmo, que tenta identificar qual texto é spam ou não. Ele não ajudou a identificar qual texto é spam ou não; pode melhorar seu algoritmo de aprendizado.Respostas:
Uma abordagem seria usar a pontuação tf-idf . As palavras que ocorrem na maioria das consultas serão de pouca ajuda para diferenciar as boas consultas de pesquisa das más. Porém, aquelas que ocorrem com muita frequência (alta frequência de termo ou tf) em apenas poucas consultas (alta idf ou frequência inversa de documentos) têm maior probabilidade de diferenciar as consultas boas e ruins.
fonte
Depende da sua aplicação.
Ao fazer a modelagem de tópicos, tente primeiro as palavras de parada padrão. Quando algumas palavras ocorrem com destaque em muitos tópicos (observe minha formulação bastante vaga), elas são boas candidatas a palavras de parada adicionais.
Por exemplo, em um corpus com textos contendo figuras e material tabular, as palavras "fig", "figura", "tab" ou "tabela" são boas palavras de parada adicionais. No resultado, seus tópicos se tornam mais bem definidos.
fonte
O uso do TFIDF (termo de frequência inversa do documento) resolverá seu objetivo. Obtenha a pontuação do TFIDF para cada palavra em seu documento e classifique as palavras pelas pontuações pelas quais você pode selecionar as palavras importantes em seus dados.
fonte
Uma abordagem que usei para criar uma lista de palavras irrelevantes é criar e treinar um modelo de regressão logística (devido à sua interpretabilidade) em seus dados de texto. Tome o valor absoluto dos coeficientes para cada token. Em seguida, classifique por decrescente o valor absoluto dos coeficientes dos tokens. Em seguida, crie uma lista de todos os tokens com alto valor absoluto de coeficiente que podem levar a sobreajuste ou que podem atender a outros critérios para ser uma palavra de parada. Essa lista é sua lista de palavras irrelevantes. Em seguida, você pode aplicar essa lista de palavras de parada a outro conjunto de documentos desse tipo (como um conjunto de testes), para verificar se a remoção deles aumenta a exatidão, precisão ou recuperação do modelo do conjunto de testes.
Essa estratégia é eficaz porque leva em consideração o impacto dos tokens ao criar uma lista de palavras de parada.
fonte
Palavras de interrupção podem fazer parte da solução em algum momento, mas não a chave. Em qualquer caso, para qualquer idioma importante, existem boas listas de palavras de parada, não deve ser específico do domínio.
Também não acho que usar o TD-IDF sozinho seja realmente correto. Pode haver palavras muito raras (potencialmente lixo) em seqüências de caracteres de baixa qualidade.
Em vez de tentar adivinhar quais recursos exatos são úteis: eu começaria criando um conjunto de dados selecionando alguns dados aleatoriamente e rotulando-os à mão (como
good
oubad
ou em uma escala de 0,0 a 1,0). Em seguida, codifique algo que extraia muitos recursos (comprimento, número de palavras (tokens), pontuação de spam, se contém URLs ou caracteres botish, idioma detectado, se possui um ponto de interrogação, se possui capitalização adequada). Além disso, não se esqueça de incluir recursos não-linguísticos que você possa ter, como o país do IP geográfico do usuário que fez a consulta, se o usuário estava logado, quantos anos tem a conta do usuário. Portanto, nesse ponto, você terá uma tabela enorme / CSV e uma menor com uma coluna extra para o rótulo que você adicionou.Em seguida, treine algum pacote de aprendizado de máquina com os exemplos rotulados para criar um modelo que seja preciso o suficiente para você. Em seguida, deixe esse modelo executar no restante dos dados.
Se você não deseja codificar demais, basta inserir esses recursos no formato CSV e fornecê-los à interface da planilha da API do Google Prediction API .
fonte