<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Clement |</title><link>https://clementgodbarge.com/vi/authors/clement/</link><atom:link href="https://clementgodbarge.com/vi/authors/clement/index.xml" rel="self" type="application/rss+xml"/><description>Clement</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>vi-vn</language><lastBuildDate>Sun, 06 Sep 2026 00:00:00 +0000</lastBuildDate><image><url>https://clementgodbarge.com/media/authors/clement_hu_3c9b888d0ca9e974.webp</url><title>Clement</title><link>https://clementgodbarge.com/vi/authors/clement/</link></image><item><title>Hàng rào, chứ không phải ngọn lửa</title><link>https://clementgodbarge.com/vi/post/fence-not-fire/</link><pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/vi/post/fence-not-fire/</guid><description>&lt;p&gt;Trong một nhà kho ở North Las Vegas, Amazon vận hành một cỗ máy chuyên chặt gáy sách cũ. Những trang rời đi qua máy quét, rồi giấy được đem đi nghiền thành bột.
ví việc này với đốt sách thời hiện đại, và không tiếc một sáo ngữ nào: bóng gió Savonarola, ảnh minh họa những cuốn sách trông có vẻ quý hiếm, và dĩ nhiên, giàn thiêu Berlin. Đúng như dự đoán, các báo lớn điềm đạm hơn, nhưng vẫn để phép so sánh ấy lơ lửng trong không khí. Phẫn nộ là thế, nhưng những bài báo này lại giơ cao đánh khẽ với ngành AI một cách đáng ngạc nhiên. Ai được quyền kiểm soát tri thức đang bị quét? Câu hỏi đó phải chờ, trong lúc ta dẹp cái chuyện đốt sách vớ vẩn này đã.&lt;/p&gt;
&lt;h2 id="máy-quét-không-phải-giàn-thiêu"&gt;Máy quét không phải giàn thiêu&lt;/h2&gt;
&lt;p&gt;Hủy một bản in, tự nó, không biến việc quét hủy bản thành phiên bản hiện đại của giàn thiêu Savonarola hay đốt sách Quốc xã. Những hành động ấy có nghĩa là nhờ vào thứ bị lên án và lý do lên án. Vị tu sĩ khốn khổ Savonarola, bị lôi vào mọi cuộc tranh cãi về đốt sách, đã kêu gọi dân chúng đốt một phần của cải của mình như một hành vi sám hối công khai. Giàn thiêu Quốc xã dựng nên một kiểu chối bỏ khác: đốt sách trước công chúng để tuyên bố rằng tác giả của chúng không có chỗ trong đời sống văn hóa Đức. Trong cả hai trường hợp, sự hủy hoại mang tính trình diễn. Quét hủy bản, một phương pháp số hóa được dùng rộng rãi, nhắm đến mục đích khác: bản in bị hy sinh để giữ lại nội dung. Cuốn sách bị hủy; văn bản được phi vật chất hóa. Ai định viện đến &lt;em&gt;Fahrenheit 451&lt;/em&gt; thì nên nhớ rằng những người lính cứu hỏa của Bradbury đâu có lưu văn bản lại để dùng sau.&lt;/p&gt;
&lt;p&gt;
đổ thêm dầu vào lửa khi đưa “sách quý hiếm” lên tiêu đề, và các báo khác cứ thế lặp lại. Thế nhưng chính một nhà sách được trích trong cuộc điều tra ấy cho biết những đơn hàng số lượng lớn này
, tức phần lớn là những ấn bản ra đời sau khi ISBN được áp dụng, khoảng 1970. Đây là thứ hàng của chợ trời và tiệm từ thiện, chỉ một lần dọn nhà là ra bãi rác. Trước khi hô hoán thảm họa văn hóa, có lẽ nên tra mục lục thư viện. Đó chính là loại ấn phẩm mà các thư viện lưu chiểu tồn tại để bảo tồn. Đành rằng một ISBN không bảo đảm còn bản lưu chiểu, nhưng sự khan hiếm trên thị trường sách cũ cũng chẳng chứng minh được một văn bản đã biến mất.&lt;/p&gt;
&lt;p&gt;Nghiền bột hủy bản in, kể cả mọi lời đề tặng hay ghi chú bên lề. Những bản có chú thích hoặc lai lịch có ý nghĩa lịch sử xứng đáng được nhận diện và bảo tồn, tốt nhất là trước khi chúng rơi vào thị trường sách cũ. Ta vẫn có thể lo về nguồn bản in ngày một cạn của những đầu sách đã tuyệt bản. Nhưng nếu vậy, ta cũng nên hỏi vì sao chủ sở hữu bản quyền của chúng chẳng tái bản, mà cũng chẳng cho phép truy cập những bản sao kỹ thuật số sẵn có. Giới nghiên cứu quá quen với nỗi bực này: Google Books tìm ra đúng đoạn bạn cần, rồi chìa ra một mẩu trích của cuốn sách mà bạn vừa không mua mới được, vừa không đọc trực tuyến được. Có những mất mát ở đây đáng đem ra bàn. Chúng không biến máy quét thành giàn thiêu Quốc xã.&lt;/p&gt;
&lt;p&gt;Trong khi đó, ngành sách từ lâu vẫn nghiền sách ế như chuyện thường ngày. Riêng ở Pháp, ước tính
, tương đương khoảng 60% khối lượng sách ế trả về nhà phân phối. Người ta gọi đó là quản lý tồn kho. Bản in dư thừa và sách cũ khan hiếm đặt ra những câu hỏi khác nhau về quyền tiếp cận, nhưng hủy giấy tự nó không phải là kiểm duyệt hay bạo quyền.&lt;/p&gt;
&lt;h2 id="nhiều-sách-hơn-ai-tốt-hơn"&gt;Nhiều sách hơn, AI tốt hơn?&lt;/h2&gt;
&lt;p&gt;Việc các công ty AI mua và quét sách thực ra là tin tốt. Một công nghệ thường bị chê là hiểu văn hóa nhân loại hời hợt đang thu nạp thêm văn hóa ấy, và lẽ ra giới học giả phải hoan nghênh nỗ lực đó.&lt;/p&gt;
&lt;p&gt;Web là thứ thay thế tồi cho kho tích lũy của một ngôn ngữ. Phần lớn đời sống thành văn của một ngôn ngữ, từ tiểu thuyết và hồi ký đến ca khúc phổ thông và hội thoại được ghi lại, chưa bao giờ đi từ trang in lên web. Nhiều cuốn sách đã sống lâu hơn nhà xuất bản của chúng. Đưa chúng vào dữ liệu huấn luyện quan trọng nhất ở những nơi hầu như chẳng có gì khác. Thêm vài cuốn sách tiếng Anh có thể đem lại đôi chút cải thiện bên lề. Với một ngôn ngữ ít được đại diện, những cuốn sách ấy có thể là khác biệt giữa một hệ thống dùng được và một hệ thống vô dụng. Những công cụ này có chỗ trong dịch vụ công hay đời sống hằng ngày của ta hay không là câu hỏi cho tranh luận công khai. Nhưng ở bất cứ đâu ta chọn dùng chúng, ta phải dùng được bằng tiếng của mình.&lt;/p&gt;
&lt;p&gt;Những đơn hàng được đưa tin ở Tây Ban Nha và Hà Lan cho thấy cụ thể điều gì đang bị đặt cược về ngôn ngữ. Hồi tháng 5,
kể về một nhà sách ở Badalona liên tục nhận đơn hàng, chủ yếu là sách phi hư cấu tiếng Catalan: sách sử, sách hướng dẫn kỹ thuật và kỷ yếu hội thảo cũ. Đến tháng 8, báo chí Hà Lan mô tả một yêu cầu gửi tới De Slegte đặt mua
. Ngôn ngữ của những cuốn sách đáng được chú ý ít nhất ngang với số phận của gáy sách. Có lẽ đòi hỏi thế là quá sức với Daily Mail. Ngay cả những tờ báo điềm đạm hơn cũng chẳng nói được mấy về các ngôn ngữ trong cuộc.&lt;/p&gt;
&lt;p&gt;Thỏa thuận cấp phép với các nhà xuất bản lớn cũng có thể cung cấp tư liệu quý, nhưng danh mục số của họ chỉ phủ một phần nhỏ những gì từng được in. Sách chưa từng số hóa, hay sách mà nhà xuất bản không còn giữ bản quyền, nằm ngoài lời chào hàng. Ngay cả một thỏa thuận cấp phép hào phóng cũng không thay được lịch sử xuất bản, huống chi lịch sử của một nền văn hóa. Mua sách cũ là cách vươn qua những ranh giới thương mại ấy.&lt;/p&gt;
&lt;h2 id="ăn-cắp-không-phải-là-lập-luận"&gt;“Ăn cắp” không phải là lập luận&lt;/h2&gt;
&lt;p&gt;Gọi đó là “ăn cắp” cũng chẳng ích gì. Tháng 6 năm 2025, hai tòa án quận ở Mỹ phán quyết rằng dùng sách để huấn luyện mô hình ngôn ngữ là sử dụng hợp lý (fair use) trong các vụ được đưa ra trước tòa. Trong vụ
, tòa nhấn mạnh tính chuyển hóa của việc huấn luyện: sách được dùng để xây dựng một hệ thống có khả năng tạo ra biểu đạt mới. Mô hình có thể thuộc lòng một số đoạn, nhưng dùng một cuốn sách để huấn luyện không khiến toàn bộ văn bản có thể truy xuất theo yêu cầu. Việc không tái tạo nguyên văn cũng không dẹp hết mọi phản đối. Trong vụ
, thẩm phán cảnh báo rằng tác phẩm do AI tạo ra có thể tràn ngập thị trường, và bằng chứng về tổn hại như thế có thể đánh bại lập luận sử dụng hợp lý. Song các nguyên đơn này đã không đưa ra được bằng chứng đáng kể về tổn hại ấy đối với tác phẩm của chính họ. Không phán quyết nào cấp cho các công ty AI giấy phép vô hạn hay khép lại cuộc tranh cãi đạo đức. Chúng buộc ta phân biệt sách được mua thế nào, bản sao được lưu giữ ra sao và việc huấn luyện làm gì với chúng. Gọi tất cả là “ăn cắp” thì để ngỏ mọi câu hỏi ấy.&lt;/p&gt;
&lt;p&gt;Nhân tiện, phán quyết vụ Anthropic cung cấp một lý do cho cái máy chém. Tòa chấp nhận việc số hóa những bản đã mua và bác bỏ việc tích trữ sách lậu thành một thư viện vĩnh viễn, mà về sau công ty đã
. Việc số hóa được chấp nhận một phần vì mỗi bản in đã bị hủy trong quá trình chuyển đổi: bản số thay thế nó và không được chia sẻ ra ngoài công ty. Sự hủy hoại khiến một số người bức xúc đến thế lại giúp Anthropic chứng minh chương trình số hóa của mình là sử dụng hợp lý. Mua, quét, vứt: trong vụ này, đó là một con đường hợp pháp. Máy chém, ở đây, là công cụ tuân thủ. Mua sách có thể giải quyết bài toán thu nạp. Tự nó không cho ai quyền chia sẻ kho ngữ liệu thu được.&lt;/p&gt;
&lt;p&gt;Có nhiều lý do chính đáng để muốn AI khai thác nhiều ngôn ngữ hơn, nhiều học thuật hơn và nhiều hơn nữa cái thế giới từng tồn tại trước internet. Những lý do ấy không biến mất chỉ vì một công ty ta không ưa đã tìm thấy cơ hội thương mại trong việc đó.&lt;/p&gt;
&lt;h2 id="phẫn-nộ-đi-mượn"&gt;Phẫn nộ đi mượn&lt;/h2&gt;
&lt;p&gt;Vậy hãy trở lại với Daily Mail. Bài báo của họ là một phần của
, một chiến dịch của các chủ báo và nhà xuất bản đòi
cho AI. Hai phép đánh tráo tiện lợi làm hết phần việc: Big Tech đứng thay cho AI, và chủ sở hữu bản quyền đứng thay cho sức sáng tạo của nước Anh. Độc giả được mời bảo vệ văn hóa trong lúc các nhà xuất bản thương lượng điều khoản bán nó. Học giả nào chia sẻ câu chuyện ấy nên tự hỏi nỗi phẫn nộ của mình đang phục vụ cho sự nghiệp của ai.&lt;/p&gt;
&lt;p&gt;Big Tech và
đang cãi nhau về tiền thuê, nhưng không bên nào phản đối hàng rào. Câu chuyện tác giả đơn độc bị gã khổng lồ công nghệ cướp bóc che khuất điều mà những thỏa thuận cấp phép đắt đỏ đem lại cho cả hai phe doanh nghiệp: nhà xuất bản được trả tiền, còn Big Tech có được một thị trường mà các đối thủ nhỏ hơn không đủ sức cạnh tranh. Peter Thiel nói thẳng hơn về sở thích của Thung lũng Silicon:
.&lt;/p&gt;
&lt;p&gt;Cấp phép không nhất thiết dẫn đến kết cục ấy. Quyền truy cập giá phải chăng, không độc quyền, có thể giúp các nhà phát triển nhỏ. Nhưng một hệ thống buộc mỗi người mới nhập cuộc phải thương lượng những thỏa thuận tốn kém với các chủ bản quyền lớn thì biến sức mua thành điều kiện gia nhập. Một khoản chi được trình bày như nhượng bộ cho các ngành văn hóa rốt cuộc lại mua được sự che chắn trước những đối thủ tương lai.&lt;/p&gt;
&lt;h2 id="ai-không-thuộc-về-big-tech"&gt;AI không thuộc về Big Tech&lt;/h2&gt;
&lt;p&gt;Còn một vấn đề sâu hơn. Quá nhiều lời phê phán AI lấy những nhà cung cấp thương mại lớn nhất làm toàn bộ lĩnh vực. Sản phẩm chiếm hết tiêu đề; nghiên cứu và phát triển bên ngoài các công ty ấy biến mất khỏi tầm nhìn. Big Tech khó lòng mong một sự hiểu lầm nào có ích hơn. Tham vọng sở hữu cả lĩnh vực của họ trở thành tiền đề của chính những lời phê phán nhắm vào họ. Thế độc quyền chưa được bảo đảm. Coi nó như chuyện đã rồi là làm ơn rất lớn cho những công ty ấy.&lt;/p&gt;
&lt;p&gt;AI mã nguồn mở cho phép người ta xây dựng và điều chỉnh những hệ thống phản ánh sự đa dạng lớn hơn về ngôn ngữ, văn hóa và hình thức biểu đạt. Với các nước ở châu Âu, châu Phi và Mỹ Latinh, cũng như Hàn Quốc, Nhật Bản và Ấn Độ, đó là nền tảng thực tiễn cho chủ quyền công nghệ và văn hóa: khả năng quyết định hệ thống vận hành thế nào, phục vụ ngôn ngữ nào và được dùng ở đâu. Có dùng AI hay không, và dùng vào việc gì, phải là lựa chọn của công chúng, chứ không phải quyết định do sự lệ thuộc vào một nhà cung cấp nước ngoài áp đặt.&lt;/p&gt;
&lt;p&gt;Nhưng quyền tự do sửa đổi một hệ thống chẳng có mấy ý nghĩa nếu không có phương tiện để làm điều đó. Công việc độc lập cần chuyên môn, hạ tầng tính toán và quyền truy cập tư liệu huấn luyện. Điều này đưa ta trở lại với sách. Nếu mỗi nhóm nghiên cứu hay thiết chế công đều phải tự thương lượng thỏa thuận với nhà xuất bản hay tự gom một thư viện riêng, thì độc lập vẫn là đặc quyền của kẻ có tiền.&lt;/p&gt;
&lt;h2 id="sách-đã-ở-đây-rồi"&gt;Sách đã ở đây rồi&lt;/h2&gt;
&lt;p&gt;Thư viện và kho lưu trữ đã bỏ ra nhiều thế hệ để sưu tầm chính thứ tư liệu mà các hệ thống này cần. Bộ sưu tập của họ tồn tại vì quyền tiếp cận tri thức phải sống lâu hơn lợi ích thương mại của việc bán nó. Nhiều thứ đã được quét:
giữ khoảng mười chín triệu tập đã số hóa từ các thư viện nghiên cứu, nhiều tập vẫn còn bản quyền. Thư viện quét một cuốn sách rồi giữ nó lại. Chẳng ai ở đó cần đến máy chém. HathiTrust sẽ
, nhưng cũng đã công bố
, một dự án cung cấp quyền truy cập kho ngữ liệu cho nghiên cứu và phát triển AI phi thương mại. Truy cập theo những điều kiện ấy vẫn để một số nhà phát triển độc lập đứng ngoài.&lt;/p&gt;
&lt;p&gt;Tuy nhiên, sở hữu sách không cho thư viện quyền phân phối nội dung có bản quyền của chúng dưới dạng kho ngữ liệu huấn luyện.
cho phép các cơ sở nghiên cứu và thư viện khai thác các tác phẩm được tiếp cận hợp pháp cho nghiên cứu khoa học, và cho phép khai thác rộng hơn khi chủ sở hữu bản quyền không bảo lưu quyền của mình.
: ngoại lệ khai thác của họ chỉ bao gồm nghiên cứu phi thương mại và hạn chế việc chuyển giao bản sao. Không khung pháp lý nào cho thư viện quyền chung để chia sẻ kho tài liệu có bản quyền của mình cho người khác xây dựng trên đó.&lt;/p&gt;
&lt;p&gt;Ta cũng có thể xem lại chủ sở hữu bản quyền nên kiểm soát các hình thức sử dụng sách bằng máy tính trong bao lâu. Bằng sáng chế dược phẩm là một điểm so sánh: thời hạn thông thường hai mươi năm của chúng ngắn hơn nhiều so với bản quyền, vốn kéo dài suốt đời tác giả cộng thêm bảy mươi năm. Liệu sách có thể được mở cho khai thác văn bản và dữ liệu mà không mất phí cấp phép sau, chẳng hạn, hai mươi năm kể từ lần xuất bản đầu tiên, trong khi quyền tái bản và bán vẫn được bảo hộ? Bảo vệ quyền bán sách của tác giả không nhất thiết đồng nghĩa với kiểm soát mọi cách dùng nội dung của nó trong nhiều thế hệ.&lt;/p&gt;
&lt;p&gt;Hai năm trước, tôi đã lập luận trên
rằng dữ liệu di sản nên được coi là của công. Chính phủ nên tài trợ cho thư viện và kho lưu trữ để số hóa, chuyển tự và lập hồ sơ các bộ sưu tập của mình, và trao cho họ thẩm quyền pháp lý để mở kho ngữ liệu thu được cho người khác xây dựng trên đó. Big Tech có thể góp phần chi trả qua một khoản thuế chuyên biệt.&lt;/p&gt;
&lt;p&gt;Tài trợ công phải đi kèm chính sách sưu tầm và quy tắc truy cập được công bố, áp dụng cho cả công việc học thuật lẫn thương mại, không có thỏa thuận độc quyền hay quyền ưu tiên cho nhà tài trợ. Truy cập để huấn luyện không nhất thiết đồng nghĩa với tái phân phối vô hạn sách có bản quyền. Tác giả nên tham gia thiết kế chương trình công này, kể cả cách nó xử lý sự đồng thuận, thù lao và sự cạnh tranh với tác phẩm của họ. Truy cập miễn phí cho người dùng không loại trừ thù lao cho tác giả từ ngân sách công.
, vốn trả tiền cho tác giả từ công quỹ mỗi khi sách của họ được mượn, là một tiền lệ. Ngọn lửa chưa bao giờ là câu chuyện. Hàng rào mới là.&lt;/p&gt;</description></item><item><title>Thưa quý ban biên tập: muốn nghe giọng tôi, xin trả lại tôi ngôn ngữ của mình</title><link>https://clementgodbarge.com/vi/post/dear-editors/</link><pubDate>Thu, 27 Aug 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/vi/post/dear-editors/</guid><description>&lt;p&gt;Lại thêm một ngày, thêm một tạp chí trống giong cờ mở về chính sách AI của mình. Lần này là &lt;em&gt;Progress in Human Geography&lt;/em&gt;: ban biên tập vừa công bố
cảnh báo rằng dùng AI thay cho việc tự đọc, tự nghĩ, tự viết là “một vi phạm đạo đức học thuật tương tự đạo văn”. Bài nào bị phát hiện vi phạm “có thể bị rút”; may lắm thì được đính chính, kèm một thông báo in trên tạp chí. Ban biên tập còn nhắn nhủ: tác giả nên “cân nhắc kỹ xem có muốn tên mình gắn với những thông báo rút bài và đính chính hay không”.&lt;/p&gt;
&lt;p&gt;Câu ấy đáng để dừng lại một chút. Rút bài là hình phạt nặng nhất trong xuất bản học thuật, thường chỉ dành cho ngụy tạo và gian lận. Ở đây, nó được gắn vào một lỗi mà chính bài xã luận không định nghĩa nổi. Ban biên tập thừa nhận có “những vùng xám thực sự” và “không có ranh giới rõ ràng nào phân định vùng ‘vô trách nhiệm’”. Việc thực thi sẽ dựa trên “những phán đoán có thể khiến một số tác giả phật lòng, những người sẽ khẳng định mình không lạm dụng AI”: nói cách khác, lời tự khai của chính tác giả có thể bị gạt bỏ. Lời khuyên tiếp theo là hãy ở yên “trong vùng ‘trách nhiệm’ cho an toàn”, mà người ta chỉ khuyên an toàn ở nơi có hiểm nguy. Trừng phạt người ta vì vượt qua một lằn ranh mà chính mình thú nhận không vạch nổi, điều đó chỉ có nghĩa khi mục đích là cai trị bằng nỗi sợ. Xin ghi nhớ điểm này.&lt;/p&gt;
&lt;h2 id="cái-cớ-giọng-văn"&gt;Cái cớ “giọng văn”&lt;/h2&gt;
&lt;p&gt;Dùng AI có trách nhiệm là như thế nào? Tác giả được dặn: “phải hết sức cẩn trọng&amp;hellip; để giữ được giọng văn của chính mình”. Lạm dụng là dùng AI “để viết bằng một thứ ngôn ngữ mà bình thường các tác giả sẽ không bao giờ tự mình dùng đến”. Với người bản ngữ, điều này có lý: đừng giả vờ là người mình không phải. Nhưng với người nước ngoài buộc phải viết bằng thứ tiếng không phải của mình, mệnh lệnh ấy tự mâu thuẫn. Giọng văn mà chính sách này bảo vệ chính là thứ duy nhất mà quy định của tạp chí từ chối chúng tôi.&lt;/p&gt;
&lt;p&gt;Hãy lấy tôi làm ví dụ. Tiếng Anh là ngôn ngữ thứ tư của tôi, đúng loại tôi sẽ không bao giờ dùng đến “bình thường”. Các đại học Anh ngữ đã rèn tôi viết nó ngắn gọn, có biển chỉ đường, gần như máy móc: câu chủ đề đặt lên đầu, rào đón ở những chỗ được phép, từ nối lấy từ danh sách được duyệt. Việc rèn luyện ấy đã thành công: trong tiếng Anh của tôi chưa bao giờ có một giọng văn để mà bảo vệ; đó là thứ đầu tiên phải vứt đi. Theo chính định nghĩa của ban biên tập, mọi thứ tôi từng viết bằng tiếng Anh đều là lạm dụng, có máy hay không có máy.&lt;/p&gt;
&lt;h2 id="tiến-thoái-lưỡng-nan"&gt;Tiến thoái lưỡng nan&lt;/h2&gt;
&lt;p&gt;Ban biên tập bảo họ đã nghĩ đến chúng tôi: chính sách thừa nhận người không phải bản ngữ được lợi khi AI kiểm tra tiếng Anh cho họ, thậm chí từ các “dịch vụ dịch thuật, viết và biên tập” của nó. Thế nhưng sự tham gia của AI vào việc viết “cùng lắm chỉ nên dừng ở mức hỗ trợ biên tập và soát lỗi”, và không được đi đến “những mảng lớn văn bản do AI viết”. Một bài báo dịch máy thì do AI viết từ chữ đầu đến chữ cuối; nó chẳng là gì ngoài những mảng như thế. Vậy nên sự nhượng bộ ấy chỉ đứng vững nếu dịch không phải là viết. Lằn ranh đó nằm ở đâu? Họ đã nói rồi: “không có ranh giới rõ ràng”.&lt;/p&gt;
&lt;p&gt;Còn tệ hơn nữa, bởi mối nghi ngờ này không chỉ là thứ không thể bác bỏ. Nó còn thiên lệch từ gốc. Năm 2023, một nhóm nghiên cứu ở Stanford thử bảy bộ phát hiện AI thông dụng trên các bài luận do người viết: trung bình, các bộ phát hiện gắn cờ “do máy tạo” cho 61% bài luận TOEFL của người không phải bản ngữ, trong khi phân loại gần như hoàn hảo bài của người bản ngữ; một bộ phát hiện gắn cờ tới 97,8% bộ bài TOEFL (
). Lý do rất đáng suy ngẫm. Bộ phát hiện đo độ dễ đoán, mà tiếng Anh của người học ngoại ngữ, vốn được rèn để hướng về mức trung bình, thì dễ đoán ngay từ thiết kế: từ nhiều khả năng nhất, theo trật tự nhiều khả năng nhất. Cùng nghiên cứu ấy tìm thấy tín hiệu này trong học thuật thực thụ, với độ biến thiên ngôn ngữ thấp hơn ở các bài hội thảo mà tác giả chính không phải bản ngữ. Những dấu hiệu văn phong bị đọc là “AI” chính là dấu hiệu của tiếng Anh ngoại ngữ thành thạo, và một phán đoán của con người cũng đọc những dấu hiệu ấy y như máy. Thế tiến thoái lưỡng nan đã khép kín: viết bằng tiếng Anh của chính mình thì trông như máy; dùng máy thì phạm luật của họ.&lt;/p&gt;
&lt;h2 id="thuế-ngôn-ngữ"&gt;Thuế ngôn ngữ&lt;/h2&gt;
&lt;p&gt;Nghịch lý này sẽ vô hại nếu không đi kèm những lời đe dọa. Nhưng lời đe dọa lại để lộ một vấn đề sâu hơn, cũ hơn, mà chính sách chẳng bao giờ gọi tên: chủ nghĩa đơn ngữ.
đòi hỏi “độ bao phủ quốc tế rộng nhất có thể”, trong khi ngay trên cùng trang ấy, “ngôn ngữ của tạp chí là tiếng Anh”.&lt;/p&gt;
&lt;p&gt;Cái giá của sự sắp đặt này không hề là giả định. Khảo sát 908 nhà khoa học môi trường, Amano và các cộng sự nhận thấy người không nói tiếng Anh bản ngữ mất nhiều hơn tới 51% thời gian để viết một bài báo, bị từ chối nhiều gấp 2,5 lần và bị yêu cầu sửa nhiều gấp 12,5 lần, chỉ vì lý do ngôn ngữ (
). Thứ thuế ấy được thu trước khi bất kỳ chính sách AI nào ra đời; tờ khai và những lời đe dọa kèm theo là một cuộc kiểm toán chồng thêm lên trên.&lt;/p&gt;
&lt;h2 id="fin-dempire"&gt;Fin d’empire&lt;/h2&gt;
&lt;p&gt;Chủ nghĩa đơn ngữ là tiên đề không ai đem ra bàn. Đó là một di sản đế quốc, theo thời gian khoác thêm một lý do thực tiễn: dịch thuật chậm và tốn kém, và không ban biên tập nào thẩm định nổi thứ mình không đọc được. Thế nhưng chẳng lý lẽ nào trong số đó trụ được trước những tiến bộ của dịch máy. Dịch máy tiên tiến nhất hiện nay có thể dùng làm một tầng trung gian đáng tin cậy giữa tác giả và ban biên tập.&lt;/p&gt;
&lt;p&gt;Lối thoát lý tưởng là ở con người: học giả nên đọc được nhiều hơn một ngôn ngữ. Thay vì thế, các đại học Anh ngữ lại thích đóng cửa khoa ngoại ngữ. Xin lưu ý rằng những vụ đóng cửa này là hiện tượng Anh-Mỹ: học giả ở nơi khác chưa bao giờ có được cái xa xỉ của sự đơn ngữ. Và xin lưu ý thời điểm. Đóng cửa một khoa ngôn ngữ là đặt cược rằng tiếng Anh đã thắng vĩnh viễn, và rằng sẽ không bao giờ còn thứ gì đáng đọc được viết bằng ngôn ngữ nào khác. Canh bạc ấy được đặt đúng vào thời điểm sai lầm nhất, và sai gấp đôi. Thứ nhất, vì dịch máy lần đầu tiên cho phép bỏ hẳn ngôn ngữ chung; thứ hai, vì trật tự từng đưa tiếng Anh lên làm mặc định đang lùi dần: thế giới Anh ngữ đang quay vào trong, toàn cầu hóa đang thoái trào, tự do thương mại bị tranh cãi ngay tại quê hương của nó, và một thế giới đa cực đang thành hình, nơi số ngôn ngữ đáng đọc sẽ nhân lên. Các đại học đang đào tạo ra những học giả chỉ đọc tiếng Anh cho một thế giới mà tiếng Anh sẽ không còn đủ. Ban biên tập sẽ là những người đầu tiên thừa hưởng mất mát đó.&lt;/p&gt;
&lt;h2 id="một-phép-thử-cho-ban-biên-tập"&gt;Một phép thử cho ban biên tập&lt;/h2&gt;
&lt;p&gt;Khi một ban biên tập than rằng không nghe được giọng văn thực của tác giả, có lẽ một phần vấn đề nằm ở chính ban biên tập.&lt;/p&gt;
&lt;p&gt;Đó là một lời buộc tội nghiêm trọng, và nó đi kèm một phép thử nghiêm túc. &lt;em&gt;Progress in Human Geography&lt;/em&gt; có chịu bình duyệt một bản thảo viết bằng tiếng Pháp, tiếng Ý hay tiếng Nhật, kèm bản dịch máy sang tiếng Anh không? Hướng dẫn của chính tạp chí đã công nhận các dịch vụ “dịch thuật” khiến điều đó khả thi. Một tiếng “có” chấm dứt vấn đề. Một tiếng “không” sẽ cho ta biết chính sách này thực ra bảo vệ cái gì.&lt;/p&gt;
&lt;p&gt;Dù thế nào, lựa chọn thuộc về ban biên tập. Nếu giọng văn quan trọng như họ nói, tạp chí nên nhận bài bằng thứ tiếng mà tác giả tư duy. Nếu không, thì tờ khai nên bỏ đi, và những lời đe dọa cũng vậy.&lt;/p&gt;</description></item><item><title>tei-mcp v0.3: Mã hóa TEI mà không viết lại văn bản gốc</title><link>https://clementgodbarge.com/vi/post/tei-mcp-span-locked/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/vi/post/tei-mcp-span-locked/</guid><description>&lt;p&gt;Khi
, mục tiêu của tôi là chặn các trợ
lý AI bịa ra thẻ đánh dấu TEI. Neo vào lược đồ đã giải quyết được một phần vấn
đề: có trong tay quyền truy cập trực tiếp, qua công cụ, vào đặc tả P5, mô hình
không còn phải đoán một phần tử nghĩa là gì hay nhận những thuộc tính nào. Đầu
ra vượt qua kiểm định.&lt;/p&gt;
&lt;p&gt;Thế nhưng trong mã hóa TEI, bịa đặt có hai bộ mặt, và lược đồ chỉ bắt được một.
Kiểm định theo đặc tả cho bạn biết &lt;em&gt;thẻ đánh dấu&lt;/em&gt; có đúng dạng hay không. Nó
chẳng nói gì về &lt;em&gt;văn bản&lt;/em&gt; mà thẻ ấy bao bọc. Mà chính ở đó – ở bản thân văn bản
– mới là nơi trú ngụ của những bịa đặt tai hại hơn. Ghép khóa theo đoạn, tính
năng chủ đạo của v0.3, được thiết kế riêng để ngăn chặn chúng.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;Mục Lục&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#thứ-bịa-đặt-mà-lược-đồ-không-bắt-được"&gt;Thứ bịa đặt mà lược đồ không bắt được&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#ghép-khóa-theo-đoạn"&gt;Ghép khóa theo đoạn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#nó-là-gì-và-không-phải-là-gì"&gt;Nó là gì, và không phải là gì&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#vì-sao-điều-này-quan-trọng-vượt-ra-ngoài-tei"&gt;Vì sao điều này quan trọng vượt ra ngoài TEI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#cập-nhật"&gt;Cập nhật&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="thứ-bịa-đặt-mà-lược-đồ-không-bắt-được"&gt;Thứ bịa đặt mà lược đồ không bắt được&lt;/h2&gt;
&lt;p&gt;Hãy yêu cầu một mô hình mã hóa một lá thư tiếng Pháp thế kỷ XVI: bạn thường sẽ
nhận về một tài liệu TEI trông hoàn hảo. Phần đầu được điền đầy đủ, các thẻ
&lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt; đặt đúng chỗ, &lt;code&gt;&amp;lt;dateline&amp;gt;&lt;/code&gt; đúng dạng. Chạy qua &lt;code&gt;validate_document&lt;/code&gt;
– đạt.&lt;/p&gt;
&lt;p&gt;Rồi đem so phần thân với văn bản gốc.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mesme&lt;/code&gt; đã biến thành &lt;code&gt;même&lt;/code&gt;. Một dấu phẩy đã đổi chỗ. &lt;code&gt;luy&lt;/code&gt; bị lặng lẽ hiện đại
hóa thành &lt;code&gt;lui&lt;/code&gt;. Một mệnh đề khó đọc trong bản thảo được &amp;ldquo;sửa&amp;rdquo; thành thứ gì đó
gọn gàng hơn. Không thay đổi nào trong số này được yêu cầu. Không thay đổi nào
được báo. Tài liệu hợp lệ theo lược đồ, và sai một cách lặng lẽ.&lt;/p&gt;
&lt;p&gt;Với quy trình lưu trữ – nơi văn bản đã mã hóa trở thành bản ghi vĩnh viễn mà
người đọc, chỉ mục tìm kiếm và trích dẫn sau này đều dựa vào – đây chính là kiểu
thất bại đáng lo nhất. Một thẻ sai dạng thì gây bực mình. Một chính tả bị hiện
đại hóa mà năm năm sau chẳng ai nhận ra thì là văn bản đã bị làm hỏng.&lt;/p&gt;
&lt;h2 id="ghép-khóa-theo-đoạn"&gt;Ghép khóa theo đoạn&lt;/h2&gt;
&lt;p&gt;Bản phát hành mới (v0.3) đi kèm một cơ chế chống bịa đặt nhắm thẳng vào kiểu thất
bại này. Mục tiêu thiết kế là làm cho việc bịa đặt phần thân văn bản trở thành
bất khả ngay từ cấu trúc, chứ không chỉ là khó xảy ra.&lt;/p&gt;
&lt;p&gt;Ý tưởng rất đơn giản: &lt;strong&gt;mô hình không bao giờ gõ phần thân văn bản&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Thay vào đó, quy trình diễn ra như sau:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mô hình gọi &lt;code&gt;get_source(&amp;quot;letter_001&amp;quot;)&lt;/code&gt; và nhận về văn bản gốc thuần dưới
dạng một chuỗi bất biến.&lt;/li&gt;
&lt;li&gt;Với mỗi thẻ muốn áp dụng, nó gọi
&lt;code&gt;tag_span(&amp;quot;letter_001&amp;quot;, start, end, element_path, attrs)&lt;/code&gt; – đăng ký một
phần tử TEI tại một khoảng ký tự trên văn bản gốc.&lt;/li&gt;
&lt;li&gt;Xong việc, nó gọi &lt;code&gt;compose(&amp;quot;letter_001&amp;quot;)&lt;/code&gt;. Máy chủ đan các thẻ đã ghi nhận
vào văn bản gốc, kết xuất tài liệu TEI cuối cùng, rồi kiểm tra &lt;em&gt;từng byte
một&lt;/em&gt; rằng nội dung văn bản phẳng của tài liệu vừa kết xuất bằng đúng văn
bản gốc.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nếu các byte khớp, tài liệu được trả về. Nếu không – nếu các thẻ của mô hình, vì
lý do nào đó, hàm ý một phần thân khác với bản gốc dù chỉ một ký tự –
&lt;code&gt;compose()&lt;/code&gt; sẽ báo lỗi thay vì trả về một tài liệu đã bị hỏng.&lt;/p&gt;
&lt;p&gt;Không có lối nào trong quy trình này để mô hình tạo ra một tài liệu TEI mà phần
thân khác với văn bản gốc. Bất biến này mang tính cơ học, không phải tính hành
vi. Bạn không cần tin rằng mô hình sẽ không bịa; bạn chỉ cần tin vào một phép
so sánh &lt;code&gt;==&lt;/code&gt; giữa hai chuỗi byte.&lt;/p&gt;
&lt;h2 id="nó-là-gì-và-không-phải-là-gì"&gt;Nó là gì, và không phải là gì&lt;/h2&gt;
&lt;p&gt;Ghép khóa theo đoạn &lt;strong&gt;bổ sung&lt;/strong&gt; cho việc neo vào lược đồ, chứ không thay thế nó.
Các công cụ neo lược đồ (&lt;code&gt;validate_document&lt;/code&gt;, &lt;code&gt;lookup_element&lt;/code&gt;,
&lt;code&gt;valid_children&lt;/code&gt;, cùng phần còn lại của mười sáu công cụ ban đầu) giúp mô hình
tạo ra TEI &lt;em&gt;hợp lệ&lt;/em&gt;. Ghép khóa theo đoạn bảo đảm phần thân văn bản bên trong TEI
ấy &lt;em&gt;trung thành&lt;/em&gt; với bản gốc. Một quy trình mã hóa có thể triển khai thực sự
phải thỏa mãn cả hai trục, và giờ đây cả hai đều được một máy chủ duy nhất đảm
đương.&lt;/p&gt;
&lt;p&gt;Nó cũng không phải là liều thuốc tiên chữa bách bệnh. &lt;code&gt;compose()&lt;/code&gt; chưa kiểm tra
xem các thẻ đã đăng ký có được phép theo một bản tùy biến ODD đã nạp hay không –
đó là việc của bước tiếp theo. Các thẻ đã ghi nhận nằm trong bộ nhớ tiến trình
và không sống sót qua một lần khởi động lại. Và các tệp gốc phải đọc được từ nơi
máy chủ chạy. Tất cả đều có thể khắc phục; không điều nào làm lung lay bất biến
cốt lõi.&lt;/p&gt;
&lt;h2 id="vì-sao-điều-này-quan-trọng-vượt-ra-ngoài-tei"&gt;Vì sao điều này quan trọng vượt ra ngoài TEI&lt;/h2&gt;
&lt;p&gt;Mẫu hình này có thể khái quát hóa. Bất cứ khi nào ta yêu cầu một mô hình chú
giải, biến đổi hay bao bọc một đoạn văn bản – và bất cứ khi nào tính toàn vẹn
của văn bản gốc quan trọng hơn khả năng &amp;ldquo;cải thiện&amp;rdquo; nó của mô hình – thì cùng
một dạng giải pháp đều áp dụng được. Đừng bắt mô hình gõ lại văn bản. Hãy bắt nó
đưa ra chỉ dẫn trên văn bản, rồi để một bộ ghép tất định áp dụng các chỉ dẫn ấy
dưới một bất biến về đẳng thức.&lt;/p&gt;
&lt;p&gt;Riêng với ấn bản kỹ thuật số, điều này thay đổi những gì bạn có thể giao cho mô
hình một cách có trách nhiệm. Mã hóa bỗng trở thành công việc có thể ủy thác mà
không phải tự tay so từng đầu ra với bản gốc. Máy đi con đường tẻ nhạt; người
biên tập duyệt thẻ đánh dấu, chứ không duyệt chính tả.&lt;/p&gt;
&lt;h2 id="cập-nhật"&gt;Cập nhật&lt;/h2&gt;
&lt;p&gt;Nếu bạn đã cài tei-mcp:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx tei-mcp@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hoặc cài mới:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Để dùng ghép khóa theo đoạn, hãy trỏ máy chủ tới một thư mục chứa các tệp văn
bản gốc thuần:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;TEI_MCP_SPAN_SOURCE_ROOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/sources
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Phần gốc của tên mỗi tệp trở thành mã tài liệu (&lt;code&gt;letter_001.txt&lt;/code&gt; →
&lt;code&gt;letter_001&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Mã nguồn, tài liệu đầy đủ và ghi chú thiết kế về bất biến:
&lt;/p&gt;</description></item><item><title>Một kiểu ấn bản kỹ thuật số khác</title><link>https://clementgodbarge.com/vi/post/cavriana-edition/</link><pubDate>Tue, 24 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/vi/post/cavriana-edition/</guid><description>&lt;p&gt;Phần lớn nguồn sử liệu gốc chẳng bao giờ được công bố. Mô hình mà chúng ta trông cậy để khắc phục điều đó – ấn bản kỹ thuật số sống nhờ tài trợ – thì quá đắt đỏ, quá tập trung và quá mong manh để có thể nhân rộng. Tôi vừa đăng
giải thích vì sao mình xây dựng ấn bản phê bình thư từ của Cavriana theo một cách khác: nguồn sử liệu gốc được số hóa và lớn dần lên một cách tự nhiên, với hạ tầng tối thiểu, bảo trì tự động, mở cửa cho cộng tác, và rẻ đến mức chẳng cần đến tài trợ nào. Đó là lời biện hộ cho một thứ nhân văn số vận hành được bất kể có hay không có sự hậu thuẫn của thiết chế.&lt;/p&gt;</description></item><item><title>tei-mcp: TEI P5 cho tác tử AI</title><link>https://clementgodbarge.com/vi/post/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/vi/post/tei-mcp/</guid><description>&lt;p&gt;Nếu đã từng nhờ một trợ lý lập trình AI viết TEI XML, hẳn bạn nhận ra nó hay
sai. Phần tử mọc ở chỗ không được phép. Thuộc tính thì bịa ra. Quy tắc lồng ghép
bị bỏ qua. Mô hình chỉ có một ý niệm đại khái về hình dáng của TEI, chứ không nắm
chắc đặc tả.&lt;/p&gt;
&lt;p&gt;tei-mcp giải quyết chuyện này bằng cách cho tác tử AI truy cập trực tiếp, qua
công cụ, vào Hướng dẫn TEI P5.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;Mục Lục&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#mcp-là-gì"&gt;MCP là gì?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#tei-mcp-làm-gì"&gt;tei-mcp làm gì&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#vì-sao-điều-này-quan-trọng"&gt;Vì sao điều này quan trọng&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#bắt-đầu"&gt;Bắt đầu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="mcp-là-gì"&gt;MCP là gì?&lt;/h2&gt;
&lt;p&gt;
(MCP) là một chuẩn mở
cho phép các ứng dụng AI kết nối với nguồn dữ liệu và công cụ bên ngoài. Hãy hình
dung nó như cổng USB của AI: một giao thức duy nhất để bất kỳ ứng dụng khách tương
thích nào – Claude, Cursor, Windsurf và những cái khác – cắm vào các dịch vụ chuyên
biệt.&lt;/p&gt;
&lt;p&gt;Một máy chủ MCP cung cấp những &lt;em&gt;công cụ&lt;/em&gt; mà AI có thể gọi ngay trong lúc trò chuyện.
Thay vì dựa vào dữ liệu huấn luyện đã ghi nhớ, mô hình có thể tra hỏi một nguồn
sống, có thẩm quyền.&lt;/p&gt;
&lt;h2 id="tei-mcp-làm-gì"&gt;tei-mcp làm gì&lt;/h2&gt;
&lt;p&gt;tei-mcp phân tích đặc tả ODD của TEI P5 và cung cấp 16 công cụ, bao quát những câu
hỏi thường gặp nhất của người biên tập hay người mã hóa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Phần tử này là gì?&lt;/strong&gt; Tra cứu bất kỳ phần tử, lớp, macro hay mô-đun nào theo tên,
không phân biệt hoa thường, kèm gợi ý khi gõ nhầm.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nó nhận những thuộc tính nào?&lt;/strong&gt; Phân giải thuộc tính xuyên suốt toàn bộ hệ
phân cấp lớp – thuộc tính cục bộ trước, rồi đến thuộc tính kế thừa theo thứ tự.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bên trong nó chứa được gì?&lt;/strong&gt; Khai triển mô hình nội dung thành cây có cấu trúc,
hoặc lấy danh sách phẳng các phần tử con hợp lệ.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phần tử này đặt ở đây được không?&lt;/strong&gt; Kiểm tra quan hệ cha–con, hoặc lần theo
khả năng đạt tới qua toàn bộ hệ phân cấp phần tử.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tài liệu của tôi có hợp lệ không?&lt;/strong&gt; Kiểm định một tệp TEI XML theo đặc tả: mô
hình nội dung, giá trị thuộc tính, danh sách giá trị đóng, tính toàn vẹn của tham
chiếu, và cảnh báo về phần tử đã lỗi thời.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Còn lược đồ riêng của dự án tôi thì sao?&lt;/strong&gt; Nạp một tệp tùy biến ODD để giới hạn
tất cả những gì kể trên vào tập con TEI riêng của dự án bạn.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vì-sao-điều-này-quan-trọng"&gt;Vì sao điều này quan trọng&lt;/h2&gt;
&lt;p&gt;Mã hóa TEI đòi hỏi tra cứu Hướng dẫn không ngừng. Người mã hóa lão luyện thuộc lòng
những mẫu thông dụng nhất, nhưng ngay cả họ cũng phải giở đặc tả khi gặp phần tử ít
quen hay mô hình nội dung phức tạp. Với trợ lý AI, vốn chẳng có chút hiểu biết
thuộc lòng nào như thế, vấn đề còn tệ hơn: chúng bịa ra thứ đánh dấu trông có vẻ
hợp lý mà thực ra sai.&lt;/p&gt;
&lt;p&gt;Có tei-mcp, AI không còn phải đoán. Nó có thể tra câu trả lời trong đặc tả trước
khi viết ra dù chỉ một dấu ngoặc nhọn. Kết quả là thứ đánh dấu tuân thủ TEI P5 –
hoặc tuân thủ bản tùy biến ODD của dự án bạn.&lt;/p&gt;
&lt;h2 id="bắt-đầu"&gt;Bắt đầu&lt;/h2&gt;
&lt;p&gt;Cài từ PyPI:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Rồi thêm vào cấu hình của ứng dụng khách MCP:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tei&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;uvx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;tei-mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Máy chủ tải đặc tả TEI về trong lần chạy đầu tiên và hoạt động với mọi ứng dụng
khách tương thích MCP.&lt;/p&gt;
&lt;p&gt;Mã nguồn và tài liệu đầy đủ:
&lt;/p&gt;</description></item><item><title>Địa lý cảm nhận về vùng Levante</title><link>https://clementgodbarge.com/vi/post/levante/</link><pubDate>Sat, 29 Oct 2022 10:02:52 -0500</pubDate><guid>https://clementgodbarge.com/vi/post/levante/</guid><description>&lt;h1 id="mở-đầu"&gt;Mở đầu&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Levante&lt;/em&gt; là một nơi chốn khó nắm bắt. Thường được định nghĩa trong tương quan – hay đối lập – với một lãnh thổ khác, nghĩa của nó hiếm khi ổn định, gợi lên những địa lý khác nhau tùy nơi và tùy thời người ta dùng từ ấy. Song nếu khó lòng đưa ra một định nghĩa khách quan và chính xác, ta vẫn có thể hy vọng vẽ nên một tấm bản đồ chủ quan của vùng đất này, dựa trên những tương quan tồn tại bên trong một kho ngữ liệu nhất định. Nói cách khác: với một nhóm độc giả cụ thể, &lt;em&gt;Levante&lt;/em&gt; gợi lên không gian nào?&lt;br&gt;
Trong bài này, tôi sẽ chỉ cho bạn cách dùng dữ liệu từ
của Medici Archive Project
để trực quan hóa những địa điểm cụ thể mà địa danh ấy gắn liền.&lt;/p&gt;
&lt;h1 id="cơ-sở-dữ-liệu-mia"&gt;Cơ sở dữ liệu MIA&lt;/h1&gt;
&lt;p&gt;Cơ sở dữ liệu MIA là một nền tảng cộng tác dành cho những học giả muốn tải lên và chia sẻ ảnh chụp tư liệu lưu trữ của mình từ
. Trong năm qua, dưới sự bảo trợ của
, nhóm chúng tôi đã chụp, chuyển tự, tóm tắt và phân loại hàng nghìn tài liệu thuộc phần &lt;em&gt;avvisi&lt;/em&gt; của phông &lt;em&gt;Mediceo del Principato&lt;/em&gt; tại Firenze. Cơ sở dữ liệu này vốn không được xây dựng cho mục đích phân tích thống kê, nhưng siêu dữ liệu chúng tôi công bố vẫn có thể tải về và dùng làm tập dữ liệu.&lt;/p&gt;
&lt;h1 id="tập-dữ-liệu"&gt;Tập dữ liệu&lt;/h1&gt;
&lt;p&gt;Trong trường hợp này, tập dữ liệu tôi tạo ra bao quát mọi tin tức từ &lt;em&gt;Levante&lt;/em&gt; trong khoảng 1543–1566, tức là từ bản avviso đầu tiên được ghi nhận trong kho lưu trữ đến năm Sultan
băng hà. Dưới đây là một mẫu dữ liệu tôi trích từ máy chủ. Dữ liệu gồm ba cột: số hiệu tài liệu duy nhất, một địa danh, và một ngày tháng.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csv" data-lang="csv"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Malta / Europe / World / Top of the TGN hierarchy 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Modon / Messinias&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt; Nomos / Peloponnisos / Ellas 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Al-Iskandariyah / Muhafazat al Iskandariyah / Egypt / Africa 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Evvoia / Evvoias&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt; Nomos / Sterea Ellas-Evvoia / Ellas 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Venetian Republic / Italia / Europe / World 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Arsenale / Istanbul / Istanbul / Marmara 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Black Sea / Asia / World / Top of the TGN hierarchy 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Otranto / Lecce / Puglia / Italia 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Nisoi Aiyaiou / Ellas / Europe / World 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Malta / Europe / World / Top of the TGN hierarchy 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Buda / Budapest / Budapest / Magyarorszag 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Al-Iskandariyah / Muhafazat al Iskandariyah / Egypt / Africa 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Kipros / Asia / World / Top of the TGN hierarchy 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Rodhos / Rodos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt; Nisos / Sporadhes / Nisoi Aiyaiou 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Arsenale / Istanbul / Istanbul / Marmara 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Çorlu / Thraki / Ellas / Europe 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="làm-sạch-dữ-liệu"&gt;Làm sạch dữ liệu&lt;/h2&gt;
&lt;p&gt;Để trực quan hóa, ta cần làm cho dữ liệu này đọc được dưới dạng csv (giá trị phân cách bằng dấu phẩy). Ta cũng cần chuyển thông tin địa lý ở đây sang một định dạng &amp;ldquo;thân thiện với máy&amp;rdquo; hơn: tọa độ GPS. Vì tập dữ liệu chứa hàng trăm dòng, tốt hơn là tự động hóa việc này. Có thể làm khá nhanh và khá chính xác bằng các mô hình ngôn ngữ tiền huấn luyện như
,
hay
, chỉ kể vài cái tên. Song thao tác này cần được giám sát chặt, bởi mô hình ngôn ngữ tiền huấn luyện có đôi chút thói quen bịa chuyện.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csv" data-lang="csv"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;latitude&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;longitude&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;documentDate&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;35.899167&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;14.514167&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;37.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;22.116667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;31.200028&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;29.918719&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;38.366667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;23.666667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;45.438333&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;12.331333&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;41.018611&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;28.984444&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;42.7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;18.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;40.216667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;18.166667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;37.966667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;23.716667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;35.899167&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;14.514167&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;47.4925&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;19.051389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;31.200028&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;29.918719&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;34.916667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;33.616667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;36.405419&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;28.227778&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;41.018611&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;28.984444&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;41.133333&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;27.416667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="bản-đồ-mật-độ"&gt;Bản đồ mật độ.&lt;/h1&gt;
&lt;p&gt;Bản đồ mật độ là kiểu trực quan hóa làm nổi bật tần suất một địa điểm được nhắc đến trong một tập dữ liệu. Nó đặc biệt hữu ích không chỉ để hiểu phạm vi địa lý của dữ liệu, mà còn để thấy các tiêu điểm của nó. Nơi nào trên bản đồ được nhắc đến nhiều hơn? Nơi nào chỉ thoáng qua? Trung tâm ở đâu, và ngoại vi xa đến đâu? Sự chú ý của người đọc nhiều khả năng dồn vào chỗ nào trên bản đồ?&lt;/p&gt;
&lt;iframe width='100%' height='600px' src="https://api.mapbox.com/styles/v1/clemclem/cl9q7c77p004y14mqytjrfnex.html?title=false&amp;access_token=pk.eyJ1IjoiY2xlbWNsZW0iLCJhIjoiY2lmbGpvbjMwZjh3NnJ5bHg4ZzkzeWZzeCJ9.IgOF4fphVbsWAIKyzAV-DQ&amp;zoomwheel=false#3.83/43.29/33.61" title="Levante" style="border:none;"&gt;&lt;/iframe&gt;
&lt;p&gt;Cho thử nghiệm này – và vì đang vội – tôi dùng một trong các API của
. Nhưng nhiều thư viện trực quan hóa và hệ thống thông tin địa lý cũng cho phép bạn tạo ra cùng loại bản đồ mật độ này.&lt;/p&gt;
&lt;h1 id="vài-nhận-xét"&gt;Vài nhận xét&lt;/h1&gt;
&lt;p&gt;Kết quả giống một bức tranh ấn tượng hơn là sự thể hiện chính xác của một khái niệm có thể định nghĩa rõ ràng, và đó chính là điều tôi thích ở thử nghiệm này. Thật vậy,
&lt;mark&gt;khoa học dữ liệu có thể là đồng minh đắc lực của các ngành nhân văn, nhưng ta không nhất thiết phải tuân theo luật chơi của nó.&lt;/mark&gt;
&lt;/p&gt;
&lt;p&gt;Một khía cạnh thú vị khác: tấm bản đồ cho thấy một &lt;em&gt;Levante&lt;/em&gt; hòa nhập hoàn toàn với phần còn lại của châu Âu và Địa Trung Hải. Nó cũng làm nổi bật vị trí trung tâm của Edirne trong địa lý chính trị của Đế quốc Ottoman. Hơn nữa, thành phố Tây Ban Nha quan trọng nhất trên bản đồ chẳng phải Madrid hay Escorial, mà là Napoli. Sau cùng nhưng không kém phần quan trọng, các đảo và những thành bang nhỏ như Ragusa dường như giữ vai trò trung gian đáng kể giữa các thế lực trong vùng.&lt;/p&gt;
&lt;h1 id="cách-yêu-cầu-dữ-liệu-từ-mia"&gt;Cách yêu cầu dữ liệu từ MIA&lt;/h1&gt;
&lt;p&gt;MIA là một công cụ cộng tác xuất sắc cho giới nghiên cứu, nhưng dữ liệu nó lưu trên máy chủ không dễ tiếp cận. Chẳng hạn, phần back-end của nó không được công bố trong kho công khai nào. Dù vậy, bạn vẫn có thể lấy dữ liệu bằng cách đăng ký tài khoản MIA rồi gửi yêu cầu tới máy chủ bằng Python.&lt;/p&gt;
&lt;h3 id="yêu-cầu"&gt;Yêu cầu&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://mia.medici.org/Mia/json/de/advancedsearch/advancedSearchResults/0/90/docYear/asc/?isNewsFeedSearch=False&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;archivalLocationSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;archivalLocationAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;repository&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;collection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Mediceo del Principato&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;series&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;volume&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2863&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;insert&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;categoryAndTypologySearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;categoryAndTypologyAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;category&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;News&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;typology&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;transcriptionSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;transcriptionAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;transcription&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;synopsisSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;synopsisAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;synopsis&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;placesSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;placesAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;places&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:[]},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;peopleSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;peopleAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;people&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:[]},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;topicsSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;topicsAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;topics&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;topicTitle&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Place Index&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;topicId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;51&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;placeAllId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}]},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateFilterType&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateYear&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateMonth&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateDay&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateBYear&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateBMonth&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateBDay&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;documentOwnerSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;documentOwnerAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;editType&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;owner&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;account&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;languagesSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;languagesAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;languages&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:[]}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Content-type&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;application/json&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Accept&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;*/*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;LOGIN&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;PASSWORD&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nhớ thay LOGIN và PASSWORD bằng thông tin đăng nhập của bạn.&lt;/p&gt;
&lt;h3 id="ghi-phản-hồi-ra-tệp"&gt;Ghi phản hồi ra tệp&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;response.json&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;wb&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="mở-json"&gt;Mở JSON&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;response.json&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;utf8&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="trả-về-đối-tượng-json-dưới-dạng-từ-điển"&gt;Trả về đối tượng JSON dưới dạng từ điển&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;json_complete&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="chọn-dữ-liệu-từ-json-và-in-ra-ở-định-dạng-csv"&gt;Chọn dữ liệu từ JSON và in ra ở định dạng CSV&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;results.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;newline&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;fieldnames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;documentId&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;placeCited&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;documentDate&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DictWriter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fieldnames&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;fieldnames&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writeheader&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;json_complete&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;topics&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;topics&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;documentId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;documentId&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;placeCited&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;topicPlaceName&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;docYear&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;docMonth&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;docDay&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;documentDate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;-&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;-&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;documentId&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;placeCited&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;placeCited&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;documentDate&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;documentDate&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sau khi tải về tệp &lt;code&gt;results.csv&lt;/code&gt;, bạn có thể tiến hành làm sạch dữ liệu như đã giải thích ở trên.&lt;/p&gt;</description></item><item><title>Phân tích thư mục quy mô lớn bằng mô hình ngôn ngữ tiền huấn luyện</title><link>https://clementgodbarge.com/vi/post/bibliography/</link><pubDate>Thu, 07 Jul 2022 19:04:14 +0200</pubDate><guid>https://clementgodbarge.com/vi/post/bibliography/</guid><description>&lt;p&gt;Tự động hóa là chìa khóa để hạ chi phí của các dự án nhân văn số. Cho đến nay, những công việc lặp đi lặp lại và tẻ nhạt của khâu biên tập trong môi trường học thuật hoặc do các học giả vốn đã quá tải gánh vác với giá đắt, hoặc được &amp;ldquo;khoán&amp;rdquo; cho sinh viên. Trong
, tôi lập luận rằng phần lớn những việc bạc bẽo ấy không những &lt;em&gt;có thể&lt;/em&gt; mà còn &lt;em&gt;nên&lt;/em&gt; được tự động hóa. Tự động hóa khâu biên tập làm giảm tổng chi phí của các dự án nhân văn số. Quan trọng hơn cả, nó cho phép học giả ở những vùng thu nhập thấp công bố tài liệu quý một cách nhanh chóng và vừa túi tiền.&lt;/p&gt;
&lt;p&gt;Trong
, tôi đã cho thấy, chẳng hạn, mô hình ngôn ngữ tiền huấn luyện có thể đảm nhận phần lớn công việc gắn nhãn XML của một ấn bản kỹ thuật số.&lt;/p&gt;
&lt;p&gt;Trong bài này, tôi trình bày ví dụ thứ hai, lần này với thư mục.&lt;/p&gt;
&lt;h2 id="vấn-đề"&gt;Vấn đề&lt;/h2&gt;
&lt;p&gt;Lập một cơ sở dữ liệu thư mục từ các tài liệu tham khảo được nhắc đến trong một bài báo học thuật là chuyện khá đơn giản. Ta có thể tra nhanh trên một mục lục như
, tải tài liệu tham khảo về theo một định dạng nhất định, hoặc nhập tự động từ cơ sở dữ liệu cục bộ. Cách này ổn với một hai bài báo.
Nhưng quá một số lượng tài liệu tham khảo nào đó, công việc trở nên khó nhằn và ngốn thời gian. Để khắc phục, ta có thể dùng các thuật toán phân tích như
. Thế nhưng những thuật toán ấy có thể khó mở rộng quy mô.
Khi tôi dùng anystyle để chuyển đổi hơn 150 tiểu luận học thuật trong
của chúng tôi, số lỗi tích tụ lại đơn giản là không thể kiểm soát nổi. Nó không nhận ra đúng nhiều nguồn của chúng tôi – chẳng hạn nhầm những nhan đề dài dằng dặc của sách đầu thời cận đại thành thứ gì khác – và cũng không nhận ra những tài liệu ít điển hình hơn, như một trang web cụ thể, một video trực tuyến, v.v. Trình phân tích chạy tốt với điều kiện tác giả tuân thủ răm rắp quy tắc của một chuẩn quen thuộc như Chicago, Turabian hay MLA. Hễ chệch khỏi chuẩn là có lỗi.&lt;/p&gt;
&lt;h2 id="giải-pháp"&gt;Giải pháp&lt;/h2&gt;
&lt;p&gt;Đây là chỗ
&lt;mark&gt;mô hình ngôn ngữ tiền huấn luyện&lt;/mark&gt;
có thể giúp sức, bởi chúng
&lt;mark&gt;nắm bắt rất nhanh quy luật của bất kỳ kiểu trích dẫn thư mục nào&lt;/mark&gt;
, kể cả kiểu do chính bạn nghĩ ra, và chỉ cần vài ví dụ là chuyển đổi được đúng đắn một khối lượng lớn thư mục đã định dạng thành một
.&lt;/p&gt;
&lt;p&gt;Đầu năm 2021, tôi may mắn được tiếp cận sớm
của OpenAI. Codex là mô hình cho phép người dùng dịch ngôn ngữ tự nhiên sang mã và ngược lại. OpenAI tuyên bố nó thành thạo hơn chục ngôn ngữ lập trình; và dù API của nó, vào lúc tôi viết bài này, vẫn ở dạng beta, nó đã vận hành những ứng dụng phổ biến như
của GitHub.&lt;/p&gt;
&lt;p&gt;Sau khi vọc API này một hồi, tôi nhận ra nó cũng làm việc rất tốt với thứ mã đơn giản hơn như &lt;code&gt;BibTeX&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Và thực tế, tôi chỉ cần dùng bốn ví dụ trong câu lệnh đầu vào là mọi thứ chạy ổn định.&lt;/p&gt;
&lt;h3 id="câu-lệnh-đầu-vào"&gt;Câu lệnh đầu vào&lt;/h3&gt;
&lt;p&gt;References:
Bayle, Ariane. “Patients exemplaires: la correspondance médicale de Fioravanti.” In &lt;em&gt;Vulgariser la médecine. Du style médical en France et en Italie&lt;/em&gt;, edited by Andrea Carlino and Michel Jeanneret, 181–212. Geneva: Droz, 2009.&lt;/p&gt;
&lt;p&gt;Berns, Andrew D. &lt;em&gt;The Bible and Natural Philosophy in Renaissance Italy: Jewish and Christian Physicians in Search of Truth&lt;/em&gt;. Cambridge: Cambridge University Press, 2015.&lt;/p&gt;
&lt;p&gt;Gabler, Hans Walter. “Theorizing the Digital Scholarly Edition.” &lt;em&gt;Literature Compass&lt;/em&gt; 7, no. 2 (2010): 43–56.
.&lt;/p&gt;
&lt;p&gt;Findlen, Paula. &lt;em&gt;Possessing Nature: Museums, Collecting, and Scientific Culture in Early Modern Italy&lt;/em&gt;. Berkeley: University of California Press, 1994.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-BibTeX" data-lang="BibTeX"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@incollection&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;bayle2009&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Bayle, Ariane}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;booktitle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Vulgariser la médecine. Du style médical en France et en Italie}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Patients exemplaires: la correspondance médicale de Fioravanti}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;editor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Carlino, Andrea and Michel Jeanneret}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2009}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Geneva}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Droz}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{french}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@book&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;berns2015&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{The Bible and Natural Philosophy in Renaissance Italy: Jewish and Christian Physicians in Search of Truth}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Berns, Andrew D.}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Cambridge}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Cambridge University Press}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{english}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;date&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2015}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@article&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;gabler2010&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Gabler, Hans Walter}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Theorizing the Digital Scholarly Edition}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;journal&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Literature Compass}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;volume&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{7}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;number&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;pages&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{43-56}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;doi&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{10.1111/j.1741-4113.2009.00675.x}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{english}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2010}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@book&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;findlen1994&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Possessing Nature: Museums, Collecting, and Scientific Culture in Early Modern Italy}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Findlen, Paula}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Berkeley}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{University of California Press}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{english}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;date&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{1994}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="kết-quả"&gt;Kết quả&lt;/h3&gt;
&lt;p&gt;
&lt;mark&gt;thật ấn tượng: hơn 2.000 tài liệu tham khảo được chuyển đổi chỉ trong vài ngày.&lt;/mark&gt;
Cách này không chỉ tái hiện chính xác mẫu hình trong câu lệnh đầu vào của tôi, mà còn thêm đúng những loại mục và loại trường không hề có trong câu lệnh ấy. Nói cách khác, &lt;code&gt;GPT-3&lt;/code&gt; nói &lt;code&gt;BibTeX&lt;/code&gt; trôi chảy như tiếng mẹ đẻ. Và có lẽ đáng ngạc nhiên hơn đối với một mô hình chủ yếu được huấn luyện bằng tiếng Anh: nó nhận ra tất cả các ngôn ngữ (Nga, Pháp, Ý, Latinh, Hy Lạp, Đức, Tây Ban Nha, v.v.) và lần nào cũng thêm đúng trường &lt;code&gt;langid&lt;/code&gt;.&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Lưu ý&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;GPT-3 hiện bị giới hạn về kích thước đầu vào và đầu ra: nó chỉ xử lý được tối đa 2.048 token ngôn ngữ. Một khi giới hạn này được gỡ bỏ, cùng công việc ấy có lẽ chỉ mất một giờ hoặc ít hơn.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Khá bất ngờ, GPT-3 còn bổ sung thông tin không có trong tài liệu tham khảo gốc.&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Baillot, Anne, and Anna Busch. “Editing for Man and Machine.” In &lt;em&gt;Users of Scholarly Editions: Editorial Anticipations of Reading, Studying and Consulting&lt;/em&gt;, Vol. 13. Variants (Journal of the European Society for Textual Scholarship). Leicester, 2015.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Với tài liệu tham khảo này chẳng hạn, GPT-3 đã thêm đường dẫn cố định tới kho truy cập mở (
) nơi có thể đọc bài báo, kể cả các trường đặc thù &lt;code&gt;HAL_ID&lt;/code&gt; và &lt;code&gt;HAL_VERSION&lt;/code&gt; do kho HAL đặt ra:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-BibTeX" data-lang="BibTeX"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@inproceedings&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;baillot2015&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Editing for Man and Machine}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Baillot, Anne and Busch, Anna}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;2015&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;booktitle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Users of Scholarly Editions: Editorial Anticipations of Reading, Studying and Consulting}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Leicester}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;series&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Variants (Journal of the European Society for Textual Scholarship)}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;volume&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;editor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Bruhn, Siglinde and Schreiber, Manfred}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{english}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;hal_id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{halshs-01233380}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;hal_version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{v1}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Những bổ sung này cho thấy
&lt;mark&gt;GPT-3 không chỉ phân tích tài liệu tham khảo, mà còn hoàn thiện nó dựa trên những gì đã học từ trước.&lt;/mark&gt;
Về điểm này, sẽ thú vị nếu xem nó có hành xử tương tự với những tài liệu ra đời sau thời điểm huấn luyện GPT-3 hay không&amp;hellip;&lt;/p&gt;
&lt;h2 id="hạn-chế"&gt;Hạn chế&lt;/h2&gt;
&lt;p&gt;Tuy nhiên, GPT-3 không hoàn hảo. Nó cần có người giám sát. Một trong những hạn chế đã biết của nó là
(hallucination): đôi khi nó tự sáng tác và đưa ra những phỏng đoán khó tin.&lt;/p&gt;
&lt;p&gt;Trong thử nghiệm của tôi, cơn lú lẫn của GPT-3 lộ rõ khi nó tự ý đổi họ một tác giả từ &amp;ldquo;Ruscelli&amp;rdquo; thành &amp;ldquo;Ruscello&amp;rdquo;. Về mặt kỹ thuật, đây không hẳn là lỗi, vì họ người Ý đầu thời cận đại có thể dùng ở dạng số nhiều hay số ít không phân biệt. Nhưng quy ước ngày nay là họ ở dạng nào thì giữ nguyên dạng ấy. Ngày nay chẳng ai gọi Machiavelli là Machiavello, cũng như ta phải dùng tên Rossello chứ không phải Rosselli. GPT-3 bỏ qua quy ước này vì thiếu ý thức về niên đại chăng? Hay vì nó phỏng đoán dựa trên những họ lân cận, mà ở phần thư mục này tình cờ đều ở dạng số ít (Bariletto, Cesano, Rossello)?
Ai mà biết được.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-Bibtex" data-lang="Bibtex"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@book&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;rossello1565&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Della summa de’ secreti universali}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Rossello, Timoteo}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Venice}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Giovanni Bariletto}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{italian}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;date&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{1565}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@book&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;ruscello1559&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{La seconda parte de’ secreti del Reverendo Donno Alessio Piemontese}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Ruscello, Girolamo}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Pesaro}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Bartolomeo Cesano}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{italian}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;date&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{1559}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="kết-luận"&gt;Kết luận&lt;/h2&gt;
&lt;p&gt;Được viết ra trong bốn năm cộng tác miệt mài, hơn 150 tiểu luận
không chỉ cung cấp thông tin thiết yếu về bản thảo mà chúng tôi đã biên tập và dịch, mà còn chứa những thông tin thư mục quý giá.&lt;/p&gt;
&lt;p&gt;Gom các tài liệu tham khảo ấy vào một cơ sở dữ liệu cho phép người biên tập đổi định dạng thư mục trong nháy mắt, linh hoạt hơn trong cách trình bày thông tin theo ý mình. Cơ sở dữ liệu này còn cho biết nhiều điều về ấn bản và về dự án đã làm nên nó, mở ra những hướng phân tích mới cho giới nghiên cứu. Một cơ sở dữ liệu như thế có thể được hoàn thành với độ chính xác cao và trong thời gian kỷ lục.&lt;/p&gt;
&lt;p&gt;Đành rằng vẫn có thể lọt vài lỗi, nhất là do thói bịa đặt của GPT-3. Song các thế hệ mô hình ngôn ngữ tiền huấn luyện sau này sẽ làm dịu bớt vấn đề ấy.&lt;/p&gt;</description></item><item><title>Tự động hóa đánh dấu trong ấn bản học thuật kỹ thuật số</title><link>https://clementgodbarge.com/vi/post/gpt3/</link><pubDate>Mon, 22 Nov 2021 18:15:00 +0000</pubDate><guid>https://clementgodbarge.com/vi/post/gpt3/</guid><description>&lt;h1 id="mở-đầu"&gt;Mở đầu&lt;/h1&gt;
&lt;p&gt;Làm sao xây dựng ấn bản học thuật kỹ thuật số mà không phải dốc cạn ngân quỹ? Trong bài này, bài đầu tiên của loạt bài về biên tập hiệu quả, tôi đánh giá xem các mô hình ngôn ngữ tiền huấn luyện có thể đóng vai trò gì trong việc tự động hóa các công việc biên tập, chẳng hạn như đánh dấu ngữ nghĩa.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;Mục Lục&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#một-công-trình-của-tình-yêu"&gt;Một công trình của tình yêu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#một-ngưỡng-cửa-cao"&gt;Một ngưỡng cửa cao&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#transformer-con-đường-đơn-giản-nhất-đến-tự-động-hóa"&gt;Transformer: con đường đơn giản nhất đến tự động hóa?&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#codex"&gt;Codex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#ngoài-openai"&gt;Ngoài OpenAI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#thử-nghiệm-1--phân-loại-văn-bản"&gt;Thử nghiệm 1 – Phân loại văn bản.&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#thiết-kế-câu-lệnh"&gt;Thiết kế câu lệnh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#kiểm-tra"&gt;Kiểm tra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#kết-quả"&gt;Kết quả&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#thử-nghiệm-2--đánh-dấu-ngữ-nghĩa"&gt;Thử nghiệm 2 – Đánh dấu ngữ nghĩa&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#thiết-kế-câu-lệnh-1"&gt;Thiết kế câu lệnh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#kiểm-tra-1"&gt;Kiểm tra&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h1 id="vấn-đề"&gt;Vấn đề&lt;/h1&gt;
&lt;h2 id="một-công-trình-của-tình-yêu"&gt;Một công trình của tình yêu&lt;/h2&gt;
&lt;p&gt;Đã yêu thì chẳng ai tính toán thiệt hơn&amp;hellip; tục ngữ xưa bảo vậy. Với ấn bản học thuật kỹ thuật số, điều ấy càng đúng: chuyển tự, dịch thuật và chú giải trong quá trình xây dựng chúng ngốn hàng nghìn giờ lao động, và như trường hợp của
, do hàng trăm cộng tác viên trình độ cao đảm nhận.&lt;/p&gt;
&lt;p&gt;Xét ở một mặt, việc những dự án nhân văn số có tiếng có thể huy động được khoản tiền khổng lồ cần thiết để vận hành là một điều may. Thế nhưng, dựa dẫm quá nhiều vào sự hào phóng của các quỹ giàu có, các trường đại học và cơ quan chính phủ, cộng với nhu cầu nhân lực lớn kéo dài, không phải là một mô hình kinh tế khả thi cho tương lai.&lt;/p&gt;
&lt;p&gt;Thực vậy, nếu muốn khuyến khích học giả khắp nơi trên thế giới đưa tài liệu lịch sử đến với công chúng rộng rãi hơn, thì
&lt;mark&gt;chi phí của ấn bản phê bình kỹ thuật số phải giảm đi nhiều bậc&lt;/mark&gt;
.&lt;/p&gt;
&lt;h2 id="một-ngưỡng-cửa-cao"&gt;Một ngưỡng cửa cao&lt;/h2&gt;
&lt;p&gt;Nghe có vẻ nghịch lý, nhưng
&lt;mark&gt;giải pháp có thể đến từ chính những dự án tốn nhiều công sức như
, bởi chúng là một tập huấn luyện quý giá&lt;/mark&gt;
để tự động hóa một số công việc khó nhằn và lặp đi lặp lại nhất của biên tập kỹ thuật số, chẳng hạn như đánh dấu.&lt;/p&gt;
&lt;p&gt;Không phải đánh dấu là chuyện không đáng kể. Trái lại,
&lt;mark&gt;đánh dấu đã trở thành thành phần không thể thiếu của bất kỳ dự án học thuật kỹ thuật số nghiêm túc nào.&lt;/mark&gt;
Được
chuẩn hóa, nó cho phép ta ghi lại càng nhiều càng tốt các khía cạnh của tài liệu và của văn bản mà tài liệu ấy chuyển tải: cấu trúc, ghi chú bên lề, đoạn bị xóa, dị bản, loại giấy, vết ố, nét chữ&amp;hellip; muốn gì có nấy.&lt;/p&gt;
&lt;p&gt;Ví dụ sau đây, trích từ
, cho thấy đánh dấu làm giàu văn bản bằng thông tin bổ sung ra sao (hạng mục, cấu trúc, trường ngữ nghĩa, đoạn bị xóa, v.v.), và rốt cuộc đem lại cho ấn bản kỹ thuật số một lợi thế đáng kể so với tổ tiên bằng giấy của chúng.&lt;/p&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt; Plain Text &lt;/th&gt;
&lt;th&gt; XML Markup&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Pour rompre grenades et donner
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;violence aux artifices de foeu
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Mects parmy la pouldre et la sixiesme
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;partye dicelle de vif argent
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;p008r_2&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;categories=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;arms and armor&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;Pour rompre &lt;span class="nt"&gt;&amp;lt;wp&amp;gt;&lt;/span&gt;grenades&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&lt;/span&gt; et donner&lt;span class="nt"&gt;&amp;lt;lb/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;violence aux &lt;span class="nt"&gt;&amp;lt;wp&amp;gt;&lt;/span&gt;artifices de foeu&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ab&amp;gt;&lt;/span&gt;Mects parmy la &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;pouldre&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;del&amp;gt;&amp;lt;ms&amp;gt;&lt;/span&gt;six fois autant&lt;span class="nt"&gt;&amp;lt;/ms&amp;gt;&lt;/span&gt; de
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;vif argent&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&amp;lt;/del&amp;gt;&amp;lt;lb/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;del&amp;gt;&lt;/span&gt;et&lt;span class="nt"&gt;&amp;lt;/del&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;ms&amp;gt;&lt;/span&gt;la sixiesme partye&lt;span class="nt"&gt;&amp;lt;/ms&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dicelle de &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;vif argent&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&amp;lt;/ab&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Thông tin này không chỉ quý cho mục đích lưu trữ, mà như tôi đã chỉ ra trong những dịp trước, còn quý cho mục đích tổng hợp và phân tích. Dẫu vậy, kiểu chú giải này có thể cực kỳ tốn thời gian, vì cùng một văn bản thường phải có mặt dưới nhiều dạng khác nhau: bản dịch, bản chuyển tự, bản hiện đại hóa, v.v.&lt;/p&gt;
&lt;h1 id="giải-pháp"&gt;Giải pháp&lt;/h1&gt;
&lt;h2 id="transformer-con-đường-đơn-giản-nhất-đến-tự-động-hóa"&gt;Transformer: con đường đơn giản nhất đến tự động hóa?&lt;/h2&gt;
&lt;p&gt;Năm 2020,
rầm rộ công bố họ mô hình ngôn ngữ đa dụng quy mô lớn mới nhất của mình, gọi là GPT-3, viết tắt của &amp;ldquo;Generative Pre-trained Transformer 3&amp;rdquo;. Transformer là một đột phá khá gần đây của trí tuệ nhân tạo. Chúng học nhiệm vụ mới với tốc độ ấn tượng, chỉ bằng cách đọc một câu lệnh (prompt) và xem qua một số rất ít ví dụ. Chúng cũng có thể được huấn luyện thêm bằng một tập dữ liệu chuyên biệt (tinh chỉnh – fine-tuning), qua đó cải thiện độ trễ và độ chính xác. Vì lẽ đó, người ta nói GPT-3 và các transformer tương tự là những
– kẻ học từ vài ví dụ.&lt;/p&gt;
&lt;p&gt;OpenAI tuyên bố GPT-3 chứa con số kỷ lục 175 tỷ tham số, được huấn luyện trên hơn 570 GB văn bản, phần lớn là tài liệu tiếng Anh có lẽ lấy từ
. Nhờ kích thước khổng lồ ấy, GPT-3 đã đặt ra chuẩn mực mới trong lĩnh vực này, thực hiện ngay lập tức đủ loại nhiệm vụ với độ chân thực đáng lo ngại. Nó viết
nghe rất có lý,
trong phòng chat,
,
, dịch tài liệu, giải thích thuật ngữ chuyên môn, v.v.&lt;/p&gt;
&lt;p&gt;Được tiếp cận sớm API của OpenAI từ tháng 5 năm 2021, tôi đã có dịp thử nghiệm khả năng của mô hình trong một số nhiệm vụ vốn được xem là khó: dịch thơ Pháp và văn bản tân Latinh sang tiếng Anh, giải thích phép loại suy, thậm chí giản lược Quyển 4 của &lt;em&gt;Groundwork for a Metaphysics of Morals&lt;/em&gt; (Kant) cho một đứa trẻ bảy tuổi (dù chưa thật thuyết phục).&lt;/p&gt;
&lt;h3 id="codex"&gt;Codex&lt;/h3&gt;
&lt;p&gt;Một trong những bước phát triển mới nhất của GPT-3 nhắm vào ngôn ngữ máy tính. Mang tên &lt;em&gt;Codex&lt;/em&gt;, mô hình này dịch ngôn ngữ tự nhiên sang ngôn ngữ lập trình và ngược lại. Chẳng hạn, nếu tôi cần một biểu thức chính quy để &amp;ldquo;chỉ tìm những từ bắt đầu bằng chữ in hoa&amp;rdquo;, GPT-3 lập tức dịch nó thành một biểu thức chính quy chạy được: &lt;code&gt;[A-Z]+\w+&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;OpenAI tuyên bố &lt;em&gt;Codex&lt;/em&gt; làm việc được với khoảng chục ngôn ngữ lập trình, trong đó có Python, JavaScript, Go, Perl, PHP, Ruby và Swift. Bằng cách chuyển mã giả thành mã thật một cách liền mạch, &lt;em&gt;Codex&lt;/em&gt; cho phép người ta tập trung không phải vào cú pháp rườm rà của một ngôn ngữ lập trình, mà vào các bước logic và chiến lược giúp ứng dụng giải quyết vấn đề.&lt;/p&gt;
&lt;h3 id="ngoài-openai"&gt;Ngoài OpenAI&lt;/h3&gt;
&lt;p&gt;Dĩ nhiên, OpenAI không phải tay chơi duy nhất. Như đã nói, Viện Hàn lâm Trí tuệ Nhân tạo Bắc Kinh năm 2021 đã công bố một mô hình còn lớn hơn và mạnh hơn, gọi là &lt;em&gt;Wu Dao 2&lt;/em&gt;. Nvidia và Microsoft bắt tay tạo ra mô hình mang cái tên rất hợp cảnh &lt;em&gt;Megatron-Turing NLG 530B&lt;/em&gt;. Những công ty khởi nghiệp nhỏ hơn như
và
cũng cung cấp API cho công chúng. Đáng nhắc đến nữa là các sáng kiến mã nguồn mở như
. Cảnh quan AI dĩ nhiên biến chuyển rất nhanh; để theo dõi các sáng kiến mới trong lĩnh vực, hãy xem
.&lt;/p&gt;
&lt;h1 id="các-thử-nghiệm"&gt;Các thử nghiệm&lt;/h1&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Lưu ý&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Mục tiêu của các thử nghiệm này là tìm ra con đường tiết kiệm nhất để tự động hóa các công việc biên tập một cách đáng tin cậy. Có thể có người cho rằng một số việc trong đó cũng tự động hóa được bằng thuật toán học có giám sát. Chúng ta sẽ xem xét giả thuyết ấy trong một bài sau.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Một transformer như GPT-3 có thể học cách chú giải, chẳng hạn, một bản thảo kỹ thuật và khoa học thế kỷ XVI không?&lt;/p&gt;
&lt;h2 id="thử-nghiệm-1--phân-loại-văn-bản"&gt;Thử nghiệm 1 – Phân loại văn bản.&lt;/h2&gt;
&lt;p&gt;Bắt đầu bằng thứ tương đối đơn giản. Là &amp;ldquo;kẻ học từ vài ví dụ&amp;rdquo;, GPT-3 hẳn phải nhanh chóng hiểu được nhóm biên tập của chúng tôi đã phân loại các mục trong Ms Fr 640 như thế nào.&lt;/p&gt;
&lt;h3 id="thiết-kế-câu-lệnh"&gt;Thiết kế câu lệnh&lt;/h3&gt;
&lt;p&gt;Để huấn luyện, tôi dùng một câu lệnh tối giản và chọn bốn mục ngắn ở dạng văn bản thuần làm ví dụ, gồm một mục về &amp;ldquo;y học&amp;rdquo;, &amp;ldquo;vũ khí và áo giáp&amp;rdquo; và &amp;ldquo;hội họa&amp;rdquo;.&lt;/p&gt;
&lt;h3 id="kiểm-tra"&gt;Kiểm tra&lt;/h3&gt;
&lt;p&gt;Rồi tôi chép vào một đoạn khác, không nằm trong chuỗi ban đầu:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Working neatly
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Never put down, if you can, two colors one on top of the other.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;But next, having made your design carefully, keep the place of shadows for them alone,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;amp; also separately that of lights &amp;amp; highlights, without layering one color all over &amp;amp; then highlighting or else shading on it.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;And in this way, you further your work, economize your colors &amp;amp; work neatly.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Which is the reason that, the colors not being muddled nor mixed together, they do not die &amp;amp; you soften the colors better, since they are not so thick.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kết quả hoàn toàn khớp với nội dung:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;categories&lt;/span&gt;&lt;span class="err"&gt;=&amp;#34;painting&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nếu thử với một mục thuộc hạng mục thậm chí không có trong bộ văn bản ban đầu dùng để huấn luyện GPT-3, kết quả thật bất ngờ.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;categories&lt;/span&gt;&lt;span class="err"&gt;=&amp;#34;jewelry&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="kết-quả"&gt;Kết quả&lt;/h3&gt;
&lt;p&gt;Hạng mục &amp;ldquo;jewelry&amp;rdquo; (nữ trang) không tồn tại trong ấn bản Ms. Fr. 640 của chúng tôi. Nhóm biên tập
hạng mục rộng hơn là &amp;ldquo;Stones&amp;rdquo; (đá). Dù vậy, trực giác của GPT-3 là tốt, và cho thấy chỉ cần huấn luyện thêm chút nữa, nó có thể học cách phân loại bất kỳ mục nào của Ms. Fr. 640, thậm chí cả các văn bản kỹ thuật thế kỷ XVI tương tự.&lt;/p&gt;
&lt;h2 id="thử-nghiệm-2--đánh-dấu-ngữ-nghĩa"&gt;Thử nghiệm 2 – Đánh dấu ngữ nghĩa&lt;/h2&gt;
&lt;p&gt;Nâng thanh xà lên cao hơn một chút. Nếu transformer như GPT-3 học được cách phân loại văn bản theo những tiêu chí biên tập cụ thể, liệu chúng có nhận diện được một phần thẻ đánh dấu của văn bản không?&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Lưu ý&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;&lt;em&gt;Secrets of Craft and Nature&lt;/em&gt; dùng
nhãn ngữ nghĩa và nhãn cấu trúc. Tiếc là GPT-3 không xử lý được hình ảnh, khác với các dự án như
. Nhiều khả năng các phiên bản GPT sau này sẽ có năng lực đó, vốn cần thiết để nhận ra phần lớn các khía cạnh cấu trúc và vật chất của một tài liệu. Ta sẽ bỏ qua những thẻ ấy và tập trung vào loại đánh dấu không đòi hỏi nhận dạng hình ảnh.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="thiết-kế-câu-lệnh-1"&gt;Thiết kế câu lệnh&lt;/h3&gt;
&lt;p&gt;Thẻ ngữ nghĩa bao gồm tham chiếu đến động vật, thực vật, địa danh, cảm giác, v.v. Trong câu lệnh huấn luyện, tôi chọn vài ví dụ từ ấn bản:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--Input prompt--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The following is a list of words and their corresponding semantic tags
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cannons: &lt;span class="nt"&gt;&amp;lt;wp&amp;gt;&lt;/span&gt;cannons&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;powder: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;powder&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;flasks: &lt;span class="nt"&gt;&amp;lt;tl&amp;gt;&lt;/span&gt;flasks&lt;span class="nt"&gt;&amp;lt;/tl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wooden: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;wooden&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iron: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;iron&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;parchment: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;parchment&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;goats: &lt;span class="nt"&gt;&amp;lt;al&amp;gt;&lt;/span&gt;goats&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lambs: &lt;span class="nt"&gt;&amp;lt;al&amp;gt;&lt;/span&gt;lambs&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;leather: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;leather&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;earth: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;earth&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fine fatty earth: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;fine fatty earth&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Venice: &lt;span class="nt"&gt;&amp;lt;pl&amp;gt;&lt;/span&gt;Venice&lt;span class="nt"&gt;&amp;lt;/pl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Flemish: &lt;span class="nt"&gt;&amp;lt;pl&amp;gt;&lt;/span&gt;Flemish&lt;span class="nt"&gt;&amp;lt;/pl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;almond: &lt;span class="nt"&gt;&amp;lt;pa&amp;gt;&lt;/span&gt;almond&lt;span class="nt"&gt;&amp;lt;/pa&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;almond oil: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;pa&amp;gt;&lt;/span&gt;almond&lt;span class="nt"&gt;&amp;lt;/pa&amp;gt;&lt;/span&gt; oil&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;walnuts skin: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;pa&amp;gt;&lt;/span&gt;walnuts&lt;span class="nt"&gt;&amp;lt;/pa&amp;gt;&lt;/span&gt; skin&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;molten lead: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;molten lead&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;today: &lt;span class="nt"&gt;&amp;lt;tmp&amp;gt;&lt;/span&gt;today&lt;span class="nt"&gt;&amp;lt;/tmp&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;In the past: &lt;span class="nt"&gt;&amp;lt;tmp&amp;gt;&lt;/span&gt;In the past&lt;span class="nt"&gt;&amp;lt;/tmp&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Clockmakers: &lt;span class="nt"&gt;&amp;lt;pro&amp;gt;&lt;/span&gt;Clockmakers&lt;span class="nt"&gt;&amp;lt;/pro&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;red copper: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;red copper&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;crucible: &lt;span class="nt"&gt;&amp;lt;tl&amp;gt;&lt;/span&gt;crucible&lt;span class="nt"&gt;&amp;lt;/tl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bellows: &lt;span class="nt"&gt;&amp;lt;tl&amp;gt;&lt;/span&gt;bellows&lt;span class="nt"&gt;&amp;lt;/tl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;charcoal: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;charcoal&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;founders: &lt;span class="nt"&gt;&amp;lt;pro&amp;gt;&lt;/span&gt;founders&lt;span class="nt"&gt;&amp;lt;/pro&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="kiểm-tra-1"&gt;Kiểm tra&lt;/h3&gt;
&lt;p&gt;Thử vài từ dễ với mô hình &lt;code&gt;Davinci-codex&lt;/code&gt;, như &lt;em&gt;Apothecary&lt;/em&gt;, &lt;em&gt;smoke&lt;/em&gt;, &lt;em&gt;glassmakers&lt;/em&gt;, &lt;em&gt;latten&lt;/em&gt; và &lt;em&gt;snake&lt;/em&gt;. Kết quả tức thì và không một lỗi:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--Output--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Apothecary: &lt;span class="nt"&gt;&amp;lt;pro&amp;gt;&lt;/span&gt;Apothecary&lt;span class="nt"&gt;&amp;lt;/pro&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;smoke: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;smoke&lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;glassmakers: &lt;span class="nt"&gt;&amp;lt;pro&amp;gt;&lt;/span&gt;glassmakers&lt;span class="nt"&gt;&amp;lt;/pro&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;latten: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;latten&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;snake: &lt;span class="nt"&gt;&amp;lt;al&amp;gt;&lt;/span&gt;snake&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Bài kiểm tra khó hơn dùng từ ghép, như &lt;em&gt;copper plates&lt;/em&gt;, &lt;em&gt;walnut oil&lt;/em&gt; và &lt;em&gt;wood block&lt;/em&gt;. Mục đích là xem GPT-3 có xử lý đúng các thẻ lồng nhau hay không.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--Output--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;copper plates: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;copper plates&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;walnut oil: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;pa&amp;gt;&lt;/span&gt;walnut&lt;span class="nt"&gt;&amp;lt;/pa&amp;gt;&lt;/span&gt; oil&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wood block: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;wood block&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kết quả lần này nửa được nửa không: &lt;code&gt;Davinci-codex&lt;/code&gt; chỉ gắn nhãn đúng &lt;em&gt;walnut oil&lt;/em&gt;, còn bỏ sót các thẻ lồng &lt;code&gt;tl&lt;/code&gt; và &lt;code&gt;m&lt;/code&gt; trong &lt;em&gt;copper plates&lt;/em&gt; và &lt;em&gt;wood block&lt;/em&gt;. Tuy nhiên, như bài kiểm tra tiếp theo dưới đây cho thấy, những lỗi này có thể giảm bớt bằng một câu lệnh huấn luyện tốt hơn. Sau khi thêm năm ví dụ nữa về thẻ lồng nhau, &lt;code&gt;Davinci-codex&lt;/code&gt; trả về kết quả gần như hoàn hảo, chỉ sai một chỗ (&lt;em&gt;oil paintbrushes&lt;/em&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--Output--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cannon powder: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;wp&amp;gt;&lt;/span&gt;cannon&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&lt;/span&gt; powder&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;arquebus powder: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;wp&amp;gt;&lt;/span&gt;arquebus&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&lt;/span&gt; powder&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;oil paintbrushes: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;al&amp;gt;&lt;/span&gt;oil&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt; paintbrushes&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sheep footbones: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;al&amp;gt;&lt;/span&gt;sheep&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt; footbones&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bronze mortar: &lt;span class="nt"&gt;&amp;lt;tl&amp;gt;&amp;lt;m&amp;gt;&lt;/span&gt;bronze&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt; mortar&lt;span class="nt"&gt;&amp;lt;/tl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="kết-luận"&gt;Kết luận&lt;/h1&gt;
&lt;p&gt;Cần nhớ rằng các bài kiểm tra này được thực hiện trên những mẩu văn bản ngắn. Tôi ngờ rằng nếu cung cấp nhiều ngữ cảnh hơn trong ví dụ và trong câu lệnh, các mô hình GPT-3 sẽ cho kết quả còn tốt hơn nữa. Hơn thế, tinh chỉnh mô hình bằng những tập huấn luyện chuyên biệt chắc chắn sẽ nâng độ chính xác gắn nhãn lên thêm.&lt;br&gt;
Dẫu các thử nghiệm này còn cần được tiến hành ở quy mô lớn hơn để chứng minh độ tin cậy của mô hình ngôn ngữ tiền huấn luyện, ta vẫn có thể kết luận rằng
&lt;mark&gt;cách tiếp cận này cho phép người biên tập tự động hóa nhiều công việc chú giải chỉ qua vài bước đơn giản, và qua đó có thể tiết kiệm rất nhiều thời gian lẫn tiền bạc.&lt;/mark&gt;
&lt;/p&gt;</description></item><item><title>Trực quan hóa bản thảo 2 (cập nhật)</title><link>https://clementgodbarge.com/vi/post/treemap2/</link><pubDate>Sat, 20 Nov 2021 16:00:00 +0000</pubDate><guid>https://clementgodbarge.com/vi/post/treemap2/</guid><description>&lt;p&gt;Như đã hứa, đây là phiên bản mới của sơ đồ cây tương tác đã giới thiệu trong
, lần này có hai chế độ xem.&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Lưu ý&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Để xem tốt nhất, hãy chắc rằng trang web đang ở chế độ Sáng (nhấp vào biểu tượng mặt trăng ở góc trên bên phải).&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;head&gt;
&lt;meta charset="UTF-8" /&gt;
&lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
&lt;title&gt;&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.gstatic.com" /&gt;
&lt;link
href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&amp;display=swap"
rel="stylesheet"
/&gt;
&lt;link rel="stylesheet" href="css/index.css" /&gt;
&lt;link rel="stylesheet" href="css/vis-treemap.css" /&gt;
&lt;link rel="stylesheet" href="css/vis-tooltip.css" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class="stacked"&gt;
&lt;div class="switch"&gt;
&lt;input
type="checkbox"
name="group-by-category-switch"
id="group-by-category-switch"
checked
/&gt;
&lt;label for="group-by-category-switch"&gt; Group folios by category &lt;/label&gt;
&lt;/div&gt;
&lt;div id="treemap"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/d3@7.9.0/dist/d3.min.js" integrity="sha384-CjloA8y00+1SDAUkjs099PVfnY2KmDC2BZnws9kh8D/lX1s46w6EPhpXdqMfjK6i" crossorigin="anonymous" referrerpolicy="no-referrer"&gt;&lt;/script&gt;
&lt;script src="js/vis-treemap.js"&gt;&lt;/script&gt;
&lt;script src="js/vis-tooltip.js"&gt;&lt;/script&gt;
&lt;script src="js/index.js"&gt;&lt;/script&gt;
&lt;/body&gt;</description></item><item><title>Một trình duyệt trực quan cho kho lưu trữ</title><link>https://clementgodbarge.com/vi/post/treemap/</link><pubDate>Sun, 20 Jun 2021 16:00:00 +0000</pubDate><guid>https://clementgodbarge.com/vi/post/treemap/</guid><description>&lt;h1 id="vấn-đề"&gt;Vấn đề&lt;/h1&gt;
&lt;p&gt;Ấn bản kỹ thuật số mang trong mình một nghịch lý: chúng đưa những tài liệu ít người biết đến tới công chúng rộng rãi, nhưng khi tài liệu bị phi vật chất hóa, người đọc mất đi các kênh cảm nhận quen thuộc, dễ mất phương hướng, thậm chí nản lòng trước nội dung. Duyệt qua những kho tài liệu đồ sộ vì thế trở nên nặng nề và đáng ngại. Điều này không chỉ đúng với người chưa quen nghiên cứu lưu trữ, mà cả với những độc giả gặp khó khăn về nhận thức.&lt;/p&gt;
&lt;h1 id="giải-pháp"&gt;Giải pháp&lt;/h1&gt;
&lt;p&gt;Đây là chỗ siêu dữ liệu lưu trữ phát huy tác dụng. Từ những dữ liệu ấy, ta có thể tạo ra các hình ảnh trừu tượng tương tác, đem lại cho người đọc một kênh cảm nhận khác, vừa tiện dụng hơn vừa dễ tiếp cận hơn. Để kho lưu trữ có thể duyệt bằng mắt, một sơ đồ cây (treemap) – hay bất kỳ sơ đồ nào phân tách hiệu quả dữ liệu phân cấp – là đủ.&lt;/p&gt;
&lt;h1 id="thử-nghiệm"&gt;Thử nghiệm&lt;/h1&gt;
&lt;p&gt;Thử nghiệm đầu tiên của tôi phỏng theo mã
của &lt;code&gt;D3.js&lt;/code&gt;, có bổ sung siêu liên kết. Sơ đồ biểu diễn bản thảo BnF Ms Fr 640, các tờ của nó, và các mục trong từng tờ. Màu sắc thể hiện hạng mục chiếm ưu thế. Rê chuột lên mỗi mục sẽ hiện thêm dữ liệu, kể cả siêu liên kết dẫn tới bản thảo.&lt;br&gt;
Nhờ vậy, sơ đồ cây trở thành một mục lục trực quan tương tác, cho người đọc một cái nhìn tổng quan rất nhanh và linh hoạt, không chỉ về nội dung bản thảo mà còn về kích thước của từng tờ, từng mục.&lt;br&gt;
&lt;del&gt;Trong những tháng tới, tôi sẽ tiếp tục thử nghiệm ý tưởng này với các sơ đồ và hệ phân cấp khác&amp;hellip; Xin hãy đón xem!&lt;/del&gt; Để xem phiên bản mới của sơ đồ cây, nhấp vào
.&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Lưu ý&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Để xem tốt nhất, hãy chắc rằng trang web đang ở chế độ Sáng (nhấp vào biểu tượng mặt trăng ở góc trên bên phải).&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;head&gt;
&lt;meta charset="UTF-8" /&gt;
&lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
&lt;title&gt;&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.gstatic.com" /&gt;
&lt;link
href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&amp;display=swap"
rel="stylesheet" /&gt;
&lt;link rel="stylesheet" href="css/index.css" /&gt;
&lt;link rel="stylesheet" href="css/vis-treemap.css" /&gt;
&lt;link rel="stylesheet" href="css/vis-tooltip.css" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;Click any cell to zoom in, or the top to zoom out.&lt;/p&gt;
&lt;div id="treemap"&gt;&lt;/div&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/d3@7.9.0/dist/d3.min.js" integrity="sha384-CjloA8y00+1SDAUkjs099PVfnY2KmDC2BZnws9kh8D/lX1s46w6EPhpXdqMfjK6i" crossorigin="anonymous" referrerpolicy="no-referrer"&gt;&lt;/script&gt;
&lt;script src="js/vis-treemap.js"&gt;&lt;/script&gt;
&lt;script src="js/vis-tooltip.js"&gt;&lt;/script&gt;
&lt;script src="js/index.js"&gt;&lt;/script&gt;
&lt;/body&gt;</description></item><item><title>Kho lưu trữ trong một cái nhìn</title><link>https://clementgodbarge.com/vi/post/dashboard/</link><pubDate>Mon, 24 May 2021 16:00:00 +0000</pubDate><guid>https://clementgodbarge.com/vi/post/dashboard/</guid><description>&lt;h1 id="vấn-đề"&gt;Vấn đề&lt;/h1&gt;
&lt;p&gt;Kho lưu trữ lịch sử có thể hỗn độn đến phát nản. Phông &lt;em&gt;Mediceo del Principato&lt;/em&gt; tại
là một ví dụ điển hình. Chỉ một phần nhỏ của phông này được lập mục lục; vô số tài liệu nằm rải rác trong hơn 6.500 tập mà chẳng theo lý do nào rõ rệt. Đã vậy, kho lưu trữ chỉ cho phép mỗi người đọc một số lượng tập hạn chế (ở đây người ta gọi là &lt;em&gt;filze&lt;/em&gt;). Bình thường, giới hạn là 4 &lt;em&gt;filze&lt;/em&gt; mỗi ngày. Nhưng trong thời đại dịch, con số ấy tụt xuống còn 4 &lt;em&gt;filze&lt;/em&gt; mỗi hai tuần. Không có mục lục chi tiết, quy mô đồ sộ của kho lưu trữ buộc nhà nghiên cứu phải nghĩ ra chiến lược để nhanh chóng tìm được thứ mình cần.&lt;/p&gt;
&lt;h1 id="giải-pháp"&gt;Giải pháp&lt;/h1&gt;
&lt;p&gt;Có người trông vào may rủi; người khác thì cố đoán cho có căn cứ dựa vào niên đại, người nhận, người gửi, nguồn gốc của phông lưu trữ, ngôn ngữ, v.v. Song nếu &lt;em&gt;nhìn&lt;/em&gt; tất cả các biến ấy cùng một lúc, ta có thể phát hiện những quy luật bất ngờ trong cấu trúc của kho lưu trữ và đoán trúng hơn. Kinh nghiệm của tôi cho thấy: siêu dữ liệu mà nhà nghiên cứu thường gom vào bảng tính, một khi được vẽ thành đồ thị, giúp người ta nắm tình hình trong kho lưu trữ tốt hơn hẳn.&lt;/p&gt;
&lt;h1 id="thử-nghiệm"&gt;Thử nghiệm&lt;/h1&gt;
&lt;p&gt;Nghiên cứu hiện tại của tôi xoay quanh thư từ của một điệp viên thế kỷ XVI. Thư của ông nằm rải rác trong hàng trăm &lt;em&gt;filze&lt;/em&gt;. Chúng được viết dưới nhiều danh tính khác nhau, gửi cho nhiều người nhận khác nhau – đôi khi khá bất ngờ – từ nhiều nơi khác nhau, v.v. Để tìm ra những &lt;em&gt;filze&lt;/em&gt; nhiều khả năng chứa thư cần tìm, tôi đã dựng một bảng điều khiển: một ứng dụng web trực quan hóa dữ liệu tương tác (
) kết nối đủ loại dữ liệu, trong đó có thông tin địa lý và niên đại, với một sơ đồ phân cấp (
) của phông lưu trữ. Chỉ liếc qua bảng điều khiển, tôi biết ngay những gì đã tìm thấy, chúng chiếm tỷ lệ bao nhiêu, và đại khái nên tìm thư mới ở đâu. Hơn nữa, nhấp vào một biến cụ thể là mọi sơ đồ đều cập nhật để hiển thị các tương quan tương ứng.&lt;/p&gt;
&lt;h1 id="bước-tiếp-theo"&gt;Bước tiếp theo&lt;/h1&gt;
&lt;p&gt;Có lẽ quan trọng hơn cả: bảng điều khiển này có thể được dùng lại như một mục lục trực quan. Khi ấn bản phê bình của những lá thư này được công bố trực tuyến, bảng điều khiển sẽ là một lối vào khác, từ đó người đọc có thể duyệt qua dữ liệu. Vì lý do bảo mật, hiện tôi chỉ có thể đưa ra một ảnh chụp màn hình đã che bớt, nhưng sang năm tôi sẽ công bố bảng điều khiển hoàn chỉnh. Trong lúc chờ đợi, một bản mẫu sẽ sớm ra mắt. Xin hãy đón xem!&lt;/p&gt;</description></item><item><title>Trực quan hóa đánh dấu ngữ nghĩa trong BnF Ms. Fr. 640</title><link>https://clementgodbarge.com/vi/post/visualization/</link><pubDate>Sun, 20 Dec 2020 18:15:00 +0000</pubDate><guid>https://clementgodbarge.com/vi/post/visualization/</guid><description>&lt;h1 id="tổng-quan"&gt;Tổng quan&lt;/h1&gt;
&lt;p&gt;Những ấn bản học thuật giàu dữ liệu chứa các chú giải biên tập quý giá mà ta có thể trích xuất, phân tích và trực quan hóa cho đủ loại mục đích nghiên cứu. Đó là trường hợp của
, ra mắt năm 2020, với tệp siêu dữ liệu có thể tải về từ kho GitHub của dự án. Trong bài này, tôi chỉ cách gom tất cả các biến ấy vào một ma trận tương quan và trực quan hóa chúng theo nhiều cách khác nhau.&lt;/p&gt;
&lt;h1 id="dữ-liệu"&gt;Dữ liệu&lt;/h1&gt;
&lt;p&gt;Making and Knowing Project tạo ra một bảng tính chứa thông tin cập nhật về nội dung bản thảo: &lt;code&gt;entry_metadata.csv&lt;/code&gt;. Tệp này lấy được từ
của Making &amp;amp; Knowing. Ngoài ra, ta có thể tự tạo các tệp .csv theo ý mình, với nhiều thẻ đánh dấu hơn, nhờ
xuất sắc của Matthew Kumar – một phiên bản Python của BnF Ms. Fr. 640.&lt;/p&gt;
&lt;h2 id="thiết-lập-python"&gt;Thiết lập Python&lt;/h2&gt;
&lt;p&gt;Ta sẽ dùng Pandas để xử lý dữ liệu, Matplotlib và seaborn cho bản đồ nhiệt, và cuối cùng là NetworkX để tạo mạng lưới dựa trên tương quan.&lt;br&gt;
Với loại biến này, ta tránh phương pháp Pearson và dùng phương pháp 𝜙𝐾 thay thế. Hãy chắc rằng bạn đã
phương pháp tương quan này và &lt;code&gt;PhiK&lt;/code&gt;, thư viện tương ứng của nó.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#install packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;phik&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# import modules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;plt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;seaborn&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;sns&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;networkx&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;nx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="chuẩn-bị-dữ-liệu"&gt;Chuẩn bị dữ liệu&lt;/h2&gt;
&lt;p&gt;Trước hết, tải tệp siêu dữ liệu mới nhất của ấn bản từ
của họ, trong thư mục metadata.
Ta chỉ chọn những cột cần thiết. Cho phần trình diễn này, tôi chọn tất cả thẻ ngữ nghĩa của bản dịch tiếng Anh &lt;code&gt;tl&lt;/code&gt;, nhưng bạn cũng có thể chọn thẻ của bản chuyển tự tiếng Pháp &lt;code&gt;tc&lt;/code&gt;, hoặc bản chuẩn hóa &lt;code&gt;tcn&lt;/code&gt;.
Dữ liệu ở dạng giá trị phân cách bằng dấu chấm phẩy, và ta cần Python đếm hộ. Ta sẽ dùng phương pháp stack-unstack với biểu thức chính quy &lt;code&gt;[^;\s][^\;]*[^;\s]*&lt;/code&gt;.
Để ma trận dễ đọc hơn, ta đổi tên từng cột. Nếu vội, bạn có thể bỏ qua bước này; chỉ cần nhớ rằng dataframe của ta ở giai đoạn này mang tên &lt;code&gt;tagsrn&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# load the edition&amp;#39;s metadata&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;entry_metadata.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# select the tags you want to correlate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dftags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;al_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;bp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;df_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;env_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;m_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;md_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ms_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;mu_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pa_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pl_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pro_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tl_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tmp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;wp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;de_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;el_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;it_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;la_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;oc_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;po_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# count comma separated values&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tagcount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dftags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dropna&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;[^;\s][^\;]*[^;\s]*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unstack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# rename columns&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tagsrn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tagcount&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;al_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;animals&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;bp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;body parts&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;currency&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;df_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;definitions&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;env_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;environment&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;m_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;material&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;md_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;medical&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ms_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;measurement&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;mu_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;music&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pa_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;plant&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pl_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;toponym&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;person&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pro_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;profession&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sensory&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tl_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tool&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tmp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;temporal&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;wp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;weapons&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;de_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;German&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;el_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Greek&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;it_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Italian&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;la_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Italian&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;oc_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Occitan&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;po_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Poitevin&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="tính-tương-quan"&gt;Tính tương quan&lt;/h1&gt;
&lt;p&gt;Khi dataframe đã sạch, ta chuyển sang tính hệ số tương quan giữa các biến. Ở bước này, điều cốt yếu là hiểu dữ liệu của mình và chọn đúng phương pháp tương quan thích hợp nhất. Gói &lt;code&gt;pandas-profiling&lt;/code&gt; đặc biệt hữu ích cho việc đó.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# calculate correlation coefficient with the phi k method&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cortag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tagsrn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;phik_matrix&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;cortag&lt;/code&gt; là ma trận tương quan của ta. Giờ có thể thử nhiều kiểu trực quan hóa khác nhau.&lt;/p&gt;
&lt;h1 id="trực-quan-hóa"&gt;Trực quan hóa&lt;/h1&gt;
&lt;p&gt;Thứ đầu tiên đáng thử là hiển thị nó như một ma trận mã hóa bằng màu, dùng
của &lt;code&gt;seaborn&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="bản-đồ-nhiệt-tương-quan"&gt;Bản đồ nhiệt tương quan&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;heatmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cortag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linewidths&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;.03&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vmin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cmap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Oranges&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Bản đồ nhiệt tương quan của BnF Ms. Fr. 640"
srcset="https://clementgodbarge.com/post/visualization/heatmap_hu_943abdd98e24b0a3.webp 320w, https://clementgodbarge.com/post/visualization/heatmap_hu_eca41311a0e0ac17.webp 480w, https://clementgodbarge.com/post/visualization/heatmap_hu_1650defb643c0285.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://clementgodbarge.com/post/visualization/heatmap_hu_943abdd98e24b0a3.webp"
width="760"
height="665"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Nếu quen văn bản, bạn sẽ thấy ngay bản đồ nhiệt này rất có lý. Chẳng hạn, tên người tương quan mạnh với tiếng Latinh, vì thời ấy – nhất là trong giới nhân văn chủ nghĩa thế kỷ XVI – người ta có thói quen Latinh hóa tên.&lt;/p&gt;
&lt;p&gt;Có người sẽ bảo bản đồ nhiệt này chỉ nói lên điều hiển nhiên. Họ không hoàn toàn sai, và thoạt nhìn, các thẻ y học có vẻ là ví dụ điển hình: chúng tương quan, đúng như dự đoán, với bộ phận cơ thể, đơn vị đo lường và thực vật.&lt;/p&gt;
&lt;p&gt;Nhưng đọc bản đồ nhiệt kỹ hơn, từng dòng một, ta có thể phát hiện những tương quan thú vị và bất ngờ. Việc các thẻ y học tương quan với từ tiếng Ý và tiếng Latinh, chẳng hạn, cho ta manh mối về nguồn gốc các bài thuốc trong Ms. Fr. 640. Tương tự, tương quan giữa nghề nghiệp, định nghĩa và đơn vị đo lường cho thấy căn tính nghề nghiệp định hình diễn ngôn kỹ thuật thế kỷ XVI đến mức nào.&lt;/p&gt;
&lt;h3 id="bản-đồ-cụm-tương-quan"&gt;Bản đồ cụm tương quan&lt;/h3&gt;
&lt;p&gt;Bản đồ nhiệt hữu ích trong bối cảnh &amp;ldquo;khám phá&amp;rdquo;, nhưng với người xem, chúng có thể hơi rối, nhất là khi bạn đang bàn về – hay vẫn đang tìm – những cụm ngữ nghĩa cụ thể trong bản thảo. Mô-đun &lt;code&gt;clustermap&lt;/code&gt; của Seaborn có thể cho kết quả đáng chú ý.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;clustermap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clustermap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cortag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;dendrogram_ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;.2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;vmin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cmap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Oranges&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cbar_pos&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;.06&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;.12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;.03&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;.68&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Bản đồ cụm tương quan của BnF Ms. Fr. 640"
srcset="https://clementgodbarge.com/post/visualization/clustermap_hu_677e6e5028f9d902.webp 320w, https://clementgodbarge.com/post/visualization/clustermap_hu_2dac945fa40a8ac6.webp 480w, https://clementgodbarge.com/post/visualization/clustermap_hu_3abaf7b36a53572.webp 753w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://clementgodbarge.com/post/visualization/clustermap_hu_677e6e5028f9d902.webp"
width="753"
height="760"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Ngoài chuyện trông như một con côn trùng bị vỡ điểm ảnh (pixelated – vâng, từ này có trong OED), bản đồ cụm phân biệt rõ các thẻ đứng lẻ (phía trên và bên trái) với những thẻ liên kết chặt chẽ hơn. Ta cũng nhận ra các cụm biệt lập, như âm nhạc và tiếng Poitevin (ai mà ngờ!), so với những cụm trung tâm hơn như đo lường, vật liệu, định nghĩa và vũ khí. Nghề nghiệp liên kết nhiều hơn, nhưng ít nhất trong ma trận tương quan cụ thể này, chúng không thuộc về một cụm riêng nào.&lt;/p&gt;
&lt;h3 id="mạng-lưới-tương-quan"&gt;Mạng lưới tương quan&lt;/h3&gt;
&lt;p&gt;Nếu muốn cô đọng hơn nữa các tương quan trong ma trận, đồ thị mạng lưới là một giải pháp thanh nhã. Điều này đặc biệt đúng khi ta muốn truyền đạt về nội dung bản thảo.&lt;br&gt;
Để làm vậy, ta cần biến ma trận thành danh sách các cạnh và nút, rồi định một ngưỡng để loại các tương quan yếu khỏi đồ thị.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# transform the data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;links&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cortag&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reset_index&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;var1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# threshold &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;links_filtered&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;.6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;var1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;var2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;links_filtered&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# create edges&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;G&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_pandas_edgelist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;links_filtered&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# draw network using Kamada &amp;amp; Kawai&amp;#39;s algorithm &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;draw_kamada_kawai&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;with_labels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;node_color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;red&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;node_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;edge_color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;black&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linewidths&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;font_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Đồ thị tương quan của BnF Ms. Fr. 640"
srcset="https://clementgodbarge.com/post/visualization/graph_hu_396032c00cb7f7f3.webp 320w, https://clementgodbarge.com/post/visualization/graph_hu_85295e5fba6293bc.webp 480w, https://clementgodbarge.com/post/visualization/graph_hu_4190dbca7e86ffc1.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://clementgodbarge.com/post/visualization/graph_hu_396032c00cb7f7f3.webp"
width="760"
height="760"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Nếu có quá nhiều cạnh và nút, bạn vẫn có thể đổi ngưỡng để được kết quả gọn hơn. Hoặc xuất đồ thị ra để nghịch trong &lt;code&gt;Gephi&lt;/code&gt;, bằng hàm &lt;code&gt;.write_gexf()&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write_gexf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;graph.gexf&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Bạn có thể xem kết quả ở đầu bài viết này.&lt;/p&gt;
&lt;h3 id="cập-nhật-mạng-lưới-có-trọng-số-dạng-vòng"&gt;Cập nhật: Mạng lưới có trọng số dạng vòng&lt;/h3&gt;
&lt;p&gt;Tôi đang tìm cách hiển thị ma trận tương quan dưới dạng mạng lưới có trọng số thì gặp cách tiếp cận thú vị này
, và tôi phỏng theo nó cho tập dữ liệu của chúng ta ở đây.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# create graph weighted by correlation coefficients (unfiltered)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Gx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_pandas_edgelist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;edge_attr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# determine a threshold to remove some edges&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;threshold&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# list to store edges to remove&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;remove&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# loop through edges in Gx and find correlations which are below the threshold&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;var1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;var2&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;Gx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;corr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Gx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;var1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;var2&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#add to remove node list if abs(corr) &amp;lt; threshold&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;corr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;remove&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;var1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;var2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# remove edges contained in the remove list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Gx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;remove_edges_from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39; edges removed&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sau khi bỏ bớt vài cạnh, ta có thể định màu sắc và độ dày cho chúng.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# determine the colors of edges&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;assign_colour&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;correlation&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;correlation&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;#ff872c&amp;#39;&lt;/span&gt; &lt;span class="c1"&gt;# orange&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;#f11d28&amp;#39;&lt;/span&gt; &lt;span class="c1"&gt;# red&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;assign_thickness&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;correlation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;benchmark_thickness&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scaling_factor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;benchmark_thickness&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;correlation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;scaling_factor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;assign_node_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;degree&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scaling_factor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;degree&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;scaling_factor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ta cũng cho các nút một kích thước tỷ lệ với số kết nối của chúng.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# assign node size depending on number of connections (degree)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;node_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Gx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;degree&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;node_size&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;assign_node_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kết quả là một đồ thị có trọng số chấp nhận nhiều nút hơn và nhiều cạnh hơn hẳn, mà vẫn dễ đọc và giàu thông tin.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Đồ thị tương quan có trọng số của BnF Ms. Fr. 640"
srcset="https://clementgodbarge.com/post/visualization/weightedgraph_hu_7b75f2e5fc7edb1b.webp 320w, https://clementgodbarge.com/post/visualization/weightedgraph_hu_9f0550eb49c17f11.webp 480w, https://clementgodbarge.com/post/visualization/weightedgraph_hu_a9106989817361fb.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://clementgodbarge.com/post/visualization/weightedgraph_hu_7b75f2e5fc7edb1b.webp"
width="760"
height="760"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;</description></item></channel></rss>