DocumentAIを使ってみた

2024.04.09

はじめに

クラスメソッド株式会社 新規事業部のレオナです。

LLMの説明

近年、ChatGPTを代表にAI⾔語モデル(Large Language Model:以下、LLM)が⾃然⾔語処理の分野で広く使われるようになってきました。LLMは、⼤量のテキストデータを学習することで、⼈間のような⾃然な⽂章を⽣成することができます。

QAチャットbot(RAG)

LLMを使ったチャットボットを構築することで効率化できたという事例が出てきています。通常、LLMは学習中に得た情報をもとに質問に回答しますが、公開されていない社内情報について回答できないことがあります。

この問題を解決する⽅法の1つとして、Retrieval Augmented Generation(以下、RAG)という⼿法があります。

RAGは、外部知識ベースからの検索(Retrieval)とLLMによる回答⽣成を組み合わせたフレームワークです。外部知識ベースから関連情報を検索することで、社内ドキュメントの情報に基づいた回答が可能になります。

CM内の運用方法

概要

クラスメソッド社内では、QAチャットボットを活用して社内情報に対する問い合わせを自動化しています。このチャットボットは、Google CloudのVertex AI(旧:Enterprise Search)とRetrieveReadCompose(RAG)方式を組み合わせて構築されており、社内の様々なデータベースやドキュメントに簡単かつ迅速にアクセスすることが可能です。

クラスメソッド社内で運⽤しているQAチャットボットの構成や詳細については以下の記事をご確認ください。
Google Cloud Enterprise SearchとRetrieveReadCompose方式RAGを利用して社内公式情報を全部質問できるようにしてみた

運用時の課題

一般的にエンタープライズ検索サービス(Amazon Kendra・Azure AI Searh・Vertex AI search)を使う時、既存のドキュメントを検索用インデックスにインポートします。このインポートでは、ファイルがに何らかの前処理がされ、テキストとして読み込まれます。「ドキュメントが意図しない読み込まれ方になってしまう」という問題があります。

例えば、PDFファイルでは、ページ数やフッターが本文テキストの間に入り込んだり、テーブルデータの読み込まれ方が1行ずつ読み込まれてないことがあります。

RAGの実案件に取り組んできた今までの知見をまとめてみた 方針3-2-1:テキストの取り出し方を改良するより

今回やったこと

様々なフォーマットのドキュメントが文字起こしするためにDocument AIが活用できるか試してみます。RAGの知識ベースとなるドキュメントの前処理として扱います。

DocumentAIを使い、PDFとPNGフォーマットの文書を人間が読むような形のテキストに起こせるか実験しました。以下の2点のデータ用いて実験を行いました。

  • PDFの文字取得
  • 表データの取得

Document AIの説明

Google CloudのDocument AIは、機械学習を活用して文書や画像などから情報を自動的に抽出、解析するためのクラウドサービスです。

Document AI documentationより

以下の公式サイトで、20MBまでのファイルをアップロードして Document AI を簡易的に試すことができます。

Try Document AI

対応フォーマットは以下通りになります

  • PDF
  • GIF
  • TIFF
  • JPEG
  • PNG
  • BMP
  • WebP

プロセッサーの種類

Document AI において、テキストの抽出やドキュメントの分類、解析等を実行するコンポーネントをプロセッサーと呼ばれます。特定のタスクをするためにはプロセッサーの作成が必要になります。

今回はEnterprise Document OCRとForm Parserを使います。ローカルのPythonで実行できるプログラムを作成しました。

DocumentAIを使うためのWEB上での操作

Enable the APIにアクセスしてください。Enable the API ボタンをクリック。

画面遷移後、有効にするボタンをクリック。


サービスアカウントを有効にする。
サービスアカウントについては以下をご覧ください。
Google Cloud:サービスアカウントの概要をわかりやすくまとめた

Go to Create service accountボタンをクリック

プロジェクトの選択をする

任意のサービスアカウント名を入力後、完了ボタンをクリック。

ロールの選択(documentAI)。完了ボタンをクリック。

作成したサービスアカウントをクリック。

鍵の追加のプルダウンをクリック。ご自身の方法で鍵の作成してください。私は新しい鍵をjsonで作成しました。

Pythonで実装

サポートされているバージョンはPython >= 3.7です。

Python Client for Document AIより

ライブラリインストール

pip install --upgrade google-cloud-documentai

プロセッサー作成

from google.api_core.client_options import ClientOptions
from google.cloud import documentai  # type: ignore
import os

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "作成した鍵が配置してあるディレクトリを書いてください"

def create_processor_sample(
    project_id: str, location: str, processor_display_name: str, processor_type: str
) -> None:
    opts = ClientOptions(api_endpoint=f"{location}-documentai.googleapis.com")

    client = documentai.DocumentProcessorServiceClient(client_options=opts)

    parent = client.common_location_path(project_id, location)

    processor = client.create_processor(
        parent=parent,
        processor=documentai.Processor(
            display_name=processor_display_name, type_=processor_type
        ),
    )

    print(f"Processor Name: {processor.name}")
    print(f"Processor Display Name: {processor.display_name}")
    print(f"Processor Type: {processor.type_}")
    parts = processor.name.split('/')
    extracted_project_id = parts[1]
    extracted_processor_id = parts[5]
    print(f"Project ID: {extracted_project_id}")
    print(f"Processor ID: {extracted_processor_id}")

# プロセッサの作成と情報の表示を実行
create_processor_sample("自分のプロジェクトID", "usかeu", "好きなプロセッサーの名前を書いてください", "使用するプロセッサー")

実行例

create_processor_sample("reona", "us", "TestProcessorsOCR", "OCR_PROCESSOR")
Processor Name: projects/000000000001/locations/us/processors/hogehoge
Processor Display Name: TestProcessorsOCR
Processor Type: OCR_PROCESSOR
Project ID: 000000000001
Processor ID: hogehoge

OCR_PROCESSORだとEnterprise Document OCR

FORM_PARSER_PROCESSORだとForm Parserになります。

作ったプロセッサーの確認方法

マイプロセッサのページにあります。

出力するPythonコードの作成

Use Enterprise Document OCR to process documentsより

from typing import Optional, Sequence
from google.api_core.client_options import ClientOptions
from google.cloud import documentai
import os

# 環境変数の設定
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/Users/sato.reona/dev/pdf_OCR/sato-reona-2c0805490482.json"

# プロジェクト情報
project_id = "000000000001"
location = "us" # "us" or "eu"
processor_id = "hogehoge" 
processor_version = "pretrained-ocr-v2.0-2023-06-02" # 他のモデルのバージョンはhttps://cloud.google.com/document-ai/docs/enterprise-document-ocr#processor_versions
file_path = "test_data/test003.pdf"
mime_type = "application/pdf" # ファイルタイプ pngならimage/png"

def process_document_ocr_sample(
    project_id: str,
    location: str,
    processor_id: str,
    processor_version: str,
    file_path: str,
    mime_type: str,
) -> None:
    process_options = documentai.ProcessOptions(
        ocr_config=documentai.OcrConfig(
            enable_native_pdf_parsing=True,
            enable_image_quality_scores=True,
            enable_symbol=True,
            premium_features=documentai.OcrConfig.PremiumFeatures(
                compute_style_info=True,
                enable_math_ocr=False,  
                enable_selection_mark_detection=True,
            ),
        )
    )
    document = process_document(
        project_id,
        location,
        processor_id,
        processor_version,
        file_path,
        mime_type,
        process_options=process_options,
    )

    text = document.text
    print(f"全てのドキュメントのテキスト: {text}\n")

def process_document(
    project_id: str,
    location: str,
    processor_id: str,
    processor_version: str,
    file_path: str,
    mime_type: str,
    process_options: Optional[documentai.ProcessOptions] = None,
) -> documentai.Document:
    client = documentai.DocumentProcessorServiceClient(
        client_options=ClientOptions(
            api_endpoint=f"{location}-documentai.googleapis.com"
        )
    )
    name = client.processor_version_path(
        project_id, location, processor_id, processor_version
    )

    with open(file_path, "rb") as image:
        image_content = image.read()

    request = documentai.ProcessRequest(
        name=name,
        raw_document=documentai.RawDocument(content=image_content, mime_type=mime_type),
        process_options=process_options,
    )

    result = client.process_document(request=request)
    return result.document

# 実行例
process_document_ocr_sample(
    project_id, location, processor_id, processor_version, file_path, mime_type
)

Process a document using a Form Parser processor Code sampleより

Form Parser

<br />from typing import Optional, Sequence
from google.api_core.client_options import ClientOptions
from google.cloud import documentai
import os

# 環境変数の設定
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "作成した新しい鍵のパス"

# プロジェクト情報
project_id = "000000000002"
location = "us"  # "us" or "eu"
processor_id = "fugafuga" 
processor_version = "rc"
file_path = "test_data/test003.png"
mime_type = "image/png"  # ファイルタイプ  pdfならapplication/pdf"

def process_document(
    project_id: str,
    location: str,
    processor_id: str,
    processor_version: str,
    file_path: str,
    mime_type: str,
    process_options: Optional[documentai.ProcessOptions] = None,
) -> documentai.Document:
    """
    ドキュメントを処理してDocument AI Documentオブジェクトを返す。
    """
    client = documentai.DocumentProcessorServiceClient(
        client_options=ClientOptions(api_endpoint=f"{location}-documentai.googleapis.com")
    )
    name = client.processor_version_path(project_id, location, processor_id, processor_version)

    with open(file_path, "rb") as image:
        image_content = image.read()

    request = documentai.ProcessRequest(
        name=name,
        raw_document=documentai.RawDocument(content=image_content, mime_type=mime_type),
        process_options=process_options,
    )

    result = client.process_document(request=request)
    return result.document

def print_table_rows(
    table_rows: Sequence[documentai.Document.Page.Table.TableRow], text: str
) -> None:
    """
    テーブルの行を出力する。
    """
    for table_row in table_rows:
        row_text = ""
        for cell in table_row.cells:
            cell_text = layout_to_text(cell.layout, text)
            row_text += f"{repr(cell_text.strip())} | "
        print(row_text)

def print_tables_only(
    document: documentai.Document,
    print_columns: bool = True,
    print_body: bool = True,
) -> None:
    """
    ドキュメントからテーブル情報のみを出力する。
    """
    for page in document.pages:
        if len(page.tables) > 0:
            print(f"\n\n**** Page {page.page_number} ****")
            print(f"Found {len(page.tables)} table(s):")

        for table in page.tables:
            num_columns = len(table.header_rows[0].cells) if table.header_rows else 0
            num_rows = sum(len(row.cells) for row in table.body_rows)
            print(f"Table with {num_columns} columns and {num_rows} rows:")

            if print_columns and table.header_rows:
                print("Columns:")
                print_table_rows(table.header_rows, document.text)

            if print_body:
                print("Table body data:")
                print_table_rows(table.body_rows, document.text)

def layout_to_text(layout: documentai.Document.Page.Layout, text: str) -> str:
    """
    レイアウトからテキストを取得する。
    """
    return "".join(
        text[int(segment.start_index):int(segment.end_index)] for segment in layout.text_anchor.text_segments
    )

def process_and_print_tables_only(
    project_id: str,
    location: str,
    processor_id: str,
    processor_version: str,
    file_path: str,
    mime_type: str,
    print_columns: bool = True,
    print_body: bool = True,
) -> None:
    """
    ドキュメント処理を行い、テーブル情報のみを出力する。
    """
    document = process_document(
        project_id, location, processor_id, processor_version, file_path, mime_type
    )
    print_tables_only(document, print_columns, print_body)

# 実行例
process_and_print_tables_only(
    project_id, location, processor_id, processor_version, file_path, mime_type
)

出力結果(OCR)

画像サイズは以下のものを試しました。

test001 PDFと2000 × 1500.png

https://www.fsa.go.jp/policy/ap2022_fsa.pdfより

  • test001
    • png
      • 結果
        ocr_test.py
        Document Text:
        「新しい資本主義のグランドデザイン及び実行計画・フォローアップ (2022年)」(令和4年6月7日閣議決定)
        における金融庁関連の主要施策
        Ⅲ. 新しい資本主義に向けた計画的な重点投資
        ⅣV. 社会的課題を解決する経済社会システムの構築
        1. 人への投資と分配
        貯蓄から投資のための「資産所得倍増プラン」の策定
        ● 人的資本や多様性確保等の非財務情報開示の強化
        3.スタートアップの起業加速及びオープンイノベーションの推進
        スタートアップ育成5か年計画の策定
        √ 個人金融資産等のスタートアップ投資への循環
        ✓ 個人保証を徴求しない創業融資の促進
        √ IPO(新規株式公開) プロセスの改革実行とSPACの検討
        ✓ 未上場株のセカンダリーマーケットの整備(取引所外の私
        設取引システムの取扱商品に非上場株式等を追加)
        既存企業の新たな付加価値を創造する視点への転換や、既
        存企業によるオープンイノベーションの後押し
        M&Aを目的とする公募増資の円滑化に向けた見直し
        4.GX (グリーン・トランスフォーメーション) 等への投資
        グリーン、トランジション等の金融手法の活用に向けた
        市場基盤の整備
        ✓ 企業の情報開示の充実
        ✓ ESG評価機関の信頼性向上 (行動規範の策定等)
        ESG投資データの集約・流通のための情報基盤整備 等
        4. インパクト投資の推進
        ソーシャルボンドガイドラインの充実(社会的課題ごとに、
        発行主体の参考となる指標の例を示す)
        V. 経済社会の多極集中化
        2. 一極集中管理の仮想空間から多極化された仮想空間へ
        Fintechの推進
        ✓ セキュリティトークンのセカンダリー取引に関する制度整
        備 (私設取引システムの取扱商品に追加)
        暗号資産交換業者に係る審査基準の緩和
        √
        ✓ 暗号資産の該当要否の明確化
        VI. 個別分野の取組
        4. 金融市場の整備
        法令上の四半期報告を廃止し、取引所の四半期短信に
        「一本化」
        国際金融センターの実現
        ●銀行によるデジタル化や地方創生等への貢献の促進
        銀証ファイアーウォール規制の見直しに向けた検討
        金融機関の取組を通じた貯蓄から投資の促進 (顧客ニー
        ズに適した金融商品の提供や、 適切なアドバイス・情報提
        供の促進)
        不動産担保・経営者保証によらない、 事業全体に対する
        担保権の早期制度化ocr_test.py
        Document Text:
        「新しい資本主義のグランドデザイン及び実行計画・フォローアップ (2022年)」(令和4年6月7日閣議決定)
        における金融庁関連の主要施策
        Ⅲ. 新しい資本主義に向けた計画的な重点投資
        ⅣV. 社会的課題を解決する経済社会システムの構築
        1. 人への投資と分配
        貯蓄から投資のための「資産所得倍増プラン」の策定
        ● 人的資本や多様性確保等の非財務情報開示の強化
        3.スタートアップの起業加速及びオープンイノベーションの推進
        スタートアップ育成5か年計画の策定
        √ 個人金融資産等のスタートアップ投資への循環
        ✓ 個人保証を徴求しない創業融資の促進
        √ IPO(新規株式公開) プロセスの改革実行とSPACの検討
        ✓ 未上場株のセカンダリーマーケットの整備(取引所外の私
        設取引システムの取扱商品に非上場株式等を追加)
        既存企業の新たな付加価値を創造する視点への転換や、既
        存企業によるオープンイノベーションの後押し
        M&Aを目的とする公募増資の円滑化に向けた見直し
        4.GX (グリーン・トランスフォーメーション) 等への投資
        グリーン、トランジション等の金融手法の活用に向けた
        市場基盤の整備
        ✓ 企業の情報開示の充実
        ✓ ESG評価機関の信頼性向上 (行動規範の策定等)
        ESG投資データの集約・流通のための情報基盤整備 等
        4. インパクト投資の推進
        ソーシャルボンドガイドラインの充実(社会的課題ごとに、
        発行主体の参考となる指標の例を示す)
        V. 経済社会の多極集中化
        2. 一極集中管理の仮想空間から多極化された仮想空間へ
        Fintechの推進
        ✓ セキュリティトークンのセカンダリー取引に関する制度整
        備 (私設取引システムの取扱商品に追加)
        暗号資産交換業者に係る審査基準の緩和
        √
        ✓ 暗号資産の該当要否の明確化
        VI. 個別分野の取組
        4. 金融市場の整備
        法令上の四半期報告を廃止し、取引所の四半期短信に
        「一本化」
        国際金融センターの実現
        ●銀行によるデジタル化や地方創生等への貢献の促進
        銀証ファイアーウォール規制の見直しに向けた検討
        金融機関の取組を通じた貯蓄から投資の促進 (顧客ニー
        ズに適した金融商品の提供や、 適切なアドバイス・情報提
        供の促進)
        不動産担保・経営者保証によらない、 事業全体に対する
        担保権の早期制度化
    • pdf
      • 結果
        Document Text:
        「新しい資本主義のグランドデザイン及び実行計画・フォローアップ (2022年)」 (令和4年6月7日閣議決定)
        における金融庁関連の主要施策
        Ⅲ. 新しい資本主義に向けた計画的な重点投資
        1.人への投資と分配
        ● 貯蓄から投資のための 「資産所得倍増プラン」の策定
        人的資本や多様性確保等の非財務情報開示の強化
        |3. スタートアップの起業加速及びオープンイノベーションの推進
        ● スタートアップ育成5か年計画の策定
        √ 個人金融資産等のスタートアップ投資への循環
        ✓ 個人保証を徴求しない創業融資の促進
        √ IPO(新規株式公開) プロセスの改革実行とSPACの検討
        ✓ 未上場株のセカンダリーマーケットの整備(取引所外の私
        設取引システムの取扱商品に非上場株式等を追加)
        ● 既存企業の新たな付加価値を創造する視点への転換や、 既
        存企業によるオープンイノベーションの後押し
        √M&Aを目的とする公募増資の円滑化に向けた見直し
        4.GX (グリーン・トランスフォーメーション) 等への投資
        ●グリーン、トランジション等の金融手法の活用に向けた
        市場基盤の整備
        ✓ 企業の情報開示の充実
        √ ESG評価機関の信頼性向上 (行動規範の策定等)
        √ ESG投資データの集約・流通のための情報基盤整備等
        IV. 社会的課題を解決する経済社会システムの構築
        4. インパクト投資の推進
        ●ソーシャルボンドガイドラインの充実(社会的課題ごとに、
        発行主体の参考となる指標の例を示す)
        V. 経済社会の多極集中化
        2. 一極集中管理の仮想空間から多極化された仮想空間へ
        Fintechの推進
        ▼セキュリティトークンのセカンダリー取引に関する制度整
        備 (私設取引システムの取扱商品に追加)
        √
        暗号資産交換業者に係る審査基準の緩和
        ▼ 暗号資産の該当要否の明確化
        VI. 個別分野の取組
        4. 金融市場の整備
        ● 法令上の四半期報告を廃止し、 取引所の四半期短信に
        「一本化」
        ●国際金融センターの実現
        銀行によるデジタル化や地方創生等への貢献の促進
        ●銀証ファイアーウォール規制の見直しに向けた検討
        ● 金融機関の取組を通じた貯蓄から投資の促進 (顧客ニー
        ズに適した金融商品の提供や、 適切なアドバイス・情報提
        供の促進)
        ● 不動産担保・ 経営者保証によらない、 事業全体に対する
        担保権の早期制度化

test002PDFと2167 × 1500 .png(pptxをpdfに変換しました。)

https://www.fsa.go.jp/policy/chuukai/0330gyosyubetu_00-1.pptxより 79ページ目

  • test002
    • png
      • 結果
        nvs/test_run/bin/python /Users/sato.reona/dev/pdf_OCR/kkk.py
        Full document text: 本書における用語集 その1
        ※ 本書における用語の意味等を解説したものです
        用語
        意味
        (五十音順)
        現場代理人
        請負契約の的確な履行を確保するため、 工事現場の運営や取締りを行うほか、工事
        請負契約の的確な履行を確保するため、 工事現場の運営や取締りを行うほか、工事 の施工及び契約関係事務に関する一切の
        事項(請負代金の変更や契約解除等を除く)を行使することができる者
        再チャレンジ支援
        中小企業活性化協議会の支援の一つで、収益力の改善や事業再生等が極めて困難な中
        中小企業活性化協議会の支援の一つで、収益力の改善や事業再生等が極めて困難な中小企業や保証債務に悩む経営者等を
        対象に、 弁護士等の外部専門家の紹介や経営者等の再スタートのための支援を実施
        対象に、 弁護士等の外部専門家の紹介や経営者等の再スタートのための支援を実施 する施策
        実行予算
        私的整理
        施工管理技士
        第二会社方式
        DES
        DDS
        DIPファイナンス
        詳細施工計画を金額に置き換えたもので、 原価管理における物差しであり、一般的
        詳細施工計画を金額に置き換えたもので、 原価管理における物差しであり、一般的 に、現場の諸条件をよく熟知し、 工事を
        直接担当する工事現場の作業所長(現場代理人)によって実行予算を作成する場合が多
        直接担当する工事現場の作業所長(現場代理人)によって実行予算を作成する場合が多い
        法的な倒産手続きを用いずに、当事者との合意に基づいて債務の整理を行うこと
        安全管理やスケジュール管理・品質の管理等、 担当する施工全体を取りまとめる仕
        安全管理やスケジュール管理・品質の管理等、 担当する施工全体を取りまとめる仕 事であり、 施工管理技士の種類は、建築施工
        管理技士 土木施工管理技士・管工事施工管理技士・造園施工管理技士・電気工事施
        管理技士 土木施工管理技士・管工事施工管理技士・造園施工管理技士・電気工事施 工管理技士・電気通信施工管理技士・
        |建設機械施工技士の七つがある
        過剰債務を抱えて経営難に陥っている会社から事業継続に必要な経営資源だけを会社
        過剰債務を抱えて経営難に陥っている会社から事業継続に必要な経営資源だけを会社分割や事業譲渡によって新会社(第二会社)
        へ分離することで優良事業の存続を図り、不採算事業・過剰債務とともに残された旧
        へ分離することで優良事業の存続を図り、不採算事業・過剰債務とともに残された旧会社を清算するなどの事業再生手法
        「Debt Equity Swap」の略称、既存の借入金の一部を株式に切り換える手法
        「Debt Debt Swap」 の略称、既存の借入金の一部を資本性借入金に切り換える手法
        「Debtor in Possession Finance」 の略称、 再建型の法的手続きや私的整理手続き
        「Debtor in Possession Finance」 の略称、 再建型の法的手続きや私的整理手続き中の過大な債務を抱える企業に対して、 資
        金繰りの維持等の目的で金融機関が新規の融資をすること
        1
    • pdf
      • 結果
        Full document text: 本書における用語集その1
        ※ 本書における用語の意味等を解説したものです
        用語
        意味
        (五十音順)
        現場代理人
        請負契約の的確な履行を確保するため、工事現場の運営や取締りを行うほか、工事の施工及び契約関係事務に関する一切の
        事項(請負代金の変更や契約解除等を除く)を行使することができる者
        再チャレンジ支援
        中小企業活性化協議会の支援の一つで、収益力の改善や事業再生等が極めて困難な中小企業や保証債務に悩む経営者等を
        対象に、弁護士等の外部専門家の紹介や経営者等の再スタートのための支援を実施する施策
        実行予算
        私的整理
        施工管理技士
        第二会社方式
        DES
        DDS
        DIPファイナンス
        詳細施工計画を金額に置き換えたもので、原価管理における物差しであり、一般的に、現場の諸条件をよく熟知し、工事を
        直接担当する工事現場の作業所長(現場代理人)によって実行予算を作成する場合が多い
        法的な倒産手続きを用いずに、当事者との合意に基づいて債務の整理を行うこと
        安全管理やスケジュール管理・品質の管理等、担当する施工全体を取りまとめる仕事であり、施工管理技士の種類は、建築施工
        管理技士・土木施工管理技士・管工事施工管理技士・造園施工管理技士・電気工事施工管理技士・電気通信施工管理技士・
        建設機械施工技士の七つがある
        過剰債務を抱えて経営難に陥っている会社から事業継続に必要な経営資源だけを会社分割や事業譲渡によって新会社(第二会社)
        へ分離することで優良事業の存続を図り、不採算事業・過剰債務とともに残された旧会社を清算するなどの事業再生手法
        「Debt Equity Swap」の略称、既存の借入金の一部を株式に切り換える手法
        「Debt Debt Swap」の略称、既存の借入金の一部を資本性借入金に切り換える手法
        「Debtor in Possession Finance」の略称、再建型の法的手続きや私的整理手続き中の過大な債務を抱える企業に対して、資
        金繰りの維持等の目的で金融機関が新規の融資をすること
        1
        |
        |

出力結果(form)

  • test002
    • png
      • 結果
        用語(五十音順) 意味
        現場代理人 請負契約の的確な履行を確保するため、工事現場の運営や取締りを行うほか、工事の施工及び契約関係事務に関する事項(請負代金の変更や契約解除等を除く)を行使することができる者
        再チャレンジ支援 中小企業活性化協議会の支援の一つで、収益力の改善や事業再生等が極めて困難な中小企業や保証債務に悩む経営対象に、弁護士等の外部専門家の紹介や経営者等の再スタートのための支援を実施する施策
        実行予算 詳細施工計画を金額に置き換えたもので、原価管理における物差しであり、一般的に、現場の諸条件をよく熟知し、直接担当する工事現場の作業所長(現場代理人)によって実行予算を作成する場合が多い
        私的整理 法的な倒産手続きを用いずに、当事者との合意に基づいて債務の整理を行うこと
        施工管理技士 安全管理やスケジュール管理・品質の管理等、担当する施工全体を取りまとめる仕事であり、施工管理技士の種類は、管理技士・土木施工管理技士・管工事施工管理技士・造園施工管理技士・電気工事施工管理技士・電気通信施工管理建設機械施工技士の七つがある
        第二会社方式 過剰債務を抱えて経営難に陥っている会社から事業継続に必要な経営資源だけを会社分割や事業譲渡によって新会社(第二へ分離することで優良事業の存続を図り、不採算事業・過剰債務とともに残された旧会社を清算するなどの事業再生手法
        DES 「Debt Equity Swap」の略称、既存の借入金の一部を株式に切り換える手法
        DDS 「Debt Debt Swap」の略称、既存の借入金の一部を資本性借入金に切り換える手法
        DIPファイナンス 「Debtor in Possession Finance」の略称、再建型の法的手続きや私的整理手続き中の過大な債務を抱える企業に対して金繰りの維持等の目的で金融機関が新規の融資をすること
    • pdf
      • 結果
        用語(五十音順) 意味
        現場代理人 請負契約の的確な履行を確保するため、工事現場の運営や取締りを行うほか、工事の施工及び契約関係事務に関する事項(請負代金の変更や契約解除等を除く)を行使することができる者
        再チャレンジ支援 中小企業活性化協議会の支援の一つで、収益力の改善や事業再生等が極めて困難な中小企業や保証債務に悩む経営対象に、弁護士等の外部専門家の紹介や経営者等の再スタートのための支援を実施する施策
        実行予算 詳細施工計画を金額に置き換えたもので、原価管理における物差しであり、一般的に、現場の諸条件をよく熟知し、直接担当する工事現場の作業所長(現場代理人)によって実行予算を作成する場合が多い
        私的整理 法的な倒産手続きを用いずに、当事者との合意に基づいて債務の整理を行うこと
        施工管理技士 安全管理やスケジュール管理・品質の管理等、担当する施工全体を取りまとめる仕事であり、施工管理技士の種類は、管理技士・土木施工管理技士・管工事施工管理技士・造園施工管理技士・電気工事施工管理技士・電気通信施工管理建設機械施工技士の七つがある
        第二会社方式 過剰債務を抱えて経営難に陥っている会社から事業継続に必要な経営資源だけを会社分割や事業譲渡によって新会社(第二へ分離することで優良事業の存続を図り、不採算事業・過剰債務とともに残された旧会社を清算するなどの事業再生手法
        DES 「Debt Equity Swap」の略称、既存の借入金の一部を株式に切り換える手法
        DDS 「Debt Debt Swap」の略称、既存の借入金の一部を資本性借入金に切り換える手法
        DIPファイナンス 「Debtor in Possession Finance」の略称、再建型の法的手続きや私的整理手続き中の過大な債務を抱える企業に対して金繰りの維持等の目的で金融機関が新規の融資をすること

分析(ocr)

OCR test001(png) test001(pdf) test002(png) test002(pdf)
読み取れたか × ⚪︎
理由 △・チェックが√になっている
△・シンボリックがない(文頭の⚫︎がない)
◎・人間が読む順番になっている
△・チェックが√になっている
△・シンボリックがない(文頭の⚫︎がない)
◎・人間が読む順番になっている
×・読み取りがうまくいかない
×・2重に読み取られている
△・ページ数が含まれている
△・人間が読む順番になっていない
△・ページ数が含まれている
△・シンボリックが検出されてしまった(文末)

文字のみのpngとpdfは人間が読む順番になっており、特に文章としておかしいところはありませんでした。読み取りがうまくいきました。

また表データの読み取りはpngだと、読み取りがうまくいかずに2重に文章が読み取られる結果になりました。

詳細施工計画を金額に置き換えたもので、 原価管理における物差しであり、一般的
詳細施工計画を金額に置き換えたもので、 原価管理における物差しであり、一般的 に、現場の諸条件をよく熟知し、 工事を

pdfに読み取りだと2重に文章が読み取られる問題ななくなりましたが、人間の読む順番になっていませんでした。

実際の出力

DES
DDS

期待していた出力

 DES 「Debt Equity Swap」の略称、既存の借入金の一部を株式に切り換える手法 
 DDS 「Debt Debt Swap」の略称、既存の借入金の一部を資本性借入金に切り換える手法

分析(form)

Form test002(png) test002(pdf)
合っているか ⚪︎ ⚪︎
コメント 色々と単語が抜けているところがある 色々と単語が抜けているところがある

parserは表データに対して読み取りが上手くいき、正確に1行ずつ読み取られている結果になりました。 文章を詳しく比較すると少し単語が抜けているケースが見られましたが、全体としてはで文字が正確に認識されていました。全体的に画像の右側部分の読み取りがうまくいきませんでした。

推測になってしまいますが、画像の読み取れる幅や範囲が決まっていると思います。 (補足:仕様では確認できませんでいした。

実際の出力

| 現場代理人 | 請負契約の的確な履行を確保するため、工事現場の運営や取締りを行うほか、工事の施工及び契約関係事務に関する事項(請負代金の変更や契約解除等を除く)を行使することができる者 |

期待していた出力

| 現場代理人 | 請負契約の的確な履行を確保するため、工事現場の運営や取締りを行うほか、工事の施工及び契約関係事務に関する一切の事項(請負代金の変更や契約解除等を除く)を行使することができる者 |

まとめ

今回の目的は、RAGの知識ベースとなるドキュメントの前処理にDocument AIが活用できるかを見極めることでした。その観点から見ると、今回の結果はかなり有望といえます。特にForm Parserは表形式のデータを正確に抽出できています。OCRはテキスト抽出に特化しており、こちらはマニュアルや議事録など非定型データの取り込みに役立ちます。

Document AIは、RAGのドキュメントに向けた前処理ツールとして使えると思います。

今後

  • pdfでForm ParserとOCRを組み合わせたものを作ってみる

料金体系

Document AI の料金

Enterprise Document OCR= 1-5,000,000ページあたり月$1.50

5,000,001ページ以上だと月$0.69

Form Parser=1-1,000,000ページあたり月$30

1,000,001ページ以上だと月$20

他のOCRについて

  • Azure AI Document Intelligence
    • (https://dev.classmethod.jp/articles/try-azure-ai-document-intelligence/)
    • (https://learn.microsoft.com/ja-jp/azure/ai-services/document-intelligence/concept-layout?view=doc-intel-4.0.0)
  • Claude3を使ったドキュメントの文字認識について
    • (https://dev.classmethod.jp/articles/simple-examination-on-recognizable-char-size-with-claude-3/)
    • (https://dev.classmethod.jp/articles/simple-examination-on-recognizable-char-size-with-claude-3/)
    • (https://dev.classmethod.jp/articles/simple-examination-on-recognizable-char-size-with-claude-3/)
  • GCP Vision AI (OCR)
    • (https://dev.classmethod.jp/articles/try-vision_text_detection_pdf/)
    • (https://dev.classmethod.jp/articles/using-document-ai-and-google-cloud-vision-api-for-ocr/)
    • (https://cloud.google.com/vision/docs/ocr?hl=ja)