1 คะแนน โดย GN⁺ 2025-05-19 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • รีโพสitory นี้ใช้การทำคลัสเตอร์ การอนุมานชนิดคำ การเปลี่ยนสถานะ Markov และแพตเทิร์นแยกตามเซกชัน โดยไม่พึ่งการคาดเดาคำแปล เพื่อดูว่าต้นฉบับวอยนิชมี แพตเทิร์นเชิงโครงสร้าง ที่ทำงานเหมือนภาษาจริงหรือไม่
  • ไปป์ไลน์การวิเคราะห์จะลบสิ่งที่ดูเหมือนปัจจัยท้ายซ้ำ ๆ เช่น aiin, dy, chy เป็นต้น จากนั้นใช้ multilingual SBERT ฝังเวกเตอร์รากคำและสร้างคลัสเตอร์ พร้อมแมปแต่ละบรรทัดของต้นฉบับให้เป็นลำดับคลัสเตอร์
  • ผลลัพธ์ชี้ให้เห็นความแตกต่างเชิงโครงสร้าง เช่น Cluster 8 มีความถี่สูง ความหลากหลายต่ำ และปรากฏที่ตำแหน่งต้นบรรทัดบ่อย จึงดูเหมือนกลุ่มคำหน้าที่ ส่วน Cluster 3 มีความหลากหลายและความยืดหยุ่นของตำแหน่งสูง จึงดูเหมือนคลาสรากคำเนื้อหา
  • การลบปัจจัยท้ายทำให้รากคำที่คล้ายกันถูกจัดกลุ่มแน่นขึ้น และทำให้เมทริกซ์การเปลี่ยนสถานะสะอาดขึ้น แต่ก็เป็นทางเลือกการประมวลผลล่วงหน้าที่หนัก เพราะอาจลบข้อมูลรูปคำจริง บดบังความแปรผันเชิงการผันที่มีความหมาย หรือสร้าง อคติที่เน้นด้านหน้าที่ ได้
  • โปรเจกต์นี้ไม่ได้พยายามแปลความหมาย แต่มุ่งตรวจสอบด้วยข้อมูลว่าต้นฉบับวอยนิชแสดงโครงสร้างคล้ายภาษา เช่น วากยสัมพันธ์ การแยกคำหน้าที่/คำเนื้อหา และการเปลี่ยนแปลงทางภาษาตามเซกชันหรือไม่

วัตถุประสงค์ของโปรเจกต์

  • ต้นฉบับวอยนิชยังไม่ถูกถอดรหัส และยังไม่มี คำตอบทางภาษาศาสตร์หรือวิทยาการรหัสลับ ที่เป็นที่ยอมรับร่วมกัน
  • โปรเจกต์นี้เลือกเส้นทางกึ่งกลางระหว่างการตรวจสอบเอนโทรปีเชิงสถิติกับการตีความที่ไร้หลักฐาน โดยใช้เทคนิคภาษาศาสตร์เชิงคำนวณเพื่อประเมินว่าต้นฉบับเข้ารหัสพฤติกรรมคล้ายภาษาที่มีโครงสร้างหรือไม่
  • ไม่ทำการแปลหรือคาดเดาแบบ GPT แต่มุ่งเฉพาะว่ามี โครงสร้างที่ทำงานเหมือนภาษา หรือไม่

ไปป์ไลน์การวิเคราะห์และโครงสร้างไฟล์

  • /data/ มีสำเนาถอดความทั้งหมด ไฟล์คำราก รายการรากคำที่ถูกลบ ตารางค้นหาคลัสเตอร์ และลำดับคลัสเตอร์รายบรรทัด
  • /scripts/ แยกขั้นตอนการวิเคราะห์สำหรับรัน
    • cluster_roots.py: การทำคลัสเตอร์ด้วย SBERT และการลบปัจจัยท้าย
    • map_lines_to_clusters.py: แมปบรรทัดของต้นฉบับเป็น ID คลัสเตอร์
    • pos_model.py: อนุมานบทบาททางไวยากรณ์จากพฤติกรรมของคลัสเตอร์
    • transition_matrix.py: สร้างและแสดงภาพการเปลี่ยนสถานะของคลัสเตอร์
    • lexicon_builder.py: สร้างตารางคำศัพท์ผู้สมัครตามเซกชันและบทบาท
    • cluster_language_similarity.py: เปรียบเทียบคลัสเตอร์กับภาษาจริงแบบเลือกทำได้
  • /results/ เก็บภาพคลัสเตอร์ที่ลดมิติด้วย PCA, ฮีตแมปเมทริกซ์การเปลี่ยนสถานะ Markov, สรุปบทบาทของคลัสเตอร์, CSV เมทริกซ์การเปลี่ยนสถานะ และ CSV คำศัพท์ผู้สมัคร

คุณูปการหลัก

  • ใช้ multilingual SBERT เพื่อทำคลัสเตอร์ รากคำที่ลบปัจจัยท้ายแล้ว
  • แยกคลัสเตอร์ที่ดูเหมือนคำหน้าที่ออกจากคลัสเตอร์ที่ดูเหมือนคำเนื้อหา
  • ทำ การโมเดลการเปลี่ยนสถานะแบบ Markov บนลำดับคลัสเตอร์
  • แมปโครงสร้างวากยสัมพันธ์ตามเซกชันของต้นฉบับ เช่น Botanical, Biological
  • สร้าง ตารางสมมติฐานคำศัพท์ จากข้อมูลตามเซกชันและบทบาท

ทางเลือกการประมวลผลล่วงหน้าและผลกระทบ

  • ลบ aiin, dy, chy และรูปแปรคล้ายกันที่ดูเหมือนปัจจัยท้ายซ้ำ ๆ ออกจากแต่ละคำ
  • จุดประสงค์ของทางเลือกนี้คือการแยก รูปของรากคำ ที่เกิดซ้ำพร้อมกับรูปแปร
  • มองว่าปัจจัยท้ายอาจเป็นหนึ่งในสิ่งต่อไปนี้
    • การเติมเสียง
    • อนุภาคทางไวยากรณ์
    • การซ้ำแบบคาถาหรือช่วยจำ
    • สัญญาณรบกวน
  • หลังลบปัจจัยท้าย รากคำที่คล้ายกันถูกจัดกลุ่มแน่นขึ้น และเมทริกซ์การเปลี่ยนสถานะแสดงแพตเทิร์นโครงสร้างที่สะอาดขึ้น
  • อย่างไรก็ตาม การประมวลผลล่วงหน้านี้ไม่เป็นกลาง
    • อาจลบข้อมูลรูปคำจริงออกไป
    • อาจบดบังความแปรผันของการผันคำที่มีความหมาย
    • อาจทำให้ผลลัพธ์เอนเอียงไปทาง ด้านหน้าที่ มากกว่าเนื้อหา
  • สามารถเปรียบเทียบได้โดยรันไปป์ไลน์ใหม่แบบไม่ลบปัจจัยท้าย หรือจัดการปัจจัยท้ายเป็นคลาสโทเค็นแยกต่างหาก

โครงสร้างที่สังเกตได้

  • Cluster 8 มีความถี่สูง ความหลากหลายต่ำ และมักปรากฏที่ตำแหน่งต้นบรรทัด จึงอาจเป็นกลุ่มคำหน้าที่
  • Cluster 3 มีความหลากหลายสูงและตำแหน่งยืดหยุ่น จึงอาจเป็นคลาสคำเนื้อหาที่เป็นรากคำ
  • เมทริกซ์การเปลี่ยนสถานะแสดงโครงสร้างภายในที่แข็งแรงและห่างไกลจากความสุ่ม
  • การใช้คลัสเตอร์และแพตเทิร์นชนิดคำแตกต่างกันไปตามเซกชันของต้นฉบับ เช่น Biological, Botanical

สมมติฐานและข้อจำกัด

  • ตั้งสมมติฐานว่าต้นฉบับเข้ารหัส ภาษาประดิษฐ์ที่มีโครงสร้าง หรือภาษาช่วยจำ ซึ่งใช้การเติมพยางค์และการซ้ำตามตำแหน่ง
  • แม้ไม่มีการแปลโดยตรง ก็เห็นวากยสัมพันธ์ การแยกคำหน้าที่/คำเนื้อหา และการเปลี่ยนแปลงทางภาษาที่รับรู้เซกชัน
  • ระบุข้อจำกัดไว้ด้วย
    • การแมประหว่างคลัสเตอร์กับคำเป็นแบบอ้อม จึงอาจมีการซ้อนทับในการประมาณความถี่
    • การลบปัจจัยท้ายเป็นฮิวริสติก และอาจลบคำลงท้ายที่มีความหมายออกไป
    • ไม่พยายามแปลความหมาย ทำเพียง การโมเดลโครงสร้าง เท่านั้น

การทำซ้ำและการเปลี่ยนแปลงล่าสุด

  • ขั้นตอนการทำซ้ำคือ ติดตั้ง dependencies แล้วรันสคริปต์แต่ละตัวตามลำดับ
    • 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
  • นอกจาก PCA แล้ว การแสดงภาพยังเพิ่มการรองรับ UMAP, PaCMAP, LocalMAP
  • CLI reducer ใช้ PCA เมื่อไม่มีอาร์กิวเมนต์ และรองรับ --reducer umap, --reducer pacmap
  • โปรเจกต์มีข้อจำกัดว่าเคยทำงานได้บน Windows แต่ยังทำให้ทำงานได้ถูกต้องบน MacOS ไม่ได้
  • โมเดลถูกเปลี่ยนจาก all-MiniLM-L6-v2 ไปเป็น paraphrase-multilingual-mpnet-base-v2 ที่ใหญ่กว่า
    • README ระบุการเปรียบเทียบขนาดไว้ว่า 22M vs 110M

1 ความคิดเห็น

 
GN⁺ 2025-05-19
ความเห็นจาก Hacker News
  • ถ้ากำลังมองหาคลัสเตอร์จากการฉายภาพด้วย PCA ก็น่าจะลองใช้อัลกอริทึมลดมิติรุ่นใหม่อย่าง PaCMAP หรือ LocalMAP เพื่อดูโครงสร้างที่ลึกขึ้น
    ผมกำลังทำโปรเจกต์ที่เกี่ยวข้องกับเครื่องมือทำความเข้าใจความหมายชื่อ Pol.is [1] และพอลองฉายข้อมูลแบบสอบถามวิกิใหม่ด้วยอัลกอริทึมพวกนี้แทน PCA ก็ได้มุมมองใหม่ที่น่าทึ่งพอสมควร
    https://patcon.github.io/polislike-opinion-map-painting/
    Painted groups: https://t.co/734qNlMdeh
    น่าเสียดายที่ใช้งานได้ดีจริง ๆ แค่บนเดสก์ท็อป
    [1]: https://www.technologyreview.com/2025/04/15/1115125/a-small-...

    • แนะนำให้ลอง TDA ดู วิธีอย่าง “mapper” หรือกว้างกว่านั้นคือแนวทางที่ใช้ความเชื่อมโยงบนฐาน kernel density จะเปิดโลกอีกแบบไปเลย
      มันต่างจาก “factor analysis” แบบเก่า
    • ในงานตีความโมเดล LLM ก็มีการใช้sparse autoencoder เพื่อหา concept representation อยู่เหมือนกัน(https://openai.com/index/extracting-concepts-from-gpt-4/) และช่วงหลังก็ใช้ linear probe ด้วย
    • ตอนลดมิติของ embedding ผมได้ผลจาก UMAP ดีกว่า PCA หรือ t-SNE มาก
  • โมเดล text embedding ที่ใช้ตรงนี้คือ paraphrase-multilingual-MiniLM-L12-v2(https://huggingface.co/sentence-transformers/paraphrase-mult...) ซึ่งเป็นโมเดลเมื่อราว 4 ปีก่อน
    ในโลก NLP มันแทบจะนับว่าโบราณแล้ว และด้วยความก้าวหน้าของ LLM โดยรวม แม้แต่โมเดล embedding ขนาดเล็กก็พัฒนาขึ้นมากทั้งด้านความสามารถในการแทนข้อมูลและการแยกความต่างใน embedding space
    ทุกวันนี้โมเดล text embedding หลายตัวทำงานกับข้อมูลแบบนี้ได้ดีพอสมควร แม้จะไม่ได้ฝึกให้รองรับหลายภาษาอย่างชัดเจน จึงอาจเหมาะกับภาษาอย่างต้นฉบับวอยนิชที่ค่อนข้างไม่เป็นที่รู้จักมากกว่า
    เทคนิค NLP แบบดั้งเดิมอย่างการตัด suffix หรือการระบุชนิดคำอาจกลับทำให้คุณภาพ embedding แย่ลงได้ เพราะข้อมูลบริบทที่จำเป็นต่อ embedding ทั้งหมดหายไป

    • ที่ใช้ paraphrase-multilingual-MiniLM-L12-v2 เป็นค่าเริ่มต้นหลัก ๆ ก็เพราะความเร็วและความเข้ากันได้ที่กว้าง แต่ก็จริงว่าเมื่อเทียบกับมาตรฐานตอนนี้มันเป็นโมเดลเก่าแล้ว
      เลยอยากรู้ว่าโมเดลอย่าง all-mpnet-base-v2 หรือ text-embedding-ada-002 จะให้ผลอย่างไร โดยเฉพาะถ้าใช้embedding แบบบริบทเต็มโดยคง suffix ไว้และไม่ย่อให้เหลือแค่รูปคำราก ก็น่าจะน่าสนใจกว่า
  • ผมไม่ค่อยรู้เรื่อง NLP แต่สงสัยว่าการมีกลุ่มควบคุมในกระบวนการนี้จะสมเหตุสมผลไหม
    เช่น ให้คนเขียนข้อความที่ดูเหมือนภาษาแต่จริง ๆ ไม่ใช่ภาษา แล้วเอาไปผ่านขั้นตอนเดียวกันอย่างการตัด suffix และการจัดกลุ่ม เพื่อดูว่ามีโอกาสได้ผลคล้ายกันหรือไม่

    • ถ้ามีสมมุติฐานเกี่ยวกับวิธีเขียน เช่น การสร้างข้อความด้วยวิธีแบบ Cardan grille ก็น่าจะลองดูได้ว่ามีลักษณะแบบเดียวกันโผล่มาหรือเปล่า
    • ใช่ เลยสงสัยว่าทำไมถึงไม่ให้คนสัก 100 คนลองเขียนต้นฉบับวอยนิช แล้วใช้ข้อมูลชุดนั้นมาฝึกไปเลย
  • เคยดูต้นฉบับนี้อยู่พักหนึ่ง แล้วรู้สึกว่าน่าสงสัยตรงที่บางหน้าข้อความชิดภาพประกอบมากเกินไป
    ในภาษาปกติ ความกว้างของคำและตัวอักษรไม่เท่ากัน ดังนั้นเมื่อใกล้สุดบรรทัดก็มักจะตัดบรรทัดอย่างเป็นธรรมชาติเพื่อขึ้นคำใหม่และเลี่ยงข้อความล้น
    แต่ต้นฉบับนี้ดูเหมือนไม่มีการขาดตอนลักษณะนั้นเลย และหลายจุดก็เหมือนยัดตัวอักษรอะไรก็ได้ที่พอใส่ลงท้ายบรรทัดได้เข้าไป
    ผมอยากวิเคราะห์ว่ามีตัวอักษรอะไรบ้างที่มักปรากฏก่อนและหลังการขึ้นบรรทัดใหม่ และมันต่างจากทั้งเนื้อหาที่เหลือหรือไม่ แต่หาฉบับถอดความไม่เจอ
    ถ้ามองแบบสมัครเล่นล้วน ๆ มันดูเหมือนงานศิลปะที่ประณีตมาก หรือไม่ก็เป็นเรื่องหลอกลวง

    • บางภาษาก็มีการตัดคำข้ามบรรทัดเหมือนกัน
  • แค่ PCA ก็เห็นการแยกได้ชัดแล้ว แต่ UMAP หรือ t-SNE ก็น่าจะดีเหมือนกัน
    ถ้าลองทำ baseline mapping ให้แต่ละคลัสเตอร์เทียบกับคลัสเตอร์อื่นทั้งหมด ก็น่าจะเป็นวิธีที่ดีในการดูว่ายังมีความแปรปรวนเหลืออยู่ในการวิเคราะห์อีกไหม

    • ตอนแรกใน PCA มันแยกได้ค่อนข้างสะอาดกว่าที่คาด เลยใช้แบบนั้นไปก่อนในการรันรอบต้น ๆ
      แต่ก็จริงที่การใช้ UMAP หรือ t-SNE อาจช่วยจับแพตเทิร์นที่ละเอียดกว่า หรือกรณีล้มเหลวจากมุมมองแบบไม่เชิงเส้นได้
      ผมยังไม่ได้สร้างเมทริกซ์ความคล้ายระหว่างคลัสเตอร์ แต่พอฟังแล้วมันก็ดูเป็นขั้นต่อไปที่เป็นธรรมชาติสำหรับตรวจว่าจับสัญญาณจริงได้มากแค่ไหน
    • อยากรู้ว่ามีตัวอย่างวิธีทำ baseline mapping นี้ไหม
      ผมอยากลองเอาไปใช้กับ embedding รูปแบบอื่นดู แต่ไม่ได้มีประสบการณ์ด้าน NLP มากนัก
    • ถ้าใน PCA เห็นการแยกชัดอยู่แล้ว ส่วนตัวผมมักจะหลีกเลี่ยง UMAP เพราะตีความระยะสัมพัทธ์ระหว่างจุดทั้งหมดได้ง่ายกว่า
      ส่วน t-SNE นั้นผมเลี่ยงไม่ว่าแลกกับอะไร เพราะมองว่าระยะในภาพแบบนั้นแทบไม่มีความหมาย
      อันนี้ไม่ใช่คำแนะนำตายตัวนะ แค่รสนิยมส่วนตัว
  • น่าสนใจมาก น่าจะลองโพสต์ลิงก์ไว้ที่ https://www.voynich.ninja/index.php ด้วย
    ผมไม่ได้คุ้นกับ SBERT หรือการประมวลผลภาษาธรรมชาติแบบสถิติสมัยใหม่โดยรวมมากนัก แต่ SBERT ทำงานในระดับประโยค ขณะที่ต้นฉบับ Voynich ไม่มี ตัวคั่นประโยค ที่ชัดเจน
    มีแค่ตัวคั่นคำกับตัวคั่นย่อหน้าเท่านั้น
    อีกจุดที่น่ากังวลคือ “การตัดคำต่อท้ายที่พบบ่อยออกจากคำใน Voynich”
    คำในต้นฉบับ Voynich ดูเหมือนจะเป็นคำนำหน้า + คำต่อท้าย และคำนำหน้าก็ค่อนข้างสั้น จึงอาจสูญเสียข้อมูลไปประมาณครึ่งหนึ่งตั้งแต่ก่อนเริ่มวิเคราะห์
    น่าจะดีถ้าได้ตรวจสอบว่าวิธีนี้ใช้ได้กับข้อความภาษาธรรมชาติที่มีความหมายจริง และใช้ได้กับข้อความเพ้อเจ้อไร้ความหมายด้วยหรือไม่
    ข้อความเข้ารหัสน่าจะอยู่ระหว่างสองอย่างนั้น โดยยิ่งเป็นรหัสแบบง่ายก็ยิ่งใกล้ภาษาธรรมชาติ และยิ่งเป็นรหัสซับซ้อนก็ยิ่งใกล้ข้อความเพ้อเจ้อไร้ความหมาย
    Gordon Rugg, Torsten Timm และตัวผมเอง ต่างก็เคยสร้างข้อความที่คล้ายต้นฉบับ Voynich มากด้วยวิธีที่ต่างกัน
    ของผมอยู่ที่นี่: https://fmjlang.co.uk/voynich/generated-voynich-manuscript.h...
    เวอร์ชัน EVA ที่เทียบเท่ากันอยู่ที่นี่: https://fmjlang.co.uk/voynich/generated-voynich-manuscript.t...

  • อาจพลาดไปใน README แต่ผมสงสัยว่ามีการเข้ารหัส “คำ” ตั้งแต่ต้นอย่างไร
    ตัวอย่างเช่น ถ้ามีคำอย่าง "okeeodair" ผมอยากรู้ว่ามันแมปกลับไปยังสัญลักษณ์ดั้งเดิมตรงไหน

    • คำอย่าง "okeeodair" มาจาก ไฟล์ถอดความ EVA โดยตรง ซึ่งเป็นการแมปตัวอักษรกลิฟดั้งเดิมของ Voynich ให้เป็นค่าประมาณแบบ ASCII
      ดังนั้นจึงไม่ได้จัดการกับตัวกลิฟโดยตรง แต่ใช้คำถอดความมาตรฐานที่อิงกับระบบ EVA (European Voynich Alphabet)
      ถอดความที่ใช้หาได้ที่นี่: https://www.voynich.nu/
      ในโปรเจ็กต์นี้ไม่ได้แมปกลับไปเป็นกลิฟอีกครั้ง และทุกอย่างเริ่มต้นจากการถอดความแบบ EVA
      ดังนั้นถ้าในชุดข้อมูลมีคำว่า "okeeodair" ก็เป็นเพราะมีใครสักคนที่ฉลาดกว่าผมมาก ดูลำดับกลิฟแล้วตกลงกันว่าจะเรียกมันแบบนั้น
  • ผมเคยมองว่านี่เป็นหนึ่งในสมมติฐานที่น่าสนใจที่สุด: http://voynichproject.org/
    ผู้เขียนตั้งสมมติฐานว่า Voynichese เป็น กลุ่มภาษาเจอร์แมนิก และดูเหมือนว่าจะมีความคืบหน้าไปได้พอสมควร
    ผมก็เคยเห็นด้วยว่าอาจเป็นตระกูลภาษาอูราลิกหรือฟินโน-อูกริก
    แนวทางนี้ยอดเยี่ยม และผมสงสัยว่าถ้าปรับให้เข้ากับตระกูลภาษาเฉพาะเจาะจง อาจไปได้ไกลกว่านี้หรือไม่

    • เธรดนี้พูดถึงข้ออ้างเรื่อง “การถอดรหัส” หลายแบบ: https://www.voynich.ninja/thread-4341.html
      เว็บไซต์ของ Bernholz ถือว่าโอเค แต่ผลงานของ Child ไม่ได้ช่วยให้เข้าใจการถอดรหัสต้นฉบับจริง ๆ มากนัก
    • ที่ต้นฉบับยังถอดไม่ได้ถึงขนาดนี้ ทำให้โดยส่วนตัวผมเอนเอียงไปทางที่ว่ามันเป็นผลงานของศิลปินแนวไร้เดียงสา และไม่มีภาษาอยู่เบื้องหลังเลย
      อาจเป็นคนที่ไม่รู้กฎของภาษาแต่พยายามเลียนแบบภาษา: https://en.wikipedia.org/wiki/Naïve_art
      ไม่ได้หมายถึงปัญหาทางจิตนะ เป็นเพียงปรากฏการณ์ที่เกิดขึ้นได้แต่ไม่บ่อย
      Voynich เข้ากับเงื่อนไขของผลงาน ศิลปะแนวไร้เดียงสา ได้ค่อนข้างดี
    • Edward Kelly[1] อยู่ถูกที่ถูกเวลา และผมจำได้ว่าเคยอ่านหลักฐานเมื่อนานมาแล้วว่าเขาคุ้นเคยกับ Cardan grille[2] ด้วย แม้ตอนนี้จะหาที่มาไม่เจอแล้วก็ตาม แต่แค่จุดนั้นก็ทำให้ผมค่อนข้างเชื่อว่าเขาเป็นผู้แต่งที่น่าเป็นไปได้ที่สุด และหนังสือเล่มนี้ทำขึ้นเพื่อการล้อเล่นหรือการหลอกลวง
      1.https://en.wikipedia.org/wiki/Edward_Kelley
      2.https://en.wikipedia.org/wiki/Cardan_grille
  • ถ้าเป็นศตวรรษที่ 15 เหตุผลที่ชัดเจนในการเข้ารหัสข้อความก็น่าจะเป็นเพื่อหลีกเลี่ยง ศาลไต่สวนคดีศาสนา และความรุนแรงทางศาสนาอื่น ๆ ในยุคนั้น
    ดังนั้นก็น่าสนใจถ้าจะนำการประมวลผลภาษาธรรมชาติแบบเดียวกันไปใช้กับพระวรสารเพื่อหาความสัมพันธ์
    ผมคิดว่าควรเริ่มจากการเปรียบเทียบแบบอิง “คำ” ก่อน แล้วค่อยตามด้วยแบบอิง “ตัวอักษร” กล่าวคือเปรียบเทียบกราฟของคัมภีร์ไบเบิลกับกราฟของ Voynich
    นอกจากนี้อาจมีตัวอักษรที่ใส่มาเพื่อทำให้สับสน
    ตัวอย่างเช่น สัญลักษณ์คล้ายตัวพิมพ์ใหญ่ “P” แปลก ๆ ที่มีหลายรูปแบบนั้น บางครั้งก็ปรากฏบ่อยเกินกว่าจะเป็นตัวแทนของภาษาจริง จึงอาจเป็น สัญลักษณ์พรางความหมาย ที่ควรถูกตัดออกก่อนถอดรหัส
    ตัวอักษรอื่น ๆ ที่ปรากฏถี่ผิดปกติก็อาจเป็นอักขระหลอกที่ไม่ได้ใช้งานเช่นกัน
    แน่นอนว่าอาการ “มี P มากเกินไป” ก็สอดคล้องกับคำอธิบายที่ว่ามันเป็นเรื่องแต่งล้วน ๆ เช่นกัน

  • ถ้าหนังสือลายมือแบบนั้นเป็นเพียงข้อความเพ้อเจ้อและไม่ใช่รหัสชนิดใดเลย รูปแบบ ลายมือ คำที่ใช้ หรือแม้แต่ตัวอักษรเอง ก็น่าจะ เปลี่ยนแปลง จากหน้าแรกไปถึงหน้าสุดท้าย
    แน่นอนว่าหน้าอาจถูกจัดเรียงใหม่ภายหลังได้ แต่ถึงอย่างนั้นก็น่าจะสังเกตเห็นได้
    เว้นแต่ผู้เขียนจะเคยเขียนหนังสือแบบนี้มาแล้วเป็นสิบเล่ม และไม่ได้หายสาบสูญไปทั้งหมด
    อาจไม่ใช่ความคิดใหม่มากนัก แต่ผมสงสัยว่ามีการวิเคราะห์รูปแบบลักษณะนี้หรือไม่
    ผมไม่เคยเห็นการพูดถึงความสม่ำเสมอระหว่างหน้าเลย

    • มีงานศึกษาเรื่องความสม่ำเสมอระหว่างหน้าอยู่มากแล้ว
      บางคนมองว่ามีอาลักษณ์ 2 คน (ดู Prescott Currier) ส่วน Lisa Fagin Davis มองว่ามี 5 คน
      การอภิปรายการทดลองที่อิงตามมุมมองของ Fagin Davis อยู่ที่นี่: https://www.voynich.ninja/thread-3783.html