Eu criei um classificador Naive Bayes que usa a técnica do saco de palavras para classificar postagens de spam em um quadro de mensagens. Funciona, mas acho que poderia obter resultados muito melhores se meus modelos considerassem a ordem das palavras e frases. (ex: 'garotas' e 'ao vivo' podem não gerar uma pontuação alta de spam, mesmo que 'garotas ao vivo' seja provavelmente lixo). Como criar um modelo que leve em consideração a ordem das palavras?
Eu considerei o armazenamento de n-gramas (veja essas meninas que vivem fora, essas meninas vivem), mas isso parece aumentar radicalmente o tamanho do dicionário em que mantenho a pontuação e causa inconsistência como frases com muito redação semelhante, mas ordem diferente vai passar despercebida.
Não estou vinculado à classificação bayesiana, mas gostaria de algo que alguém sem uma sólida formação em estatística pudesse grudar e implementar.
fonte
Respostas:
Existe um hack muito simples para incorporar a ordem das palavras em uma implementação de modelo de pacote de palavras existente. Trate algumas frases, como os biogramas que ocorrem com frequência (por exemplo, Nova York) como uma unidade, ou seja, uma única palavra em vez de tratá-las como entidades separadas. Isso garantirá que "Nova York" seja diferente de "Nova York". Você também pode definir telhas de ordem superior, como para n = 3,4 etc.
Você pode usar o Lucene ShingleFilter para decompor o texto do documento em telhas como uma etapa de pré-processamento e, em seguida, aplicar o classificador nesse texto decomposto.
fonte
Experimente alguns modelos generativos como o HMM. Basta verificar o seguinte link: /stats/91290/how-do-i-train-hmms-for-classification
fonte
Existem várias técnicas. Você já mencionou n-grama, então há combinação de palavras e outras. Mas o principal problema (pelo menos do seu ponto de vista) é que, à medida que o recurso se torna mais complexo (como n-grama), a contagem de recursos aumenta drasticamente. Isso é gerenciável. Basicamente, antes da classificação, você deve pontuar suas características e, em seguida, limiar em uma determinada pontuação. dessa forma, os recursos (ou no seu caso, n gramas) que são pontuados abaixo de um determinado nível são omitidos e a contagem de recursos se torna gerenciável. quanto à pontuação. Existem várias maneiras (a seleção depende da sua aplicação) para pontuar os recursos. Você pode começar com "Separação bi-normal", "quadrado do chi", "Ganho de informações" e etc. Não sei se essa resposta ajuda, mas se você estiver interessado, posso elaborar ...
Esqueci que, na combinação de palavras, você coloca uma janela de tamanho m no texto e extrai cada combinação de n palavras. claro n
fonte