Como criar uma boa lista de palavras irrelevantes

9

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!

PlagTag
fonte
11
O módulo Python NLTK fornece dados de palavras irrelevantes e, se não o ajudou, fornece mais informações sobre seu conjunto de dados. Por que não foi útil no seu caso?
Kasra Manshaei
@kasramsh: Quando filtrei esses SWs, tive a impressão de que isso não filtrava significativamente o spam. Acho que o motivo é que essas listas são geradas em textos naturais (não tenho certeza) e, portanto, não são utilizáveis ​​para palavras-chave de pesquisa e consultas de sites. Como quando você agrupa (com base na semelhança da cadeia de caracteres de pesquisa), tive a impressão de que o spam tem um forte efeito no nível da entropia e, portanto, está misturando o resultado final: - /.
PlagTag
11
Acho que o @PlagTag não entende o que é stop words. Stop-wrods é uma lista da maioria das palavras em alguma língua, por exemplo I, the, ae 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.
Itdxer 25/05
@itdxer, obrigado pelo seu comentário. Eu usei o termo stopwords aqui em uma extensão mais ampla (como eu pensei que poderia estar ok para o efeito). Obrigado por esclarecer a questão ;-)
PlagTag

Respostas:

5

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.

Shagun Sodhani
fonte
thx muito, vou experimentar este e relatar aqui!
PlagTag
na verdade, uma pontuação elevada IDF sozinho faria o truque
CpILL
2

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
1

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.

Thilak Adiboina
fonte
1

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.

dshefman
fonte
0

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 goodou badou 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 .

Adam Bittlingmayer
fonte