投稿日
知識グラフの要素技術とアプリケーション
はじめに
本記事では、集めてきた情報を「知識」として表すための技術である知識グラフ(Knowledge Graph)について解説します。はじめに、知識グラフとその応用について説明することで、知識グラフとはどのようなもので、何の役に立つのか理解します。次に、知識グラフの構築方法について解説します。ここでは、固有表現認識、関係抽出、OpenIEに焦点を当てて説明します。最後に、現在の課題と解決に向けた今後の取り組みについて紹介します。
知識グラフとは
「知識グラフとは何か?」という問いに対する1つの解答は存在しませんが、多くの場合は「実世界のエンティティとその間の関係を記述して作成したグラフ」と言えます。ここで、「エンティティとは何か?」という疑問が湧きますが、エンティティというのは実世界の人や場所などの物事のことです。たとえば、人であれば徳川家康、場所であれば岡崎城はエンティティの1つです。また、これらのエンティティ間には出生地という関係が成り立ちます。このようなエンティティと関係から、知識グラフは成り立っています。
知識グラフは、エンティティをグラフのノード、エンティティ間の関係をグラフの辺で表すことによって作成できます。以下に知識グラフの例を示しました。たとえば、あるエンティティはname
と名付けられた辺が存在し、その値が「TIS Inc.」であることからTISを表すノードであることがわかります。そして、そのノードはINTECを表すノードとgroup_company
という関係で結ばれています。これにより、TISとINTECがグループ会社であることを表現しています。このように、ノードと辺を結んでいくことで、知識グラフを作ることができます。
知識グラフの例
知識グラフは、実世界のエンティティの知識を必要とする知的なシステムを構築するのに役立ちます。AIの観点からすると、知識グラフを通じて人間の一般常識へのアクセスが可能になるため、知識が必要なタスクを解くのに役立ちます。人間の観点からすると、直感的な構造で表現された知識を探索することが可能になります。近年のAIは、その内部がブラックボックスであり、何を根拠に判断しているのかがわからない点が課題になっています。知識グラフを使うことで、AIによる判断の根拠を、人間にとって解釈しやすく表現することを期待できます。
知識グラフのアプリケーション
知識グラフがどのようなシステムを作るのに役立つか、実際のアプリケーションを見ることで理解を深めていきましょう。ここでは、以下の4つのアプリケーションについて紹介します。
- 検索システム
- 質問応答システム
- 推薦システム
- 意思決定支援
商用の検索システムでは、検索クエリに含まれるエンティティに関する情報を表示するために、知識グラフを用いています。たとえば、俳優などの人物名を検索すると、検索結果に加えて、エンティティに関する情報が表示されます。俳優名に映画という単語を加えて検索すれば、その俳優の出演した映画一覧が表示されます。映画名を検索すれば、評価サイトでの評価がどのくらいなのか、どこで視聴できるかなどの情報が表示されます。LinやPoundらの研究によれば、検索クエリの40〜50%はエンティティに関するクエリであるとわかっています。したがって、知識グラフを用いて関連情報を表示することで、関連情報への効率的なアクセスを可能にしているのだと考えられます。
エンティティ関連の情報を表示している例(Google検索)
知識グラフを使って、質問応答システムを作ることもできます。一般的に、私たちが情報を探す際には、検索エンジンを使います。しかし、その出力は文書であるため、ユーザはそれらの文書を読み、必要な情報が含まれているか否かの判断をしなければなりません。一方、質問応答システムは回答そのものを返すため、情報をより効率よく得ることができます。実際、最近の商用検索エンジン(下図はBing)には、質問応答の機能を搭載し、効率的に情報を得られるものもあります。知識グラフを用いて質問応答を使うと、集計や条件による絞り込み、並べ替え、関連情報の表示などの操作がしやすいというメリットがあります。
Bingでいつエイブラハム・リンカーンが暗殺されたかを質問した例。1865年4月15日という回答が得られた。
また、知識グラフは推薦システムの構築に活用することもできます。たとえば、以下のような知識グラフを用いて、ボブが好みそうな映画を推薦したいとします。 この知識グラフでは、ボブやアリス、映画やジャンル、出演俳優がエンティティであり、その間に関係が定義されています。 このグラフを用いることで、ボブに対してまだ視聴していないAvatarとBlood Diamondを推薦できます。 また、単に推薦するだけでなく、グラフの関係をたどることで「Avatarはボブが以前に視聴したInterstellarと同じジャンルであったため推薦しました」というように推薦理由を出力することもできます。
映画の推薦システムの例。画像はA Survey on Knowledge Graph-Based Recommender Systemsより引用。
企業に関する知識グラフを構築すれば、投資、M&A、信用格付けなどの企業分析を支援することもできます。 たとえば、企業間の関係(投資関係、株主関係、取引など)がわかれば、ある企業の経営が危なくなったとき、どの企業にとって影響が大きいか判断するのに役立つでしょう。 また、企業と人間の関係(役員、株主、所属など)がわかれば、ある開発者・研究者がどの企業に関わっているのかがわかり、結果として企業がどんな技術に取り組んでいるのか判断するのに役立ちます。以下はアリババと株主、関連企業の関係を示したグラフです。
知識グラフによる意思決定支援の例(企査査)
ここで紹介した以外にも、さまざまな応用はありますが、これらのアプリケーションは以下のような知識グラフに支えられています。
- Google Knowledge Graph
- Amazon Product Graph
- Facebook Entity Graph
- Microsoft Satori
- LinkedIn Knowledge Graph
- YAGO
- DBpedia
これを踏まえて、次節では知識グラフを構築するための技術について紹介します。
知識グラフの構築
知識グラフの構築方法は、大きく分けて手動による構築と自動による構築の2つがあります。手動による構築は、質の高い知識グラフを構築できるというメリットがあります。その一方、人手で構築するため、構築されがグラフの規模が小さく、また構築のためのコストが高いというデメリットがあります。対象的に、自動的な構築ではルールや機械学習を用いてグラフを構築するため、規模の大きなグラフを構築できます。現在のほとんどの研究では、自動的な構築に焦点が当てられています。
自動的な構築手法は、構築元の情報源の性質により、構造化データと非構造化データからの構築の2つに分けられます。構造化データとは特定の構造を持ったデータのことです。たとえば、リレーショナルデータベースでは、一般的にカラムによって格納するデータの構造を決定するので構造化データと言えます。これ以外にもWikipediaのインフォボックスやテーブルは構造化データの一種です。一方、非構造化データとは特定の構造を持たないデータのことで、テキストや画像、動画などが該当します。画像などからの構築もありえますが、知識グラフの構築という文脈では、主にWebサイトやニュース、SNSなどのテキストデータからの構築を対象とすることが多いです。
構造化データと非構造化データの例
現在、戦略技術センターでは非構造化データであるテキストからの知識グラフの構築に焦点を当てて研究を進めています。一口に知識グラフの構築と言っても、その要素技術は多岐にわたります。具体的には以下のような要素技術を用いて構築します。
- 固有表現認識
- 関係抽出
- 共参照解決
- OpenIE
- Entity Linking
- Entity Resolution
- グラフ補完
- エラー検知
- Fact Check
- など
これらすべての技術については紹介しきれないので、今回は主に取り組んでいる以下の3つについて紹介します。
- 固有表現認識
- 関係抽出
- OpenIE
固有表現認識
固有表現認識は、テキストに出現する人名や地名などの固有名詞や、日付や時間などの数値表現を認識する技術です。固有表現認識は、質問応答システム、対話システム、情報抽出といった自然言語処理を用いた応用アプリケーションの要素技術としても使われています。知識グラフの構築とも深く関連した技術で、固有表現認識の結果を知識グラフにおけるエンティティの候補として扱うことが多く、テキストからの知識グラフ構築の第一歩として使われています。
固有表現認識の具体例を見てみましょう。例として「太郎は5月18日の朝9時に花子に会いに行った」という文から固有表現を認識してみます。そうすると、人名として「太郎」と「花子」、日付として「5月18日」、時間として「朝9時」を抽出できます。以下は実際に認識してみた場面です。テキスト中のどの位置に固有表現があり、それが何を表しているか、どのくらいの確率なのかを出力しています。
固有表現認識のデモ
上記の例では、人名、日付、時間を表す固有表現が抽出されました。伝統的には以下の8つのクラス (Information Retrieval and Extraction Exercise (IREX) の固有表現認識タスクにおける定義)がよく使われてきました。ただ、この分類だと質問応答などのアプリケーションに使う場合には粗すぎるため、利用目的によっては数百クラスまで拡張した分類を使うことになります。
クラス | 例 |
---|---|
固有物名 | ノーベル文学賞、Windows 7 |
地名 | アメリカ、千葉県 |
組織 | 自民党、NHK |
人名 | 安倍晋三、メルケル |
日付 | 1月29日、2016/01/29 |
時間 | 午後三時、10:30 |
金額 | 241円、8ドル |
割合 | 10%、3割 |
固有表現認識を行うための手法として、近年では機械学習を用いた手法が主流となっています。機械学習を用いた手法では、人間の付与した正解を用いてモデルに学習させます。つまり、テキスト中の「どこ」から「どこ」までが固有表現で、それが「何」の固有表現かを人間が付与しておき(下図)、その情報をモデルに与えて学習させるのです。ここで、B-X、I-Xは正解ラベルであり、入力文字列が固有表現であることを表現しています。B-Xは固有表現の始まり、I-Xは固有表現の続き、Oは固有表現でないことを意味しています。X部分にはPersonやDateなどの固有表現クラスを表す文字列が入ります。
機械学習による固有表現認識の例
固有表現認識を行うことのできるソフトウェアはspaCyやGiNZA、CaboChaなどさまざまありますが、戦略技術センターではanaGoを構築し、OSSとして公開しています。anaGoは固有表現認識や品詞タグ付けなどのタスクを簡単に学習・予測できるソフトウェアです。内部的にはLampleらやPetersらのモデルを実装しています。今は、より使いやすく高性能なソフトウェアがあるため、その使命を終えた感がありますが、今までに多くの論文で使われてきました。以下はその一部です。
- A Lightweight Recurrent Network for Sequence Modeling
- Aspect and Opinion Terms Extraction Using Double Embeddings and Attention Mechanism for Indonesian Hotel Reviews
- Domain adaptation for part-of-speech tagging of noisy user-generated text
- Mention Detection Method for Entity Linking
- Named Entity Recognition Through Bidirectional LSTM In Natural Language Texts Obtained Through Audio Interfaces
- Noisy BiLSTM-based Models for Disfluency Detection
- Synthesis and Machine Learning for Heterogeneous Extraction
- Transfer Learning for Indonesian Named Entity Recognition
- Sub-word information in pre-trained biomedical word representations: evaluation and hyper-parameter optimization
- Voting for POS tagging of Latin texts: Using the flair of FLAIR to better Ensemble Classifiers by Example of Latin
また、固有表現認識を含む機械学習用のデータを作成するためのツールである「doccano」をOSSとして公開しています。 doccanoを利用することで、固有表現認識で必要とするような文字や単語単位でラベル付けされたデータを簡単に作ることができます。 さらにdoccanoが提供するAPIを活用すれば、自身で作成したモデルを用いて、自動的にラベル付けを行うこともできます。 これにより、データ作成にかかる時間を劇的に短縮できます。
doccanoによる固有表現のラベル付け
関係抽出
関係抽出は、固有表現間に関係があるか検知し、関係の種類を分類するタスクです。関係抽出も固有表現認識と同様、質問応答システムや情報抽出といったアプリケーションの要素技術として使われています。知識グラフの構築とも深く関連した技術で、固有表現認識でグラフ中のエンティティの候補を洗い出した後、それらの間の関係を推定するために使われています。知識グラフがエンティティとその間の関係から成り立っていることから考えても、固有表現間の関係を得るのは自然な方法です。
関係抽出の具体例を見てみましょう。例として「太郎はTISに勤務している」という文に対して関係抽出してみます。まず、固有表現認識を行うことで、この文から人名として「太郎」、組織名として「TIS」という2つの固有表現を抽出できます。その後、関係抽出をすることで、これらの固有表現間の関係として、人物の所属を示す関係「Person-Affiliation」を割り当てられます。最終的に(太郎, Person-Affiliation, TIS)
というトリプルが得られます。このようなトリプルを大量に抽出して結合すれば、知識グラフを構築できるというわけです。
上記の例では、所属を表す関係が抽出されました。一般的に、抽出する関係のタイプは使用するドメインによって変わります。映画のドメインであれば、映画のジャンルや演者、監督などの関係タイプが使われるでしょうし、企業のドメインであれば子会社や出資、経営者を表す関係タイプが使われるでしょう。関係抽出の分野でよく使われるデータセットであるTACREDでは以下の図に示すような41の関係が使われますが、データセットが変われば、含まれる関係タイプが変わる点に注意する必要があります。
TACREDの関係タイプとその頻度。グラフは公式サイトよりキャプチャ。
関係抽出を行うための手法としては、主に教師なし、教師あり、半教師ありの3つがあります。教師なしの手法では、手書きのパターンなどを用いて関係抽出します。そのため、学習データが必要ないというメリットがあります。ただ、抽出したい関係に応じてパターンを書かなければなりません。教師あり手法は、高性能な点が魅力的です。その一方、学習データを用意するコストが高いというデメリットがあります。半教師あり手法では、既存の知識ベースを利用して、学習データを自動で作成します。これにより、教師ありのデメリットを解消しつつ、メリットを享受できます。ただし、作成できるデータが知識ベースに依存します。
戦略技術センターでは、ニューラルネットワークを用いたモデルを構築し、モデルが何に注目して関係抽出をしているのか明らかにする研究をしていました。ニューラルネットワークを用いたモデルは高性能なことが多いのですが、その内部でどのような点に注目して性能を出しているかは明らかではありません。もし注目している点がわかれば、それを特徴として組み込んだより軽量なモデルを使うことで、性能向上と高速化を期待できるはずです。結果として、以下の図で表されるような依存構造木上の2つのエンティティ(fever, weather)間の最短パスが性能向上に大きく寄与していることがわかりました。
依存構造木の例。エンティティがfeverとweatherとすると、最短パスは赤いエッジで表される。
研究の詳細については以下の論文を御覧ください。
OpenIE
OpenIEは、テキストからエンティティとその関係を表すタプル(例: (Bill Gates, founded, Microsoft))を抽出する技術です。「なんだ、固有表現認識と関係抽出じゃないか」と思われるかもしれませんが、大きな違いは事前に関係のクラスを定めない点にあります。関係抽出では、関係のクラスを事前に定義しておく必要がありましたが、OpenIEでは関係をテキストから抜き出す点が異なります。この違いは、伝統的な情報抽出では限られたドメインを対象としていたのに対し、OpenIEはWeb上の幅広いドメインのテキストを対象としている点に起因します。ドメインが絞られていないため、関係を事前に定義することが難しいのです。
OpenIEが盛んに研究されている英語を例に、OpenIEの具体例を見てみましょう。例として「Barack Obama was born in Hawaii」という文に対してOpenIEをしてみます。この場合、テキストから(Barack Obama, was born in, Hawaii)というタプルを抽出できます。このとき、「was born in」があらかじめ定義されたクラスではなく、テキスト中から抽出していることに注意してください。関係抽出を使う場合は、あらかじめ「birthPlace」のような関係を定義しておき、2つのエンティティに対して割り当てる必要がありました。
OpenIEを行うための古典的な手法として、テキストを構文解析し、得られた木構造に対してルールを書く手法があります。 たとえば、名詞句(NP)をエンティティ、そして各名詞句のペアをつなぐ単語列を関係フレーズとするようなルールを書くことができます。 流石にそれだけだと不正確なタプルが抽出されるため、ルールを用いてフィルタリングしたり、機械学習を用いてタプルに確率を割り当て、しきい値によってフィルタリングするといったことをして、抽出されるタプルの品質を向上させます。
英文に対するOpenIEの例
戦略技術センターでは、述語項構造解析を用いて、日本語テキストからの知識獲得にチャレンジしています。述語項構造解析は、文章内の述語とその項の関係を解析する処理です。たとえば、「太郎が酒を飲む」という文を解析することで、「飲む」が述語で「太郎」と「酒」が述語の項であり、それぞれに対して主語を表す「ガ格」や目的語を表す「ヲ格」を付与します。以下は契約書の一部を情報源として作成したグラフの例です。
述語項構造解析による知識獲得の例
おわりに
本記事では、知識グラフについて、その応用と要素技術に焦点を当てて紹介しました。上記で紹介した内容は知識グラフ構築のほんの一部です。実用的には、知識グラフは一度構築すれば終わりというものではなく、人間と同じく知識を更新し続ける必要があります。また、テキストやテーブルから知識を獲得する都合上、その中には嘘や既存の知識と矛盾する内容が含まれている可能性があります。現在は抽出精度を上げることに焦点を当てていますが、今後は継続的な更新の仕組みづくりや獲得した知識を検証する技術についても研究が必要になると考えています。
参考資料
- Lin, Thomas, et al. “Active objects: Actions for entity-centric search.” Proceedings of the 21st international conference on World Wide Web. 2012.
- Pound, Jeffrey, Peter Mika, and Hugo Zaragoza. “Ad-hoc object retrieval in the web of data.” Proceedings of the 19th international conference on World wide web. 2010.
- Lample, Guillaume, et al. “Neural architectures for named entity recognition.” arXiv preprint arXiv:1603.01360 (2016).
- Peters, Matthew E., et al. “Deep contextualized word representations.” arXiv preprint arXiv:1802.05365 (2018).
本コンテンツはクリエイティブコモンズ(Creative Commons) 4.0 の「表示—継承」に準拠しています。