0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dify ボットUI を探そう - 3(Apache Tika 導入)

Posted at

記事一覧
 Dify ボットUI を探そう - 1(Open WebUI 導入)
 Dify ボットUI を探そう - 2(dify2openai 導入)
 Dify ボットUI を探そう - 3(Apache Tika 導入)

------------------------------------------------
Open WebUI の「ファイルのアップロード」では、各種文書・画像ファイルをメッセージに添付することができます。

画像ファイルの場合は BASE64形式 に変換された文字列が、その他のファイルに関しては抽出したテキストデータが LLM へ渡されます。
この動きは RAG という技術を利用したもので、その中でも「ドキュメントの分割と埋め込み(Embedding)」という作業が、回答内容の精度や品質に大きな影響を与えます。

本記事では Apache Tika を導入し、「ドキュメントの分割と埋め込み(Embedding)」の作業品質の向上を図ります。

インストール手順

日本語 OCR 機能を組み込んだ Apache Tika を、Docker 環境に導入します。

1. フォルダ構成

my-tika-ocr/          プロジェクトのルートフォルダ
├── docker-compose.yml     Docker Compose の設定ファイル
├── Dockerfile         Docker イメージの定義ファイル
└── config/           Tika の設定ファイルを格納するフォルダ
|   └── tika-config.xml    Tika の設定ファイル (OCR 設定などを記述)
└── data/                     Tika のデータフォルダ

2. Dockerfile の作成
Tika の Docker イメージをビルドするための Dockerfile を作成します。
この Dockerfile では、公式の Tika イメージをベースに 日本語 OCR に必要なパッケージ をインストールします。

FROM apache/tika:latest

# この行以降のコマンドを root ユーザーとして実行
USER root

# 日本語 OCR に必要なパッケージをインストール
RUN apt-get update && apt-get install -y --no-install-recommends \
    tesseract-ocr \
    tesseract-ocr-jpn \
    libtesseract-dev \
    libleptonica-dev \
    poppler-utils \
    && rm -rf /var/lib/apt/lists/*

3. tika-config.xml の作成
Tika の設定ファイル tika-config.xmlconfig フォルダに作成します。
このファイルでは、日本語OCR 動作に関する設定を記述します。

<properties>
    <parsers>
        <!-- PDFParserの設定 -->
        <parser class="org.apache.tika.parser.pdf.PDFParser">
            <params>
                <!-- PDF内に埋め込まれた画像を抽出するかどうかを指定する(true: 抽出する)-->
                <param name="extractInlineImages" type="boolean">true</param>
                <!-- テキスト抽出とOCRを両方試みる -->
                <param name="ocrStrategy" type="string">OCR_AND_TEXT_EXTRACTION</param>
                <!-- <param name="ocrStrategy" type="string">NO_OCR</param> -->
                <!-- <param name="ocrStrategy" type="string">OCR_ONLY</param> -->
            </params>
        </parser>
       <!-- TesseractOCRParserの設定(OCRを使用する場合のみ) -->
        <parser class="org.apache.tika.parser.ocr.TesseractOCRParser">
            <params>
                <!-- OCRの言語設定(日本語の場合) -->
                <param name="language" type="string">jpn</param>
                <param name="tesseractPath" type="string">/usr/bin/tesseract</param>
                <param name="tessdataPath" type="string">/usr/share/tesseract-ocr/tessdata</param>
                <!-- 画像前処理を有効にする(精度が向上する)-->
                <param name="enableImageProcessing" type="boolean">true</param>
                <!-- 画像の自動回転補正を有効にする -->
                <param name="applyRotation" type="boolean">true</param>
                <!-- OCRのタイムアウト設定(ミリ秒) -->
                <param name="timeout" type="int">60000</param>
            </params>
        </parser>
    </parsers>
</properties>

PDFParserの設定

名称 説明
extractInlineImages PDF内に埋め込まれた画像を抽出するかどうかを指定する。
(true: 抽出する)
ocrStrategy OCRの動作を指定する。
NO_OCR (OCRを使用しない)
OCR_ONLY(OCRのみ使用する)
OCR_AND_TEXT_EXTRACTION(OCRと共にテキストも抽出)

TesseractOCRParserの設定(OCRを使用する場合のみ)

名称 説明
language 日本語(jpn)を指定。
tesseractPath /usr/bin/tesseract
Tesseract 実行ファイルのパス
※ コンテナ内のパスなので無変更で良い。
tessdataPath /usr/share/tesseract-ocr/tessdata
Tesseract の言語データ (tessdata) フォルダのパス
※ コンテナ内のパスなので無変更で良い。
enableImageProcessing ノイズ除去などの前処理を実施するときは true
精度が向上する代わりに、実行速度は低下する。
applyRotation 画像の傾きを自動的に補正するときは true
精度が向上する代わりに、実行速度は低下する。
timeout OCR機能のタイムアウト時間(ミリ秒)を指定する。
大きな値を指定すると、複雑な画像に遭遇した際の処理時間が大幅に遅延する可能性あり。

4. docker-compose.yml の作成
Docker Compose の設定ファイル docker-compose.yml を作成します。

services:
  tika:
    build: .
    ports:
      - "19998:9998"
    volumes:
      - ./config/tika-config.xml:/opt/tika/config/tika-config.xml
      - ./data:/opt/tika/data
    restart: unless-stopped
  • ports:
    ホストのポート 19998 をコンテナのポート 9998 にマッピングする。
  • volumes:
    ホストの実フォルダをコンテナ内にマウントする。
    • config/tika-config.xml/opt/tika/config/tika-config.xml にマウント。
    • data フォルダを /opt/tika/data フォルダにマウント。
  • restart: unless-stopped
    エラーなどでコンテナが終了した場合でも、自動的に再起動する。

Tika コンテナの起動と停止

コンテナの起動

docker-compose.yml があるディレクトリで、次のコマンドを実行して Tika コンテナを起動します。

docker compose up -d

コンテナの停止

docker-compose.yml があるディレクトリで、次のコマンドを実行して Tika コンテナを停止します。

docker compose down

Open WebUI との連携

① 管理者パネル を開き、[設定]-[ドキュメント] を選択します。

② Content Extraction Engine の選択値を「Tika」に変更します。

③ Tika へアクセスする URL を入力します。

ここではホストPCへ割り当てられたIPアドレス(192.168.0.200)を使用していますが、別名が割り当て済みの時はそれを用いても構いません。

locakhost は指定しないでください。
本連載記事では Open WebUI を Dockerコンテナ として動かしています。
localhost という指定は Open WebUI 用コンテナ自身を指しており、Tika が動作するコンテナへ接続することはできません。

④ [保存]ボタンをクリックします。

画面右下の [保存] ボタンをクリックし、変更内容を保存してください。

終わりに

Apache Tika(日本語OCR付き)を導入後、PDFファイル の読み込み精度が向上しましたが、その分だけ回答速度も遅くなった気がします。
厳密に測定してはいませんが、これは Intel N150 という非力な CPU を使用しているためかもしれません。

なお、「画像ファイルを正しく認識してくれない」という問題は解決していません。
API プロキシサーバー dify2openai が BASE64形式に変換されたファイルデータを読み捨てている ためです。

この点については、dify2openai への「ある程度の作り込み」は不可避と思われます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?