Slide 1

Slide 1 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. JJUGナイトセミナー「AI × Java 祭」 ChatGPT をどう使うか? Acroquest Technology 株式会社 樋口 慎 2023/05/23 1

Slide 2

Slide 2 text

自己紹介 ⚫ 名前:樋口 慎(@shin0higuchi) ⚫ 所属:Acroquest Technology株式会社 ⚫ 業務:Elasticコンサルティング全般、データ分析、システム開発 ⚫ 資格/執筆: Elastic Certification3種取得 Azure Solutions Architect Elasticsearch NEXT STEP 執筆

Slide 3

Slide 3 text

アクロクエストテクノロジー株式会社 (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 = 探究する

Slide 4

Slide 4 text

AcroquestのChatGPT活用 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 6 OpenAI/ChatGPT概要

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

ChatGPTの利用イメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 8 自然な回答

Slide 9

Slide 9 text

ChatGPTの利用イメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 9 単発の会話だけでなく、 それまでのやりとりを踏まえた回答

Slide 10

Slide 10 text

ChatGPTの利用イメージ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 10 プログラムのコードも 出力してくれる

Slide 11

Slide 11 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 11 APIの利用

Slide 12

Slide 12 text

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のポリシーに反する暴力的な表現等に該当するかの確認 をおこなう。

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

OpenAI APIの料金 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 14 GPT-4 GPT-3.5-Turbo ※ここで紹介しているのは一部のモデル。 詳細は https://openai.com/pricing を参照

Slide 15

Slide 15 text

[補足]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

Slide 16

Slide 16 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 16 どのようなことに使えるか?

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

検索と組み合わせて最新情報を取り入れる Copyright © Acroquest Technology Co., Ltd. All rights reserved. 19 ユーザーの入力に基づいて一度検索処理を実行し、 関連する情報を集めてきたうえでモデルに回答を生成させる。 →ChatGPTのWeb Browsingモードで類似の実装が見られる

Slide 20

Slide 20 text

[参考]プロンプトに関するベストプラクティス 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

Slide 21

Slide 21 text

Copyright © Acroquest Technology Co., Ltd. All rights reserved. 21 Javaで実際に使ってみる

Slide 22

Slide 22 text

com.theokanning.openai-gpt3-java service 0.12.0 ライブラリの準備 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 22 GitHub - TheoKanning/openai-java: OpenAI GPT-3 Api Client in Java を利用する。 ・MITライセンス。 ・スター数も多く、比較的利用されていると思われる。 ・GPT-4にも対応している。 Mavenの場合

Slide 23

Slide 23 text

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 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); } }

Slide 24

Slide 24 text

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 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ロールで入力する

Slide 25

Slide 25 text

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はプログラムの途中

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

文章の要約で利用する例 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 27 現状のモデルでは、長すぎる文章 をAPIに入力することができない。 長い文章を要約するには、たとえ ば特定文字列長毎に分割し、要約 処理を繰り返す。 文章を要約した結果を、 次の文章の頭に結合して要約 (①の要約結果を②の頭に結合し て要約。その結果を③の頭に付け て要約...を繰り返す) ① ② ③

Slide 28

Slide 28 text

ChatMessage systemMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), "次の文章を要約してください。日本語で出力してください。"); while ((length = inputStream.read(buffer)) != -1) { //メッセージの生成 String chunk = new String(buffer, 0, length); List 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

Slide 29

Slide 29 text

文章の要約で利用する例 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の質問回答タスクで最高のパ フォーマンスを示した。また、モデルサイズはタスクの正確さに影響し、より大きなモデルはすべてのデ ータセットで厳密な精度向上をもたらすことが示されている。"

Slide 30

Slide 30 text

AcroquestのChatGPT活用 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 30

Slide 31

Slide 31 text

31 ご清聴ありがとうございました Copyright © Acroquest Technology Co., Ltd. All rights reserved.