OCRに固有表現認識を組み合わせてサービスを進化させる【技術解説】

OCRに固有表現認識を組み合わせてサービスを進化させる【技術解説】

はじめに
 OCR(Optical Character Recognition/Reader:光学的文字認識)とは文字を光学的に認識する技術です。簡単にいえば、画像内にある文字を「文字」としてコンピュータに認識させる技術のことをいいます。主に紙ベースの文書をコンピュータ上で処理したいときなどに使われます。近年では精度も大幅に向上し、スマートフォンのアプリケーションなどでも簡単に使えるようになったため、一度は使ったことがあるという人も多いのではないでしょうか。
 一方で、NER(Named Entity Recognition:固有表現認識)とは、NLP(Natural Language Processing:自然言語処理)の一分野で、文章の中から地名、商品名、人名などの固有表現を認識する技術です。NERを正しく行えるようになると、文章の意味を正しく把握することができるようになるだけでなく、固有表現には特定の情報があるため、検索などの精度があがることが知られています。
 今回は、前半ではOCRとNERを組み合わせた取り組みについての大枠をご紹介します。現場での応用や企画を考える際などのご参考にして頂ければと思います。後半では、利用されているNERの理論についてみていきたいと思います。

OCRとNERを組み合わせることでできること

 私たちの身の回りには多くの文字情報が存在しています。外を出歩けば、看板や広告、ポスターなどがいたるところで目に入り、自宅にいても購入した商品には品名や注意事項などがびっしりと掲載されており、テレビをみれば字幕やテロップが当たり前のように目に飛び込んできます。現代を生きていくなかで文字情報を外部から取得しないことの方が難しいといえるのではないでしょうか。
 しかし、その一方でそうした外部から取得できる文字情報を活かしきれているのか、というと疑問が残ります。目にした文字情報を記憶しておくことも大変ですし、そのうえでその文字情報からさらに有意義な情報にたどり着こうとした場合、たいていのケースでかなりの手間が発生し、多くの人が途中で断念するか、はじめから想定される手間を考慮してそもそも得た文字情報を捨ててしまうことが多いといえます。ウェブの発達などにより、人間がよむ文字量が増えたといわれる現代こそ、逆説的に文字情報をいかに効率よく利用していくのかは重要なテーマといえるのではないでしょうか。
 そこで注目されるのが、OCRとNERをくみ合わせた取り組みです。現在、スマートフォンなどの普及により、ほとんどの人がカメラを日常的に持っている状況になりました。それだけでなく、若年層だけでなく中高年層も含め、インスタグラムやフェイスブック、ツイッターといった文化の普及により、写真を撮る、という行為が徐々に市民権を得ています。プライバシーやTPOにかかわる問題を提起しながらもあらゆる場所で写真を撮ることが可能となっています。特にあらゆる情報を一時的に保存しておくための方法として、写真を撮るという行為は非常に一般的になっており、メモや板書されたもの、スライドを写真で保存するという行為は珍しいものではなくなったといえます。この情報を写真として保存するという文化をOCRとNERを利用してより有意義なものにできないのかということが今回のお話です。OCRは写真などの情報から文字情報を取得する技術であり、NERは文章のなかにある固有表現を見つけ出す技術です。なお、後述しますが固有表現とは文章を差別化することができる情報であるということがポイントです。
 つまり、写真として保存された情報に対して、OCRでコンピュータが処理できる文字情報を取得し、NERを利用することで文字情報を適切に把握することで、より簡単に適切な情報を取得することができるのではないか、という事です。

OCRにNERを組み合わせる技術的メリット

 加えて、OCRにNERを組み合わせることには、技術的な点からもメリットがあります。
 前述のように、OCRとは写真から文字情報を取得する技術のことです。この技術に関しては、長い間研究が積み重ねられ、現在では読み込むもののフォーマットが統一されており(どこに何の情報が書かれているのか事前に機械側に設定できる状況のこと)、文字が手書きではなく印刷されたものであるなどの条件下であればほとんど100%に近い高い精度を出すことができ、全自動化できるようなケースもあります。しかし、その一方でフォーマットが統一されていない、文字が手書きでパターンが安定しないなどの条件下ではいまだに人間による認識、補正が確実に必要な状況などがあります。これらの認識精度をあげる方法として、固有表現認識を利用する方法があります。つまり、文書全体が何について書かれたものかを文書内の固有表現から認識することで認識精度をあげるというものです。たとえば、「会社」「電話番号」などの固有表現を認識することで、文書全体を会社の情報が掲載されているものだと判断することができ、文字認識に迷う場合には会社の情報が掲載されるときに使われる言葉を最優先するように機械の重みを変更することで精度を向上させることができます。

NERとOCRを組み合わせた一例

 ここで、NERとOCRを組み合わせた際にできるサービスの例をご紹介します。

①チラシからの情報提供

 日常的に多くのチラシが配られていますが、そのすべてをちゃんと目で見て精査することはほぼ不可能です。特定の商品に限っても類似のチラシを比較することは骨の折れる作業といえます。このときにNERとOCRを利用することで、撮影したチラシから商品名と価格、内容量などを取得し、ほかのチラシと自動で比較するサービスを提供するといったことが可能になります。チラシは構成が非常に自由な上、情報量が多いため、OCRでも大変難しい分野といえます。そのうえで商品名などは特有の語が多く、NERの精度次第できちんと情報がとれるかが大きく左右されます。そのため、NERやOCRの技術力が大きく活かせるサービスであるといえます。
 
 ほんの一例ですが、ほかにも利用価値の多い技術です。以下では、実際に上記のサービスを開発する際に必要となってくる技術や理論について簡単に説明します。

固有表現認識(Named Entity Recognition: NER)とは

 固有表現認識(Named Entity Recognition: NER)とは情報抽出の技術の一つであり、テキストから人名、地名、商品名などといった固有表現と呼ばれる表現を自動的に認識する処理のことです。なお固有表現とは一般的に、明確かつ自己完結的な存在を持つものを指します。「人間」や「動物」など物理的なものを表す場合もあれば、「国家」や「思考」などのように概念的なものを表している場合もあります。言語的に、大部分の名詞は何らかの形態の固有表現とみなすことができます。
 NERは自然言語処理(Natural Language Processing: NLP)の重要な技術であり、生の文章からの文書要約や、質問応答などで必要不可欠であるとされています。

固有表現抽出の手法

 機械学習に基づくNERでは、文書を適当な解析単位(トークン)に分割して 、固有表現を構成する1つもしくは複数のトークンとしてまとめあげると同時に、まとめあげられたトークンがどの種類の固有表現なのかを判別するという手法が一般的です。特に条件付き確率場(Conditional Random Fields :CRF)や サポートベクターマシン(Support Vector Machine:SVM)を用いた機械学習に基づく手法がよく使用されています。また 機械学習ライブラリであるFairやGinZaを用いた手法もあり、年々精度や手軽さも向上しています。固有表現抽出においては、新しい固有表現にいかに対応するのか、ということが重要な問題となっています。この問題は後述する形態素解析の問題とも重なっています。
 NERの精度には形態素解析(トークンをどのように分割するのか、品詞をどのように判断するのか)の精度も重要になってきます。そもそも文章を区切ったうえで、名詞かどうかを判断する能力のうえに固有表現抽出があるためです。以下では、形態素解析及び、自然言語処理を支える確率論であるマルコフ過程などについて簡単に説明します。
 

形態素解析(Morphological Analysis)とは

 文法的な情報の注記の無い自然言語のテキストデータ(文)から、対象言語の文法や、単語の品詞等の情報にもとづき、形態素(Morpheme:言語で意味を持つ最小単位)の列に分割し、それぞれの形態素の品詞等を判別する作業のことです。形態素解析の精度は、⑴単語の境界判別の問題(日本語では顕著、英語では問題にならない)、⑵品詞判別の問題、⑶未知語の問題、⑷ルーズな文法の問題にいかに対処するできるかで決まってきます。特に日本語の場合、ひらがな、カタカナ、漢字と文字が複数あり、そうした違いをもとに分析していきます。
 基本的な方法として⑴単語の切り出し法、⑵連接可能規則、⑶最長一致法、⑷2文節最長一致法、⑸形態素数最小法、文節数最小法などの規則に基づいた方法があります。近年ではいわゆる統計的な知識に基づいた手法が一般的です。つまり、ある単語や文章が与えられたときに、次、もしくはある個所にくる単語にはどのようなものが高いのかをデータセットから計算するというものです。そうした手法をもとに作られた形態素解析器として日本で有名なものとしては、MeCabやJUMANなどがあります。これらはオープンソースとして誰でも使えるようにしてくれています。これらの解析器では与えられたデータセットをもとに確率問題をいかに解くか、という発想で、条件付確率場(CRF)などが使われて解析が行われています。そうしたときにもとになっている知識に「マルコフ過程」があります。以下では、マルコフ過程について簡単に説明します。
 

マルコフ過程とは

●マルコフ過程
 マルコフ過程とは「マルコフ性をもつ確率過程のこと」をいいます。ポイントは、「マルコフ性」と「確率過程」です。マルコフ性とは、将来(次の)状態の条件つき確率分布は現在状態のみに依存する性質のことです。また確率過程は時間と共に状況が変化することで、変化しうる確率変数のことです。

●単純マルコフ連鎖
 単純マルコフ連鎖とは、直接確率とその結果が観測可能なもののみで構成されます。単純マルコフ連鎖において状態遷移行列(特定のnをかけあわせる)を用いれば、特定の未来(n後)の状態を推測することができます。そして定常分布(n=∞)にすることで、未来の状態を推定することができます。(これは状態遷移行列から無限遷移後の存在確立を求めていることを意味しています。)

●隠れマルコフモデル(Hidden Markov Model, HMM)
 「隠れ」マルコフモデルにおいては現在の状態が直接観測されず、出力のみが観測されることになります。主な使用目的は「観測された記号系列の背後に存在する状態の遷移系列を推測する」ことです。(ここでの「状態」は観測できない要因(推定する必要がある)で、「出力」は観測できる要因のことです。)
 隠れマルコフモデルでは、パラメータとして遷移確率と出力確率の2種類をとります。
・遷移確率とは、状態から状態に遷移する確率。
・出力確率とは、ある状態で出力が得られる確率。

*隠れマルコフモデルの利用例(Oは出力記号列、Mはモデル、P(O|M)はMからOが生成される確率を表す)
1. 評価問題(evaluation problem)
OとMが与えられたときに、P(O|M)を求める問題。
これは単純に計算するだけで求められます。

2.復号化問題(decoding problem)
OとMが与えられたときに、Oを生成したMの最適な状態遷移系列を求める問題。
具体的にいえば、隠れている「状態」の推定します。状態遷移確率、出力確率、結果から「状態」を推定することになります。一般的にはビタビアルゴリズムという動的計画法の一種であるアルゴリズムが使用され、取りうる状態のパターンから最も尤もらしいパターンを選び出すことになります。
⇒自然言語の「品詞推定」はこの問題に対応しているといえます。以下で詳しくみてみます。

3.推定問題(estimation problem)
Oから、P(O|M)を最大にするようなMを求める問題
具体的にいえば出力から遷移確率や出力確率(パラメータ)の推定を行います。音声や遺伝子などの系列データを解析するために使われます。その際には、バウム=ウェルチアルゴリズムとよばれるフォワードバックワードアルゴリズムが採用されることが多いようです。

「複合化問題」と「品詞推定」の対応

品詞推定の場合、“出力記号系列O”は、与える「文章」にあたる。このとき、与える文章が、”モデルM”により生成された、つまり出力されたという捉え方をする。
⇒“モデルM”は、データセットから作成できる。・・・1⃣
⇒“Oを生成したMの最適な状態遷移系列”は、正しい品詞の系列に当たる。・・・2⃣

1⃣モデルMの導出
品詞のタグをつけられた文章データセットから以下が作成できます。
隠れマルコフモデル M = ( Q, Σ, A, B, π )
Q = { q_1,…, q_N } : 状態の有限集合 => 出現する全ての品詞
Σ = { o_1,…, o_M} : 出力記号の有限集合 => 出現する全ての単語
A = { a_ij } : 状態遷移確率分布 => 文章内の単語の並びで、二つの品詞が隣接して出現する割合
B = { b_i(o_t) } : 記号出力確率分布 => 着目する品詞に対し、ある単語が現れる割合
π = { π_i } : 初期状態確率分布 => 各品詞が文頭に現れる割合

2⃣Oを生成したMの最適な状態遷移系列の導出
「出力記号列O」と「モデルM」から「適切な状態遷移系列(適切な品詞の並び)」を求めます。それぞれの状態遷移系列のパターンが生成される確率は、「文頭」から始め、遷移の系列を辿りながら、状態遷移確率と出力確率の積を計算していくことで計算できます。
 適切な状態遷移系列とは最も高い生成確率を示すもののことを指します。しかし、取りうる状態遷移系列の生成確率をすべて計算すると、膨大な計算量になってしまうため、現実の場ではビタビ・アルゴリズム(viterbi)が用いられることが多いようです。

※ビタビ・アルゴリズムとは
 動的計画法を用いることにより、各状態遷移パターンの生成確率の計算の回数を小さく抑える手法です。(動的計画法とは「対象となる問題を複数の部分問題に分割し、部分問題の計算結果を記録しながら解いていく手法」)。この考えに基づき、品詞推定におけるビタビ・アルゴリズムは、「各状態について、最も累積確率が高くなるような、一つ前の状態のみを記録しておけば良い」という着想で成り立っています。
 例えば、状態Aに着目したとき、Aに遷移する状態としてBとCがあります。Bの単語出力確率と状態遷移確率の積が、Cのそれよりも大きいとき、記憶領域の状態Aに対応する箇所に「B」と記録します。このような記録を全ての状態について行うことで、最終的に最適な状態遷移系列が求められるというものです

 ただし、このような統計的手法はいわゆる教師あり学習であり、新語やまれ語に弱いという弱点があります。絶えずうまれる新しい語を人間の手で追加していく必要があり、膨大なマンパワーを必要とするという障壁があります。また文法が崩れた文章に対しても弱いという門代があります。そうした問題を克服するために、近年では教師がなくても形態素解析を行う方法が模索されています。

教師なし形態素解析について

 既存手法では、①最小記述長(MDL)(単語の長さには一定の法則があるという理解のもと行われる分割法)や、②ノンパラメトリックベイズ手法などが用いられていますが、単語境界を決定する際に、それまでの単語列等の文脈が考慮されず、文脈に応じて単語分割を変化させることは難しいとされています。これらの問題点はどちらも分かち書き(=単語の境界をはっきりさせる)のみを対象としている点にあります。品詞を推定するには、分かち書きさせた出力に対して別の手法で品詞付をおこなう必要があるといえます。さらにそもそも正確な分かち書きをするためには品詞情報が必要(つまり、教師なし品詞推定を行うことで、教師なし分かち書き推定の精度もあがるはず)であるはずです。つまり、現在では分かち書きと品詞を同時に学習することで、双方の精度があがるはずであり、これは文法を獲得することを意味しているとされ、研究が進められています。
 具体的には、形態素解析の問題を文字列s = c1c2…cnが与えられた際に、sを分割して得られる単語列及び単語列に対応した品詞列の確率P(w|s)を最大化する問題と定義します。観測できる文字列sから、sの部分文字列からなるセグメントを単語候補として、単語候補の隠れ変数として品詞が加わった隠れセミマルコフモデルとなっています。

形態素解析の定式化=確率p(w|s)を最大化するようなwを推定する問題
w = argmax p(w|s)
s = c1, c2, c3, …., cn
w = {w1w2w3…wn, z1z2z3…zn}
wn:単語、zn:品詞、cn:文字、s:文

具体的な手法
・各文にランダムに品詞を割り当て、文を単語とみなしてパラメータを更新
・収束するまで以下を繰り返す
①ランダムに文sを選択し、sの現在の形態素解析結果w(s)をパラメータから除去
②除去後のパラメータを用いて形態素解析結果w(s)’をサンプリング
③w(s)’をパラメータに追加し更新する

まとめ・参考サイト

 今回は、OCRとNER、およびそれらを支えている背景知識についてご紹介しました。自然言語処理分野は、画像処理分野などとは異なり、言語が異なると基礎モデルなどは応用できてもデータセットの収集や必要となる技術が大きく異なり、その成熟度は単純に参加する技術者の数や質がよい言語(英語や中国語)のほうが高くなります。また日本語に関していえば、英語と言語形態が大きくことなるための英語で培われた技術の転用が難しいという問題もあります。そのため、日本語の自然言語処理関連のサービスは他国とくらべて発展が遅れていることは常に指摘されていることです。AIはサービスをはじめることでデータを収集することができ、データを収集することでさらに質が向上し、そのことで利用者が増えさらにデータが収集できるという循環があるため、いちはやく最低限の実用性があるサービスを始めることが求められています。

参考サイト

・Pythonのモジュール

専門用語自動抽出pythonモジュール「termextract」
http://gensen.dl.itc.u-tokyo.ac.jp/pytermextract/

・固有表現抽出に関する論文

CRF を用いたブログ記事からの品名・店名抽出
https://ipsj.ixsq.nii.ac.jp/ej/index.php?action=pages_view_main&active_action=repository_action_common_download&item_id=187742&item_no=1&attribute_id=1&file_no=1&page_id=13&block_id=8⑴形態素N-gramと残差IDFを組み合わせた手法は、再現率は高いが適合率に課題があること、⑵正規表現とSVMによる品名の妥当性を組み合わせた手法は、再現率が低く情報の取りこぼしが多いことを指摘し、CRFsによる系列ラベリングを用いて不適合なものを排除する方向を提案しています。

分野特有の教師なし固有表現認識
https://ipsj.ixsq.nii.ac.jp/ej/?action=repository_uri&item_id=185027&file_id=1&file_no=1
教師なし形態素解析手法であるPYHSMMを拡張した方法を提案しており、単語レベルのPYHSMMとsemi-Markov CRFを統合して、一般分野のコーパスによる疑似教師データ、対象分野の少数のシードデータを用いています。

・固有表現認識についてのデータセットについてまとめた記事

【13個掲載】固有表現抽出に使えるデータセットまとめ
https://lionbridge.ai/ja/datasets/15-free-datasets-and-corpora-for-named-entity-recognition-ner/

・マルコフ過程など

【技術解説】マルコフモデルと隠れマルコフモデル
https://mieruca-ai.com/ai/markov_model_hmm/