1 điểm bởi GN⁺ 2025-05-19 | 1 bình luận | Chia sẻ qua WhatsApp
  • Kho lưu trữ này áp dụng phân cụm, suy luận từ loại, chuyển tiếp Markov và mẫu theo từng phần mà không dựa vào suy đoán dịch nghĩa, nhằm kiểm tra xem bản thảo Voynich có các mẫu cấu trúc hành xử như một ngôn ngữ thực sự hay không
  • Quy trình phân tích loại bỏ các hậu tố lặp lại có vẻ như aiin, dy, chy rồi nhúng các gốc từ bằng multilingual SBERT để tạo cụm, sau đó ánh xạ từng dòng của bản thảo thành chuỗi cụm
  • Kết quả cho thấy những khác biệt về cấu trúc như Cluster 8 có tần suất cao, độ đa dạng thấp và thường xuất hiện ở đầu dòng nên trông giống một nhóm từ chức năng, trong khi Cluster 3 có độ đa dạng cao và vị trí linh hoạt hơn nên giống một lớp gốc từ nội dung
  • Việc loại bỏ hậu tố giúp gom các thân từ tương tự chặt hơn và làm ma trận chuyển tiếp gọn hơn, nhưng đây là một lựa chọn tiền xử lý mạnh có thể loại bỏ thông tin hình thái thực sự, che khuất các biến thể biến tố có ý nghĩa hoặc tạo ra thiên lệch thiên về chức năng
  • Dự án này không cố gắng dịch nghĩa mà tập trung xem xét dựa trên dữ liệu liệu bản thảo Voynich có thể hiện các cấu trúc giống ngôn ngữ như cú pháp, sự tách biệt từ chức năng/từ nội dung và biến đổi ngôn ngữ theo từng phần hay không

Mục tiêu của dự án

  • Bản thảo Voynich vẫn chưa được giải mã và chưa có lời giải ngôn ngữ học·mật mã học nào được đồng thuận
  • Dự án này nằm giữa con đường trung gian của các phép kiểm tra entropy thống kê và các diễn giải thiếu căn cứ, dùng các kỹ thuật ngôn ngữ học tính toán để đánh giá liệu bản thảo có mã hóa hành vi có cấu trúc giống ngôn ngữ hay không
  • Không thực hiện dịch hay suy đoán kiểu GPT, mà chỉ tập trung vào việc liệu có tồn tại cấu trúc hành xử như ngôn ngữ hay không

Quy trình phân tích và cấu trúc tệp

  • /data/ chứa toàn bộ bản chép lại, tệp từ gốc, danh sách gốc đã bị loại bỏ, bảng tra cứu cụm và chuỗi cụm theo từng dòng
  • /scripts/ thực thi các bước phân tích theo từng giai đoạn
    • cluster_roots.py: phân cụm SBERT và loại bỏ hậu tố
    • map_lines_to_clusters.py: ánh xạ các dòng bản thảo thành ID cụm
    • pos_model.py: suy luận vai trò ngữ pháp dựa trên hành vi của cụm
    • transition_matrix.py: tạo và trực quan hóa chuyển tiếp giữa các cụm
    • lexicon_builder.py: tạo bảng từ vựng ứng viên theo phần và vai trò
    • cluster_language_similarity.py: tùy chọn so sánh các cụm với ngôn ngữ thực
  • /results/ lưu hình cụm rút gọn PCA, heatmap ma trận chuyển tiếp Markov, tóm tắt vai trò cụm, CSV ma trận chuyển tiếp và CSV từ vựng ứng viên

Đóng góp chính

  • Dùng multilingual SBERT để phân cụm các gốc từ đã loại bỏ hậu tố
  • Phân biệt các cụm trông giống từ chức năng với các cụm trông giống từ nội dung
  • Thực hiện mô hình hóa chuyển tiếp kiểu Markov trên các chuỗi cụm
  • Ánh xạ cấu trúc cú pháp theo từng phần của bản thảo như Botanical, Biological
  • Tạo bảng giả thuyết từ vựng dựa trên dữ liệu theo phần và vai trò

Lựa chọn tiền xử lý và tác động của nó

  • Loại bỏ khỏi mỗi từ các hậu tố lặp lại có vẻ như aiin, dy, chy và các biến thể tương tự
  • Mục đích của lựa chọn này là tách các dạng gốc từ lặp lại cùng với các biến thể
  • Các hậu tố được xem là có thể là một trong những dạng sau
    • đệm ngữ âm
    • tiểu từ ngữ pháp
    • sự lặp lại như thần chú hoặc mẹo ghi nhớ
    • nhiễu
  • Sau khi loại bỏ hậu tố, các thân từ tương tự được gom chặt hơn và các mẫu cấu trúc trong ma trận chuyển tiếp hiện ra rõ ràng hơn
  • Tuy nhiên, tiền xử lý này không trung tính
    • Có thể đã loại bỏ thông tin hình thái thực sự
    • Có thể đã che khuất các biến thể biến tố có ý nghĩa
    • Có thể đã làm kết quả thiên lệch theo hướng chức năng hơn là nội dung
  • Có thể so sánh bằng cách chạy lại quy trình mà không loại bỏ hậu tố, hoặc xử lý hậu tố như một lớp token riêng

Cấu trúc quan sát được

  • Cluster 8 có tần suất cao, độ đa dạng thấp và thường xuyên xuất hiện ở đầu dòng, nên có thể là một nhóm từ chức năng
  • Cluster 3 có độ đa dạng cao và vị trí linh hoạt, nên có thể là một lớp từ nội dung dạng gốc
  • Ma trận chuyển tiếp cho thấy cấu trúc nội tại mạnh, khác xa ngẫu nhiên
  • Việc sử dụng cụm và các mẫu từ loại thay đổi theo từng phần của bản thảo như Biological, Botanical

Giả thuyết và giới hạn

  • Giả thuyết đặt ra là bản thảo mã hóa một ngôn ngữ cấu tạo có cấu trúc hoặc ngôn ngữ ghi nhớ sử dụng đệm âm tiết và lặp lại theo vị trí
  • Ngay cả không có dịch trực tiếp, vẫn quan sát thấy cú pháp, sự tách biệt từ chức năng/từ nội dung và biến đổi ngôn ngữ thích ứng theo từng phần
  • Các giới hạn cũng được nêu rõ
    • Ánh xạ giữa cụm và từ là gián tiếp nên ước lượng tần suất có thể bị chồng lấp
    • Việc loại bỏ hậu tố là heuristic và có thể đã loại bỏ các đuôi từ có ý nghĩa
    • Không thử dịch nghĩa mà chỉ thực hiện mô hình hóa cấu trúc

Tái hiện và các thay đổi gần đây

  • Quy trình tái hiện là cài đặt phụ thuộc rồi chạy lần lượt từng script
    • pip install -r requirements.txt
    • python scripts/cluster_roots.py
    • python scripts/map_lines_to_clusters.py
    • python scripts/pos_model.py
    • python scripts/transition_matrix.py
    • python scripts/lexicon_builder.py
  • Ngoài PCA, trực quan hóa đã được bổ sung hỗ trợ UMAP, PaCMAP, LocalMAP
  • Bộ giảm chiều CLI mặc định là PCA khi không có đối số, và xử lý --reducer umap, --reducer pacmap
  • Dự án có hạn chế là chạy được trên Windows nhưng chưa thể làm cho hoạt động ổn định trên MacOS
  • Mô hình đã được đổi từ all-MiniLM-L6-v2 sang bản lớn hơn paraphrase-multilingual-mpnet-base-v2
    • README ghi so sánh kích thước là 22M vs 110M

1 bình luận

 
GN⁺ 2025-05-19
Ý kiến trên Hacker News
  • Nếu đang tìm các cụm trong phép chiếu PCA, nên dùng các thuật toán giảm chiều hiện đại hơn như PaCMAP hoặc LocalMAP để nhìn thấy cấu trúc sâu hơn
    Tôi đang làm một dự án liên quan đến công cụ nắm bắt ý nghĩa tên là Pol.is [1]; khi chiếu lại dữ liệu khảo sát wiki bằng các thuật toán mới này thay vì PCA, những hiểu biết mới thu được khá đáng ngạc nhiên
    https://patcon.github.io/polislike-opinion-map-painting/
    Các nhóm được tô màu: https://t.co/734qNlMdeh
    Tiếc là nó chỉ hoạt động đúng trên máy tính để bàn
    [1]: https://www.technologyreview.com/2025/04/15/1115125/a-small-...

    • Khuyên nên thử TDA. “mapper”, hoặc rộng hơn là toàn bộ các phương pháp dùng tính liên thông dựa trên mật độ kernel, sẽ mở ra một thế giới hoàn toàn khác
      Khác với kiểu “phân tích nhân tố” cũ
    • Trong khả năng diễn giải mô hình LLM, người ta cũng đang dùng autoencoder thưa để tìm biểu diễn khái niệm (https://openai.com/index/extracting-concepts-from-gpt-4/), và gần đây còn dùng cả linear probe
    • Khi giảm embedding, tôi thu được kết quả tốt hơn nhiều với UMAP so với PCA hay t-SNE
  • Mô hình embedding văn bản được dùng ở đây là paraphrase-multilingual-MiniLM-L12-v2 (https://huggingface.co/sentence-transformers/paraphrase-mult...), một mô hình đã khoảng 4 năm tuổi
    Trong thế giới xử lý ngôn ngữ tự nhiên, nó gần như là mô hình cổ đại; nhờ sự phát triển chung của LLM, ngay cả các mô hình embedding nhỏ cũng đã cải thiện mạnh về năng lực biểu diễn thông tin và khả năng phân tách trong không gian embedding
    Các mô hình embedding văn bản hiện nay hoạt động khá tốt trên loại dữ liệu này ngay cả khi không được huấn luyện rõ ràng để hỗ trợ đa ngôn ngữ, nên có thể còn phù hợp hơn với bản thảo Voynich, một ngôn ngữ tương đối ít được biết đến
    Các kỹ thuật xử lý ngôn ngữ tự nhiên truyền thống như loại bỏ hậu tố hoặc xác định từ loại có thể còn làm giảm chất lượng embedding. Lý do là thông tin ngữ cảnh liên quan cần cho embedding tổng thể sẽ bị mất

    • Tôi dùng paraphrase-multilingual-MiniLM-L12-v2 làm mặc định chủ yếu vì tốc độ và khả năng tương thích rộng, nhưng đúng là theo chuẩn hiện nay thì đó là một mô hình cũ
      Tôi tò mò các mô hình như all-mpnet-base-v2 hoặc text-embedding-ada-002 sẽ hoạt động ra sao, và đặc biệt sẽ thú vị hơn nếu giữ nguyên hậu tố, không rút gọn về dạng gốc từ, mà dùng embedding toàn ngữ cảnh
  • Tôi không rành xử lý ngôn ngữ tự nhiên, nhưng tự hỏi liệu có hợp lý khi đặt một nhóm đối chứng cho quy trình này không
    Ví dụ, có thể yêu cầu người viết ra thứ trông giống ngôn ngữ đối với con người nhưng không phải ngôn ngữ thật, rồi áp dụng cùng quy trình như loại bỏ hậu tố và phân cụm để xem liệu có khả năng cho ra kết quả tương tự hay không

    • Nếu có giả thuyết về cách viết, chẳng hạn như phương pháp Cardan grille, thì có thể tạo văn bản bằng cách đó rồi xem liệu các đặc trưng tương tự có xuất hiện không
    • Đúng vậy. Vì thế tôi thắc mắc tại sao không đơn giản là bảo 100 người viết bản thảo Voynich rồi huấn luyện trên tập dữ liệu đó
  • Tôi đã xem bản thảo này một thời gian, và thấy đáng ngờ là ở một số trang chữ viết bám quá sát vào hình minh họa
    Trong ngôn ngữ thông thường, vì độ rộng của từ và chữ cái khác nhau, khi gần đến cuối dòng người ta sẽ tự nhiên xuống dòng để bắt đầu từ mới và tránh tràn dòng
    Nhưng trong bản thảo này dường như không có kiểu ngắt như vậy, và ở nhiều chỗ trông như thể bất kỳ chữ nào nhét vừa vào cuối dòng thì đều bị cố nhồi vào đó
    Tôi từng muốn phân tích xem những chữ nào xuất hiện ngay trước và sau chỗ xuống dòng, và liệu chúng có khác với toàn bộ phần thân văn bản hay không, nhưng không tìm được bản phiên âm
    Theo cảm nhận hoàn toàn nghiệp dư của tôi, nó giống một tác phẩm nghệ thuật tinh vi hoặc một trò lừa đảo

    • Một số ngôn ngữ cũng tách từ ở cuối dòng
  • Chỉ với PCA cũng đã thấy sự phân tách khá rõ, nhưng UMAP hoặc t-SNE cũng có vẻ tốt
    Nếu ánh xạ từng cụm theo chuẩn so với tất cả các cụm khác, đó có thể là một cách hay để cho thấy liệu trong phân tích còn độ biến thiên nào chưa được giải thích hay không

    • Vì PCA cho ra sự phân tách bất ngờ khá gọn ở giai đoạn đầu, tôi đã dùng nguyên như vậy trong các lần chạy ban đầu
      Nhưng đúng là nếu áp dụng UMAP hoặc t-SNE thì có thể bắt được các mẫu tinh tế hơn hoặc các trường hợp thất bại từ góc nhìn phi tuyến
      Tôi chưa tạo ma trận tương đồng giữa các cụm, nhưng nghe vậy thì đó có vẻ là bước tiếp theo tự nhiên để kiểm chứng xem tín hiệu thực sự được nắm bắt đến mức nào
    • Tôi tò mò liệu có ví dụ nào về cách thực hiện phép ánh xạ theo chuẩn này không
      Tôi muốn thử áp dụng cho embedding thuộc dạng khác, nhưng không có nhiều kinh nghiệm về xử lý ngôn ngữ tự nhiên
    • Nếu PCA cho thấy sự phân tách tốt, cá nhân tôi thường tránh UMAP. Lý do là diễn giải khoảng cách tương đối giữa mọi điểm sẽ dễ hơn
      Tôi tránh t-SNE bằng mọi giá. Vì tôi cho rằng khoảng cách trong những hình như vậy gần như không có ý nghĩa
      Đây không phải lời khuyên, chỉ là sở thích cá nhân
  • Rất thú vị. Sẽ hay nếu đăng liên kết lên cả https://www.voynich.ninja/index.php
    Tôi không quen với SBERT hay xử lý ngôn ngữ tự nhiên thống kê hiện đại nói chung, nhưng SBERT hoạt động ở cấp câu, trong khi Bản thảo Voynich không có dấu phân tách câu rõ ràng. Chỉ có dấu phân tách từ và đoạn
    Tôi cũng lo về điểm “loại bỏ các hậu tố phổ biến khỏi từ Voynich”. Từ trong Bản thảo Voynich trông giống như tiền tố + hậu tố, mà tiền tố lại khá ngắn, nên có thể đã mất khoảng một nửa thông tin trước khi bắt đầu phân tích
    Sẽ tốt nếu kiểm chứng xem phương pháp này có hoạt động với văn bản tự nhiên có nghĩa hay không, và có hoạt động với những chuỗi vô nghĩa lảm nhảm hay không
    Văn bản mã hóa nằm ở đâu đó giữa hai cực đó; mật mã càng đơn giản thì càng gần ngôn ngữ tự nhiên, mật mã càng phức tạp thì càng gần những chuỗi vô nghĩa lảm nhảm
    Gordon Rugg, Torsten Timm và chính tôi đã tạo ra các văn bản rất giống Bản thảo Voynich bằng những phương pháp khác nhau
    Bản của tôi ở đây: https://fmjlang.co.uk/voynich/generated-voynich-manuscript.h...
    Phiên bản EVA tương đương ở đây: https://fmjlang.co.uk/voynich/generated-voynich-manuscript.t...

  • Có thể tôi đã bỏ sót trong README, nhưng tôi tò mò việc mã hóa ban đầu của “từ” được thực hiện như thế nào
    Ví dụ nếu có một từ như "okeeodair", tôi muốn biết nó ánh xạ tới đâu trong các ký hiệu gốc

    • Những từ như "okeeodair" đến trực tiếp từ tệp phiên âm EVA, vốn ánh xạ các glyph Voynich gốc sang dạng xấp xỉ ASCII
      Vì vậy, chúng tôi không xử lý trực tiếp các glyph, mà xử lý các từ phiên âm chuẩn dựa trên hệ EVA (European Voynich Alphabet)
      Bản phiên âm được dùng có thể tìm thấy tại đây: https://www.voynich.nu/
      Trong dự án này, chúng tôi không ánh xạ ngược lại sang glyph; mọi thứ lấy phiên âm EVA làm điểm xuất phát
      Do đó, nếu có "okeeodair" trong tập dữ liệu, đó là vì một người thông minh hơn tôi rất nhiều đã nhìn vào chuỗi glyph và thống nhất gọi nó như vậy
  • Tôi đã xem đây là một trong những giả thuyết thú vị nhất: http://voynichproject.org/
    Tác giả giả định Voynichese thuộc họ ngôn ngữ Germanic, và có vẻ đã đạt được một mức tiến triển nào đó
    Tôi cũng từng thấy ý kiến rằng nó có thể thuộc ngữ hệ Ural hoặc nhánh Finno-Ugric
    Cách tiếp cận này rất hay, và tôi tự hỏi liệu nếu điều chỉnh cho một họ ngôn ngữ cụ thể thì có thể đi xa hơn không

    • Về nhiều tuyên bố “giải mã”, luồng này có bàn tới: https://www.voynich.ninja/thread-4341.html
      Trang của Bernholz thì ổn, nhưng công trình của Child thực ra không soi sáng được nhiều cho việc giải mã bản thảo
    • Nhìn việc bản thảo khó giải mã đến mức này, cá nhân tôi nghiêng về khả năng đó là tác phẩm của một nghệ sĩ naïve, và không có ngôn ngữ nào đằng sau
      Có thể là một người không biết các quy tắc ngôn ngữ đã bắt chước ngôn ngữ: https://en.wikipedia.org/wiki/Naïve_art
      Tôi không có ý nói là vấn đề tâm thần, mà là một hiện tượng hiếm gặp
      Voynich khá phù hợp với các điều kiện của một tác phẩm nghệ thuật naïve
    • Edward Kelly[1] ở đúng nơi, đúng thời điểm, và trong tài liệu tôi đọc từ lâu, tôi nhớ là có cả bằng chứng cho thấy ông quen thuộc với Cardan grille[2]. Giờ tôi không tìm được nguồn nữa, nhưng chỉ riêng điểm đó cũng đã khiến tôi khá tin rằng ông là tác giả hợp lý nhất, và cuốn sách được làm để đùa cợt hoặc lừa đảo
      1.https://en.wikipedia.org/wiki/Edward_Kelley
      2.https://en.wikipedia.org/wiki/Cardan_grille
  • Nếu là thế kỷ 15, lý do hiển nhiên để mã hóa văn bản hẳn là nhằm tránh Tòa án dị giáo và các bạo lực tôn giáo khác thời đó
    Vì vậy, sẽ thú vị nếu áp dụng cùng cách xử lý ngôn ngữ tự nhiên đó cho các sách Phúc Âm để tìm tương quan
    Có lẽ nên so sánh dựa trên “từ” trước, rồi sau đó so sánh dựa trên “ký tự”. Tức là so sánh đồ thị của Kinh Thánh với đồ thị của Voynich
    Ngoài ra, có thể có những ký tự được đưa vào để gây nhiễu
    Ví dụ, những ký hiệu như chữ “P” viết hoa kỳ lạ có nhiều biến thể đôi khi xuất hiện quá thường xuyên để có thể đại diện cho ngôn ngữ thực, nên có thể là ký hiệu làm rối cần loại bỏ trước khi giải mã
    Những ký tự khác xuất hiện với tần suất bất thường cũng có thể là ký tự giả không được dùng
    Tất nhiên, hiện tượng “quá nhiều chữ P” cũng phù hợp với cách giải thích rằng đây hoàn toàn là hư cấu

  • Nếu một cuốn sách viết tay như vậy chỉ là những dòng lảm nhảm và không phải bất kỳ loại mật mã nào, thì tôi nghĩ văn phong, thư pháp, các từ được viết, thậm chí bản thân chữ cái cũng phải thay đổi từ trang 1 đến trang cuối
    Dĩ nhiên các trang có thể đã bị sắp xếp lại, nhưng dù vậy vẫn nên nhận ra được
    Trừ khi tác giả đã viết hàng chục cuốn như thế trước đó và tất cả đều biến mất
    Có lẽ đây không phải ý tưởng quá mới, nhưng tôi tò mò liệu đã có phân tích nào về kiểu mẫu đó chưa
    Tôi chưa thấy ở đâu nhắc đến tính nhất quán giữa các trang

    • Đã có nhiều nghiên cứu về tính nhất quán giữa các trang
      Người ta từng cho rằng có 2 người chép (xem Prescott Currier), còn Lisa Fagin Davis cho là 5 người
      Thảo luận về một thí nghiệm dựa trên quan điểm của Fagin Davis có ở đây: https://www.voynich.ninja/thread-3783.html