Técnica de Machine Learning para aprender padrões de strings

11

Eu tenho uma lista de palavras, pertencentes a diferentes categorias auto-definidas. Cada categoria tem seu próprio padrão (por exemplo, um possui um comprimento fixo com caracteres especiais, outro existe de caracteres que ocorrem apenas nessa categoria de "palavra", ...).

Por exemplo:

"ABC" -> type1
"ACC" -> type1
"a8 219" -> type2
"c 827" -> type2
"ASDF 123" -> type2
"123123" -> type3
...

Estou procurando uma técnica de aprendizado de máquina para aprender esses padrões por conta própria, com base em dados de treinamento. Eu já tentei definir algumas variáveis ​​preditoras (por exemplo, comprimento da palavra, número de caracteres especiais, ...) por conta própria e, em seguida, usei uma Rede Neural para aprender e prever a categoria. Mas isso não é exatamente o que eu quero. Eu quero uma técnica para aprender o padrão de cada categoria por conta própria - mesmo para aprender padrões nos quais nunca pensei.

Então, eu forneço os dados de aprendizado do algoritmo (consistindo nos exemplos de categoria de palavra) e quero que ele aprenda padrões para cada categoria para prever mais tarde a categoria a partir de palavras semelhantes ou iguais.

Existe uma maneira avançada de fazer isso?

Obrigado pela ajuda

chresse
fonte
Do meu ponto de vista, você pode fazer algo parecido com este cistrome.org/cr/images/Figure4.png , mas em vez do ACGT você pode usar padrões como "número, maiúsculas, minúsculas, espaço" etc.
German Demidov
@GermanDemidov obrigado pelo seu comentário. eu já pensei em algo assim. Mas eu realmente quero que o algoritmo de aprendizado faça isso por conta própria e detecte os padrões. (Não sei se é possível para ML).
chresse
na verdade, esses padrões são aprendizado de máquina. É claro que você pode fazer isso com o aprendizado de máquina, mas uma pessoa precisa fazer uma extração de recursos antes de fornecê-la como uma entrada para o algoritmo ML. Quais recursos você extrairia desses exemplos? Posso pensar em funções de hash, mas funcionará muito mal para cadeias de comprimento desigual. Portanto, como você encontrará uma maneira de extrair recursos, poderá usar os métodos de ML. Você também pode medir a distância de Levenshtein entre símbolos de diferentes classes, agrupá-los e usar a distância mínima dos centróides para classificação.
German Demidov
@chresse, você pode adicionar a tag de aprendizado não supervisionado à sua pergunta. Por fazer isso com redes neurais, este artigo da LeCun pode ser interessante. Como não tenho muita experiência com mineração de texto ou redes neurais, não posso dizer o quão boa essa abordagem pode ser.
GeoMatt22
11
Portanto, transforme seus vetores usando os recursos que você usa naturalmente (u - maiúsculas, l - minúsculas, n - número, s - espaço), para que seus vetores sejam "ABC" - "uuu", "a8 219" - "lnsnnn" e assim em. Então você precisa introduzir alguma medida de distância, por exemplo, usando este algoritmo: en.wikipedia.org/wiki/Smith –Waterman_algorithm. Depois disso, você poderá executar uma classificação / clusterização / visualização de seus dados.
German Demidov

Respostas:

6

Seu problema pode ser reafirmado como se quisesse descobrir as expressões regulares que corresponderão às seqüências de caracteres em cada categoria? Este é um problema de "geração de expressões regulares", um subconjunto do problema de indução gramatical (consulte também o site de Alexander Clark ).

O problema da expressão regular é mais fácil. Eu posso apontar o código frak e o RegexGenerator . O RegexGenerator ++ online tem referências aos seus trabalhos acadêmicos sobre o problema.

escurecer
fonte
5

Você pode tentar redes neurais recorrentes, em que sua entrada é uma sequência de letras da palavra e sua saída é uma categoria. Isso se ajusta ao seu requisito, de forma que você não codifique manualmente nenhum recurso.

No entanto, para que esse método funcione, você precisará de um conjunto de dados de treinamento bastante grande.

Você pode consultar a etiquetagem de sequência supervisionada com redes neurais recorrentes de Alex Graves, capítulo 2, para obter mais detalhes.

Este é um link para a pré - impressão

Arun Jose
fonte
11
Você poderia adicionar uma citação completa para sua referência final, caso o link "preprint.pdf" seja quebrado no futuro? (Eu acredito que este é o capítulo relevante?)
GeoMatt22