投稿

ラベル(論文)が付いた投稿を表示しています

【論文】ChatGPT Prompt Patterns for Improving Code Quality, Refactoring, Requirements Elicitation, and Software Design

2303.07839   論文概要 ソフトウェアエンジニアリングにおけるプロンプト設計技術を、パターンの形式で紹介。 大規模言語モデル(LLM)、例えば ChatGPT を使用して一般的なソフトウェアエンジニアリングの活動を自動化する際に生じる、一般的な問題を解決する方法を提案。例えば、コードをサードパーティライブラリから分離することや、要件リストから API 仕様を作成することなどが含まれる。 ソフトウェアエンジニアリングにおける LLM の活用に関する研究に対する論文の貢献: ソフトウェアエンジニアリング向けのパターンのカタログを提供し、それらを解決する問題の種類ごとに分類する。 要件抽出、迅速なプロトタイピング、コード品質の向上、デプロイメント、およびテストの改善に適用された複数のプロンプトパターンを探求する。 はじめに ソフトウェアエンジニアリングタスクの自動化におけるLLMとプロンプトの概要 一般的に、LLMとの対話は「プロンプト」を入力することで行われる。プロンプトとは、LLMにコンテキストを提供し、テキストの生成を誘導するための自然言語による指示のことである。 チャットベースの環境では、プロンプトはユーザーが ChatGPT などのLLMに送信するチャットメッセージとして機能する。本論文では、ChatGPT を活用したチャット対応のLLMに焦点を当てて議論を進める。 プロンプトの使い方には大きく分けて二つの方法がある。本論文では、これら二種類のプロンプトパターンについて詳しく扱う。 LLMに直接情報を求めたり、コードを生成させたりする方法。 LLMに特定のルールを指示し、それに従わせる方法(例:特定のコーディング規約に準拠させる)。 ソフトウェアエンジニアリングタスク向けのプロンプトパターンの概要 本論文は、以前の研究で提案した プロンプトパターン の概念 [9] に基づいている。プロンプトパターンとは、LLMとの対話における問題を解決するための再利用可能なプロンプト設計である。 プロンプトパターンは、ソフトウェアパターン [10], [11] と同様に、優れた設計経験を形式化したものであり、プログラムが特定の設計原則やセキュアコーディングガイドライン に準拠することを保証するなど、LLMとの対話における一般的な問題に対する再利用可能な解決策を...

【論文紹介】Lost in the Middle: How Language Models Use Long Contexts

  原論文 tacl_a_00638.pdf (silverchair.com) 最新の言語モデルは長いコンテキストを入力として扱うことができますが、長いコンテキストをどれだけうまく活用しているかはまだよくわかっていません。この研究では、複数の文書からの質問応答やキーバリュー情報の取得など、入力コンテキスト内の関連情報を特定するタスクにおける言語モデルの性能を分析しました。その結果、関連情報の位置を変更すると性能が大幅に低下することがわかりました。これは、現在の言語モデルが長い入力コンテキスト内の情報を十分に活用できていないことを示唆しています。特に、関連情報がコンテキストの先頭または末尾にある場合に性能が最も高くなり、長いコンテキストであっても、モデルがコンテキストの中央にある関連情報にアクセスしなければならない場合に性能が著しく低下することが観察されました。この分析は、言語モデルが入力コンテキストをどのように活用しているのかをより深く理解するのに役立ち、将来的に開発される長いコンテキストを扱う言語モデルの評価方法の構築にも貢献します。 Introduction 言語モデルは、対話型インターフェース、検索や要約、共同執筆など、さまざまなユーザー向けの言語技術において重要で柔軟なビルディングブロックとなっています (Shuster et al., 2022; Thoppilan et al., 2022; Lee et al., 2022 など)。これらのモデルは、主に「プロンプティング」と呼ばれる手法で下位タスクを実行します。タスク仕様と処理すべきデータはすべてテキスト入力コンテキストとしてフォーマットされ、モデルは生成されたテキスト補完を返します。これらの入力コンテキストには、特に言語モデルが長い文書 (法律文書や科学論文、会話履歴など) を処理する場合や、外部情報 (検索エンジンの関連ドキュメント、データベースのクエリ結果など) で拡張されている場合 (Petroni et al., 2020; Ram et al., 2023; Shi et al., 2023; Mallen et al., 2023; Schick et al., 2023 など) には、数千トークンに達することがあります。このようなユースケースを扱うには、言語モデルが長いシーケ...

【論文要約】A Novel Neural Source Code Representation based on Abstract Syntax Tree

  astnn_icse2019.pdf (xuwang.tech) 概要 機械学習技術を利用してプログラムを分析することは多くの関心を集めています。1つの重要な問題は、後続の分析のためにコード断片をうまく表現する方法です。従来の情報検索ベースの方法は、しばしばプログラムを自然言語テキストとして扱い、ソースコードの重要な意味情報を見逃す可能性があります。最近の最先端の研究では、抽象構文木(AST)ベースのニューラルモデルがソースコードをより良く表現できることが示されています。ただし、ASTのサイズは通常大きく、既存のモデルは長期依存性の問題に陥りやすいです。本論文では、ソースコード表現のための新しいASTベースのニューラルネットワーク(ASTNN)を提案します。AST全体で作業する既存のモデルとは異なり、ASTNNは各大きなASTを一連の小さな文の木に分割し、文の木をキャプチャしてベクトルにエンコードすることで、文のレキシカルおよび構文的な知識を取得します。文のベクトルのシーケンスに基づいて、双方向RNNモデルを使用して文の自然さを活用し、最終的にコード断片のベクトル表現を生成します。私たちは、ニューラルネットワークに基づくソースコード表現方法を、2つの一般的なプログラム理解タスクに適用しました:ソースコード分類とコードクローン検出。両方のタスクの実験結果は、私たちのモデルが最先端のアプローチよりも優れていることを示しています。 はじめに 多くのソフトウェアエンジニアリング手法、例えばソースコード分類[1]、[2]、コードクローン検出[3]、[4]、[5]、[6]、欠陥予測[7]、[8]、およびコード要約[9]、[10]が提案されており、ソフトウェア開発と保守を改善するために用いられています。これらの手法全てに共通する主な課題は、ソースコードをどのように表現するか、つまりソースコードに埋め込まれた構文的および意味的情報を効果的に捉える方法です。 情報検索(IR)などの従来のアプローチでは、通常、コード断片を自然言語テキストとして扱い、トークンに基づいてモデル化します。たとえば、プログラムは、コードクローン検出[3]、[4]、バグの特定[11]、およびコード著者分類[1]のために、トークンのシーケンスまたはトークンの袋で表現されます。さらに、多くの研究者がソー...

【論文要約】Code-to-Code Search Based on Deep Neural Network and Code Mutation

Code-to-Code Search Based on Deep Neural Network and Code Mutation (osaka-u.ac.jp) 要旨 深層ニューラルネットワーク(DNN)は、画像ファイルのラベリング(例:物体検出)によく使用されています。ソフトウェアエンジニアリングにおけるコードフラグメントのラベリング(すなわち、コード間の検索)にも適用できますが、DNNの学習プロセスでは、各ラベルに対して多数のコードフラグメントが必要です。本論文では、DNNモデルとコードの変異に基づくコード間の検索手法を提案し、各ラベルに十分な数のコードフラグメントを生成します。予備実験では、提案手法の高い適合率と再現率が示されています。 はじめに 開発者はしばしば、他のコードフラグメントと同様の機能を提供するコードフラグメントを探しています。例えば、開発者は、より効率的で信頼性の高い実装を見つける必要があるかもしれません。また、OSSプロジェクトやStack Overflowなどの議論プラットフォームからコードフラグメントを見つけた場合、元のコードフラグメントのライセンスを特定するだけでなく、より脆弱性の少ないものを見つける必要があるかもしれません。これまでに、類似機能のコードフラグメントを探すためのコード対コードの検索手法がいくつか提案されています。 これまでに、深層ニューラルネットワーク(DNN)は、コンピュータビジョン分野での物体検出だけでなく、ソフトウェアエンジニアリング分野でのコードクローン検出にも使用されてきました。私たちの主な洞察は、ソースコードから機能に応じてコードフラグメントにラベル付けするためにDNNを使用することです。DNNによるラベリングが成功すると、その結果のラベリングはコード対コードの検索に使用できます。この洞察は、画像の部分をピクセル特性に応じてDNNでラベリングすることから得られました。 本論文では、Feed-Forward Neural Network(FFNNと呼ばれる)を使用したコードブロック検索のアプローチを提案します。私たちのアプローチは、クエリコードフラグメントに対応する類似したコードフラグメントを見つけることができます。私たちのコード検索アプローチは、STEP L(学習)とSTEP S(検索)の2つのステップで...

【論文要約】Code-to-Code Search Based on Deep Neural Network and Code Mutation

コードクローンの関連でチェックしたい論文: Code-to-Code Search Based on Deep Neural Network and Code Mutation (osaka-u.ac.jp) Abstract of the paper in 2 lines: The paper presents an approach for code-to-code search using a Deep Neural Network (DNN) model and code mutation to generate sufficient code fragments for each label. The preliminary experiment demonstrates high precision and recall of the proposed approach.[1] What are the contributions of this paper The paper presents an approach for code-to-code search based on a Deep Neural Network (DNN) model and code mutation, which generates sufficient code fragments for each label.[1] The approach consists of two steps: STEP L (Learning) and STEP S (Search), enabling the identification of similar code fragments corresponding to a query code fragment.[2] A case study conducted on three open-source software systems, HBase 2.04, OpenSSL 0.9.1 1.1.05, and FreeBSD 11.1.06, demonstrates the effectiveness of the approach in terms of precision, recall, and F-measure...