e4exp / paper_manager_abstract

0 stars 0 forks source link

Automated Query Reformulation for Efficient Search based on Query Logs From Stack Overflow #420

Open e4exp opened 3 years ago

e4exp commented 3 years ago

プログラミングに関する人気のQ&AサイトであるStack Overflowは、開発者にとって宝物のような存在です。 しかし、Stack Overflowの質問と回答の量は、開発者が探している情報を効率的に見つけることを難しくしています。 ユーザーの意図とテキストクエリのギャップ、クエリと投稿内容のセマンティックギャップです。 そのため、開発者は、誤字脱字の修正や、特定のプログラミング言語やプラットフォームに対する制限の追加など、常にクエリの再定式化を行わなければなりません。 開発者、特に初心者にとって、クエリの再構成は面倒な作業であるため、我々は深層学習に基づいたソフトウェア固有のクエリ再構成の自動化アプローチを提案する。 Stack Overflowから提供されたクエリログを用いて、元のクエリとそれに対応する再整形されたクエリを含む大規模なクエリ再整形コーパスを構築する。 このアプローチでは、ユーザーの元のクエリが与えられたときに、再構成されたクエリの候補を自動的に生成できるTransformerモデルを学習します。 評価の結果、我々のアプローチは5つの最先端のベースラインを上回り、ExactMatchにおいて5.6%から33.5%、GLEUにおいて4.8%から14.4%の向上を達成した。

e4exp commented 3 years ago

I. はじめに

Stack Overflow はプログラミング関連の知識を共有・獲得するための最も人気のある Q&A サイトである。 Stack Overflowは過去10年間でユーザーが作成した大量のコンテンツを蓄積しており、ソフトウェアエンジニアリングの知識の貴重なレポジトリとなっている。 開発者は、「このライブラリはどうやって使うのか」「2つの言語の違いは?[1]、「この概念を理解するには?[2], [3]などの特定のプログラミングの質問に遭遇したとき,開発者は Stack Overflow を使って答えを探す傾向にある [4]. このような大規模な知識リポジトリの中から、開発者が探している知識を見つけ出すために、Stack Overflowは検索エンジン1を提供しており、フリーテキスト検索のほか、メタデータフィルタを使った高度な検索にも対応している。 しかし,提供されている検索エンジンを使っても,開発者が欲しいものを効率的に見つけるのは容易ではない[5], [6]。

満足のいく検索結果が得られない理由は2つあります。 まず,ユーザの検索意図と入力されたクエリとの間には,一定の意味的なギャップが存在する. これは,ユーザが数個のキーワードでクエリの意図を正確に表現することが難しいことを意味する[7], [8]. 例えば,ある開発者が,入れ子になったリストの使い方を検索したいとします. しかし,この概念をどのように正確に表現すればよいのかわからず,「リストの中のリスト」というような言葉を問い合わせに使ってしまうかもしれません. このクエリは不正確であり、このようなセマンティックギャップはStack Overflowの検索エンジンにとって大きな課題となる。 第二に、ユーザーのクエリと関連する投稿のテキストコンテンツの間には、ある種のセマンティックギャップが存在する。 これは、同じ意味でも、重複する単語が少なく、異なる方法で記述されている可能性があることを意味する。 例えば、ある開発者が「sorting in linear time」というクエリを入力するとします。 しかし、「sorting with O(n) complexity」というタイトルの関連記事は、検索エンジンでは検索できません。 さらに、略語や同義語、あるいはスペルミス [9], [10] も、このようなセマンティックギャップの原因となります。

上記のセマンティックギャップを軽減するために、開発者はクエリが真のクエリ意図を反映し、関連する投稿につながるまで、常にクエリを再構成することがあります。 Stack Overflowを運営するStack Exchange Inc.が提供しているユーザーのクエリログを分析したところ、24.62%のクエリがポストを訪問する前にリフォームされており、開発者は結果をクリックする前に平均1.46回クエリをリフォームしていることがわかった。 図1はその例である。

image

ユーザーが最初に「do and while in java」というクエリを実行すると、大量の無関係な結果が表示されます。 これは、検索エンジンが問い合わせのすべての単語をつなぐためにorを使用しており、検索エンジンが「do」と「while」をドメイン固有のキーワードとして区別できないためである。 次に、ユーザーはこのクエリに「ループ」という単語を追加してより明確にすることで、潜在的に望ましい投稿を得ることができる。 満足のいく検索結果を見つけるために、与えられたクエリを修正するプロセス[11]は、クエリ・リフォーミュレーションと呼ばれます。 効果的な情報検索システムを設計する上で、クエリ・リフォーミュレーション[12]-[16]を理解することは重要な課題となっています。 開発者がどのようにクエリを再構成するかを調査するために,我々はまずStack Overflowのユーザーのアクティビティログを対象とした形式的な研究を行う。 2017年12月から2018年11月までの2,216,219人のユーザーからのログをもとに、3,125,427セッションから4,631,756のクエリを抽出します。 これらのクエリを分析した結果、クエリの改編には一定の共通パターンがあることがわかりました(セクションIII-B)。 例えば、"serive "を "service "に修正したり、"open calendar react native "を "open other app react native "に修正したり、"read file "を "java read file "に修正したり、"Unable to import module 'copy'. "を "Unable to import module 'copy'. "に修正したりするなど、スペルミスを修正したり、範囲を広げるためにクエリを一般化したり、プログラミング言語やプラットフォームの制約をクエリに追加したりします。 /var/task/psycopg2/_psycopg.so: ELF file's phentsize not the expected size」を「ELF file's phentsize not the expected size」に修正しました。

開発者、特に初心者にとって、クエリの再定式化は面倒な作業であるため、我々は深層学習に基づいて、クエリの自動再定式化を支援するSoftware-spEcific QUEry Reformulation approach (SEQUER)を提案する。 秘密保持契約に基づいて提供されたStack Overflowの大規模なクエリログを基に、まず元のクエリと再構成されたクエリからなるクエリ再構成ペアを抽出し、次に注目ベースのトランスフォーマーを採用して、抽出されたクエリ再構成ペアに基づいてクエリ再構成パターンを自動的に学習する。 学習されたモデルは、元のクエリが与えられると、再構成されたクエリの候補リストを提案することができます。 我々は、大規模なアーカイブの手動による再定式化の結果を用いて、我々のアプローチによる再定式化されたクエリの品質を評価した。 評価結果は,ExactMatch@10とGLEUにおいて,シーケンスモデルベースのベースライン(seq2seq with attention [17]とHREDqs [18])と比較して平均12.48%と7.79%の改善を,Google Prediction Service [19]と比較して30.79%と6.61%の改善を,文法エラー修正ツールと比較して33.5%と14.41%の改善を達成したことを示している.

要約すると,以下のような貢献をしています.

e4exp commented 3 years ago

VII. 結論

大量のプログラミング知識を検索するために効率的なクエリを構築することは,開発者,特に初心者にとっては困難な作業である. Stack Overflowに登録された大規模な実世界のクエリレコードを対象とした我々の実証研究によると、開発者は望ましい結果を得るために常にクエリを再構成していることが分かった。 開発者の効率的な検索を支援するために、我々はStack Overflowで提供されるクエリログからクエリの再編成パターンを学習する深層学習ベースのアプローチSEQUERを提案する。 SEQUERは、元のクエリが与えられると、再構成候補のリストを自動的に推薦することができる。 大規模なアーカイブクエリの再編成を対象とした評価では、SEQUERが5つの最先端のベースラインと比較して優れていることが検証された。 今後は、ユーザのプロフィール、クエリ履歴、投稿履歴などのコンテキスト情報をより多く取り入れることで、SEQUERの性能をさらに向上させていきます。 さらに、このアプローチを一歩進めて、クエリに対する投稿を直接推奨することも計画しています。 Stack Overflowが提供するユーザーのクエリとそれに対応するクリックされた投稿に基づいて、それらの間の関係を学習するドメイン固有のモデルを開発することができる。

e4exp commented 3 years ago

image image