Eu tenho um conjunto de dados com fragmentos de texto com uma estrutura fixa que pode conter parâmetros. Exemplos são:
Temperature today is 20 centigrades
Temperature today is 28 centigrades
ou
Her eyes are blue and hair black.
Her eyes are green and hair brown.
O primeiro exemplo mostra um modelo com um parâmetro numérico. O segundo é um modelo com dois parâmetros de fator.
O número de modelos e o número de parâmetros não é conhecido.
O problema é identificar os modelos e atribuir cada fragmento de texto ao modelo correspondente.
A primeira idéia óbvia é usar o clustering. A medida de distância é definida como um número de palavras não correspondentes. Ou seja, os registros no exemplo um têm distância 1, no exemplo duas distância é 2. A distância entre o registro no exemplo um e dois é 7. Essa abordagem funciona bem, desde que seja conhecido o número de clusters, o que não é o caso, portanto não é útil.
Eu posso imaginar uma abordagem programática que varre a matriz de distância procurando registros com muitos vizinhos na distância 1 (ou 2,3, ..), mas estou curioso para saber se posso aplicar algum algoritmo de aprendizado de máquina não supervisionado para resolver o problema. R é preferido, mas não obrigatório.
fonte
Respostas:
A lógica básica por trás da sugestão a seguir é associar "autovetores" e "modelos".
Em particular, pode-se usar o LSA em todo o corpus com base em um conjunto de palavras. Os vetores próprios resultantes serviriam como modelos substitutos; esses vetores próprios não devem ser diretamente afetados pelo número de palavras em cada modelo. Posteriormente, as pontuações poderiam ser usadas para agrupar os documentos, seguindo um procedimento padrão (por exemplo,k significa em conjunto com a AIC). Como alternativa ao LSA, pode-se usar o NNMF. Deixe-me salientar que o LSA (ou NNMF) provavelmente precisaria ser feito no TF-IDF transformado, em vez da matriz bruta de contagem de palavras.
fonte
Você pode usar o word2vec para identificar frases no corpus. A presença de uma frase (em vez de tokens únicos) provavelmente indica um 'modelo'.
A partir daqui, os tokens mais semelhantes à sua frase de modelo provavelmente serão os valores para seus parâmetros.
fonte
O script abaixo usa o LSA com IDF transformado para cortar os parâmetros dos modelos. A idéia é que todos os termos com IDF mais altos que algum limite sejam considerados parâmetros e que sua frequência seja zerada. O limite pode ser aproximado com a ocorrência média do modelo no corpus. Eliminando os parâmetros, a distância dos registros com o mesmo modelo é zero.
A matriz de distância mostra claramente que os registros 1,2,3 são do mesmo modelo (distância = 0, com os dados sintéticos; em um caso real, um pequeno limiar deve ser usado). O mesmo vale para os registros 4,5,6 e 7,8,9.
fonte