Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LayerXにおける機械学習を活用したOCR機能の改善に関する取り組み / layerx-js...

shimacos
June 09, 2023

LayerXにおける機械学習を活用したOCR機能の改善に関する取り組み / layerx-jsai-2023

2023.06.06 - 2023.06.09に開催された2023年度 人工知能学会全国大会(第37回)のインダストリアルセッションで登壇した内容です。
LayerXにおけるOCR機能の改善の歴史について説明しました。

shimacos

June 09, 2023
Tweet

More Decks by shimacos

Other Decks in Research

Transcript

  1. 自己紹介 島越 直人 よくトリゴエと間違えられますがシマコシです • 経歴 ◦ 京都大学 機械理工学専攻 卒業

    ◦ 2019/04 ~ 2023/04 DeNA Data Scientist ▪ (2020/04 ~ 2022/03) GO株式会社に出向 ◦ 2023/04 ~ LayerX 機械学習エンジニア • Kaggle ◦ Kaggle Competitions Grandmaster ◦ 色々なドメインのデータに触れるのが好きな ので色々やってます @nt_4o54 @shimacos
  2. © 2023 LayerX Inc. 6 会社名     代表取締役  創業      資本金 事業内容

    関連会社 取得認証 | 株式会社LayerX(レイヤーエックス) | 代表取締役CEO 福島 良典    代表取締役CTO 松本 勇気 | 2018年 | 86億円 | バクラク事業、Fintech事業、Privacy Tech事業 | 三井物産デジタル・アセットマネジメント   三井物産、LayerX、三井住友信託銀行、SMBC日興証券、JA三井リースによる合弁会社 | 情報セキュリティマネジメントシステム、      JIIMA認証 IS 747702 / ISO 27001 バクラク事業 企業活動のインフラとなる 法人支出管理(BSM)SaaSの 自社開発・提供 Fintech事業 アセットマネジメント証券事業を 三井物産との 合弁会社にて展開 PrivacyTech事業 プライバシー保護/秘匿化技術 パーソナルデータの 利活用や流通を促進 会社概要
  3. © 2023 LayerX Inc. 7 3つの事業 バクラク事業 企業活動のインフラとなる法人支出管 理(BSM)SaaSを開発・提供 ソフトウェアを駆使したアセットマネジメ

    ント・証券事業を合弁会社にて展開 パーソナルデータの利活用とプライバシー 保護を両立するソリューションの提供 バクラク事業 Fintech事業 PrivacyTech事業
  4. © 2023 LayerX Inc. 8 3つの事業 バクラク事業 企業活動のインフラとなる法人支出管 理(BSM)SaaSを開発・提供 ソフトウェアを駆使したアセットマネジメ

    ント・証券事業を合弁会社にて展開 パーソナルデータの利活用とプライバシー 保護を両立するソリューションの提供 バクラク事業 Fintech事業 PrivacyTech事業
  5. © 2023 LayerX Inc. 10 法人支出管理(BSM)SaaS「バクラク」を展開 * 経費精算のSlack連携は申請内容の通知のみ 稟議・支払申請・経費精算・ワークフロー ・AIが領収書を5秒でデータ化

    ・承認はチャットアプリから ・シームレスな内部統制構築 仕訳・支払処理効率化 ・AIが請求書を5秒でデータ化 ・仕訳データを自動学習、 手入力ゼロへ ・改正電子帳簿保存法に対応 ・利用料無料 ・即時追加発行 ・最大1億円決済可能 法人向けクレジットカード ・無料で始められる ・手入力ゼロで証憑管理 ・改正電子帳簿保存法に対応 帳票保存・ストレージ バクラクでは AI-OCR 機能をはじめ、機械学習がコア技術として活用されています
  6. © 2023 LayerX Inc. 11 本日のテーマ * 経費精算のSlack連携は申請内容の通知のみ 稟議・支払申請・経費精算・ワークフロー ・AIが領収書を5秒でデータ化

    ・承認はチャットアプリから ・シームレスな内部統制構築 仕訳・支払処理効率化 ・AIが請求書を5秒でデータ化 ・仕訳データを自動学習、 手入力ゼロへ ・改正電子帳簿保存法に対応 ・利用料無料 ・即時追加発行 ・最大1億円決済可能 法人向けクレジットカード ・無料で始められる ・手入力ゼロで証憑管理 ・改正電子帳簿保存法に対応 帳票保存・ストレージ 「バクラク請求書」におけるAI-OCRという機能についての改善の歴史を紹介
  7. © 2023 LayerX Inc. 13 バクラク請求書におけるAI-OCR機能で解決したい課題 受けとった請求書を手入力でデータ化するという負荷の大きい作業をバクラクにする • 請求書に記入されている項目 (支払期日や支払金額、取引先名など)

    を目視で確認して、ミスなく入力・管理することはとて も負荷の高い仕事 ◦ 対応する枚数が数十、数百枚と増えるにつれ てミスが起こりやすい ◦ 帳票のフォーマットが多種に渡り読み取ること が単純に大変 ◦ ミスは許されないためダブルチェック等確認作 業にもコストがかかってしまう
  8. © 2023 LayerX Inc. 15 AI-OCR機能の実現方法 請求書ファイルの アップロード (画像・PDF) 請求書に記載の

    項目ごとの値を 推定する { “bbox”: [{"x": 0.3421, "y": 0.567},...], "word": “2021/2/28” },... 外部APIを使用して 請求書内の 文字と座標を取得 500,000 2021/02/28 株式会社テンプレ 支払期日 支払金額 取引先名 文字検出を行ってから項目推定を行う二段階で推定 1 2 3 文字検出 項目推定
  9. © 2023 LayerX Inc. 16 リリース初期の項目推定 • ドメイン知識を駆使してルールベースで愚直に実装していた。 ◦ スピード感が求められるスタートアップにおいては正しい。

    • 一箇所変更するとこれまで読み取れていたものが読み取れなくなったりとルールが複雑化。 • 職人芸のような作業であり、特に新しく入ったエンジニアは改修が難しく属人化してしまう。 「請求日」の右側に 日付があったら請求日 「合計金額」の右側に 金額があったら支払金額 辛い
  10. © 2023 LayerX Inc. 18 AI-OCR改善の歴史 開発開始してから半年で一部のテナント様にリリース! 2022.04 2022.05 2022.06

    2022.07 2022.08 2022.09 2022.10 ・プロジェクトスタート ! ・データセット作成 ・モデル選定 ・ベースラインモデル作成 ・評価までの  パイプライン作成 ・後処理改善 ・データセット改善 リリース! ・LayoutLM v1-v3の事前学習  + Finetuning ・Robertaの学習 ・モデル改善! ・後処理改善! ・リリーステナント様選定 ・APIのテスト、負荷試験 2022.11 ~ 2023.05 ・リリース範囲拡大 ・BIOラベルの導入 ・後処理改善 ・データ基盤の改善 ・backboneの見直し など継続的に改善
  11. © 2023 LayerX Inc. 19 AI-OCR改善の歴史 2022.04 2022.05 2022.06 2022.07

    2022.08 2022.09 2022.10 ・プロジェクトスタート ! ・データセット作成 ・モデル選定 ・後処理改善 ・データセット改善 リリース! ・LayoutLM v1-v3の事前学習  + Finetuning ・Robertaの学習 ・モデル改善! ・後処理改善! ・リリーステナント様選定 ・APIのテスト、負荷試験 2022.11 ~ 2023.05 ・リリース範囲拡大 ・BIOラベルの導入 ・後処理改善 ・データ基盤の改善 ・backboneの見直し など継続的に改善 プロジェクト初期 ・ベースラインモデル作成 ・評価までの  パイプライン作成
  12. © 2023 LayerX Inc. 20 機械学習プロジェクトをスタート 注意するべき点 • 十分に高品質なデータがあるか? ◦

    しばらくルールベースを運用した間に、 ルールベースの検出結果とユーザの入力値が溜まってきていた。 ▪ 品質はそこそこだが、データの量はある状態 ◦ 長期的にはアノテーションをする体制を整え、 短期的にはルールベースによる検出結果や ユーザの入力値を用いてデータセットを構築する 。 • 機械学習プロジェクトは不確実性が高いが大丈夫か? ◦ なるべく高速に実現可能性を確認したい。 ◦ 人間によるルールベースである程度正解しているので、 ルールを適切にモデリングできるのであればある程度の精度は達成できるはず。 ◦ とりあえずは項目推定にタスクを絞って、実現可能性を探る。
  13. © 2023 LayerX Inc. 21 「請求書に記載の 項目ごとの値」 の推定値 • これまでもルールベースによる

    AI-OCR機能は提供されており、読み取り結果として表示された値を必要 に応じてユーザーが手で修正してくれる • 最終的に採用した値(=正解)がサービスに蓄積されているのを利用する サービスに蓄積されたデータをもとにデータセットを作成 請求書ファイル (画像・PDF) 「実際の運用に即した 値」の推定値 どのようなログが溜まってるか? ユーザーが 最終的に採用した値 ユーザに表示 税抜処理 祝日処理などの後処理 ユーザが修正
  14. © 2023 LayerX Inc. 22 「請求書に記載の 項目ごとの値」 の推定値 • 単純に「ユーザが最終的に採用した値」を用いると請求書に記載のない文字列の可能性がある。

    • 「請求書に記載の項目ごとの値の推定値 (ルールベースの結果 )」と「ユーザが最終的に採用した値」 が一致するもの (=修正されなかったデータ ) をとりあえずの正解データとする。 サービスに蓄積されたデータをもとにデータセットを作成 請求書ファイル (画像・PDF) 「実際の運用に即した 値」の推定値 正解ラベルの作成 ユーザーが 最終的に採用した値 ユーザに表示 税抜処理 祝日処理などの後処理 ユーザが修正
  15. © 2023 LayerX Inc. 23 ベースラインモデルの選定 LayoutLM系 (LayoutLMv1 - v3,

    LayoutXLM) 選定理由 • 請求書等の大量の文書画像で事前学習した上で同様のタスク にて実績あり ◦ 事前学習モデルの商用利用は不可なので、自前で事前 学習を行う必要はあり • ドメイン知識からレイアウトが重要と分かっていた モデル入力 • 文書の画像、テキストと座標 モデル出力 • Tokenに対応するラベル (支払金額等) https://arxiv.org/abs/2012.14740
  16. © 2023 LayerX Inc. 24 ベースラインモデルの選定 RoBERTa 選定理由 • 商用利用可能な日本語事前学習モデルが公開されている

    ◦ ファインチューニングから可能 • LayoutLMの論文でもRelated Workとして 扱われている • 画像を使わずに済むので実装が簡単 モデル入力 • 文書テキスト モデル出力 • Tokenに対応するラベル (支払金額等) https://arxiv.org/pdf/1810.04805
  17. © 2023 LayerX Inc. 25 パイプライン実装 • まずは評価できるところまで作り切った (重要) ◦

    作り切った後はパーツごとに改善することができる • 推論時に問題ないかをあらかじめチェック ◦ Tokenがモデルの期待している長さ以上のものの時どうするか ◦ レイテンシは問題ないか Preprocess Train Predict Postprocess Evaluation 最後まで作り切る
  18. © 2023 LayerX Inc. 26 データセットや後処理の改善 • Token分類としては正解してるが、正解値と違う場合 ◦ 予測結果:翌月末、正解ラベル:

    2022/11/30 など • 機械的にデータセットを作成したので、ノイズが入り込んでしまってる ◦ データセットのクレンジング • ほぼモデルはチューニングせずに、一部の項目はルールベースの精度を超えた Preprocess Train Predict Postprocess Evaluation モデルのチューニングより短期的に改善が見込めそうな部分に注力
  19. © 2023 LayerX Inc. 27 AI-OCR改善の歴史 2022.04 2022.05 2022.06 2022.07

    2022.08 2022.09 2022.10 ・プロジェクトスタート ! ・データセット作成 ・モデル選定 ・後処理改善 ・データセット改善 リリース! ・LayoutLM v1-v3の事前学習  + Finetuning ・Robertaの学習 ・モデル改善! ・後処理改善! ・リリーステナント様選定 ・APIのテスト、負荷試験 2022.11 ~ 2023.05 ・後処理改善 ・データ基盤の改善 ・backboneの見直し など継続的に改善 ・リリース範囲拡大 ・BIOラベルの導入 リリースまで ・ベースラインモデル作成 ・評価までの  パイプライン作成
  20. © 2023 LayerX Inc. 28 分散して実験 実運用に向けてモデルを再度選定 • プロダクトでの実運用に向け、チーム内で並列に実験を行う ◦

    Layout LM系を事前学習から実装 ◦ 商用可能な日本語学習モデルのある Robertaをファインチューニングから実装 https://arxiv.org/abs/2012.14740 https://arxiv.org/pdf/1912.13318 https://arxiv.org/pdf/2204.08387 https://arxiv.org/pdf/1810.04805
  21. © 2023 LayerX Inc. 29 モデルのチューニング 改善例 • Label Smoothingによる正則化

    ◦ 学習データにノイズが含まれていたため、過学習抑制の為に Label Smoothingを入れ精度改善 • 損失関数でクラスの重みを調整 ◦ 読み取りたい項目以外の「その他」に属するクラスに対する重みを調整 • 追加事前学習 (RoBERTa) ◦ 事前学習モデルに対してバクラクのデータセットで追加で事前学習 最終的には、RoBERTaモデルが最も精度良く採用
  22. © 2023 LayerX Inc. 30 リリースに向けて MLをリリースするテナント様の選定 • オフラインの精度で明らかにルールベースより精度が高いテナント様を選定 •

    項目ごとにも読み取り精度に差があるので、どの項目がどれくらい上回っているかを重視 • 間違えている場合は、実際の間違え方を確認してテナント様の体験を損ねないように注意 APIのテスト・負荷試験 • Sagemaker Endpointで実装 • テストデータ1万件でエラーや精度に問題ないかの検証を行った ◦ 文字検出の結果が思わぬ形式になっていたりと、エラーハンドリングの漏れに気づけた ◦ 負荷テストも行い、プロダクトにリリースしても問題がないことを確認 無事にリリース!
  23. © 2023 LayerX Inc. 31 AI-OCR改善の歴史 2022.04 2022.05 2022.06 2022.07

    2022.08 2022.09 2022.10 ・プロジェクトスタート ! ・データセット作成 ・モデル選定 ・後処理改善 ・データセット改善 リリース! ・LayoutLM v1-v3の事前学習  + Finetuning ・Robertaの学習 ・モデル改善! ・後処理改善! ・リリーステナント様選定 ・APIのテスト、負荷試験 2022.11 ~ 2023.05 ・後処理改善 ・データ基盤の改善 ・backboneの見直し など継続的に改善 ・リリース範囲拡大 ・BIOラベルの導入 リリース後 ・ベースラインモデル作成 ・評価までの  パイプライン作成
  24. © 2023 LayerX Inc. 32 リリース後の改善 継続的にモニタリング • ルールベースの精度に比べて極端に精度が低いテナント様がいないか朝会でチェック ◦

    気になるテナント様や請求書のフォーマットなどを backlogに貯めてエラー調査 取引先名の後処理改善 • 会社名や人名のような固有名詞は未知語が多く、 他の項目よりも読み取り精度が安定しなかったため優先して対応
  25. © 2023 LayerX Inc. 33 リリース後の改善 データ基盤の改善 • 分散していたデータを機械学習活用の用途で BigQueryに集約することで、データセットの改善プロセスが高

    速に。 • アノテーションチームを組織し、継続的にアノテーションデータを貯め続ける仕組み作り ◦ 内製のアノテーションツールなども作成 backboneの見直し • 商用可能なモデルとして RoBERTa以外にも以下のようなものがある。 ◦ 日本語事前学習モデル: DeBERTa-v2 ◦ 多言語事前学習モデル: XLM-RoBERTa, infoXLM, mBART • 精度としてDeBERTa-v2がバクラクデータで事前学習ありの RoBERTaと同等の精度 ◦ 今後、DeBERTa-v2でも事前学習など検証予定
  26. © 2023 LayerX Inc. 34 リリース後の改善 支払い金額のモデル改善 • 課題 ◦

    日々モニタリングしている中で、支払い金額が近くの金額と結合してしまう現象が起きていた ▪ RoBERTaに入力する際のToken列で距離が近くなってしまっているためと考えられる • 解決策 ◦ レイアウトを考慮することが重要? ◦ BIOラベルを用いることで明示的に Tokenの開始位置を学習させる。 ▪ token列から単語にまとめあげる部分でも役に立つ ◦ 今まで結合してしまっていた書類のうち多くで精度改善。
  27. © 2023 LayerX Inc. 35 OCRの歴史まとめ 日々、データと向き合いながら泥臭く改善を行っています! • AI-OCRはバクラクシリーズの体験のコアとなっている機能で精度がとても重要です。 •

    やりたいこと・やるべきことがまだまだあり、手が足りない状態 ◦ 項目推定だけでなく、文字検出から項目推定まで E2Eで内製化 ◦ データが増えてきたのでレイアウトを考慮したモデルの再検討 ◦ アノテーションデータセットとユーザ入力データセットの組み合わせ ◦ 請求書以外の書類の読み取り ▪ 領収書・納品書・支払い通知書・見積書・契約書など ◦ 明細読み取り • 今回は機械学習モデル部分に絞って説明しましたが、 UXにも拘っており、機械学習が答えを間違えた時にも なるべく手入力が少なく済むように設計しています! ◦ 支払い金額の読み取り箇所を間違えたとしても、プルダウンから他の候補をシュッと選択できる ◦ 税抜き金額を読み取ってしまった場合に税込金額をボタン一つで計算してくれる