情報サービスユニットの櫻井です。業務では主に日経が提供しているBtoBサービスのユーザーデータ分析や記事データを対象にした情報抽出を行っています。
先日、弊社のデータサイエンティスト3名および業務委託のエンジニア1名で「Team N」としてKaggleの「U.S. Patent Phrase to Phrase Matching」コンペに参加し、1,889チーム中8位という成績を収めて金メダルを獲得しました。この結果、増田太郎と筆者である私、櫻井亮佑がKaggle Masterに、そして青田雅輝がKaggle Expertとなりました。
本記事では、コンペに取り組んだきっかけから金メダルを取得するに至った解法について簡単に記載します。
「Team N」のメンバー
- 増田 太郎(情報サービスユニット所属)
- 櫻井 亮佑(情報サービスユニット所属)
- 青田 雅輝(日経イノベーション・ラボ所属)
- 舘野 祐一(業務委託・@hotchpotch)

コンペの概要
私たちが今回挑戦したのは、Satsyil Corpというテック企業が主催する「U.S. Patent Phrase to Phrase Matching」コンペです。本コンペでは参加者に、特許に関わる文脈において特定の2つのフレーズ間の類似度を予測するタスクが課されました。
例えば、"television set"と"TV set"という2つのフレーズが与えられた場合、両者は同じ概念を表すため、類似度1.0の予測をすることが求められます。
単語の活用変化や品詞の差異一つで類似度が大きく変わる例が多数存在し、コンペ参加者には細かなニュアンスの違いを正確に捕捉するモデル作りが求められました。
anchor | target | 類似度 |
---|---|---|
close gate | closing gate | 0.5 |
dissolving | dissolution | 0.5 |
wedge device | wedge devices | 0.5 |
コンペに参加したきっかけ
本コンペに参加した理由は2点あります。
1点目は、事前に今回のチームメンバーとコンペに取り組む約束をしていたためです。今回共にコンペに参加したチームメイトである増田や青田とは今年の5月にも別のコンペに参加しており、その際には銀メダルを取得しました(当時の体験記はこちら)。5月のコンペを通じ、同じ職場のメンバーで和気藹々とコンペに取り組む楽しさを覚え、「次はPPPMで」と約束を交わしていたのでした。
2点目は、ドメインが個人的に馴染み深く興味が湧いたためです。私は大学時代に産業財産権について学んでいたこともあり、特許領域には強い思い入れがありました。結果的には、ドメイン知識を何一つ活かしませんでしたが、最後まで興味を持ってコンペに取り組むことができたので結果オーライだと思っています。
Team Nの解法
前書きの通り、私たちは1,889チーム中8位という好成績を収めることが出来ましたが、その要因はモデリング手法、訓練手法、そしてアンサンブル手法の大きく3点で行った工夫が功を奏したためだと考えています。 以下、各手法に関する工夫について記載します。
なお、詳細な解法にご興味がある方はKaggleのDiscussionに私が投稿したこちらをご覧ください。
モデリング手法 - トークン分類モデル
今回参加者に課されたタスクは、特定の文脈において特定の単語(anchor)と目的の単語(target)の類似度を予測するものでした。そのため、コンペに取り組み始めた当初は、anchorとtargetをペア単位で入力して予測を行う以下のようなテキスト分類モデルを設計していました。

しかし、ホストからは1つのanchorに対して複数個のtargetが存在する形式でデータが提供されており、anchorとtargetを一対一で入力する上記の設計は、どこか実態に則していない違和感がありました。とは言え、コンペ中盤までは何か良いアイデアが浮かぶようなこともなく、テキスト分類モデルをベースラインモデルとしていました。
コンペ終盤になってようやく、私たちにある考えが浮かびます。それは、ある特定のanchorとtargetの関係は、同一のanchorと比較が行われる別のtargetとの類似度を推定するための情報を含んでいるのではないかという仮説です。例えば以下のように、anchorである"rotary electric"とtargetである"rotating electric"の類似度0.75を予測するとします。この類似度を予測する上で、"rotary electric"と"rotary electrical"や、"rotary electric"と"fluid"など、別の単語ペア間の類似度の情報が有用な情報を含むのではないか、と考えたわけです。

そこで、以下のように特定のanchorと比較すべき全てのtargetを含む入力を用意し、一度に複数のtarget間との類似度を予測するモデルを訓練することにしました。


この結果、anchorとtargetを一対一でモデルに入力する手法よりも、大幅にCV[1]とLB[2]のスコアを向上することができました。
訓練手法 - AWP(Adversarial Weight Perturbation)
直近のNLP系コンペの上位解法では定番となっている敵対的学習手法の一つです。前回参加したコンペでは仕組みを正確に理解できずに使用を断念しましたが、今回は論文を改めて精読して活用した結果、CVを大きく改善することができました。
AWPを使うと、収束した値の近傍においても損失が大きくならないような重みを求めることが可能です。これにより、多少分布の異なる入力が与えられた場合でも頑健に予測が可能になります。このような重みを求めるために、AWPでは訓練時に損失が最も大きくなるような摂動を敢えて重みに加え、改めて誤差逆伝播を行うということをします。
摂動をコントロールするハイパーパラメータは具体的に2つあります。摂動を与えることが可能な最大範囲adv_eps
と与える摂動の大きさadv_lr
です。[3]
adv_epsを小さく設定すると摂動を与える範囲が限定的になり、学習が安定的になる一方で摂動の方向が曲げられてしまいます。そのため、adv_eps
に大きめな値を設定した上でadv_lr
のパラメータを集中的に探索することがAWPを活用する上で重要な鍵でした。

アンサンブル - 制約付き最小二乗法
コンペ終了日前日の時点で、前記の工夫により訓練した有望なモデルが20個近くも出揃いました。そこで私たちは、機械学習コンペではお馴染みのアンサンブルを行うことにしました。しかし、ここで一つ問題が生じます。20個のモデルからどのモデルを採用し、また採用すると決めた複数のモデルの出力をどのような比率で重み付けをし、最終出力を得るかです。
前回参加したコンペでは、深く考えずにベイズ最適化を用いて重みを探索しましたが、今回のコンペでも同様の手法を使用すると、あまりにも時間が掛かり最終sub[4]に間に合わないことが明らかでした。また今振り返ると、アンサンブル後の出力が線形和で表せることを考慮すれば、ベイズ最適化を使用することが妥当ではなかったようにも思われます。
そこで今回は、各係数に非負条件を課したリッジ回帰を行い、得られた係数を重みに使用するという単純な手法に立ち返りました。前回コンペのように重みの探索に膨大な時間が掛かることもないので、20個のモデルから様々な組み合わせでアンサンブルを試してCVを算出することができました。さらに本手法で行ったアンサンブルは、いずれもCVとLBが強く相関しており、安心してCVのスコアを追い求めることができました。
最終的には、20個のモデルの中から6つのモデルを選択してアンサンブルした、最高CVの予測を最終subに使用し、コンペティションを8位で終えました。

終わりに
今回のコンペによって、データサイエンティストとして一人前の自信が付くだろうと思い目標にしていたKaggle Masterになれて嬉しかったです。しかし、いざなってみると一気に自信が付いてくるかと思いきやそういうものでもなく、まだまだ知見が不十分な点が多く、学び続ける必要性を強く感じています。今後も謙虚に学び続けていきたい所存です。
また、今回は特許ドメインに特化した自然言語処理タスクを解きましたが、別ドメインでも応用可能な知見を蓄えることができたので、学んだ内容を今後業務で活かすのが楽しみです。日本経済新聞社には、これらの知見を存分に活かせるだけの整ったデータ基盤が存在します。そして私たちは、記事データなどの大規模なテキスト情報を処理し、ユーザーに新たな価値を提供するため、データサイエンティストの仲間を募集しております。 少しでもご興味のある方は、ぜひ採用情報ページやインターン情報ページをチェックしてみてください。
注釈
[1]: 交差検証という手法を使い、ホストから提供された訓練データのみで算出したスコアです。訓練データのみで算出したスコアであるため、このスコアの向上が必ずしもテストデータで算出したスコアの向上に繋がるとは限りません。
[2]: テストデータに対して推論を実行した際に得られるスコアであり、このスコアが順位表に反映されます。
[3]: 厳密には、その他に設定する余地のあるハイパーパラメータが存在しますが、説明の簡略化のため、AWPの挙動に大きく影響のある2つのパラメータに絞って記載しています。
[4]: submission、つまり提出の意です。予測を実行するコードの提出を行って、初めて順位表に反映されるスコアが算出されます。