この記事はLayerXテックアドカレ2024の23日目の記事です。
こんにちは、LayerXでバクラクの開発を担当しているTomoakiです。
1年前に買ったレトルトのグリーンカレーを食べながらこの記事を書いているのですが、鶏肉が入っているのに数年も常温で日持ちするとは、本当にすごい技術だなと感じます。
さて、1年前といえばインボイス制度が始まった時期ですね。すでに皆さんの会社では、経理担当者の方を中心にインボイス制度への対応が進められていることと思います。私たちバクラクも、「これまでの業務の延長で経理・従業員がインボイス制度に対応できる」機能を提供するため開発を進めてきました。
この記事では、その中でも特に「複数税率のAI-OCR」に焦点を当て、複数税率OCRがなぜ難しいのか、いくつかのパターンを例示しながら紹介します。AI-OCRの面白さと奥深さを少しでもお伝えできれば幸いです。
AI-OCRでインボイス制度へ「いつの間にか」対応
バクラクのAI-OCRは以下のような機能によってインボイス制度への対応を自動化し、経理担当者の皆さまの業務負担を軽減しています。
1. 適格事業者番号の自動読み取りと照合
AI-OCRで適格事業者番号を読み取って国税庁の公開情報と照合し、適格請求書の要件を満たしているか自動で判定します。インボイス制度対応に欠かせない「番号の有効性チェック」を効率化します。 この適格事業者番号ですが、書類発行者にとっても追加で情報を記載する手間が生じました。たとえば、すでに発行済みの書類にハンコを押して追記したり、印刷前の紙の背景にあらかじめ番号を印字しておいたりと、さまざまな方法が試されてきました。その結果、書類によっては自動読み取りの難易度が高くなるケースもあります。詳しくはこちらをご覧ください。
2. 複数税率の金額を自動で仕訳分割
消費税率が異なる商品が1枚の領収書に含まれる場合でも、バクラクが軽減税率の対象額や消費税額を読み取り、税率ごとの仕訳を自動生成します。人手での入力や周知・修正コストを削減し、経費精算業務をスムーズに進められます。
複数税率ごとに仕訳を切る作業自体はインボイス制度以前から必要とされていましたが、インボイス制度において、適格請求書の要件を満たすためには「消費税額は、税率ごとに区分して計算する」ことが求められることから、複数税率を正確に読み取るAI-OCRの重要性が増しています。
複数税率のAI-OCRが難しい理由
複数税率の表示形式やレイアウト、表記ゆれは店舗や印刷方式によって千差万別です。単純に合計金額を読み取るだけでなく、「税率ごとの金額はいくらか」「その税率部分は税込なのか税抜なのか、あるいは消費税の額なのか」、「非課税の商品は含まれないか」といった要素を総合的に判断する必要があるため、機械的に正確に読み取るのは容易ではありません。
税率別の金額の読み取りは様々な文脈から判断せねばならないことが多く、合計金額の読み取り以上にその読み取り難易度が高くなるケースも珍しくありません。実際にエンジニアリングを進めるうえで、そう感じるシーンが多々ありました。ここからは、私たちが開発の中で出会ったレシートや領収書の例をご紹介します。
1. 税込・税抜表示の違い
まずはこちらの2枚のレシートをご覧ください。どちらも「8%」「10%」の税率ごとの金額が記載されています。しかし、左のレシートは消費税が含まれた金額である一方、右のレシートは消費税が含まていない金額となっています。
このように、同じ「8%」「10%」という数字でも、税込か税抜かで意味する金額が変わります。経理担当者としては仕訳上は税込か税抜かで統一したいところですが、機械的に「8%と記載されている額でそのまま仕訳を作る」などと決め打ちできません。
このようなパターンの税抜・税込の違いを正しく判断するには非常に難しいです。外税・内税のように税抜・税込の違いを記載しているレシートもありますが、記載されてないケースも多く、最終的には消費税額や全体の合計金額から照らし合わせて判断するしかありません。
バクラクのAI-OCRはこうした税抜・税込の違いをレシート全体のコンテキストから判定し、仕訳に使える数値を自動でサジェストします。
2. 明細が領収書全体の向きと異なる
続いて、こちらのレシートをご覧ください、。一見、普通のレシートのように見えますが、税率ごとの金額は画像右側の明細に記載されていて、プレビューしている向きから反時計回りに90度回転しています。
特にスーパーのレシートに多いケースですが、このように全体の向きとは異なる向きで税率情報が書かれている場合があります。上で示したレシートでは、複数税率の金額が反時計回りに90度回転して記載されているため、文字認識の難易度や税率と金額のペアを正しく結びつける難易度も上がるため、読み取りが難しくなります。
それでもバクラクのAI-OCRでは、全体レイアウトを解析しながら必要な情報を抽出し、税率ごとの金額を取得します。
3. 独自の記法で税率が表記される
こちらも一見普通のレシートのように見えますが、税率ごとの金額に着目すると、標準税率は「H10%」、軽減税率は「K8%」と記載されています。
このように、企業や店舗ごとに独自の文字や記号で税率を表記しているケースがあります。さらに印字の濃淡やフォントの個性もさまざまです。こうしたバリエーションも考慮しながら、「どの項目がどの税率なのか」を正しく読み取る必要があります。
バクラクのAI-OCRでは、独自の記法で記載された税率も書類全体のコンテキストから判断し、税率ごとの金額を取得します。
4. 税率の表記がテンプレートとして書いてあるが実際の金額は空白
続いてはこちらのレシートをご覧ください。書類のテンプレートとしてあらかじめ税率ごとの金額を書く場所が用意されています。しかし、実際には税率ごとの金額は記載されていません。手書きで領収書を発行する飲食店などでよく見るケースです。
このように、あらかじめ領収書のテンプレートに「8%」「10%」と印字してあるレシートでも、実際にはその箇所は空欄のまま——というケースがあります。インボイス制度開始前の書類であれば問題ありませんが、現行制度では適格請求書の要件を満たせず、OCRとしても「そこに書いてある税率をどう扱うか」を判断する必要があります。
また、周辺に数字が書いてある場合、その数字を税率ごとの金額として誤検知してしまう可能性もあり、ユーザーに意図しない金額をサジェストしてしまう恐れもあります。
バクラクのAI-OCRでは、記載がないのにテンプレート上税率ごとの金額があるように見えるケースでも、誤って金額を拾わないよう工夫をしています。
5. 小さいフォントで密集して記載
最後のレシートになります。ズームして撮影しているのでわかりにくいですが、こちらのレシートかなり小さいですし、文字も非常に小さく密集しています。税率ごとの金額が記載されている部分は特に密集しています。
比較的シンプルなレシートでも、複数税率の欄だけフォントが小さかったり、細かく密集していたりすることが珍しくありません。
合計金額は太字で大きく印字されている一方、税率情報は非常に小さい文字で印刷されており、AI-OCRで正確に読み取るうえで大きな課題となります。
レシートはその場でスマートフォンのカメラで撮影されることが大半であり、書類が傾いて撮影されることも多く、記載されている金額と税率のペアを正確に読み取る難易度が上がります。
バクラクのAI-OCRでは、このように密集して記載がされた帳票であっても正確に読み取れるような工夫が施されています。
エンジニアとしての面白さ
複数税率のAI-OCRを実装するにあたっては、単に文字認識を行うだけでなく、
- レイアウト解析(書類全体の構造・向きの認識)
- 文脈判断(税込/税抜か、税率の種類、金額の位置関係など)
- フォーマットの多様性を考慮した上でどう機械学習のデータセット作成するのか
といった多角的な技術が必要になります。 さらに、領収書やレシートというリアルな現場では、撮影環境(照明、傾き、影など)に左右される要素も多く、一筋縄ではいきません。
しかし、こうした技術的な課題を乗り越え、手入力なしで「あっという間に」経費精算を完了できるようになり、しかも「いつの間にか」法律にも対応している状態を実現できたときは、まるで魔法のような体験を提供できるのが醍醐味です。
開発する前の段階において経理担当者にヒアリングをさせて頂くなかでも「この税率ごとに仕訳を分割する作業がとにかく大変」という声を数多くいただいているため、少しでも負担軽減につながれば嬉しいです。
おわりに
複数税率AI-OCRの開発には、機械学習モデルの精度向上だけでなく、紙面レイアウトへの耐性や店舗ごとの表記ゆれへの対応、インボイス制度といった法制度への追従など、多角的なアプローチが求められます。こうした複雑な要素を組み合わせながら、ユーザーが「気づかないうちに」業務を完了できる体験を設計するのは、エンジニアとして大きなやりがいがあります。
バクラクでは、機械学習をいかにプロダクトの隅々まで落とし込んで設計し、実際の業務を圧倒的に効率化するかを考え、開発を進めています!
少しでも興味がある方はぜひカジュアル面談させてください!
LayerX Tech Advent Calendarはまだまだ続きます。明日の記事もご期待ください!