
2024 年 4 月,我們推出了 Jina Reader,這是一個只需在 URL 前加上 r.jina.ai
前綴就能將任何網頁轉換為 LLM 友好格式 markdown 的 API。2024 年 9 月,我們推出了兩個專門用於將原始 HTML 轉換為乾淨 markdown 的小型語言模型:reader-lm-0.5b 和 reader-lm-1.5b。今天,我們很高興推出 ReaderLM 的第二代,這是一個 1.5B 參數的語言模型,可以將原始 HTML 轉換為格式優美的 markdown 或 JSON,具有更高的準確性和改進的長文本處理能力。ReaderLM-v2 可處理高達 512K 個 token 的輸入和輸出總長度。該模型提供 29 種語言的多語言支援,包括英語、中文、日語、韓語、法語、西班牙語、葡萄牙語、德語、義大利語、俄語、越南語、泰語、阿拉伯語等。
得益於其新的訓練範式和更高品質的訓練數據,ReaderLM-v2 較其前代產品有了重大突破,特別是在處理長文本內容和生成 markdown 語法方面。雖然第一代將 HTML 轉 markdown 的轉換視為「選擇性複製」任務,但v2 將其視為真正的翻譯過程。這種轉變使模型能夠熟練地運用 markdown 語法,尤其擅長生成程式碼區塊、巢狀列表、表格和 LaTex 方程式等複雜元素。
比較 ReaderLM v2、ReaderLM 1.5b、Claude 3.5 Sonnet 和 Gemini 2.0 Flash 在將 HackerNews 首頁轉換為 markdown 的結果,展示了 ReaderLM v2 獨特的風格和性能。ReaderLM v2 擅長保留原始 HTML 中的全面資訊,包括 HackerNews 原始連結,同時使用 markdown 語法巧妙地組織內容。該模型使用巢狀列表來組織本地元素(積分、時間戳和評論),同時透過適當的標題層次結構(h1 和 h2 標籤)維持一致的全局格式。
我們第一版的一個主要挑戰是在生成長序列後出現退化現象,特別是重複和循環的形式。模型要麼開始重複相同的 token,要麼陷入循環,在達到最大輸出長度之前重複循環一小段 token 序列。ReaderLM-v2 透過在訓練過程中加入對比損失大大緩解了這個問題——無論上下文長度或已生成的 token 數量如何,其性能都保持一致。

除了 markdown 轉換,ReaderLM-v2 還引入了直接 HTML 轉 JSON 生成功能,允許使用者按照給定的 JSON schema 從原始 HTML 中提取特定資訊。這種端到端的方法消除了在許多 LLM 驅動的資料清理和提取管道中常見的中間 markdown 轉換需求。

在定量和定性基準測試中,ReaderLM-v2 在 HTML 轉 Markdown 的任務上優於像 Qwen2.5-32B-Instruct
、Gemini2-flash-expr
和 GPT-4o-2024-08-06
等更大的模型,同時在 HTML 轉 JSON 提取任務上展現出相當的性能,而且使用的參數數量顯著較少。
ReaderLM-v2-pro
是專門為我們的企業客戶保留的高級版本,具有額外的訓練和優化。這些結果證明,一個設計良好的 1.5B 參數模型不僅可以匹配,而且經常能夠在結構化數據提取任務中超越更大的模型。從 ReaderLM-v2 到 ReaderLM-v2-pro
的持續改進,展示了我們新訓練策略在提高模型性能的同時保持計算效率方面的有效性。
tag開始使用
tag透過 Reader API

ReaderLM-v2 現已整合到我們的 Reader API 中。要使用它,只需在請求標頭中指定 x-engine: readerlm-v2
,並使用 -H 'Accept: text/event-stream'
啟用響應串流:
curl https://r.jina.ai/https://news.ycombinator.com/ -H 'x-engine: readerlm-v2' -H 'Accept: text/event-stream'
您可以在較低的速率限制下無需 API 金鑰即可試用。若需更高的速率限制,您可以購買 API 金鑰。請注意,ReaderLM-v2 請求會從您的 API 金鑰中消耗正常 token 數量的 3 倍。此功能目前處於測試階段,我們正在與 GCP 團隊合作優化 GPU 效率並提高模型可用性。
tag在 Google Colab 上

請注意,免費的 T4 GPU 有限制—它不支援 bfloat16
或 flash attention 2,這導致更高的內存使用量和較慢的長輸入處理速度。儘管如此,ReaderLM v2 在這些限制下仍能成功處理我們的整個法律頁面,達到 67 tokens/s 的輸入速度和 36 tokens/s 的輸出速度。對於生產用途,我們建議使用 RTX 3090/4090 以獲得最佳性能。
在託管環境中試用 ReaderLM-v2 最簡單的方式是透過我們的 Colab notebook,它展示了使用 HackerNews 首頁作為範例的 HTML 轉 Markdown 轉換、JSON 提取和指令跟隨功能。該 notebook 針對 Colab 的免費 T4 GPU 等級進行了優化,並需要 vllm
和 triton
來加速和運行。歡迎使用任何網站進行測試。
HTML 轉 Markdown 轉換
您可以使用 create_prompt
輔助函數輕鬆創建用於將 HTML 轉換為 Markdown 的提示:
prompt = create_prompt(html)
result = llm.generate(prompt, sampling_params=sampling_params)[0].outputs[0].text.strip()
result
將是一個用 Markdown 反引號代碼圍欄包裹的字串。您也可以覆蓋默認設置來探索不同的輸出,例如:
prompt = create_prompt(html, instruction="Extract the first three news and put into in the makdown list")
result = llm.generate(prompt, sampling_params=sampling_params)[0].outputs[0].text.strip()
然而,由於我們的訓練數據可能無法涵蓋每種類型的指令,特別是需要多步驟推理的任務,最可靠的結果來自 HTML 轉 Markdown 轉換。為了最有效的信息提取,我們建議使用如下所示的 JSON schema:
使用 JSON schema 進行 HTML 到 JSON 的提取
import json
schema = {
"type": "object",
"properties": {
"title": {"type": "string", "description": "News thread title"},
"url": {"type": "string", "description": "Thread URL"},
"summary": {"type": "string", "description": "Article summary"},
"keywords": {"type": "list", "description": "Descriptive keywords"},
"author": {"type": "string", "description": "Thread author"},
"comments": {"type": "integer", "description": "Comment count"}
},
"required": ["title", "url", "date", "points", "author", "comments"]
}
prompt = create_prompt(html, schema=json.dumps(schema, indent=2))
result = llm.generate(prompt, sampling_params=sampling_params)[0].outputs[0].text.strip()
result
將是一個用 JSON 格式的代碼圍欄反引號包裹的字串,而不是實際的 JSON/dict 對象。您可以使用 Python 將該字串解析為適當的字典或 JSON 對象以進行進一步處理。
tag生產環境:可在 CSP 上使用
ReaderLM-v2 可在 AWS SageMaker、Azure 和 GCP marketplace 上使用。如果您需要在這些平台之外或在公司內部使用這些模型,請注意該模型和 ReaderLM-v2-pro
都是在 CC BY-NC 4.0 許可下授權的。如需商業使用諮詢或獲取 ReaderLM-v2-pro
的訪問權限,請隨時聯繫我們。

tag定量評估
我們針對三個結構化資料抽取任務,將 ReaderLM-v2 與最先進的模型進行評估比較:GPT-4o-2024-08-06
、Gemini2-flash-expr
和 Qwen2.5-32B-Instruct
。我們的評估框架結合了測量內容準確度和結構忠實度的指標。ReaderLM-v2 是開放權重的公開版本,而 ReaderLM-v2-pro
是僅供企業客戶使用的專屬高級版本,具有額外的訓練和優化。請注意,我們的第一代 reader-lm-1.5b 僅針對主要內容抽取任務進行評估,因為它不支援指令式抽取或 JSON 抽取功能。
tag評估指標
對於 HTML 轉 Markdown 的任務,我們採用七個互補的指標。注意:↑ 表示數值越高越好,↓ 表示數值越低越好
- ROUGE-L(↑):測量生成文本與參考文本之間的最長公共子序列,體現內容保留和結構相似度。範圍:0-1,數值越高表示序列匹配度越好。
- WER(詞錯誤率)(↓):量化將生成文本轉換為參考文本所需的最小詞級編輯次數。數值越低表示所需修正越少。
- SUB(替換)(↓):計算所需的詞替換次數。數值越低表示詞級準確度越高。
- INS(插入)(↓):測量需要插入多少詞才能匹配參考文本。數值越低表示完整度越高。
- Levenshtein 距離(↓):計算所需的最小字符級編輯次數。數值越低表示字符級準確度越高。
- Damerau-Levenshtein 距離(↓):類似 Levenshtein 但也考慮字符換位。數值越低表示字符級匹配度越高。
- Jaro-Winkler 相似度(↑):特別強調字符串開頭的匹配,對評估文檔結構保留特別有用。範圍:0-1,數值越高表示相似度越高。
對於 HTML 轉 JSON 的任務,我們將其視為檢索任務,採用以下四個資訊檢索指標:
- F1 分數(↑):精確率和召回率的調和平均數,提供整體準確度。範圍:0-1。
- 精確率(↑):所有抽取資訊中正確抽取的比例。範圍:0-1。
- 召回率(↑):從所有可用資訊中正確抽取的比例。範圍:0-1。
- 通過率(↑):符合 JSON 格式和結構規範的輸出比例。範圍:0-1。
tag主要內容 HTML 轉 Markdown 任務
Model | ROUGE-L↑ | WER↓ | SUB↓ | INS↓ | Levenshtein↓ | Damerau↓ | Jaro-Winkler↑ |
---|---|---|---|---|---|---|---|
Gemini2-flash-expr | 0.69 | 0.62 | 131.06 | 372.34 | 0.40 | 1341.14 | 0.74 |
gpt-4o-2024-08-06 | 0.69 | 0.41 | 88.66 | 88.69 | 0.40 | 1283.54 | 0.75 |
Qwen2.5-32B-Instruct | 0.71 | 0.47 | 158.26 | 123.47 | 0.41 | 1354.33 | 0.70 |
reader-lm-1.5b | 0.72 | 1.14 | 260.29 | 1182.97 | 0.35 | 1733.11 | 0.70 |
ReaderLM-v2 | 0.84 | 0.62 | 135.28 | 867.14 | 0.22 | 1262.75 | 0.82 |
ReaderLM-v2-pro | 0.86 | 0.39 | 162.92 | 500.44 | 0.20 | 928.15 | 0.83 |
tag指令式 HTML 轉 Markdown 任務
Model | ROUGE-L↑ | WER↓ | SUB↓ | INS↓ | Levenshtein↓ | Damerau↓ | Jaro-Winkler↑ |
---|---|---|---|---|---|---|---|
Gemini2-flash-expr | 0.64 | 1.64 | 122.64 | 533.12 | 0.45 | 766.62 | 0.70 |
gpt-4o-2024-08-06 | 0.69 | 0.82 | 87.53 | 180.61 | 0.42 | 451.10 | 0.69 |
Qwen2.5-32B-Instruct | 0.68 | 0.73 | 98.72 | 177.23 | 0.43 | 501.50 | 0.69 |
ReaderLM-v2 | 0.70 | 1.28 | 75.10 | 443.70 | 0.38 | 673.62 | 0.75 |
ReaderLM-v2-pro | 0.72 | 1.48 | 70.16 | 570.38 | 0.37 | 748.10 | 0.75 |
tag基於 Schema 的 HTML 轉 JSON 任務
Model | F1↑ | Precision↑ | Recall↑ | Pass-Rate↑ |
---|---|---|---|---|
Gemini2-flash-expr | 0.81 | 0.81 | 0.82 | 0.99 |
gpt-4o-2024-08-06 | 0.83 | 0.84 | 0.83 | 1.00 |
Qwen2.5-32B-Instruct | 0.83 | 0.85 | 0.83 | 1.00 |
ReaderLM-v2 | 0.81 | 0.82 | 0.81 | 0.98 |
ReaderLM-v2-pro | 0.82 | 0.83 | 0.82 | 0.99 |
ReaderLM-v2 在所有任務中都展現出顯著進步。在主要內容抽取方面,ReaderLM-v2-pro
在七個指標中的五個達到最佳表現,包括 ROUGE-L(0.86)、WER(0.39)、Levenshtein(0.20)、Damerau(928.15)和 Jaro-Winkler(0.83)分數。這些結果展示了相較於其基礎版本和更大規模模型,在內容保留和結構準確度方面都有全面提升。
在指令式抽取方面,ReaderLM-v2 和 ReaderLM-v2-pro
在 ROUGE-L(0.72)、替換率(70.16)、Levenshtein 距離(0.37)以及 Jaro-Winkler 相似度(0.75,與基礎版本並列)方面領先。雖然 GPT-4o 在 WER 和 Damerau 距離方面具有優勢,但 ReaderLM-v2-pro
在整體內容結構和準確度方面維持更佳表現。在 JSON 抽取方面,該模型表現具有競爭力,F1 分數與更大規模模型的差距僅在 0.01-0.02 之間,同時保持高通過率(0.99)。
tag定性評估
在我們的分析過程中在研究 reader-lm-1.5b 時,我們發現單純依靠量化指標可能無法完全反映模型的效能。數值評估有時無法反映感知品質——有些低分案例產生了視覺上令人滿意的 markdown,而高分案例卻產生次優結果。為了解決這個差異,我們對 10 個不同的 HTML 來源進行了系統性的質性評估,包括英文、日文和中文的新聞文章、部落格文章、產品頁面、電商網站和法律文件。測試語料強調了具有挑戰性的格式元素,如多列表格、動態版面、LaTeX 公式、鏈接表格和嵌套列表,這提供了對模型實際應用能力更全面的視角。
tag評估指標
我們的人工評估聚焦於三個關鍵維度,使用 1-5 分進行評分:
內容完整性 - 評估 HTML 轉 markdown 過程中語意資訊的保留,包括:
- 文字內容的準確性和完整性
- 連結、圖片、程式碼區塊、公式和引用的保留
- 文字格式和連結/圖片 URL 的保留
結構準確性 - 評估 HTML 結構元素轉換為 Markdown 的準確度:
- 標題層級的保留
- 列表巢狀結構的準確性
- 表格結構的忠實度
- 程式碼區塊和引用的格式
格式合規性 - 衡量對 Markdown 語法標準的遵循程度:
- 標題(#)、列表(*、+、-)、表格、程式碼區塊(```)等的正確語法使用
- 無多餘空格或非標準語法的乾淨格式
- 一致且可讀的渲染輸出
在我們手動評估超過 10 個 HTML 頁面時,每個評估標準的最高分為 50 分。ReaderLM-v2 在所有維度都展現出優異的表現:
Metric | Content Integrity | Structural Accuracy | Format Compliance |
---|---|---|---|
reader-lm-v2 | 39 | 35 | 36 |
reader-lm-v2-pro | 35 | 37 | 37 |
reader-lm-v1 | 35 | 34 | 31 |
Claude 3.5 Sonnet | 26 | 31 | 33 |
gemini-2.0-flash-expr | 35 | 31 | 28 |
Qwen2.5-32B-Instruct | 32 | 33 | 34 |
gpt-4o | 38 | 41 | 42 |
在內容完整性方面,它在複雜元素識別上表現出色,尤其是 LaTeX 公式、巢狀列表和程式碼區塊。在處理複雜內容結構時,本模型保持了高度忠實度,而競爭模型則經常出現丟失 H1 標題(reader-lm-1.5b)、截斷內容(Claude 3.5)或保留原始 HTML 標籤(Gemini-2.0-flash)等問題。


一篇 ICLR 部落格文章,其中包含嵌入在 markdown 中的複雜 LaTeX 方程式,右側面板顯示了源 HTML 代碼。


\[...\]
(及其 HTML 等效項)替換為 Markdown 標準分隔符,如行內方程式使用 $...$
,顯示方程式使用 $$...$$
。這有助於防止 Markdown 解釋時的語法衝突。在結構準確性方面,ReaderLM-v2 針對常見的網頁結構展現出優化效果。例如,在 Hacker News 的案例中,它成功重建了完整的連結並優化了列表呈現。該模型處理了 ReaderLM-v1 難以應對的複雜非部落格 HTML 結構。
在格式合規性方面,ReaderLM-v2 在處理 Hacker News、部落格和 WeChat 文章等內容時表現特別強勢。雖然其他大型語言模型在處理類 markdown 來源時表現良好,但在需要更多解釋和重新格式化的傳統網站上則遇到困難。
我們的分析顯示,gpt-4o
在處理較短的網站時表現出色,相較於其他模型,展現出對網站結構和格式更優越的理解能力。然而,在處理較長內容時,gpt-4o
在完整性方面遇到困難,經常遺漏文本開頭和結尾的部分。我們以 Zillow 網站為例,提供了 gpt-4o
、ReaderLM-v2 和 ReaderLM-v2-pro 輸出的比較分析。




比較 gpt-4o(左)、ReaderLM-v2(中)和 ReaderLM-v2-pro(右)渲染的 Markdown 輸出結果。
對於某些具有挑戰性的案例,如產品著陸頁面和政府文件,ReaderLM-v2 和 ReaderLM-v2-pro 的表現依然穩健,但仍有改進空間。對於 ICLR 部落格文章中的複雜數學公式和程式碼,雖然大多數模型都面臨挑戰,但 ReaderLM-v2 比基準 Reader API 處理得更好。
tag我們如何訓練 ReaderLM v2
ReaderLM-v2 是基於 Qwen2.5-1.5B-Instruction
建構的,這是一個以指令遵循和長文本處理效率著稱的精簡基礎模型。在本節中,我們將描述如何訓練 ReaderLM-v2,重點關注資料準備、訓練方法以及我們遇到的挑戰。
Model Parameter | ReaderLM-v2 |
---|---|
Total Parameters | 1.54B |
Max Context Length (Input+Output) | 512K |
Hidden Size | 1536 |
Number of Layers | 28 |
Query Heads | 12 |
KV Heads | 2 |
Head Size | 128 |
Intermediate Size | 8960 |
Multilingual Support | 29 languages |
HuggingFace Repository | Link |
tag資料準備
ReaderLM-v2 的成功很大程度上取決於其訓練資料的品質。我們創建了 html-markdown-1m
資料集,其中包含了從網際網路收集的一百萬份 HTML 文件。平均每份文件包含 56,000 個 token,反映了真實網路資料的長度和複雜性。在準備這個資料集時,我們清理了 HTML 文件,移除了不必要的元素(如 JavaScript 和 CSS),同時保留關鍵的結構和語義元素。清理後,我們使用 Jina Reader 通過正則表達式模式和啟發式方法將 HTML 文件轉換為 Markdown。

html-markdown-1m
資料集中 HTML 文件的 token 長度直方圖雖然這建立了一個可用的基礎資料集,但它突顯了一個關鍵限制:僅僅用這些直接轉換訓練的模型本質上只會學會模仿 Jina Reader 使用的正則表達式模式和啟發式方法。這一點在 reader-lm-0.5b/1.5b
中變得明顯,其性能上限受到這些基於規則的轉換品質的限制。
為了解決這些限制,我們開發了一個依賴 Qwen2.5-32B-Instruction
模型的三步驟流程,這對於建立高品質的合成資料集至關重要。

Qwen2.5-32B-Instruction
驅動- 起草:基於提供給模型的指令生成初始 Markdown 和 JSON 輸出。這些輸出雖然多樣化,但經常有噪音或不一致。
- 優化:通過移除冗餘內容、強化結構一致性和對齊所需格式來改進生成的草稿。這一步驟確保資料乾淨且符合任務要求。
- 評判:根據原始指令評估優化後的輸出。只有通過評估的資料才會被納入最終資料集。這種反覆的方法確保訓練資料達到結構化資料提取所需的品質標準。
tag訓練過程
我們的訓練過程包含多個階段,專門針對處理長文本文件的挑戰。

我們首先進行長文本預訓練,使用 html-markdown-1m
資料集。我們使用了環狀鋸齒注意力(ring-zag attention)和旋轉位置編碼(RoPE)等技術,逐步將模型的文本長度從 32,768 個 token 擴展到 256,000 個 token。為了維持穩定性和效率,我們採用了漸進式訓練方法,從較短序列開始,逐步增加文本長度。
預訓練之後,我們進行了監督式微調(SFT)。這個階段使用了在資料準備過程中生成的優化資料集。這些資料集包含了 Markdown 和 JSON 提取任務的詳細指令,以及草稿優化的範例。每個資料集都經過精心設計,以幫助模型學習特定任務,如識別主要內容或遵循基於模式的 JSON 結構。
接著,我們應用了直接偏好優化(DPO)來使模型的輸出與高品質結果一致。在這個階段,模型基於草稿和優化後的回應對進行訓練。通過學習優先選擇優化後的輸出,模型內化了定義精煉和任務專門結果的細微區別。
最後,我們實施了自我對弈強化訓練,這是一個模型生成、優化和評估自己輸出的反覆過程。這個循環使模型能夠不需要額外外部監督就持續改進。通過利用自己的評判和優化,模型逐步提升了產生精確和結構化輸出的能力。
tag結論
在 2024 年 4 月,Jina Reader 成為第一個對 LLM 友好的 markdown API。它開創了新趨勢,贏得廣泛的社群採用,最重要的是,啟發我們建立用於資料清理和提取的小型語言模型。今天,我們再次提升標準,推出 ReaderLM-v2,實現了去年九月的承諾:更好的長文本處理、支援輸入指令,以及將特定網頁內容提取為 markdown 格式的能力。我們再次證明,通過細心的訓練和校準,小型語言模型可以達到超越大型模型的最先進性能。
在 ReaderLM-v2 的訓練過程中,我們發現了兩個見解。一個有效的策略是在針對特定任務定製的獨立資料集上訓練專門模型。這些任務專門模型後來通過線性參數插值進行合併。雖然這種方法需要額外的努力,但它有助於在最終統一系統中保留每個專門模型的獨特優勢。
反覆的資料合成過程對我們模型的成功至關重要。透過對合成資料的重複改進和評估,我們大幅提升了模型效能,超越了簡單的規則導向方法。這種反覆策略雖然在維持一致的評估標準和管理運算成本方面帶來挑戰,但對於突破使用 Jina Reader 正則表達式和啟發式訓練資料的限制來說是不可或缺的。這一點從高度依賴 Jina Reader 規則導向轉換的 reader-lm-1.5b 與受益於此反覆改進過程的 ReaderLM-v2 之間的效能差距可以清楚看出。
我們很期待聽到關於 ReaderLM-v2 如何改善您的資料品質的回饋。展望未來,我們計劃擴展多模態功能,特別是針對掃描文件,並進一步優化生成速度。如果您對針對特定領域客製化的 ReaderLM 版本感興趣,請隨時與我們聯繫。