知識グラフをテキストデータ+NLPから構築する時のイロハ
はじめに
こんにちは、グループ研究開発本部 AI研究開発室のC.Wです。去年の2022年は知識グラフに愛があり、あちこちにある非構造化データから知識グラフを構築できればさぞかし美しいのではないかと思い色々と試しました。前回の記事では、Open Information Extraction(OIE)のNLP技術を利用してニュースデータの非構造テキストから知識グラフを構築することを試していて、それ以前ではCoreference Resolution + Named Entity Recognition(NER) + Relation Extraction(RE)等のハイブリッドなやり方で試していました。今日は一年の集約として、Hand onの内容ではなくこれまでの私の学びと問題と感じたところを整理して、これからこの道に挑戦する皆様の糧になれればと思います。
改めて知識グラフとは
知識グラフとは「知識」と言う抽象的なものをグラフ構造に保存する様なデータベースです。さらにグラフ構造ではnodeとedgeの組み合わせなので、AとBとその関係性の知識をデータ化すれば知識グラフになれるだろうと考えていました。なので、当初思った応用例としては「知識が全くない人間でも見れば知識そのものを得られる」ようなものを想定していました。ただ実際にHand onして感じたのは知識として自立するにはまだ遠く、知識グラフから自立で説明できる情報はEdgeの関係性と時間性に大きく左右されるものであると実感しました。Edgeの関係性
例えば、父と子の間にどのような関係があるのか考えてみます、なのでまず単純な親子関係があるので関係性に親子を作りました。そうすると状況に応じて養子の可能性もあり、生物学的な親と法律的な親の関係がうまく説明できなくなります。レアケースに思われる方もいるかと思いますが、知識が自立して情報伝達をしようとする時不可欠な情報になるとのことは発生します。時間性
現在のグラフデータベースの制限的なところです。NodeでもEdgeでも、現実世界では基本的に時間に応じて大きく変化しているものですが、グラフデータベースではうまくその状態変化を取り込むことができないです。例えば法人の表現をしたい時、取締役会とか変わるような人間組織では、就任辞任のタイミングに応じて大量の変化が発生します。かつ、目的に応じて非常に大事なことなので必ずしもデータ上で表現がしたいです。なので実務的な方法では複数のedgeで説明をしますが、そうすると目視の時では一発で視認できなくなるような状態にまずなります。ただ例えば社名が変わるような誰とも関係が発生していなくnodeの属性自体の変化だと、現状どうしようもないこととなります。NLPからの知識抽出
機械学習の実応用問題
よくある話しですが、Benchmarkや学習データでは高得点をしたが実応用ではうまくいかない、実データでFine tuningをしなければいけないがそもそもタスク自体が新しく実データも学習可能に整備されてない(し、整備する余裕もない)。NLP領域では学習データの準備は難しく、最近の論文でも数年前のデータセットをBenchmarkとして学習しています。さらにその数年前のデータセットでは設計された当初の時期で正確にパフォーマンスを測るため、難易度が比較的低いデータとなり、NLPで行くと簡単な語句がメインで、語句の長さが短いのが特徴です。一般的な解決法は事前学習のモデルを意図的に作った課題向けのデータセットでfine tuningをしてこの問題の克服をしていますが、データセットを作ること自体は非常にtime consumingの作業です。その上に、ACE04のデータをご覧したことのある方はご存知かと思いますが、基本的に小学レベルの英語です。それをいきなりBloombergレベルの英語を突っ込んでハードルがあるような文章を入力したので、いいアウトプットは正直あまり期待していなかったが、ここまで解釈性が低かったのは予想外でした。
関係性抽出
Relation Extractionの制限
Relation Extractionの教師あり手法の特有問題であり、学習するため何かしらのラベル付けが必須ですが、「何をどれまでラベルをつけたらいいか」の判断により出てくる違うデータセットのバイアスです。例えばNamed Entity RecognitionやObject Detectionでは、どの単語/物をどうラベル付けするかで解像度とかが異なりアウトプットに影響を施します。その一方で、Relation ExtractionはもしN個単語があるとするとNの二乗の関係性が存在していて、その関係性が2単語だけで説明できるとも限らなく、非常にラベル付けがしにくいタスクでもあります。また、特にNLPを使ったグラフ構築ではRelation Extractionのモデルに大きく依存している現状もあります。REのデータセットはデータセット別で独自の関係性を表示するようにラベル付けをしていて、意図的に汎用性の高いように設定されているので関係性の説明解像度がイマイチ感がある。例えばWebNLGとかはTripletの形式で、単純に3個の単語(か語句)が関係しているを示していて、ACE04とかはORG_AFFとかで違うEntityの関係を示している。そういう制限を前提にしてしまうと曖昧な関係のみが見えていて知識というレベルに落とせないことになりうる。