言語モデルでテキスト生成

Amazon Bedrock入門

Nikhil Rangarajan

Data Scientist

言語モデルへのプロンプト送信

  • プロンプト: モデルに送る入力テキスト
    • "Explain how AWS Lambda works"

プロンプトを表すアイコン。

Amazon Bedrock入門

言語モデルへのプロンプト送信

  • プロンプト: モデルに送る入力テキスト
    • "Explain how AWS Lambda works"
  • 生成文(Completion): モデルが生成したテキスト
    • "AWS Lambda is a serverless compute service that..."

プロンプトと生成文を表すアイコン。

Amazon Bedrock入門

言語モデルへのプロンプト送信

  • プロンプト: モデルに送る入力テキスト
    • "Explain how AWS Lambda works"
  • 生成文(Completion): モデルが生成したテキスト
    • "AWS Lambda is a serverless compute service that..."
  • レスポンス:
    • 生成文(completion)
    • メタデータ(トークン数、モデル情報)
    • ステータス情報

プロンプト、生成文、レスポンスを順に表す3つのアイコン。

Amazon Bedrock入門

基本的なプロンプト設計の適用

  • 精度向上のテクニック:
    • 明確さと具体性: 詳細で正確な指示を書く
    • 役割指定: ペルソナで文脈理解を高める
    • 形式指定: 制約で出力を誘導する
"Explain the benefits of exercise 
in simple terms."
"You are a nutritionist. Explain the 
benefits of a balanced diet."
"List the top 3 benefits of cloud 
computing in bullet points."
Amazon Bedrock入門

高度なテキスト解析テクニック

  • 欠損/想定外のキーを処理する
data = json.loads(response['body'].read())
if 'completion' in data:
    output = data['completion']

else: output = "Key not found"
  • 多層JSONの深い構造を解析する
try:
    nova_output = data.decode()["output"]

except (KeyError, IndexError) as e: nova_output = f"Error: {str(e)}"
Amazon Bedrock入門

応答処理とテキストハンドリング

  • Unicode/エンコーディング問題: 特殊文字を適切に処理
    # Ensure proper encoding
    output = data['completion'].encode('utf-8').decode('unicode_escape')
    print(output)
    
  • 大きな応答の処理: 利用性のために分割/切り詰め
    # Truncate response for display
    output = data['completion'][:500]  # Limit to 500 characters
    print(output)
    
Amazon Bedrock入門

Bedrockでのカテゴリ抽出

  • 例: テキストデータの分類
  • 明確なカテゴリ指定で構造化プロンプトを作る
  • 単一カテゴリのみ返すよう明示する
  • 応答を効率的に処理する
  • 結果: 高精度なテキスト分類

テキスト分類を表すアイコン

Amazon Bedrock入門

Bedrockでのカテゴリ抽出

def categorize_ticket(ticket, categories):
  prompt = f"Categorize into one: {', '.join(categories)}. 
  Ticket: {ticket}"
  response = bedrock.invoke_model(
    modelId='amazon.nova-micro-v1:0',
    body=json.dumps({"messages": [{"role": "user", "content": 
                                   [{"text": prompt}]}]}))

return json.loads(nova_response.get("body").read().decode())["output"]
{"output": {"message": {"role": "assistant","content": [
        {
          "text": "Customer Service"
        }]}, "stop_reason": "stop_sequence"}}
Amazon Bedrock入門

練習してみましょう!

Amazon Bedrock入門

Preparing Video For Download...