1 pontos por GN⁺ 2025-05-19 | 1 comentários | Compartilhar no WhatsApp
  • Projeto open source que analisa a estrutura linguística do Manuscrito Voynich com técnicas modernas de NLP, como SBERT
  • Foca em remoção de sufixos e clusterização para verificar se existem estruturas semelhantes a uma língua real, e não padrões falsos
  • A análise estrutural sob múltiplos ângulos, como papel de palavras funcionais e de conteúdo e matrizes de transição, revelou padrões significativos
  • Diferente de abordagens tradicionais baseadas em estatística ou especulação, tenta analisar características estruturais de linguagem por meio da linguística computacional
  • O projeto se concentra apenas em modelagem estrutural, sem tentar traduzir significados, permitindo pesquisas adicionais e experimentos comparativos

📜 Introdução ao projeto de análise estrutural do Manuscrito Voynich

🔍 Visão geral

  • Este projeto começou como um experimento pessoal para analisar a estrutura do Manuscrito Voynich usando ferramentas modernas de processamento de linguagem natural (NLP)
  • Aplica métodos reais de modelagem de linguagem, como clusterização, inferência de classes gramaticais, transições de Markov e extração de padrões por seção
  • Sem tentar interpretação semântica, tradução ou estimativas exageradas de padrões, verifica apenas se existe uma estrutura que se comporta como linguagem
  • Todas as etapas são públicas, incluindo remoção de sufixos, embeddings com SBERT e geração de hipóteses de léxico

🧠 Importância

  • O Manuscrito Voynich continua sendo um documento misterioso ainda não decifrado, sem uma solução linguística ou criptográfica
  • As análises existentes costumam se dividir entre testes estatísticos de entropia e especulações não científicas
  • Este projeto, com base em linguística computacional, investiga de forma neutra se há padrões estruturais semelhantes aos de uma língua real

📁 Estrutura do projeto

  • /data/
    • Disponibiliza dados como a transcrição completa do manuscrito, tipos de palavras-raiz, IDs de clusters, lista de sufixos removidos e sequências de clusters por linha
  • /scripts/
    • Inclui os principais scripts de análise, como clusterização de palavras com base em SBERT, previsão de classes gramaticais, construção de matrizes de transição de Markov e geração de candidatos a léxico
  • /results/
    • Traz os resultados da análise, como visualizações de clusters, heatmaps de matrizes de transição e resumos por cluster

✅ Principais contribuições

  • Clusterização de palavras-raiz com sufixos removidos usando SBERT multilíngue
  • Distinção entre clusters semelhantes a palavras funcionais e clusters semelhantes a palavras de conteúdo
  • Modelagem da estrutura de transição entre clusters no estilo Markov
  • Análise da estrutura sintática por seção (ex.: Botanical, Biological etc.)
  • Geração de uma tabela de hipóteses de léxico baseada em dados

🔧 Decisões de pré-processamento

  • Antes da clusterização, remove sufixos repetitivos (ex.: aiin, dy, chy etc.)
  • Isso permite extrair a forma-raiz das palavras, deixando mais claros a concentração dos clusters e os padrões estruturais
    • Os sufixos podem ser preenchimento fonológico, morfemas gramaticais, marcas mnemônicas, repetição ou ruído sem significado
  • No entanto, essa escolha tem limitações, como perda de informação morfológica, ocultação de flexões significativas e viés para palavras funcionais
  • Também vale a pena fazer experimentos comparativos sem remoção de sufixos — qualquer pessoa pode criar experimentos derivados

📈 Principais resultados da análise

  • Cluster 8: aparece com muita frequência, tem baixa diversidade e ocorre com frequência no início de linhas — candidato a cluster de palavra funcional
  • Cluster 3: alta diversidade e posição livre — candidato a cluster de palavra-raiz de conteúdo
  • Matriz de transição: mostra uma forte estrutura interna, bem distante da aleatoriedade
  • Padrões de clusters e classes gramaticais: variam conforme as seções do manuscrito (ex.: Biological, Botanical etc.)

🧬 Hipótese

  • O manuscrito é uma língua estruturada artificial/mnemônica que utiliza repetição silábica e repetição posicional
  • Mostra claramente estrutura linguística, incluindo sintaxe, separação entre função e conteúdo e transições linguísticas sensíveis à seção

📊 Exemplos de visualização

  • Figure 1: embeddings de clusters com SBERT (redução por PCA)
  • Figure 2: heatmap da matriz de transição

📌 Limitações

  • O mapeamento entre clusters e palavras é indireto, então há sobreposição nas estimativas de frequência
  • O critério de remoção de sufixos é heurístico e pode acabar descartando terminações realmente significativas
  • Não tenta fazer interpretação semântica, focando apenas na análise estrutural

✍️ Nota do autor

  • O projeto começou com o objetivo de aprender sobre IA, NLP e análise estrutural
  • Em vez de ter como meta decifrar o manuscrito em si, a ideia é que seja mais produtivo entender sua estrutura com ferramentas modernas
  • Em vez da expectativa de uma decifração ao estilo Rosetta Stone, o projeto acolhe quem se interessa pela ideia de que o próprio processo de modelagem já tem valor

🤝 Como contribuir

  • Este projeto recebe com entusiasmo colaboração e expansão por parte de linguistas, criptógrafos, pesquisadores de línguas artificiais e da comunidade de linguística computacional

1 comentários

 
GN⁺ 2025-05-19
Comentário do Hacker News
  • Notei que você está procurando clusters dentro de uma projeção PCA — para buscar uma estrutura mais profunda, eu recomendaria algoritmos de redução de dimensionalidade mais recentes, como PaCMAP ou LocalMAP. Estou trabalhando em um projeto que pega dados do Pol.is, uma ferramenta de pesquisa de opinião, e os reprojeta com esses algoritmos de redução de dimensionalidade em vez de PCA. Fico impressionado com os insights que esses algoritmos mais novos trazem e que antes passavam despercebidos. Também tenho um resultado em que colori os grupos para representar isso visualmente, então vale conferir no desktop. Se você estiver curioso sobre o que é o Pol.is, também recomendo um artigo relacionado

    • Obrigado por me apresentar PaCMAP e LocalMAP pela primeira vez — abordagens de redução de dimensionalidade como essas, que preservam bem a estrutura, parecem se encaixar melhor nestes dados do que PCA. Você despertou meu interesse, então pretendo investigar mais a fundo
    • Na minha experiência, o UMAP deu resultados muito melhores do que PCA ou t-SNE para redução de embeddings
  • O modelo de embedding de texto usado aqui é o paraphrase-multilingual-MiniLM-L12-v2, um modelo com cerca de 4 anos. No mundo de processamento de linguagem natural, isso já é bem antigo. Com os avanços recentes dos LLMs, a capacidade de representação de informação e o poder de separação no espaço de embeddings melhoraram dramaticamente. Mesmo modelos de embedding recentes que não têm suporte multilíngue como foco mostram ótimo desempenho nesse tipo de dado. Portanto, eles provavelmente também teriam desempenho melhor com uma língua relativamente pouco conhecida como o Manuscrito Voynich. Acho ainda que técnicas tradicionais de NLP, como remoção de sufixos e identificação de classe gramatical, podem acabar piorando a qualidade dos embeddings ao perder informações de contexto necessárias

    • Escolhi o paraphrase-multilingual-MiniLM-L12-v2 principalmente por velocidade e compatibilidade, mas concordo que, pelos padrões de hoje, ele é de fato um modelo antigo. Testar modelos mais novos como all-mpnet-base-v2 ou text-embedding-ada-002, mantendo também os sufixos e usando embeddings de contexto completo, provavelmente renderia resultados ainda mais interessantes. Seu comentário me fez considerar positivamente isso na próxima iteração
  • Não entendo muito de NLP. Fico pensando se faria sentido checar o processo controlando um grupo de comparação. Por exemplo, pedir para pessoas escreverem frases que parecem uma língua, mas que na verdade não são, e depois aplicar o mesmo procedimento nelas — remover sufixos, tentar clusterizar etc. — para ver se saem resultados parecidos

    • Exatamente isso. Fico me perguntando por que você simplesmente não pediu para 100 pessoas escreverem o Manuscrito Voynich e depois treinou com esses dados
  • Acho que seria bom analisar com UMAP ou t-SNE, mesmo que o PCA já tenha mostrado uma separação limpa. Mapear cada cluster em referência aos outros também parece uma boa forma de verificar se não resta variabilidade na análise

    • Boa observação — no começo segui com PCA porque a separação surpreendentemente limpa apareceu logo de cara. Mas, como você disse, aplicar UMAP ou t-SNE pode revelar padrões mais sutis ou problemas a partir de uma perspectiva não linear. Eu também não montei uma matriz de similaridade entre clusters, mas, ouvindo sua sugestão, isso parece um próximo passo natural para verificar o quanto do sinal está sendo realmente capturado. Com certeza quero tentar isso em trabalhos futuros. Obrigado por provocar essa reflexão
    • Se você tiver um exemplo de como esse mapeamento de referência é feito, eu teria interesse. Quero tentar aplicar isso a embeddings de outras modalidades, mas tenho pouca experiência com NLP
    • Quando o PCA já separa bem o suficiente, eu tendo a evitar UMAP porque fica mais fácil interpretar as distâncias entre pontos individuais. Sempre evito t-SNE porque considero a interpretação de distâncias quase sem sentido. Mas isso é só preferência pessoal minha
  • Acho esta hipótese a mais interessante: parece que algum autor tratou o voynichês como uma língua germânica e fez um progresso considerável. Também já vi alegações de que seria uma língua urálica ou fino-úgrica. Acho sua metodologia muito boa e fico curioso se uma aplicação ajustada a famílias linguísticas específicas poderia gerar resultados melhores

    • Já vi antes evidências de que Edward Kelly estava no lugar certo, na hora certa, e conhecia a Cardan grille. Por isso, tendo a achar que ele provavelmente foi o autor, e que o livro em si foi criado como fraude ou brincadeira
    • Esta thread discute várias alegações de “decifração”. O site do Bernholz é razoável, mas o trabalho do Child na prática não ajuda muito na decifração
  • Eu achava que isso era turco antigo

    • Uma tradução do manuscrito para o inglês pode ser vista aqui
  • Posso ter deixado passar ou não ter visto no README, mas fiquei curioso sobre como foi feita a codificação inicial das “palavras”. Por exemplo, como uma palavra como okeeodair é mapeada de volta para os símbolos originais?

    • Isso mesmo, palavras como okeeodair vêm diretamente do arquivo de transcrição EVA. É o resultado de mapear os símbolos originais do Voynich para ASCII com base no sistema EVA (European Voynich Alphabet). Neste projeto, em vez de lidar com os símbolos em si, usei diretamente as palavras conforme a transcrição EVA. Se okeeodair aparece no dataset, isso quer dizer que alguém (um especialista) concordou em chamar aquela combinação de símbolos por esse nome. Informações sobre a transcrição podem ser vistas neste site
  • O que eu imagino é o seguinte: se isso não passar de rabiscos sem sentido, e nem for um texto cifrado, então, pela própria natureza de um manuscrito, o estilo, a caligrafia, as palavras usadas e até as próprias letras deveriam evoluir da primeira até a última página. Claro, a ordem das páginas pode ter mudado, mas eu esperaria ver algum tipo de diferença, a menos que o autor tenha escrito dezenas de livros num estilo parecido e todos tenham desaparecido. Não é uma ideia nova, mas fico curioso se já houve análise desse tipo de padrão, porque nunca vi menção à consistência entre páginas

    • Há bastante pesquisa sobre consistência entre páginas. Existe entre especialistas a alegação de que houve dois (ou cinco) escribas. Também pode ser útil consultar uma discussão experimental baseada nas afirmações de Lisa Fagin Davis
  • Fico curioso sobre quanto recurso seria necessário para tentar uma decifração em modo “força bruta”. Por exemplo, seguir um processo explícito de mapear uma a uma para palavras de uma língua conhecida e aumentar a pontuação conforme isso melhora

    • Eu só apontaria que esse tipo de abordagem exige assumir que cada palavra se mapeia 1:1, mas a linguagem não funciona necessariamente assim. Por exemplo, palavras compostas seriam difíceis de mapear desse jeito. Também existem diferenças mais fundamentais na estrutura de significado por causa de diferenças culturais
    • Pergunta interessante — na verdade eu também já pensei em algo parecido. Não sou especialista em criptografia, então não sei dizer o quão viável seria uma “força bruta” realmente em grande escala. Mas a ideia de mapear cada “palavra” do Voynich para palavras de uma língua real e otimizar a consistência está bastante alinhada com várias tentativas e direções experimentais. A dificuldade é que o vocabulário em si é enorme, e nem está claro se a unidade “palavra” corresponde 1:1 a palavras reais. As “palavras” do Voynich podem ser vocábulos completos, fragmentos ou combinações de raiz e afixo. Nesse sentido, um mapeamento simples parece bastante difícil. Ainda assim, fazer isso com IDs de clusters em vez de tokens individuais e usar um modelo de linguagem para pontuar o resultado me parece uma ideia bem boa. Acho que vale tentar com técnicas de otimização ou evolutivas. Isso talvez também pudesse dar pistas sobre o quanto a estrutura parece “uma língua”. Obrigado pela boa ideia. Espero que alguém da área veja esse comentário e tente
  • Fico curioso se, ao fazer a análise com textos de tamanho semelhante em línguas conhecidas, surgiriam padrões parecidos. Em outras palavras, pergunto se aplicar essa técnica de análise a vários tipos de texto poderia ajudar a entender o que esse sistema de escrita significa