Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ChatGPTをどう使うか?(JJUGナイトセミナー5/23)

 ChatGPTをどう使うか?(JJUGナイトセミナー5/23)

2023/05/23(火)に開催されたJJUGナイトセミナー「AI × Java 祭」の発表資料です。

イベントページ:https://jjug.doorkeeper.jp/events/156838
イベント動画:https://www.youtube.com/watch?v=_TXnOf-sUUE

発表概要:
近頃ChatGPTが広く認知、活用されるようになって来ました。 本セッションではChatGPTを提供しているOpenAIや、 そのAPIの概要を説明したうえで、実際の使い方の例を紹介します。 利用例の紹介では、Java向けのクライアントを利用してAPIを呼び出すデモを行いました(デモは発表動画のリンクをご覧ください)

樋口慎

May 29, 2023
Tweet

More Decks by 樋口慎

Other Decks in Technology

Transcript

  1. Copyright © Acroquest Technology Co., Ltd. All rights reserved. JJUGナイトセミナー「AI

    × Java 祭」 ChatGPT をどう使うか? Acroquest Technology 株式会社 樋口 慎 2023/05/23 1
  2. アクロクエストテクノロジー株式会社 (Acroquest Technology Co., Ltd.) ◼ 所在地 :神奈川県横浜市港北区新横浜 ◼ 設立

    :1991年3月 ◼ 事業内容:IoT関連システムの開発/サービス提供 機械学習/AI/データ分析サービス提供 ビッグデータ分析/データ処理 プラットフォーム開発 ◼ 主な受賞歴: ① Great Place To Work(R) Institute Japan実施 「働きがいのある会社」ランキング 2015年、2016年、2018年 第1位 ② マイクロソフト「Gold Cloud Platformコンピテンシー」認定 ③ AWS Machine Learningコンピテンシー認定 Acro = 先端を quest = 探究する
  3. アウトライン Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    5 1. OpenAI/ChatGPT概要 2. APIの利用 3. どのようなことに使えるか? 4. Javaで実際に使ってみる
  4. OpenAI/ChatGPTとは? Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    7 人工知能の研究をおこなっている米国企業。 GPT(Generative Pre-trained Transformer)という機械学習モデルをベースにした 様々なサービスを提供している。 ChatGPT OpenAI OpenAI社が提供するサービスおよびモデルの名称。 チャット形式で利用することができ、自然で高度な応答ができることで話題を呼 んでいる。 プログラムの生成等もおこなうことができる※ ※必ず正しい内容のプログラムが生成できることを保証するものではありません。 利用者自身の責任をもってご利用ください。
  5. ChatGPTの利用イメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    9 単発の会話だけでなく、 それまでのやりとりを踏まえた回答
  6. OpenAI APIの概要 Copyright © Acroquest Technology Co., Ltd. All rights

    reserved. 12 OpenAIが提供するAPIは以下の通り。 # API名 概要 1 Models 利用可能なモデルを確認する。 2 Completion 入力した文章の続きを補完する。 3 Chat 入力した文章に対して、会話の応答を生成する。 4 Edits 指示に応じて、入力した文章を編集した結果を返す(スペル修正、言い換えなど)。 5 Images 文章・画像の入力に基づいて、画像の生成をおこなう。 6 Embeddings 入力した文章のベクトル表現を返す。 7 Audio 音声ファイルを入力にしてテキストにして返す。翻訳も可能。 8 Files 他のAPIで利用するためのファイルのアップロードや一覧取得等をおこなう。 9 Fine-tunes モデルのFineTuningをおこなう。 10 Moderations 入力した文章が、OpenAIのポリシーに反する暴力的な表現等に該当するかの確認 をおこなう。
  7. OpenAI APIの概要 Copyright © Acroquest Technology Co., Ltd. All rights

    reserved. 13 各APIでは、利用する言語モデルを選択して呼び出すことができる。 参考:https://platform.openai.com/docs/models/model-endpoint-compatibility
  8. OpenAI APIの料金 Copyright © Acroquest Technology Co., Ltd. All rights

    reserved. 14 GPT-4 GPT-3.5-Turbo ※ここで紹介しているのは一部のモデル。 詳細は https://openai.com/pricing を参照
  9. [補足]AzureにおけるOpenAI Service Copyright © Acroquest Technology Co., Ltd. All rights

    reserved. 15 Microsoft Azureからも、OpenAIを利用できるサービスが提供されている。 セキュリティ面や可用性の保証などが特徴。 https://azure.microsoft.com/ja-jp/products/cognitive-services/openai-service/#pricing
  10. 理解しておくべき前提 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    17 特徴 ① 学習データは2021年9月までの内容。 →最新の情報を使った判断をするためには、 外部からモデルに情報を渡すことが必要になる。 特徴 ② 単純な推論ミスも起こり得る →誤った情報を含む可能性を考慮して利用することが肝要。 特徴 ③ プロンプトの工夫が重要。モデルの出力をある程度改善できる。 →出力に関する制約事項を明示するなど。
  11. 利用用途の例 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    18 # 用途 内容 1 会話文生成 一般的な会話への自然な応答を返す。 特に、プロンプトで性格などのキャラ付けをするとそれに従ってくれるなど、 様々な工夫が考えられる。 2 タスク判定 ユーザの入力に基づいて、意図を把握。 複雑なやりとりをおこなう場合は最初にタスク判定を行うことが重要になる。 3 要約 文章の要約をおこなう。対象の文章が長すぎる場合は、分割するなどの工夫が 必要となる。 4 ベクトル化 ※ChatGPTではないが、OpenAIのembeddings用APIを使ってベクトル化し、 類似文章の検索などに利用することが出来る。
  12. 検索と組み合わせて最新情報を取り入れる Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    19 ユーザーの入力に基づいて一度検索処理を実行し、 関連する情報を集めてきたうえでモデルに回答を生成させる。 →ChatGPTのWeb Browsingモードで類似の実装が見られる
  13. [参考]プロンプトに関するベストプラクティス Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    20 Best practices for prompt engineering with OpenAI API | OpenAI Help Center で紹介されている。 1. Use the latest model 2. Put instructions at the beginning of the prompt and use ### or """ to separate the instruction and context 3. Be specific, descriptive and as detailed as possible about the desired context, outcome, length, format, style, etc 4. Articulate the desired output format through examples 5. Start with zero-shot, then few-shot (example), neither of them worked, then fine-tune 6. Reduce “fluffy” and imprecise descriptions 7. Instead of just saying what not to do, say what to do instead 8. Code Generation Specific - Use “leading words” to nudge the model toward a particular pattern
  14. <dependencies> <dependency> <groupId>com.theokanning.openai-gpt3-java</groupId> <artifactId>service</artifactId> <version>0.12.0</version> </dependency> </dependencies> ライブラリの準備 Copyright ©

    Acroquest Technology Co., Ltd. All rights reserved. 22 GitHub - TheoKanning/openai-java: OpenAI GPT-3 Api Client in Java を利用する。 ・MITライセンス。 ・スター数も多く、比較的利用されていると思われる。 ・GPT-4にも対応している。 Mavenの場合
  15. Chat Completion APIの呼び出しかた Copyright © Acroquest Technology Co., Ltd. All

    rights reserved. 23 import com.theokanning.openai.completion.chat.*; import com.theokanning.openai.service.OpenAiService; public class OpenAIDemo { public static void main(final String[] args) { var token = System.getenv("OPENAI_APIKEY"); OpenAiService service = new OpenAiService(token, Duration.ZERO); System.out.println("Loading..."); ChatMessage userMessage = new ChatMessage(ChatMessageRole.USER.value(), "JavaとPythonの違いは何ですか?"); List<ChatMessage> messages = List.of(userMessage); var chatCompletionRequest = ChatCompletionRequest.builder() .model("gpt-3.5-turbo") .messages(messages) .temperature(1.0) .maxTokens(256) .build(); service.createChatCompletion(chatCompletionRequest).getChoices().forEach(System.out::println); } }
  16. import com.theokanning.openai.completion.chat.*; import com.theokanning.openai.service.OpenAiService; public class OpenAIDemo { public static

    void main(final String[] args) { var token = System.getenv("OPENAI_APIKEY"); OpenAiService service = new OpenAiService(token, Duration.ZERO); System.out.println("Loading..."); ChatMessage systemMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), "必ず、非プログラマにもわかるように話してください。"); ChatMessage userMessage = new ChatMessage(ChatMessageRole.USER.value(), "JavaとPythonの違いは何ですか?"); List<ChatMessage> messages = List.of(systemMessage, userMessage); var chatCompletionRequest = ChatCompletionRequest.builder() .model("gpt-3.5-turbo") .messages(messages) .temperature(1.0) .maxTokens(256) .build(); service.createChatCompletion(chatCompletionRequest).getChoices().forEach(System.out::println); } } Chat Completion APIの呼び出しかた Copyright © Acroquest Technology Co., Ltd. All rights reserved. 24 制約等はSystemロールで入力する
  17. JavaとPythonの違いは以下のようなものです。 1. シンタックス:JavaはC++から派生しており、カッコやセミコロンなどの構文が似ています。Pythonは独自のシンプルな構文を持っており、可読 性が高くなっています。 2. コンパイル:Javaはコンパイル言語で、コンパイルしてから実行します。Pythonはインタープリタ言語で、実行時にスクリプトを解釈して実行し ます。 3. 型:Javaは強い型付け言語で、型が厳密に定義されています。Pythonは弱い型付け言語で、変数の型を自由に変更できます。 4.

    パフォーマンス:Javaはコンパイルされるため、Pythonよりも高速な実行が可能です。しかし Chat Completion APIの呼び出しかた Copyright © Acroquest Technology Co., Ltd. All rights reserved. 25 Systemロールの入力無しの場合 Systemロールで指示を与えた場合(非プログラマにもわかるように) JavaとPythonは両方ともプログラミング言語で、コンピュータに命令を与えるために使用されますが、いくつかの違いがあります。 まず、JavaはStatically typed language(静的型付け言語)で、PythonはDynamically typed language(動的型付け言語)です。つまり、Javaでは 変数に与えられる型が宣言され、それに基づいて使用できる値が制限されますが、Pythonでは型を宣言する必要がなく、変数に代入されるオブジェク トに基づいて型が自動的に判断されます。 次に、Javaはコンパイル型言語で、Pythonはインタープリタ型言語です。Javaはソースコードをコンパイルして実行可能形式に変換する必要があり ますが、Pythonはプログラムの途中
  18. Loading... ChatCompletionChoice(index=0, message=ChatMessage(role=assistant, content=3), finishReason=length) ChatMessage systemMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(),

    """ あなたはパソコンメーカーのカスタマーサポートです。 文章が以下のどれに分類されるか判定してください。必ず下記のいずれかの数字のみを回答してください。 1. 製品の故障対応 2. 製品をさがす 3. 製品のスペックを調べる 4. 製品の購入 5. 不明 ### いくつかの例を示します。 - PCのファンが大きな音を立てています。交換可能ですか? - 1 - Intel Core i9-10900Kを搭載したPCを探しています。 - 2 """); ChatMessage userMessage = new ChatMessage(ChatMessageRole.USER.value(), "Ryzen9 5900Xの処理性能はどれくらいですか?"); タスク判定に利用する例 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 26
  19. 文章の要約で利用する例 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    27 現状のモデルでは、長すぎる文章 をAPIに入力することができない。 長い文章を要約するには、たとえ ば特定文字列長毎に分割し、要約 処理を繰り返す。 文章を要約した結果を、 次の文章の頭に結合して要約 (①の要約結果を②の頭に結合し て要約。その結果を③の頭に付け て要約...を繰り返す) ① ② ③
  20. ChatMessage systemMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), "次の文章を要約してください。日本語で出力してください。"); while ((length = inputStream.read(buffer))

    != -1) { //メッセージの生成 String chunk = new String(buffer, 0, length); List<ChatMessage> messages = new ArrayList<>(); String content = context + "\n\n" + chunk; ChatMessage userMessage = new ChatMessage(ChatMessageRole.USER.value(), content); messages.add(systemMessage); messages.add(userMessage); .... var result = service.createChatCompletion(chatCompletionRequest).getChoices().get(0); context = result.getMessage().getContent(); .... } 文章の要約で利用する例 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 28
  21. 文章の要約で利用する例 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    29 ▼BERTの論文を要約させた出力 [1810.04805] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (arxiv.org) "BERTは、マスク言語モデルと次の文予測タスクでプレトレーニングされ、11のNLPタスクでファインチ ューニングされる、CoNLL-2003 Named Entity Recognitionタスクでは、BERTLARGEのfine-tuningア プローチが他のモデルよりも高い精度を示し、BERTLARGEはSQuAD v1.1の質問回答タスクで最高のパ フォーマンスを示した。また、モデルサイズはタスクの正確さに影響し、より大きなモデルはすべてのデ ータセットで厳密な精度向上をもたらすことが示されている。"