ドキュメントを構造化するのは難しいので、Azure AI Document Intelligence にお願いする。

# ドキュメント解析の難しさ = 構造化されていないものが多い
- 構造化されてはいないが、見た目で伝えているドキュメントが多数
   - ex. 方眼紙、キャンバスとして利用されていエクエル、パワーポイントファイル
   - ex. 矢印オブジェクトで構成される業務フロー図
- 図やテーブルデータが画像で貼られている
- PDFファイルだが、画像がPDFとして閉じられているだけ

-> 人間向けに作られているのであれば、外見から解析するアプローチが有効

# 今日におけるドキュメントの構造化の重要性
RAG パターンが活用されるシーンが増えており、LLMが理解できる構造になっていることが重要です。

# Azure AI Document Intelligence layout model について

API経由でPDF、画像、HTML、MSオフィス系ファイルのレイアウト解析してくれる。

https://learn.microsoft.com/ja-jp/azure/ai-services/document-intelligence/concept-layout?view=doc-intel-4.0.0&tabs=sample-code#document-layout-analysis

以下は公式の解析イメージです。

![](https://learn.microsoft.com/ja-jp/azure/ai-services/document-intelligence/media/document-layout-example-new.png?view=doc-intel-4.0.0)

- 価格
   - Layout mdel だと $10 per 1,000 pages なので、コストはそれなり💸💸
   - https://azure.microsoft.com/en-us/pricing/details/ai-document-intelligence/
- LangChain plugin もあるらしい
   - > Azure AI Document Intelligence は、ドキュメント ローダーの 1 つとして、LangChain と統合されました
   - https://python.langchain.com/docs/integrations/document_loaders/azure_document_intelligence/
- markdown 変換機能が存在
   - マークダウンでの出力のサポート
- 見た目から特定の項目をクエリーする機能がある
   - 領収書の請求金額をクエリーするとかできる
- 機能リリースの変遷はここから
    - https://learn.microsoft.com/ja-jp/azure/ai-services/document-intelligence/whats-new?view=doc-intel-4.0.0&tabs=csharp



:::note warn
注意点
プレビュー機能は利用できるリージョンに制限あり。
無料レベルに様々な機能制限あり。
:::


# 試してみる

様々な様式を持つドキュメントでどの程度構造化できているか、図を抜き出せているかを試してみる。

API version: 2024-07-31 (Preview)

## PDF の認識結果
AI 事業者ガイドライン（第 1.0 版）本編
https://www.meti.go.jp/shingikai/mono_info_service/ai_shakai_jisso/20240419_report.html
https://www.meti.go.jp/shingikai/mono_info_service/ai_shakai_jisso/pdf/20240419_1.pdf

- ![スクリーンショット 2024-09-20 7.49.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/cff01039-ec9b-3241-90e9-d1c6c5e60717.png)
    - Title が認識できなかったのが残念
- ![スクリーンショット 2024-09-20 7.51.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/3f51ad2d-0465-ff7e-0695-d0bbc9022edb.png)
    - table化されているのが良い
- ![スクリーンショット 2024-09-20 7.54.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/26b36976-ff0b-0678-35a2-47c185b36334.png)
    - パラグラフ分けはまずまず。囲った部分が1つのパラグラフになっていたらよりよかった。
- ![スクリーンショット 2024-09-20 8.01.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/5dd3650c-d1d4-af18-5e2a-0288ed214da5.png)
    - Figure とキャプションが認識されているのが最高。
- ![スクリーンショット 2024-09-20 8.03.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/86658579-5433-e7a5-85c9-b282b1106df9.png)
    - Figure として認識された範囲の文字も扱えるのが用途に応じて使い分けることができそう。
- ![スクリーンショット 2024-09-20 8.04.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/d5a4aaba-1ffc-f7ee-bc16-2b2801696c12.png)
    - footnote もok。
- ![スクリーンショット 2024-09-20 8.12.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/6b69f99a-c141-5655-4e20-564e9d08756b.png)
- ![スクリーンショット 2024-09-20 8.12.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/96808da3-03d2-f8a9-961e-d87fd1f257ae.png)
    - フローの図や、テーブルっぽい図が認識されているのが最高。
- ![スクリーンショット 2024-09-20 8.38.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/b51ee8b0-64d2-03ba-0c16-cffe9a069f57.png)
    - インデントされた構造だとセクションヘッダーとして認識された。

## パワーポイント の認識結果
AI 事業者ガイドライン（第 1.0 版）概要
https://www.meti.go.jp/shingikai/mono_info_service/ai_shakai_jisso/pdf/20240419_2.pdf

- ![スクリーンショット 2024-09-20 8.29.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/be4908eb-2e6f-b323-610c-fa23fe84795a.png)
    - Title が認識できなかったのが残念
- ![スクリーンショット 2024-09-20 8.34.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/ced4da6a-7f2c-4472-8007-5a697d584d2c.png)
    - 情報量が多い中、幸いTitleを認識してくれている
    - 箇条書き1つ1つがパラグラフになっているのが残念(まとめてパラグラフにして欲しい)
- ![スクリーンショット 2024-09-20 8.43.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/38b4e137-8f93-dc40-9d46-2d131b8b2ab6.png)
    - こちらは図の範囲は少し惜しい
- ![スクリーンショット 2024-09-20 8.49.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/04626109-6393-3407-63ae-891a08ee731c.png)
    - こちらは図の範囲がばっちり

# 上記２ファイルとそれ以外にも試した結果のまとめ
- 文字認識は間違いがない
- 論文のような形式だと認識が安定する
- 日本語論文より英語論文の方が認識が安定する
- Titleを認識が不安定
- 図の認識範囲が安定している
- 箇条書きがパラグラフにまとまってくれないことが多い
- ドキュメント全体で H2タグのレベル感が揃っていないものがある
   - (元文章が揃ってない可能性もある)
- 稀に漢字がfigureやsectionに間違われる


# 追加実験。 抽出した Figure を ChatGPT に説明させる

図の中に含まれる文字も認識されていましたが、図の内容が伝わる構造になっていた方が良いはずです。Document Intelligence による分析 -> 図の抽出 -> 図をChatGPTに説明させる -> 説明をキャプションや図の説明として分析結果に埋め込む というリレーも考えられます。

```mermaid
graph TD;
    A[Document Intelligenceによる分析] --> B[図の抽出]
    B --> C[図をChatGPTに説明させる]
    C --> D[説明をキャプションや図の説明として分析結果に埋め込む]
```

以下はAI事業者ガイドラインから抜き出した、図です。ChatGPT 4o に説明させてみました。

![AI 事業者ガイドライン概要-figures-6.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/345a4c09-7c46-45af-60a0-aee71ded321a.png)

![スクリーンショット 2024-09-20 10.09.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110482/8b9cf116-0527-ac79-f79d-12740ed34bdb.png)

中身を上手く説明している出力ができました。
図に添えた場合に、効果があるかもしれません。


# 結論
全人類 Markdown で構造化したドキュメントを書いてください!
フローやグラフは Mermaid みたいな DSL で書いてください!