Amazon Bedrock Knowledge Bases の新機能で PDF を読む

ナレッジベースのPDF解析に新機能が追加されたのでどう読めているのか確認していきます。

https://aws.amazon.com/jp/blogs/news/new-amazon-bedrock-capabilities-enhance-data-processing-and-retrieval/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/8446c8b7-6f33-4420-7cb0-90d6e7d2e0a1.png)

データオートメーションパーサーは手書きを含めたPDF等から構造化データに変換します。ホントに？

ファンデーションモデルパーサーは基盤モデルを使ってテキストと画像を含めた情報を元に処理を行う…と書いてあるような気がします。去年の夏頃から「Use foundation model for parsing」というパースモードがありましたが、あとで触れますがそれが機能強化されています。

# 使用するドキュメント

IPAのデジタルスキル標準のPDFを使用します。
データオートメーションパーサーの方は20ページまでしか使用できないので先頭20ページを切り出して使います。

https://www.ipa.go.jp/jinzai/skill-standard/dss/about_dss-p.html

# Amazon Bedrock データオートメーション パーサー

## 日本語ドキュメント

```:1ページ目
# ver.1.2

2024

IPA

*****

All Rights Reserved Copyright© IPA 2024

0
```
```:2ページ目
# Ein

## I.

- A

## II. DXU

	
1.	
2.	X
3.	
	a.
	b.

- 4. DXU-

## III. DX

- 1.
- 2. DX
- 3.
- a.
- b. -
- C.
- d.
- e.
- 4.
- 5. DX-

All Rights Reserved Convright© IPA 2024
```

読めてないですね。

## 英語ドキュメント

英語版もあるのでそちらを読ませてみます。

```:1ページ目
The Digital Skill Standards

ver.1.2

July 2024

Information-technology Promotion Agency, Japan

IPA

METI
 Ministry of Economy, Trade and Industry

All Rights Reserved Copyright© IPA 2024
```

```:2ページ目
# Contents

## I. Overview of the Digital Skill Standards

- Background and Aims of the Establishment of the Digital Skill Standards
- Approach to Revision of the Digital Skill Standards
- Structure of the Digital Skill Standards
- Human Resources for Whom the Digital Skill Standards Is Intended
- General Applicability of the Digital Skill Standards
- How the Digital Skill Standards Can Be Utilized

## II. Digital Skill Standards for DX Literacy (DSS-L)

- 1. Aim of the DSS-L and Formulation Policy
- 2. Structure of the DSS-L
- 3. Skills and Learning Subjects
- a. Overview
- b. Details
- 4. How the DSS-L Can Be Utilized

## III. Digital Skill Standards for DX Promotion (DSS-P)

- 1. Aim of the DSS-P and Formulation Policy
- 2. Structure of the DSS-P
- 3. Human Resource Types & Roles (Definitions of types, responsibilities & work of each role, skills required in each role)
- a. Business Architects
- b. Designers
- C. Data Scientists
- d. Software Engineers
- e. Cyber Security
- 4. Commentary on the List of Common Skills
- 5. How the DSS-P Can Be Utilized

All Rights Reserved Copyright© IPA 2024

1
```

読めてます。
絵的な表現のある9ページ目も見てみます。

```:9ページ目
| The Digital Skill Standards                                                              | Must be tailored to the direction of the industry to which the company/organization belongs, and to its own business   |
|------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|
| The DSS-L                                                                                |                                                                                                                        |
| Knowledge/skills required of all business people                                         |                                                                                                                        |
| Common to all industries Common to all job types and departments                         | Knowledge/skills required of human resources who deal with specific situations                                         |
| The DSS-P                                                                                | Defined on the basis of the specific situation (by industry, by organization/company, by job type, etc.)               |
| Knowledge/skills required of human resources who handle specific roles in DX promotion   |                                                                                                                        |
| Common to all industries Defined on the basis of the human resource types who promote DX |                                                                                                                        |
```
微妙なラインですがテキストだけを抜き出すよりは構造情報を保っています。

というわけで、Bedrock データオートメーションパーサーは日本語ドキュメントには対応していないようです。

# ファンデーションモデルパーサー

基盤モデルを使えば日本語でも読めるやろの精神でファンデーションモデルパーサーを試していきます。
元々あった「Use foundation model for parsing」と同じものかな？と見せかけて、「Multimodal storage destination」という設定項目が増えています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/bc8d8d1b-c41f-7263-ff50-d6f0085a9d63.png)

なんかいい感じにしてくれそうな雰囲気の事が書いてあります。

というわけでナレッジベースを作成してみます。
ファンデーションモデルパーサーとClaude3 Haiku を使い、先ほどの PDF を sync してみます。（Sonnet だとスロットリングにかかった…）

## OpenSearchを覗いてみる

### 表紙

```JSON
GET _search
{
  "query": { "match": { "x-amz-bedrock-kb-document-page-number": "0" } }
}
```
```
          "x-amz-bedrock-kb-source-uri": "s3://xxxxxxxxinput/000106872.pdf",
          "AMAZON_BEDROCK_TEXT": "# デジタルスキル標準 ## ver.1.2 ### 2024年7月 <figure> IPA 独立行政法人 情報処理推進機構 </figure> <figure> 経済産業省 </figure> All Rights Reserved Copyright© IPA 2024",
          "x-amz-bedrock-kb-document-page-number": 0,
          "AMAZON_BEDROCK_METADATA": """{"source":"s3://xxxxxxxxinput/000106872.pdf","parentText":"# デジタルスキル標準\n## ver.1.2\n### 2024年7月\n<figure>\nIPA 独立行政法人 情報処理推進機構\n</figure>\n<figure>\n経済産業省\n</figure>\nAll Rights Reserved Copyright© IPA 2024\n",
              "relatedContent":[{"locationType":"S3","s3Location":{"uri":"s3://xxxxxxxxoutput/aws/bedrock/knowledge_bases/WN3BBT94EE/GLUQITW8P8/5c5829c6-f25f-4f91-a4a1-41fe7c400d38.png"}}]}""",
          "x-amz-bedrock-kb-data-source-id": "GLUQITW8P8",
          "bedrock-knowledge-base-default-vector": [
              ...（ベクトル値)
```
注目ポイントが２か所あります。

まず、"AMAZON_BEDROCK_TEXT"の中に`<figure>`タグがあり、元PDFでは画像でしか提供されていなかった情報（テキストでは無かったもの）がテキストとして含まれています。

また、"AMAZON_BEDROCK_METADATA"の中の"relatedContent"の中で、何やら（先ほど指定した「Multimodal storage destination」のバケットの中の）pngファイルの情報が格納されています。

該当のファイルを見てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/e0e114a6-45a8-0c39-c390-15981729ef12.png)


表紙を画像変換したものが格納されています。

### 目次（文字だけのページ）

続いて文字だけが含まれる目次ページを見てみます。

```JSON
GET _search
{
  "query": { "match": { "x-amz-bedrock-kb-document-page-number": "1" } }
}
```
```
          "x-amz-bedrock-kb-source-uri": "s3://xxxxxxxxinput/000106872.pdf",
          "AMAZON_BEDROCK_TEXT": "# 目次 ## I. デジタルスキル標準の概要 - デジタルスキル標準策定の背景、ねらい - デジタルスキル標準 改訂の考え方 - デジタルスキル標準の構成 - デジタルスキル標準で対象とする人材 - デジタルスキル標準の汎用性 - デジタルスキル標準の活用イメージ ## II. DXリテラシー標準 1. DXリテラシー標準策定のねらい、策定方針 2. DXリテラシー標準の構成 3. スキル・学習項目 a. 概要 b. 詳細 4. DXリテラシー標準の活用イメージ ## III. DX推進スキル標準 1. DX推進スキル標準策定のねらい、策定方針 2. DX推進スキル標準の構成 3. 人材類型・ロール (類型定義、各ロールの担う責任・業務、各ロールの必要スキル) a. ビジネスアーキテクト b. デザイナー c. データサイエンティスト d. ソフトウェアエンジニア e. サイバーセキュリティ 4. 共通スキルリスト解説 5. DX推進スキル標準の活用イメージ",
          "x-amz-bedrock-kb-document-page-number": 1,
          "AMAZON_BEDROCK_METADATA": """{"source":"s3://xxxxxxxxinput/000106872.pdf"}""",
          "x-amz-bedrock-kb-data-source-id": "GLUQITW8P8",
          "bedrock-knowledge-base-default-vector": [
              ...（ベクトル値)
```
文字だけの場合は`<figure>`タグは生成されず、ページの画像変換もされないようです。

### 9ページ目（8ページ）

絵的な表現のある9ページ目を見てみます。

```
          "x-amz-bedrock-kb-source-uri": "s3://xxxxxxxxinput/000106872.pdf",
          "AMAZON_BEDROCK_TEXT": "# デジタルスキル標準の汎用性 デジタルスキル標準で扱う知識やスキルは、共通的な指標として転用がしやすく、かつ内容理解において特定の産業や職種に関する知識を問わないことを狙い、可能な限り汎用性を持たせた表現としている。 そのため、個々の組織・企業への適用にあたっては、各組織・企業の属する産業や自らの事業の方向性に合わせることが求められる。 <figure> デジタルスキル標準の汎用性 * DXリテラシー標準 - 産業にかかわらず共通 - 職種、部署にかかわらず共通 * DX推進スキル標準 - 特定の状況（産業別、組織・企業別、職種別・・・）ごとに定義 - DX推進における特定の役割を担う人材に 求められる知識・スキル 特定の状況に対応する人材に求められる知識・スキル - 特定の状況（産業別、組織・企業別、職種別・・・）ごとに定義 </figure>",
          "x-amz-bedrock-kb-document-page-number": 8,
          "AMAZON_BEDROCK_METADATA": """{"source":"s3://xxxxxxxxinput/000106872.pdf","parentText":"# デジタルスキル標準の汎用性\nデジタルスキル標準で扱う知識やスキルは、共通的な指標として転用がしやすく、かつ内容理解において特定の産業や職種に関する知識を問わないことを狙い、可能な限り汎用性を持たせた表現としている。\nそのため、個々の組織・企業への適用にあたっては、各組織・企業の属する産業や自らの事業の方向性に合わせることが求められる。\n<figure>\nデジタルスキル標準の汎用性\n* DXリテラシー標準\n    - 産業にかかわらず共通\n    - 職種、部署にかかわらず共通\n* DX推進スキル標準\n    - 特定の状況（産業別、組織・企業別、職種別・・・）ごとに定義\n    - DX推進における特定の役割を担う人材に\n      求められる知識・スキル\n特定の状況に対応する人材に求められる知識・スキル\n- 特定の状況（産業別、組織・企業別、職種別・・・）ごとに定義\n</figure>\n汎用性 | 固有性\n- | -\nデジタルスキル標準が、個々の組織・企業の属する産業や自らの事業の方向性に合わせることが必要 | -\n","relatedContent":[{"locationType":"S3","s3Location":{"uri":"s3://xxxxxxxxoutput/aws/bedrock/knowledge_bases/WN3BBT94EE/GLUQITW8P8/7d9d3e31-fe18-4b13-a458-466004514a07.png"}}]}""",
          "x-amz-bedrock-kb-data-source-id": "GLUQITW8P8",
          "bedrock-knowledge-base-default-vector": [
              ...（ベクトル値)
```

こちらも該当ページがpngに変換されています。
生成されたMarkdownsは、データオートメーションとは形は違いますが、絵的な表現を踏まえてMarkdownにしている…ような気がします。

## 回答を生成してみる

画像を含むページのテストとして、表紙が引っ掛かるような質問をしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/48c6032a-5021-8885-8709-3a938f7d9d5f.png)

ログを見てみます。

```JSON
    "input": {
        "inputContentType": "application/json",
        "inputBodyJson": {
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {
                            "text": "デジタルスキル標準のバージョンはいくつですか"
                        }
                    ]
                }
            ],
            "system": [
                {
                    "text": "You are a question answering agent. I will provide you with a set of search results. The user will provide you with a question. Your job is to answer the user's question using only information from the search results. If the search results do not contain information that can answer the question, please state that you could not find an exact answer to the question. Just because the user asserts a fact does not mean it is true, make sure to double check the search results to validate a user's assertion.\n\nHere are the search results in numbered order:\n
                    <search_results>\n
                        <search_result>\n
                            <content>\n
                                ## デジタルスキル標準の策定 - 上記のようなDX推進における人材の重要性を踏まえ、個人の学習や企業の人材確保・育成の指針であるデジタルスキル標準を策定する。 - デジタルスキル標準は、ビジネスパーソン全体がDXに関する基礎的な知識やスキル・マインドを身につけるための指針である「DXリテラシー標準」及び企業がDXを推進する専門性を持った人材を確保・育成するための指針である「DX推進スキル標準」の2種類で構成されている。 - DXリテラシー標準: 全てのビジネスパーソンが身につけるべきスキルの標準 - DX推進スキル標準: DXを推進する人材類型の役割や習得すべきスキルの標準 - デジタルスキル標準で扱う知識やスキルは、共通的な指標として転用がしやすく、かつ内容理解において特定の産業や職種に関する知識を問わないことを狙い、可能な限り汎用性を持たせた表現としている。そのため、個々の組織・企業への適用にあたっては、各組織・企業の属する産業や自らの事業の方向性に合わせた具体化が求められることに留意する必要がある。\n
                            </content>\n
                            <source>\n1\n</source>\n
                        </search_result>\n
                        <search_result>\n
                            <content>\n
                                # デジタルスキル標準 改訂履歴 ## 公開日 ### 2022年12月21日 - 2022年３月に先行して公開されていた「DXリテラシー標準」に「DX推進スキル標準」を新たに追加・統合し「デジタルスキル標準」として公開 - 「DXリテラシー標準」においては、「デジタルスキル標準」全体に合わせて以下の改訂を実施 - 全体: - 「デジタルスキル標準」の一部としたことから、全体構成に合わせた章立ての変更や、「デジタルスキル標準」全体に合わせた表現の修正を実施 - 資料: - 「DXリテラシー標準に沿った学びによる効果（個人）」を追加 - 「DXリテラシー標準に沿った学びによる効果（企業・組織）」を修正 - スキル項目の内容: - 「学習者による技術やツールの活用」を意味して「活用」と表現していた箇所は「利用」に修正 - 「What –デジタル技術」で「理解」と表現していた箇所は「知る」に修正 - 学習項目例: - 「What –デジタル技術」の学習項目に「最新の技術動向」を追加 ### 2023年8月7日 - 急速に普及する生成AIを受け、「DXリテラシー標準」において以下の改訂を実施 - Why（DXの背景）: - 「社会の変化」に人材育成・教育や労働市場の変化等の学習項目例等を追加 - What（DXで活用されるデータ・技術）: - 「AI」「ネットワーク」「データを扱う」「データによって判断する」の学習項目例等を追加 - How（データ・技術の利活用: - 「データ・デジタル技術の活用事例」に生成AIの活用事例、「ツール利用」「モラル」「コンプライアンス」の学習項目例等を追加 - マインド・スタンス: - 「事実に基づく判断」に適切なデータ入力の重要性や行動例等を追加、「生成AI利用において求められるマインド・スタンス」として既存項目と分けて補記を追加 ### 2024年7月8日 - グローバル標準や、日本企業のうち特にデジタルサービスを提供する企業において、ビジネスアーキテクトと類似性がある職種としてプロダクトマネージャーが一般的になりつつある中で、「DX推進スキル標準」のDXを推進する人材の一つとしてプロダクトマネージャーの定義を行い、ビジネスアーキテクトに関する補記を追加 -\n
                            </content>\n
                            <source>\n2\n</source>\n
                        </search_result>\n
                        <search_result>\n
                            <content>\n
                                # 目次 ## I. デジタルスキル標準の概要 - デジタルスキル標準策定の背景、ねらい - デジタルスキル標準 改訂の考え方 - デジタルスキル標準の構成 - デジタルスキル標準で対象とする人材 - デジタルスキル標準の汎用性 - デジタルスキル標準の活用イメージ ## II. DXリテラシー標準 1. DXリテラシー標準策定のねらい、策定方針 2. DXリテラシー標準の構成 3. スキル・学習項目 a. 概要 b. 詳細 4. DXリテラシー標準の活用イメージ ## III. DX推進スキル標準 1. DX推進スキル標準策定のねらい、策定方針 2. DX推進スキル標準の構成 3. 人材類型・ロール (類型定義、各ロールの担う責任・業務、各ロールの必要スキル) a. ビジネスアーキテクト b. デザイナー c. データサイエンティスト d. ソフトウェアエンジニア e. サイバーセキュリティ 4. 共通スキルリスト解説 5. DX推進スキル標準の活用イメージ\n
                            </content>\n
                            <source>\n3\n</source>\n
                        </search_result>\n
                        <search_result>\n
                            <content>\n
                                # デジタルスキル標準\n## ver.1.2\n### 2024年7月\n
                                    <figure>\nIPA 独立行政法人 情報処理推進機構\n</figure>\n
                                    <figure>\n経済産業省\n</figure>
                                \nAll Rights Reserved Copyright© IPA 2024\n\n
                            </content>\n
                            <source>\n4\n</source>\n
                        </search_result>\n
                        <search_result>\n
                            <content>\n
                                # I. デジタルスキル標準の概要 All Rights Reserved Copyright© IPA 2024\n
                            </content>\n
                            <source>\n5\n</source>\n
                        </search_result>\n\n
                    </search_results>\n\n
                    You should provide your answer without any inline citations or references to specific sources within the answer text itself. Do not include phrases like \"according to source X\", \"[1]\", \"[source 2, 3]\", etc within your <text> tags.\n\nHowever, you should include <sources> tags at the end of each <answer_part> to specify which source(s) the information came from.\nNote that <sources> may contain multiple <source> if you include information from multiple results in your answer.\n\nDo NOT directly quote the <search_results> in your answer. Your job is to answer the user's question as concisely as possible.\n\nYou must output your answer in the following format. Pay attention and follow the formatting and spacing exactly:\n<answer>\n<answer_part>\n<text>\nfirst answer text\n</text>\n<sources>\n<source>source ID</source>\n</sources>\n</answer_part>\n<answer_part>\n<text>\nsecond answer text\n</text>\n<sources>\n<source>source ID</source>\n</sources>\n</answer_part>\n</answer>\n"
                }
            ],
            "inferenceConfig": {
                "maxTokens": 2048,
                "temperature": 0,
                "topP": 1,
                "stopSequences": [
                    "\nObservation"
                ]
            }
        },
        "inputTokenCount": 2332
    },
    "output": {
```
表紙部分だけ抜き出してみます。

```
<content>\n
    # デジタルスキル標準\n## ver.1.2\n### 2024年7月\n
        <figure>\nIPA 独立行政法人 情報処理推進機構\n</figure>\n
        <figure>\n経済産業省\n</figure>
    \nAll Rights Reserved Copyright© IPA 2024\n\n
</content>\n
```
プロンプトには画像は含まれず、画像から読み込んでテキストに変換したMarkdownが渡されています。

# Syncした際のプロンプトを見てみる

```
Extract the content from an image page and output in Markdown syntax. Enclose the content in the <markdown></markdown> tag and do not use code blocks. If the image is empty then output a <markdown></markdown> without anything in it.

Follow these steps:

1. Examine the provided page carefully.

2. Identify all elements present in the page, including headers, body text, footnotes, tables, images, captions, and page numbers, etc.

3. Use markdown syntax to format your output:
    - Headings: # for main, ## for sections, ### for subsections, etc.
    - Lists: * or - for bulleted, 1. 2. 3. for numbered
    - Do not repeat yourself

4. If the element is an image (not table)
    - If the information in the image can be represented by a table, generate the table containing the information of the image
    - Otherwise provide a detailed description about the information in image
    - Classify the element as one of: Chart, Diagram, Logo, Icon, Natural Image, Screenshot, Other. Enclose the class in <figure_type></figure_type>
    - Enclose <figure_type></figure_type>, the table or description, and the figure title or caption (if available), in <figure></figure> tags
    - Do not transcribe text in the image after providing the table or description

5. If the element is a table
    - Create a markdown table, ensuring every row has the same number of columns
    - Maintain cell alignment as closely as possible
    - Do not split a table into multiple tables
    - If a merged cell spans multiple rows or columns, place the text in the top-left cell and output ' ' for other
    - Use | for column separators, |-|-| for header row separators
    - If a cell has multiple items, list them in separate rows
    - If the table contains sub-headers, separate the sub-headers from the headers in another row

6. If the element is a paragraph
    - Transcribe each text element precisely as it appears

7. If the element is a header, footer, footnote, page number
    - Transcribe each text element precisely as it appears

Output Example:
<markdown>
<figure>
<figure_type>Chart</figure_type>
Figure 3: This chart shows annual sales in millions. The year 2020 was significantly down due to the COVID-19 pandemic.
A bar chart showing annual sales figures, with the y-axis labeled "Sales ($Million)" and the x-axis labeled "Year". The chart has bars for 2018 ($12M), 2019 ($18M), 2020 ($8M), and 2021 ($22M).
</figure>

<figure>
<figure_type>Chart</figure_type>
Figure 3: This chart shows annual sales in millions. The year 2020 was significantly down due to the COVID-19 pandemic.
| Year | Sales ($Million) |
|-|-|
| 2018 | $12M |
| 2019 | $18M |
| 2020 | $8M |
| 2021 | $22M |
</figure>

# Annual Report

## Financial Highlights

<figure>
<figure_type>Logo</figure_type>
The logo of Apple Inc.
</figure>

* Revenue: $40M
* Profit: $12M
* EPS: $1.25

| | Year Ended December 31, | |
| | 2021 | 2022 |
|-|-|-|
| Cash provided by (used in): | | |
| Operating activities | $ 46,327 | $ 46,752 |
| Investing activities | (58,154) | (37,601) |
| Financing activities | 6,291 | 9,718 |

</markdown>
```

画像だけじゃなくてテーブル形式にも対応してそうな雰囲気ですね（今回は確認していない）。
実際のログを漁ろうかと思いましたがだいたい動きがわかったので良しとします。

# まとめ

ナレッジベースのファンデーションモデルパーサーを使用する事で、日本語であっても画像や絵的表現を踏まえたMarkdownを作成し（多分テーブル形式でも）、RAGに使用できることが分かりました。というかRAGに限る必要も無いですね。

ページの画像変換・Markdown変換は今までもプログラムをゴリ書きすれば実現できましたが、マネージドで実現してくれるのはかなり良いと思います。

# 追伸

その後の検証で表形式も問題なく読めることを確認しました（Markdownの表形式で読み込まれる）。

ただ。。
表形式に限らずですが、Haikuを使ったからか、プロンプトに引っ張られて英語で格納されてしまうケースが散見されました。クオータが大丈夫であればSonnetを使った方が良さそう。日本語に対応してるわけじゃなくて多言語対応の基盤モデルを使うと結果的に日本語を理解できるという構図なのでこのあたりは今のところ仕方ないですが、公式な多言語対応を進めてもらいたいところです。