Ahogrammer

Deep Dive Into NLP, ML and Cloud

2018年のふりかえりと2019年にしたいこと

あけましておめでとうございます。

今日までお正月休みで明日から会社に復帰します。三週間ほど家にこもってゲームばかりしていて頭もだいぶボケてきているので、出社前のリハビリがてら2018年のふりかえりをしたいと思います。まずは2018年に何をしていたか思い出すために、やったことを時系列で書いてみました。

翻訳した技術書が発売される

f:id:Hironsan:20190109104619p:plain

2018年の8月に翻訳を担当した「直感ディープラーニング」が発売されました。この本の企画自体は一年前の2017年7月辺りに立ち上がったのですが、それから一年経ってようやく発売されました。書店に並んでいる本を見たときは感慨深かったです。本当にいい経験をさせてもらったのでやってよかったです。

アノテーションツールのリリース

https://github.com/chakki-works/doccano/blob/master/docs/named_entity_recognition.png?raw=true

同じく2018年の8月には開発したテキスト用のアノテーションツールであるdoccanoをリリースしました。doccanoは企画から開発、リリースまで一人で行ったプロジェクトなのですが、最近は徐々にユーザたちがIssueやPRを上げてくれるようになってきました。2019年は開発者であると同時にマネージャとして多くのユーザとともにdoccanoを発展させていきます。

資格取得

2018年はIPAデータベーススペシャリストネットワークスペシャリストの資格を取得しました。IPAの試験を受けるのは学生時代以来(3年ぶりくらい?)で午前試験の免除もなく体力が持つか不安だったのですが、どちらも一発で合格することができました。よく「実際には役に立たない」等の批判を受けているのを目にしますが、私としては資格取得を通じて体系的に視野を広げられたり、勉強法について見直したのは今後も活かせると思っています。

AutoMLの講演

speakerdeck.com

2018年の12月にはAutoMLについて90分間の講演を行いました。相手が技術者ではなかったので話す内容について結構悩んだ上でスライドを作成したのですが、あまりウケなかった(一番前のおじさんが寝てた(´;ω;`))ので失敗だったかなと思います。ただ、内容自体は結構良いと思っていますし、今後確実に伸びてくる分野なので以下の記事と合わせて見ていただくと役に立つと思います。

qiita.com

2019年にしたいこと

2018年の失敗は色々なことを同時並行にやろうとしたことだと思っています。よく言われていることではあると思いますが、マルチタスクで進めると切り替えのコストが高いことに加えて、一つ一つの仕事がなかなか進まないのでモチベーションがどんどん落ちていくのを感じました。2019年は一つずつ片付けるような仕事のやり方に変える予定です。

2019年は以下のことに絞って取り組みたいと考えています。

  • doccanoのマネジメントとサービス化
  • 研究成果のソフトウェア化
  • 書籍の出版

doccanoはありがたいことにどんどん成長しています。はじめは一人で開発していたので誰かに何かをして貰う必要はなかったのですが、開発してくれる人が増えてきたので何らかの対策を打たないとまずい状況になっています。なので、今年はOSSのマネージャとしてプロダクトを成長させつつ経験を積んでいきたいと思います。

研究成果のソフトウェア化では、研究結果を誰にでも使える形で公開しようと思っています。2019年はテキストからの知識の獲得と活用について取り組もうと考えているのですが、まずはその要素技術である固有表現認識とエンティティリンキングについてソフトウェアを公開できればと思います。

固有表現認識は以下のような感じ。

f:id:Hironsan:20190109122446p:plain

エンティティリンキングは以下のような感じ。以下は「原辰徳」についてエンティティリンキングをした結果です。固有表現を知識ベースにリンクすることで様々な情報を取得できることを示しています。

f:id:Hironsan:20190109122545p:plain

もう一つ取り組みたいのは書籍の出版です。実は昨年から自然言語処理の入門本を書いているのですが、なかなか筆が進まず昨年中に書き終えることができませんでした。今年の早い段階で書き終えて年内には出版できるようにしたいです。

最後になりますが、今年もよろしくおねがいしますm( )m

テキストの構造化を支える技術 -OpenIEの未解決問題-

第3回目の今回は節ベースのOpenIE手法を紹介する予定でしたが、予定を変更してOpenIEの未解決問題について紹介することにします。

2018年に発表された論文「A Survey on Open Information Extraction」では、OpenIEには以下の未解決問題があると主張しています。

  • OpenIEシステムの評価
  • 多言語への拡張
  • フレーズの正規化

各問題について見てみましょう。

OpenIEシステムの評価

OpenIEにおける課題の一つとして、異なるOpenIEシステムを大規模、客観的かつ再現性のあるやり方で評価・比較した研究がほとんど無い点を挙げられます。その理由として、何が妥当な関係タプルなのかという明確かつ正式な仕様についての合意が取れていない点があります。このような状況がアノテーションされたgold standardなデータセットを作るのを妨げています。したがって、客観的かつ再現可能な形で他のシステムと比較するのが難しいわけです。

また、評価における課題として、評価で使われるコーパスがニュースやWikipedia、Webドメインコーパスに限られている点があります。第一回目で書いたように、OpenIEの手法はドメイン独立であるのが望ましいので、様々なデータセットに対処できるべきです。しかし、評価で使われるコーパスが偏っているため、様々なジャンルのテキストに対して手法が有効なのかがわからないという現状があります。

多言語への拡張

OpenIEの2つめの問題点として、英語以外の言語は置き去りにされている点を挙げられます。第1回目と第2回目で紹介したTextRunnerとReVerbは英語を対象とした研究ですし、他の多くの研究でも英語を対象としています。そのため、提案された手法が英語以外でも使えるかと言うと疑問が残ります。それは、ReVerbで関係フレーズを抽出する際に使った以下のパターンが日本語では使えないことからもわかるでしょう。

f:id:Hironsan:20181015101518p:plain
Identifying Relations for Open Information Extractionより引用

言語化を目指した研究の一つとして、PredPattの研究があります。この研究ではUniversal Dependency(UD)パーサの解析結果に対してパターンを書くことで、多言語に対応したOpenIEシステムを作成しています。UDとは、ザックリ説明すると、言語ごとに違っていた依存関係のラベルを統一した規格のことです*1。ラベルを統一することで、UDのラベルに対してパターンを書けば、様々な言語を処理できることが期待されるのです。

以下はGoogleCloud Natural Language API構文解析をした結果です。オレンジ色のラベルがUDのラベルを示しています。このようなUDのラベルに対してルールを書くことで、多言語対応したOpenIEを作ろうというわけです。

f:id:Hironsan:20181024112045p:plain

フレーズの正規化

OpenIEの2つめの問題点として、抽出した関係フレーズやargsの正規化があります。ここで、正規化とは抽出した関係フレーズやargsを代表的な形式に帰着することを指します。たとえば、「originally founded by」のような関係フレーズが抽出された場合、副詞である「originally」を除去するのは正規化の一種です。

正規化が問題となるのは、OpenIEで抽出した関係タプルを下流のタスクで使用する場合です。伝統的な情報抽出システムでは、あらかじめ決められた関係クラスだけを抽出していたので、下流のタスクではクラスを想定して処理を書くことができました。OpenIEだと事前にクラスを定義しないため、クラスを想定して処理を書くことは困難です。

おわりに

第3回目の今回は、OpenIEの未解決問題について紹介しました。次回は、節ベースで関係タプルを抽出する手法について紹介する予定です。

私のTwitterアカウントでも機械学習自然言語処理に関する情報をつぶやいています。

この分野にご興味のある方のフォローをお待ちしています。

参考文献

テキストの構造化を支える技術 -パターンマッチで始める情報抽出-

前回の記事「テキストの構造化を支える技術 -概要編-」では、OpenIEの記念碑的なシステムであるTextRunnerを紹介しました。第2回目である今回は、シンプルながら強力なReVerbと呼ばれるシステムを紹介します。

記事の構成としては、最初にTextRunnerの課題について説明し、次にReVerbではその課題をいかにして解決したのかを説明します。最後にReVerbのアルゴリズム全体を示します。

TextRunnerの課題

まずTextRunnerの入出力についておさらいしておきましょう。TextRunnerの入出力はそれぞれテキストと関係タプル (arg1, rel, arg2) なのでした。たとえば、入力として「EBay was originally founded by Pierre Omidyar.」という文を与えた場合、出力としては (Ebay, Founded by, Pierre Omidyar) という関係のタプルを抽出することを期待されます。

TextRunnerで関係タプルを抽出することはできたのですが、抽出された関係タプルについてエラー分析をしたところ、誤って抽出されたタプルに傾向があることがわかりました。それらは以下の3つに分類されます。

  • Incoherent extraction
  • Uninformative extraction
  • Over-specific extraction

Incoherent extractionsとは、意味のある解釈をできない関係フレーズを抽出したパターンのことです。Incoherentは支離滅裂という意味を持ちます。たとえば、以下の一番上の文では、文中に出現する動詞を接続した「contains omits」を関係フレーズとして抽出していますが、その意味は解釈できません。このようなパターンはTextRunnerの出力の約13%を占めています。

f:id:Hironsan:20181016102410p:plain
Identifying Relations for Open Information Extractionより引用

Uninformative extractionとは、重要な情報が落ちた関係フレーズを抽出したパターンです。たとえば、「Faust made a deal with the devilファウストは悪魔と契約した)」 という文に対して (Faust, made, a deal) という抽出をした場合が該当します。なぜなら、本当に抽出して欲しいのは「契約する」という意味の「made a deal with」を関係フレーズとした (Faust, made a deal with, the devil) だからです。以下にUninformative extractionの例を挙げます。このパターンはTextRunnerの出力の約7%を占めています。

f:id:Hironsan:20181016103225p:plain
Identifying Relations for Open Information Extractionより引用

Over-specific extractionとは、抽出した関係フレーズが詳細すぎる(over-specific)パターンです。たとえば、「The Obama administration is offering only modest greenhouse gas reduction targets at the conference.」という文に対して (Obama administration, is offering only modest greenhouse gas reduction targets at, conference) という抽出をした場合が該当します。これだけ詳細だと、後続タスクで役に立てるのが難しくなります。

まとめると、TextRunnerをはじめとする既存のOpenIEシステムの抽出結果を分析したところ、「Incoherent」「Uninformative」「Over-specific」な関係フレーズが抽出されているという問題があることが判明しました。次に説明するReVerbは、これらの問題を解決することに焦点を当てています。

ReVerbとは?

ReVerbは2011年に「Identifying Relations for Open Information Extraction」という論文で発表されたシステムです。その名前の由来は「Identify Relations from Verbs.」から来ています。その名の通り、テキスト中の動詞を起点に関係フレーズを認識する手法です。

ReVerbでは前述した3つの問題点を解決することに焦点を当てています。以下では手法のキモとなる部分について説明します。

手法のキモ

前述した3つの問題となる抽出を防ぐために、ReVerbでは抽出する関係フレーズに2つの制約を課します。その一つは構文的制約です。構文的制約はIncoherentとUninformativeな関係フレーズを減らすために使われます。もう一つは字句的制約です。こちらはOver-specificな関係フレーズを減らすために使われます。

構文的制約

構文的制約は品詞のパターンに基づいて、抽出する関係フレーズに制約を課します。具体的には以下に挙げる3パターンの制約を適用します。

f:id:Hironsan:20181015101518p:plain

最初のパターンでは、単一の動詞あるいは副詞を抽出できます。2番目のパターンでは、動詞の後に前置詞が続くパターンを抽出できます。3番目のパターンでは、動詞の後に複数のW(名詞、形容詞、副詞、代名詞、限定詞)が続き、前置詞で終わるパターンを抽出できます。複数のパターンにマッチした場合は、最長マッチした系列を採用します。

実際、上記のパターンを適用することでIncoherentとUninformativeな関係フレーズを減らせます。たとえば、Incoherentの例で紹介した 「contains omits」のような動詞が2つ並ぶ場合はパターンにマッチせず、Uninformativeの例で紹介した「Faust made a deal with the devil」では2番目のパターンが最長マッチし、関係フレーズとして「made a deal with」が抽出されます。

字句的制約

構文的制約だけだと、 (Obama administration, is offering only modest greenhouse gas reduction targets at, conference) のようなover-specificなフレーズにマッチする可能性があります。そこで、ReVerbでは字句的制約を用いてover-specificなフレーズを除去します。

字句的制約では、関係タプル (arg1, rel, arg2) について「適切な関係フレーズなら多くの異なるargと共に現れるはず」という仮説を用いて関係フレーズを絞り込みます。これはどういうことかというと、「made a deal with」のような適切な関係フレーズなら (Faust, devil) 以外の様々なargとも一緒に使われるだろうということを言っています。

字句的制約は、関係フレーズが格納された巨大な辞書を使って行います。この辞書には、多くの異なるargを取る関係フレーズが格納されています。この関係フレーズが格納された巨大な辞書に抽出された関係フレーズが入っていれば字句的制約を満たすとみなします。ちなみに、辞書は以下のステップに沿って作成します。

  • 大規模コーパスから構文的制約を満たすフレーズを抽出
  • ヒューリスティックにargを絞り込む
  • 少なくともk以上の異なるargペアを取る関係フレーズを辞書に格納

kは検証用データセットを使って決めています。その結果、k=20がover-speficiedなフレーズを取り除くのにちょうどよいという結果になりました。結果的に170万の関係フレーズを辞書に格納しています。

全体のアルゴリズム

ここまでで、ReVerbのキモとなる処理について解説しました。ReVerb全体の処理は以下の順番で行われます。

  1. 関係フレーズの抽出
  2. argとなる名詞句の抽出
  3. ロジスティック回帰を使った関係タプルへの確率割り当て

最初に、関係フレーズの抽出を行います。関係フレーズの抽出は、構文的制約で示した品詞のパターンを使って行います。その後、字句的制約を用いてフィルタリングします。

次に、argとなる名詞句を抽出します。これは、抽出した関係フレーズの左右にある名詞句を抽出することで行います。なぜ、関係フレーズの左右に出現する名詞句をargとするかというと、関係フレーズは名詞句の間に現れるべきという仮定を置いているためです。この仮定は他のOpenIEのシステムでも暗黙的に置かれていることがあるため、論文を読むときは注意しましょう。

最後に、抽出された関係タプルに対してロジスティック回帰を使って確率を割り当てます。確率を割り当てることで再現率と適合率のトレードオフを調節できるようにするのが目的です。分類器の入力は関係タプルの特徴ベクトル、出力は正しいか否かを与えます。学習データについては手動で1000文にラベル付けして作成しています。

以上で、ReVerbで使われている手法の解説は終わりです。ReVerbのソースコードは以下のリポジトリで公開されているので、実装について詳しく知りたい場合は参照すると良いのではないかと思います。

github.com

おわりに

第2回目の今回は、TextRunnerの課題とReVerbについて紹介しました。ReVerbは他のOpenIEのシステムに組み込まれることもあるので、ReVerbについて理解しておくと他のシステムについての理解をするときにも役立つのではないかと思います。次回は、節ベースで関係タプルを抽出する手法について紹介する予定です。ブログを購読していただけると見逃しがないのではないかと思います。

私のTwitterアカウントでも機械学習自然言語処理に関する情報をつぶやいています。

この分野にご興味のある方のフォローをお待ちしています。

参考文献