ReaderLM-v2:HTMLテキスト変換の次なる進化形

ReaderLM-v2 プロジェクト概要

プロジェクト説明

ReaderLM-v2は、Jina AIが開発した15億パラメータ規模の言語モデルです。生のHTMLを適切に整形されたMarkdownまたはJSONに変換することに特化しています。このモデルは、高い精度、最大512Kトークン(入出力合計)に及ぶ長文コンテキストの改善された処理能力、および29言語にわたる包括的な多言語サポートを提供します。コンテンツ抽出、HTML解析、変換タスクを強化します。

ReaderLM-v2の新機能

  • Markdown生成の向上: コードフェンス、ネストされたリスト、テーブル、LaTeX数式といった複雑な要素の生成が改善されました。
  • JSON出力: 事前定義されたスキーマを使用したHTMLからJSONへの直接生成が可能です。
  • 長文コンテキスト処理: 最大512Kトークンまで対応し、長文コンテンツでのパフォーマンスが向上しました。
  • 多言語サポート: 29言語に拡張されました。
  • 安定性の強化: 対照的な損失を用いることで、長文シーケンスにおける退化の問題を軽減します。

モデル概要

  • モデルタイプ: 自己回帰型、デコーダーオンリーのトランスフォーマー
  • パラメータ数: 15.4億
  • コンテキストウィンドウ: 最大512Kトークン(入出力合計)
  • 対応言語: 英語、中国語、日本語、韓国語、フランス語、スペイン語、ポルトガル語、ドイツ語、イタリア語、ロシア語、ベトナム語、タイ語、アラビア語、その他を含む全29言語。

使用方法

Reader API経由での利用

ReaderLM-v2はReader APIに統合されています。 利用するには、リクエストヘッダーにx-engine: readerlm-v2を指定し、Accept: text/event-streamを有効にします。

curl https://r.jina.ai/https://news.ycombinator.com/ -H 'x-engine: readerlm-v2' -H 'Accept: text/event-stream'

Google Colabでの利用

HTMLからMarkdownへの変換、JSON抽出、指示追従を実演するためのGoogle Colabノートブックが利用可能です。Colabの無料T4 GPU層に最適化されており、vllmtritonが必要です。

ローカルでの利用

  1. 依存関係のインストール:
    pip install transformers
    
  2. モデルのロードと実行:
    from transformers import AutoModelForCausalLM, AutoTokenizer
    
    device = "cuda" # または "cpu"
    tokenizer = AutoTokenizer.from_pretrained("jinaai/ReaderLM-v2")
    model = AutoModelForCausalLM.from_pretrained("jinaai/ReaderLM-v2").to(device)
    
  3. (オプション) HTMLの事前クリーンアップ: 提供されているPython関数を使うと、スクリプト、スタイル、コメント、メタタグを削除したり、base64画像やSVGを処理したりできます。
    import re
    
    # ... (元のテキストで提供されているクリーニング関数)
    
    def clean_html(html: str, clean_svg: bool = False, clean_base64: bool = False):
        # ... (元のテキストで提供されている実装)
        pass
    
  4. プロンプトの作成:
    def create_prompt(
        text: str, tokenizer=None, instruction: str = None, schema: str = None
    ) -> str:
        # ... (元のテキストで提供されている実装)
        pass
    
  5. HTMLからMarkdownへの変換例:
    html = "<html><body><h1>Hello, world!</h1></body></html>"
    html = clean_html(html)
    input_prompt = create_prompt(html, tokenizer=tokenizer)
    inputs = tokenizer.encode(input_prompt, return_tensors="pt").to(device)
    outputs = model.generate(
        inputs, max_new_tokens=1024, temperature=0, do_sample=False, repetition_penalty=1.08
    )
    print(tokenizer.decode(outputs[0]))
    
  6. HTMLからJSONへの変換例:
    schema = """
    {
    "type": "object",
    "properties": {
    "title": {
    "type": "string"
    },
    ... (スキーマの全体は元のテキストを参照)
    }
    """
    html = clean_html(html)
    input_prompt = create_prompt(html, tokenizer=tokenizer, schema=schema)
    inputs = tokenizer.encode(input_prompt, return_tensors="pt").to(device)
    outputs = model.generate(
        inputs, max_new_tokens=1024, temperature=0, do_sample=False, repetition_penalty=1.08
    )
    print(tokenizer.decode(outputs[0]))
    

主な特徴

  • 生のHTMLをMarkdownまたはJSONに変換します。
  • 29言語に対応しています。
  • 最大512Kトークン(入出力合計)を処理できます。
  • 複雑なMarkdown要素(コードフェンス、ネストされたリスト、テーブル、LaTeX)を生成します。
  • 事前定義されたスキーマを使用して直接JSONを出力します。
  • 長尺のシーケンス生成における安定性が向上しました。
  • HTMLからMarkdownへの変換において、より大規模なモデルを上回る性能を発揮します(ROUGE-L: 0.84, Levenshtein距離: 0.22, Jaro-Winkler類似度: 0.82)。
  • HTMLからJSONへの変換においても競争力のある性能を示します(F1スコア: 0.81, 精度: 0.82, 再現率: 0.81, パスレート: 0.98)。
  • コンテンツの整合性(39/50)、構造の正確性(35/50)、フォーマット遵守(36/50)において高い定性的評価を得ています。

対象ユーザー

  • 開発者
  • データサイエンティスト
  • 研究者
  • HTMLから構造化されたコンテンツやMarkdown形式のコンテンツを解析・抽出する必要がある個人または組織。

プロジェクトリンク

アプリケーションシナリオ

  • コンテンツ抽出: サマリー作成、分析、アーカイブのためにウェブページから主要なコンテンツを抽出します。
  • データ構造化: 非構造化HTMLデータをデータベースへの取り込みやAPI消費のために構造化されたJSON形式に変換します。
  • ウェブスクレイピング: ウェブサイトからのデータ収集の効率と精度を向上させます。
  • ナレッジベース構築: 様々なウェブコンテンツを一貫性のあるMarkdownに変換し、ナレッジマネジメントシステムに利用します。
  • テキスト処理パイプライン: HTMLをLLM(大規模言語モデル)にとって扱いやすい形式に変換することで、LLMの前処理ステップとして機能します。

この記事を共有