はじめに
最近、コンテキストエンジニアリングが話題になっています。
(コンテキストエンジニアリング自体については、他に解説を譲ります)
LLM自体は賢い一方で、与えるドメイン知識などのコンテキストの品質が悪ければ、出力の品質も悪くなってしまいます。まさに「Garbage In, Garbage Out」の世界です。
そのため、入力データは構造化されていて、LLMが理解しやすい形式になっている必要があります。加えて、必要以上に長すぎても短すぎてもトークンの観点で困るので、必要十分な情報量・サイズに整えることも欠かせません。
先日リリースしたLINE WORKS AiStudioには、さまざまなタイプのドキュメントを構造化したMarkdownに変換する機能があります。
本投稿では「こんなドキュメントは嫌だ」と題して、この機能開発で苦労した点をご紹介します。
LINE WORKS AiStudioについてはこちらをご覧ください。
なぜ、マークダウンなのか?
理由は様々あると思いますが、私の理解では主に以下となります。異論は認めます。
-
# / ## / ###でシンプルな階層構造を表現できる- RAGなどではドキュメントをチャンクに分割するため、意味的な塊で分割できる方が性能面で有利に働く
- 箇条書きの意味が明確で、LLMに誤読させにくい
- 例)
-は条件、1.は手順、のように役割を表現できる
- 例)
- ヒューマンリーダブルでもある
- ファクトチェックの際にcitationとして出力される可能性もあるため、人間が読みやすい形式である必要もある
こんなドキュメントは嫌だ
LINE WORKS AiStudioのMarkdown変換機能では、PDF、Microsoft Word、Excel、PowerPoint、HTML(メールなど)に対応しています。
Markdownへの変換は「ライブラリを使用して変換するだけ」と思われるかもしれませんが、現実世界のドキュメントの変換はそう簡単ではありませんでした。
以降では、ドキュメントタイプごとの変換の困難さについて記述していきます。
PDF編
シンプルな例から見ていきましょう。
事例は、「令和6年版環境白書」から拝借しました。
以下は、テキストのみで一見簡単そうに見えます。
PDF-1
ところが、pypdfium2 ライブラリーを利用して、ナイーブに変換すると、以下のようになります。
2024年5月に、第六次環境基本計画を閣議決定しました。環境基本計画は、環境基本法に基づく、↩️
政府全体の環境保全施策を総合的かつ計画的に推進するための計画です。個別分野の環境政策について ↩️
は地球温暖化対策計画、循環型社会形成推進基本計画、生物多様性国家戦略といった個別分野の計画に ↩️
おいてより詳しく施策が記載されるので、環境基本計画の役割としては、環境・経済・社会の統合的向 ↩️
上など環境政策が全体として目指すべき大きなビジョンを示すとともに、今後5年間程度を見据えた施 ↩️
策の方向性を示すことが主といえるでしょう。
少しわかりづらいですが、文章の途中で改行によって分断されています。
これは、PDFというドキュメントの特徴によるものです。
PDFドキュメント変換の困難さ
- PDFは
見た目を崩さず表示・印刷するための固定レイアウト形式 - 中身は文章構造より
座標に文字や図形を配置する描画情報が中心- → テキストは読み順どおりに保存されないことが多い。むしろバラバラ。
- 表も
罫線+文字配置で表現され、行列構造がない場合が多い- → 抽出時に順序崩れ・表崩れ・改行やスペースの不自然さが起きやすい
次の事例を見てみましょう。表を含んでいます。
PDF-2
同じくナイーブに変換すると、以下のようになります。
表3-5-1 特別管理廃棄物 区分
主な分類 概 要
特別管理一般廃棄物 PCB使用部品 廃エアコン・廃テレビ・廃電子レンジに含まれるPCBを使用する部品
廃水銀 水銀使用製品が一般廃棄物となったものから回収したもの
ばいじん ごみ処理施設のうち、集じん施設によって集められたもの
ばいじん、燃え殻、汚泥 ダイオキシン特措法の特定施設である廃棄物焼却炉から生じたものでダイオキシン類を含むもの
感染性一般廃棄物 医療機関等から排出される一般廃棄物で、感染性病原体が含まれ若しくは付着しているおそれのあるもの
特別管理産業廃棄物
廃油 揮発油類、灯油類、軽油類(難燃性のタールピッチ類等を除く)
廃酸 著しい腐食性を有するpH2.0以下の廃酸
廃アルカリ 著しい腐食性を有するpH12.5以上の廃アルカリ
感染性産業廃棄物 医療機関等から排出される産業廃棄物で、感染性病原体が含まれ若しくは付着しているおそれのあるもの 特定有害産業廃棄物
廃PCB等 廃PCB及びPCBを含む廃油
PCB汚染物 PCBが染みこんだ汚泥、PCBが塗布され若しくは染みこんだ紙くず、PCBが染みこんだ木くず若しくは繊維く
ず、PCBが付着・封入されたプラスチック類若しくは金属くず、PCBが付着した陶磁器くず若しくはがれき類
PCB処理物 廃PCB等又はPCB汚染物を処分するために処理したものでPCBを含むもの
廃水銀等 水銀使用製品の製造の用に供する施設等において生じた廃水銀又は廃水銀化合物、水銀若しくはその化合物が含
まれている産業廃棄物又は水銀使用製品が産業廃棄物となったものから回収した廃水銀
指定下水汚泥 下水道法施行令第13条の4の規定により指定された汚泥
鉱さい 重金属等を一定濃度以上含むもの
廃石綿等 石綿建材除去事業に係るもの又は大気汚染防止法の特定粉塵発生施設が設置されている事業場から生じたもので
飛散するおそれのあるもの
燃え殻 重金属等、ダイオキシン類を一定濃度以上含むもの
ばいじん 重金属等、1,4-ジオキサン、ダイオキシン類を一定濃度以上含むもの
廃油 有機塩素化合物等、1,4-ジオキサンを含むもの
汚泥、廃酸、廃アルカリ 重金属等、PCB、有機塩素化合物、農薬等、1,4-ジオキサン、ダイオキシン類を一定濃度以上含むもの
資料:「廃棄物の処理及び清掃に関する法律」より環境省作成
pypdfium2 は、テキスト抽出のみなので、表構造を維持してはくれません。これでは、見づらいだけでなく、LLMの誤読を生む可能性があります。
また、PDFファイルでは、ページ上に文字や線や画像を配置することも多く、画像も多く含むケースがあり、マークダウンへの変換をより難しくしています。
図を含んだ事例も例示します。
PDF-3
わかりやすく図形の部分がかけて出力されます。
また、生物多様性の観点からは、私たちが生き
る現代は「第6の大量絶滅時代」ともいわれ、今
回の大絶滅は過去5回発生した大絶滅より、種の
絶滅速度は速く、その主な原因は人間活動による
影響と考えられています。2019年に生物多様性
及び生態系サービスに関する政府間科学-政策プ
ラットフォーム(IPBES)により公表された「生
物多様性と生態系サービスに関する地球規模評価
報告書」によると、世界の陸地の約75%は著し
く改変され、海洋の66%は複数の人為的な影響
下にあり、1700年以降湿地の85%以上が消失す
るなど、人類史上かつてない速度で地球全体の自
然が変化していると報告されています。
また、水、大気などの環境中の様々な媒体にま
たがって存在する反応性窒素、マイクロプラス
チックを含むプラスチックごみ、人為的な水銀排
出や難分解性・高蓄積性・毒性・長距離移動性を有する有害化学物質によるグローバルな汚染が深刻化
しており、水、大気、食物連鎖等を通じた健康影響や生態系への影響が懸念されています。
こうした環境の危機に的確に対応するため、新たな第六次環境基本計画では、環境を軸として、環
境・経済・社会の統合的向上の高度化を図るとともに、経済社会システムをネット・ゼロ(脱炭素)
で、循環型で、ネイチャーポジティブな経済へ転換してシナジー(相乗効果)を発揮し、現在及び将来
の国民が、明日に希望を持って「ウェルビーイング/高い生活の質」を実現できる持続可能な社会を構
築することを目指しています。第1章では、直面する環境の危機と我が国における経済社会の構造的な
課題を概観するとともに、その解決に向けた道しるべとなる、第六次環境基本計画が目指す、持続可能
な社会の方向性を解説します。
このようにPDFという世の中で多く利用されているドキュメントに対して、上記のようなMarkdown変換の難しさがありました。
LINE WORKS AiStudioで使用しているドキュメント変換では、レイアウト解析モデルを利用したレイアウトの再構成やLLMの言語処理・画像処理能力を活用してより構造化したMarkdownへ変換する工夫を入れています。
抽象的な表現になっていますが、より詳細な技術的な工夫点となってしまうため、別途テックブログなどで解説したいと思います。
改善事例の紹介
PDF-2,3での改善例をご紹介します。
PDF-2 : Text Wrapと図を含んだページ
段落として適切に変換できており、図の部分も図の説明文として表現しています。RAGやAIエージェントにとって、どのような情報をテキストとして情報抽出するのが良いのかは、今後も研究が必要だと考えています。
また、生物多様性の観点からは、私たちが生きる現代は「第6の大量絶滅時代」ともいわれ、今回の大絶滅は過去5回発生した大絶滅より、種の絶滅速度は速く、その主な原因は人間活動による影響と考えられています。2019年に生物多様性及び生態系サービスに関する政府間科学-政策プラットフォーム(IPBES)により公表された「生物多様性と生態系サービスに関する地球規模評価報告書」によると、世界の陸地の約75%は著しく改変され、海洋の66%は複数の人為的な影響下にあり、1700年以降湿地の85%以上が消失するなど、人類史上かつてない速度で地球全体の自然が変化していると報告されています。
また、水、大気などの環境中の様々な媒体にまたがって存在する反応性窒素、マイクロプラスチックを含むプラスチックごみ、人為的な水銀排出や難分解性・高蓄積性・毒性・長距離移動性を有する有害化学物質によるグローバルな汚染が深刻化しており、水、大気、食物連鎖等を通じた健康影響や生態系への影響が懸念されています。
こうした環境の危機に的確に対応するため、新たな第六次環境基本計画では、環境を軸として、環境・経済・社会の統合的向上の高度化を図るとともに、経済社会システムをネット・ゼロ(脱炭素)で、循環型で、ネイチャーポジティブな経済へ転換してシナジー(相乗効果)を発揮し、現在及び将来の国民が、明日に希望を持って「ウェルビーイング/高い生活の質」を実現できる持続可能な社会を構築することを目指しています。第1章では、直面する環境の危機と我が国における経済社会の構造的な課題を概観するとともに、その解決に向けた道しるべとなる、第六次環境基本計画が目指す、持続可能な社会の方向性を解説します。
### 1850年から1900年までを基準とした世界の平均気温の変化
(図1-1-1:グラフが掲載されており、1850年から2020年までの世界の平均気温の変化を示している。基準値(1850-1900年平均)からの気温偏差が折れ線グラフで表現されており、2000年以降に急激な上昇傾向が見られる。グラフの凡例には「観測値」「モデル平均」「モデル範囲」などが記載されている。)
PDF-3 : 表を含んだページ
表の部分をHTMLに変換して表現することでセルのマージの表現にも対応しています。
オリジナルドキュメントをまだ完全に再現はできてはいませんが、Markdownでは、仕様上実現できない表現と構造化を実現しています。
| 区分 | 主な分類 | 概要 | 要 |
|---|---|---|---|
| 特別管理一般廃棄物 | PCB使用部品 | 廃エアコン・廃テレビ・廃電子レンジに含まれるPCBを使用する部品 | |
| 廃水銀 | 水銀使用製品が一般廃棄物となったものから回収したもの | ||
| ばいじん | ごみ処理施設のうち、集じん施設によって集められたもの | ||
| ばいじん、燃え殻、汚泥 | ダイオキシン特措法の特定施設である廃棄物焼却炉から生じたものでダイオキシン類を含むもの | ||
| 感染性一般廃棄物 | 医療機関等から排出される一般廃棄物で、感染性病原体が含まれ若しくは付着しているおそれのあるもの | ||
| 特別管理産業廃棄物 | 廃油 | 揮発油類、灯油類、軽油類(難燃性のタールピッチ類等を除く) | |
| 廃酸 | 著しい腐食性を有するpH2.0以下の廃酸 | ||
| 廃アルカリ | 著しい腐食性を有するpH12.5以上の廃アルカリ | ||
| 感染性産業廃棄物 | 医療機関等から排出される産業廃棄物で、感染性病原体が含まれ若しくは付着しているおそれのあるもの | ||
| 廃PCB等 | 廃PCB及びPCBを含む廃油 | ||
| PCB汚染物 | PCBが染みこんだ汚泥、PCBが塗布され若しくは染みこんだ紙くず、PCBが染みこんだ木くず若しくは繊維くず、PCBが付着・封入されたプラスチック類若しくは金属くず、PCBが付着した陶磁器くず若しくはがれき類 | ||
| PCB処理物 | 廃PCB等又はPCB汚染物を処分するために処理したものでPCBを含むもの | ||
| 廃水銀等 | 水銀使用製品の製造の用に供する施設等において生じた廃水銀又は廃水銀化合物、水銀若しくはその化合物が含まれている産業廃棄物又は水銀使用製品が産業廃棄物となったものから回収した廃水銀 | ||
| 指定下水汚泥 | 下水道法施行令第13条の4の規定により指定された汚泥 | ||
| 鉱さい | 重金属等を一定濃度以上含むもの | ||
| 廃石綿等 | 石綿建材除去事業に係るもの又は大気汚染防止法の特定粉塵発生施設が設置されている事業場から生じたもので飛散するおそれのあるもの | ||
| 燃え殻 | 重金属等、ダイオキシン類を一定濃度以上含むもの | ||
| ばいじん | 重金属等、1,4-ジオキサン、ダイオキシン類を一定濃度以上含むもの | ||
| 廃油 | 有機塩素化合物等、1,4-ジオキサンを含むもの | ||
| 汚泥、廃酸、廃アルカリ 重金属等、PCB、有機塩素化合物、農薬等、1,4-ジオキサン、ダイオキシン類を一定濃度以上含むもの |
資料: 「廃棄物の処理及び清掃に関する法律」より環境省作成
Excel編
Excelの場合は、もともと表形式になっているので、値を抽出して、そのままMarkdownの表形式に変換してあげれば良いだけな気もしますが、そう簡単ではありませんでした。
EXCEL-1
こちらも openpyxl のようなライブラリを使用して単純なMarkdown変換を実装にしてしまうと以下のようになってしまいます。
| | パーセンテージ | 数式 |
| --- | ------- | ------ |
| 100 | 0.25 | =B4*C4 |
期待値
| |パーセンテージ|数式|
|---|---|---|
|100|25%|25|
❌ 数式そのまま出力されている
❌ パーセンテージの表示が再現できていない
数式そのまま出力されている への対応はシンプルです。
以下のようにExcelファイルの読み込み時に data_only=True を指定するだけでした。気をつけないと案外ハマってまう罠でした。
load_workbook(excel_path, data_only=True)
パーセンテージの表示が再現できていない への対応はすこし複雑です。
openpyxlライブラリは number_format 属性を提供しますが、自動的にフォーマットを適用してくれないため、内部値である 0.25 がそのまま出力されています。見た目通りの表示として出力するにはフォーマット処理を実装する必要がありました。(※number_formatはopenpyxlのCellオブジェクトが持つ属性で、Excelセルの表示形式(書式文字列)を表します。)
たとえば、以下のように処理する必要がありました。
ただし、セルの表示形式通りに変換させたいか、内部値で良いかはポリシーによるため必ずしも必要な処理ではないです。
if "%" in number_format:
percentage_value = cell.value * 100
percentage_str = f"{percentage_value:.2f}"
if "." in percentage_str:
percentage_str = percentage_str.rstrip("0").rstrip(".")
return f"{percentage_str}%"
Power Point編
より簡単そうに思えそうなPower Pointにも落とし穴がありました。
以下の事例はよくありそうな目次ページですが、変換するとどうなるでしょうか?
# <目次>
1. はじめに
2.序章 ― 事業背景とビジョン
3. 知財活用によるイノベーション推進
4.デジタル人材の地域再投資戦略
5.先進人材マッチングサービス
(参考資料)
2
14
18
23
31
41
1
目次とページ数が分かれてしまっています。なぜでしょうか?
期待値は以下のようになることを期待していました。
<目次>
1.はじめに 2
2.序章-事業背景とビジョン 14
3.知財活用によるイノベーション推進 18
4.デジタル人材の地域再投資戦略 23
5.先進人材マッチングサービス 31
(参考資料) 41
1
原本のPower Pointを調べてみると理由は簡単でした(笑)
ページ番号の部分が別のオブジェクトとして後付けされてありました!
(フォントも微妙に違うような気もします)
実装上の問題になりますが、オブジェクトごとにテキスト抽出処理が行われるため、見かけ上の位置を再現できずにページ番号だけ別物として抽出されてしまいます。
Power PointもPDFと同様にドキュメントとしての性質として以下の要因が影響していると考えられます。
- PPTは
読み順ではなくオブジェクトの重なり・配置で見た目を作る - 抽出は多くの場合
オブジェクト列を順に読むだけ- →
右端のページ番号だけ最後に集まる、が起きる
- →
意外に思われるかもしれませんが、このように見かけ上問題ないように思えるドキュメントでも別のオブジェクトで修正されてあるケースが多々あります。
例えば、以下の事例は極端ですが、一部が後から修正されているケースは現実世界のドキュメントでは多く存在します。(信じられないことに。。)
- 箇条書き1
- 箇条書き2
- 箇条書き3
説明1
説明2
説明3
上記のようなケースについては、まだ、未対応となっており、こちらも今後の性能改善課題の一つとなっています。当社では、OCR技術も保有しておりますので、スライドも画像として処理するようにすれば、改善する可能は大いにあります。
LINE WORKS AiStudioの応答精度を向上させるためにも引き続きLLM readableなドキュメント変換技術の向上に努めてまいります。
まとめ
本投稿では、LINE WORKS AiStudioのドキュメント→Markdown変換機能の開発で直面した「こんなドキュメントは嫌だ」を、PDFとPowerPointの事例を中心に紹介しました。
このように、現実世界のドキュメントをLLM-readableなMarkdownに変換するには、単にライブラリで変換するだけでは不十分で、ドキュメント形式ごとの癖を踏まえた処理が必要になります。
今回、特に苦労したPDF、Excel、PowerPointをご紹介しましたが、WordやHTMLに関しても現実的世界のドキュメントの複雑さに苦労したところは数多くありましたが、紙面の都合上すべてを共有することができませんので、それはまた別の機会に知見として共有させていただければと思います。






