6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DeepSeek APIを使いこなす:Pythonで始める高度な自然言語処理

Last updated at Posted at 2025-01-30

※2025/2/1時点でAPIのキーの発行を一時的に停止してます

はじめに

DeepSeek APIは、最先端の自然言語処理(NLP)技術を提供する強力なツールです。このAPIを使用することで、テキスト生成、要約、感情分析、質問応答など、さまざまなNLPタスクを簡単に実行できます。本記事では、Pythonを使用してDeepSeek APIを活用する方法を、初心者から上級者まで幅広く解説します。各章では具体的な使用例とコードを提供し、実践的なスキルを身につけられるよう構成しています。

第1章:DeepSeek APIの概要と設定

DeepSeek APIは、高度な言語モデルを簡単に利用できるようにするサービスです。まずは、APIの基本的な設定方法から始めましょう。

  1. DeepSeek公式ウェブサイトでアカウントを作成します。
  2. APIキーを取得します。
  3. Pythonの環境を準備し、必要なライブラリをインストールします。

以下のコードで、APIの基本的な設定を行います:

import requests
import json

API_KEY = "あなたのAPIキー"
API_ENDPOINT = "https://api.deepseek.com/v1"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

def make_api_request(endpoint, payload):
    response = requests.post(f"{API_ENDPOINT}/{endpoint}", headers=headers, json=payload)
    return response.json()

# 使用例
result = make_api_request("completions", {"prompt": "こんにちは、私の名前は"})
print(result['choices'][0]['text'])

この基本的な設定を使って、以降の章でさまざまなNLPタスクを実行していきます。

第2章:テキスト生成の基礎

DeepSeek APIを使用したテキスト生成の基本を学びましょう。テキスト生成は、与えられたプロンプトに基づいて、自然な文章を生成するタスクです。

以下のコードは、簡単なテキスト生成の例です:

def generate_text(prompt, max_tokens=100):
    payload = {
        "prompt": prompt,
        "max_tokens": max_tokens,
        "temperature": 0.7
    }
    response = make_api_request("completions", payload)
    return response['choices'][0]['text']

# 使用例
prompt = "未来の技術について、短い記事を書いてください。"
generated_text = generate_text(prompt)
print(generated_text)

このコードでは、temperatureパラメータを使用して、生成されるテキストの創造性を調整しています。値が高いほど、より創造的で予測不可能な出力が得られます。

第3章:高度なテキスト生成テクニック

より洗練されたテキスト生成を行うために、いくつかの高度なテクニックを紹介します。

  1. トップ-pサンプリング
  2. 繰り返しペナルティ
  3. プレゼンスペナルティ

これらのテクニックを使用することで、より自然で多様性のあるテキストを生成できます。

def advanced_text_generation(prompt, max_tokens=100, temperature=0.7, top_p=0.9, frequency_penalty=0.5, presence_penalty=0.5):
    payload = {
        "prompt": prompt,
        "max_tokens": max_tokens,
        "temperature": temperature,
        "top_p": top_p,
        "frequency_penalty": frequency_penalty,
        "presence_penalty": presence_penalty
    }
    response = make_api_request("completions", payload)
    return response['choices'][0]['text']

# 使用例
prompt = "AI技術の倫理的な課題について、詳細な分析を提供してください。"
advanced_text = advanced_text_generation(prompt)
print(advanced_text)

このコードでは、top_pfrequency_penaltypresence_penaltyパラメータを追加して、生成されるテキストの品質と多様性を向上させています。

第4章:テキスト要約の実装

DeepSeek APIを使用してテキスト要約を実装する方法を学びましょう。テキスト要約は、長い文章から重要な情報を抽出し、簡潔にまとめるタスクです。

以下のコードは、抽出的要約と生成的要約の両方を実装しています:

def summarize_text(text, method="extractive", max_tokens=100):
    if method == "extractive":
        prompt = f"以下の文章を要約してください。重要な文章を抽出して箇条書きにしてください:\n\n{text}"
    else:  # generative
        prompt = f"以下の文章を自然な日本語で要約してください:\n\n{text}"
    
    payload = {
        "prompt": prompt,
        "max_tokens": max_tokens,
        "temperature": 0.5
    }
    response = make_api_request("completions", payload)
    return response['choices'][0]['text']

# 使用例
long_text = "ここに長い文章を入れてください..."
extractive_summary = summarize_text(long_text, method="extractive")
generative_summary = summarize_text(long_text, method="generative")

print("抽出的要約:", extractive_summary)
print("生成的要約:", generative_summary)

このコードでは、抽出的要約と生成的要約の2つの方法を実装しています。抽出的要約は原文から重要な文を抽出し、生成的要約は新しい文章を生成して要約を作成します。

第5章:感情分析の実装

テキストの感情を分析する機能を実装しましょう。感情分析は、テキストから書き手の感情や態度を推測するタスクです。

以下のコードは、簡単な感情分析の実装例です:

def analyze_sentiment(text):
    prompt = f"以下の文章の感情を分析し、'ポジティブ''ネガティブ''中立'のいずれかで答えてください。理由も簡単に説明してください:\n\n{text}"
    
    payload = {
        "prompt": prompt,
        "max_tokens": 50,
        "temperature": 0.3
    }
    response = make_api_request("completions", payload)
    return response['choices'][0]['text'].strip()

# 使用例
text_to_analyze = "今日は天気が良くて、友達と楽しい時間を過ごせました。"
sentiment = analyze_sentiment(text_to_analyze)
print(f"テキスト: {text_to_analyze}")
print(f"感情分析結果: {sentiment}")

このコードでは、与えられたテキストの感情を分析し、ポジティブ、ネガティブ、中立のいずれかに分類します。また、その判断理由も簡単に説明します。

第6章:質問応答システムの構築

DeepSeek APIを使用して、簡単な質問応答システムを構築しましょう。このシステムは、与えられたコンテキストに基づいて質問に答えることができます。

以下のコードは、基本的な質問応答システムの実装例です:

def question_answering(context, question):
    prompt = f"""以下のコンテキストに基づいて、質問に答えてください。

コンテキスト:
{context}

質問: {question}

回答:"""
    
    payload = {
        "prompt": prompt,
        "max_tokens": 100,
        "temperature": 0.5
    }
    response = make_api_request("completions", payload)
    return response['choices'][0]['text'].strip()

# 使用例
context = """
東京は日本の首都であり、世界最大の都市圏の1つです。
人口は約1,400万人で、政治、経済、文化の中心地として知られています。
東京には多くの観光名所があり、伝統的な寺社仏閣から最新のテクノロジーまで、
さまざまな魅力があります。
"""

question = "東京の人口は何人ですか?"
answer = question_answering(context, question)
print(f"質問: {question}")
print(f"回答: {answer}")

このシステムは、与えられたコンテキストを理解し、それに基づいて質問に答えることができます。より高度な質問応答システムを構築する場合は、大規模な知識ベースや複数のソースからの情報統合が必要になることがあります。

第7章:言語翻訳機能の実装

DeepSeek APIを使用して、言語翻訳機能を実装しましょう。この機能を使えば、さまざまな言語間で翻訳を行うことができます。

以下のコードは、基本的な翻訳機能の実装例です:

def translate_text(text, source_lang, target_lang):
    prompt = f"""以下のテキストを{source_lang}から{target_lang}に翻訳してください。

原文 ({source_lang}):
{text}

翻訳 ({target_lang}):"""
    
    payload = {
        "prompt": prompt,
        "max_tokens": 200,
        "temperature": 0.3
    }
    response = make_api_request("completions", payload)
    return response['choices'][0]['text'].strip()

# 使用例
japanese_text = "人工知能は、私たちの生活を大きく変えつつあります。"
english_translation = translate_text(japanese_text, "日本語", "英語")
print(f"原文 (日本語): {japanese_text}")
print(f"翻訳 (英語): {english_translation}")

english_text = "Artificial intelligence is rapidly transforming our world."
japanese_translation = translate_text(english_text, "英語", "日本語")
print(f"\n原文 (英語): {english_text}")
print(f"翻訳 (日本語): {japanese_translation}")

このコードでは、指定された言語間で翻訳を行います。DeepSeek APIの言語モデルは多言語に対応しているため、さまざまな言語ペアで翻訳が可能です。

第8章:テキスト分類システムの構築

テキスト分類は、与えられたテキストを事前に定義されたカテゴリーに分類するタスクです。DeepSeek APIを使用して、柔軟なテキスト分類システムを構築しましょう。

以下のコードは、カスタマイズ可能なテキスト分類システムの実装例です:

def classify_text(text, categories):
    categories_str = ", ".join(categories)
    prompt = f"""以下のテキストを与えられたカテゴリーのいずれかに分類してください。
カテゴリー: {categories_str}

テキスト:
{text}

分類結果:"""
    
    payload = {
        "prompt": prompt,
        "max_tokens": 50,
        "temperature": 0.3
    }
    response = make_api_request("completions", payload)
    return response['choices'][0]['text'].strip()

# 使用例
categories = ["技術", "経済", "スポーツ", "エンターテイメント"]

text1 = "新しい人工知能アルゴリズムが開発され、画像認識の精度が大幅に向上しました。"
classification1 = classify_text(text1, categories)
print(f"テキスト1: {text1}")
print(f"分類結果: {classification1}")

text2 = "株式市場は今週、予想を上回る企業業績を受けて上昇しました。"
classification2 = classify_text(text2, categories)
print(f"\nテキスト2: {text2}")
print(f"分類結果: {classification2}")

このシステムでは、ユーザーが定義したカテゴリーに基づいてテキストを分類します。カテゴリーは自由に変更できるため、さまざまな分類タスクに適用できます。

第9章:文章の文法・スタイル修正

DeepSeek APIを使用して、文章の文法やスタイルを修正する機能を実装しましょう。この機能は、文章の品質を向上させたり、特定のスタイルに合わせて文章を調整したりするのに役立ちます。

以下のコードは、文法修正と文体調整の機能を実装しています:

def correct_grammar(text):
    prompt = f"""以下の文章の文法を修正し、より自然な日本語に直してください。修正箇所がある場合は、その理由も簡単に説明してください。

原文:
{text}

修正後の文章:"""
    
    payload = {
        "prompt": prompt,
        "max_tokens": 200,
        "temperature": 0.3
    }
    response = make_api_request("completions", payload)
    return response['choices'][0]['text'].strip()

def adjust_style(text, target_style):
    prompt = f"""以下の文章を「{target_style}」のスタイルに調整してください。

原文:
{text}

{target_style}スタイルの文章:"""
    
    payload = {
        "prompt": prompt,
        "max_tokens": 200,
        "temperature": 0.5
    }
    response = make_api_request("completions", payload)
    return response['choices'][0]['text'].strip()

# 使用例
original_text = "私はきのう図書館に行って、たくさんの本を読みました。とても楽しかったです。"

corrected_text = correct_grammar(original_text)
print("原文:", original_text)
print("文法修正後:", corrected_text)

formal_style = adjust_style(original_text, "フォーマル")
casual_style = adjust_style(original_text, "カジュアル")

print("\nフォーマルスタイル:", formal_style)
print("カジュアルスタイル:", casual_style)

このコードでは、correct_grammar関数が文法の誤りを修正し、より自然な日本語に直します。また、adjust_style関数は指定されたスタイル(フォーマルやカジュアルなど)に合わせて文章を調整します。これらの機能を使用することで、文章の品質を向上させたり、目的に応じた適切な文体に調整したりすることができます。

第10章:キーワード抽出と重要度分析

テキストから重要なキーワードを抽出し、その重要度を分析する機能を実装しましょう。この機能は、テキストの要点を素早く把握したり、検索エンジン最適化(SEO)に活用したりするのに役立ちます。

以下のコードは、キーワード抽出と重要度分析の機能を実装しています:

def extract_keywords(text, num_keywords=5):
    prompt = f"""以下のテキストから重要なキーワードを{num_keywords}個抽出し、それぞれの重要度(1-10の数値)を付けて列挙してください。
重要度が高いものから順に並べてください。

テキスト:
{text}

キーワードと重要度:"""
    
    payload = {
        "prompt": prompt,
        "max_tokens": 200,
        "temperature": 0.3
    }
    response = make_api_request("completions", payload)
    return response['choices']['text'].strip()

# 使用例
sample_text = """
人工知能(AI)技術の進歩により、多くの産業で自動化が進んでいます。
特に機械学習とディープラーニングの発展は、画像認識や自然言語処理の
分野で革命的な成果をもたらしています。一方で、AIの倫理的な問題や
雇用への影響など、社会的な課題も浮上しています。
"""

keywords = extract_keywords(sample_text)
print("テキスト:", sample_text)
print("\n抽出されたキーワードと重要度:")
print(keywords)

このextract_keywords関数は、与えられたテキストから重要なキーワードを抽出し、各キーワードの重要度を1から10の数値で評価します。これにより、テキストの主要な概念や話題を素早く把握することができます。

第11章:文章の類似度分析

DeepSeek APIを使用して、複数の文章間の類似度を分析する機能を実装しましょう。この機能は、文書の重複検出、関連コンテンツの推薦、プラグイアリズムチェックなどに活用できます。

以下のコードは、文章の類似度分析機能を実装しています:

def analyze_similarity(text1, text2):
    prompt = f"""以下の2つの文章の類似度を分析し、0から100のスコアで評価してください。
また、類似点と相違点を簡潔に説明してください。

文章1:
{text1}

文章2:
{text2}

類似度分析:"""
    
    payload = {
        "prompt": prompt,
        "max_tokens": 200,
        "temperature": 0.3
    }
    response = make_api_request("completions", payload)
    return response['choices']['text'].strip()

# 使用例
text1 = "人工知能は、機械学習とディープラーニングの技術を基盤としています。"
text2 = "AIシステムは、機械学習アルゴリズムとニューラルネットワークを使用しています。"
text3 = "自然言語処理は、コンピュータが人間の言語を理解し生成する能力です。"

similarity12 = analyze_similarity(text1, text2)
similarity13 = analyze_similarity(text1, text3)

print("文章1と文章2の類似度分析:")
print(similarity12)
print("\n文章1と文章3の類似度分析:")
print(similarity13)

このanalyze_similarity関数は、2つの文章を入力として受け取り、それらの類似度を0から100のスコアで評価します。さらに、類似点と相違点についての簡潔な説明も提供します。この機能を使用することで、文章間の関連性を定量的に評価し、より深い内容分析を行うことができます。

第12章:対話システムの構築

DeepSeek APIを使用して、簡単な対話システム(チャットボット)を構築しましょう。このシステムは、ユーザーの入力に応じて適切な応答を生成し、自然な会話を模倣します。

以下のコードは、基本的な対話システムの実装例です:

import random

def chatbot(user_input, conversation_history=None):
    if conversation_history is None:
        conversation_history = []
    
    conversation_history.append(f"ユーザー: {user_input}")
    conversation_str = "\n".join(conversation_history[-5:])  # 直近の5つのやり取りを使用
    
    prompt = f"""以下は人間とAIアシスタントの会話です。AIアシスタントは親切、創造的、賢く、とてもフレンドリーです。

{conversation_str}
AIアシスタント: """
    
    payload = {
        "prompt": prompt,
        "max_tokens": 150,
        "temperature": 0.7,
        "top_p": 0.9,
        "frequency_penalty": 0.5,
        "presence_penalty": 0.5
    }
    response = make_api_request("completions", payload)
    ai_response = response['choices']['text'].strip()
    conversation_history.append(f"AIアシスタント: {ai_response}")
    
    return ai_response, conversation_history

# 対話システムの使用例
conversation_history = []
print("AIアシスタント: こんにちは!どのようなお手伝いができますか?")

while True:
    user_input = input("あなた: ")
    if user_input.lower() == 'さようなら':
        print("AIアシスタント: お話しできて楽しかったです。またお会いしましょう!")
        break
    
    response, conversation_history = chatbot(user_input, conversation_history)
    print(f"AIアシスタント: {response}")

このコードでは、chatbot関数が中心的な役割を果たしています。この関数は、ユーザーの入力と過去の会話履歴を受け取り、適切な応答を生成します。会話の文脈を維持するために、直近の5つのやり取りを使用しています。

また、temperaturetop_pfrequency_penaltypresence_penaltyなどのパラメータを調整することで、応答の多様性や一貫性を制御しています。

このシステムを使用することで、簡単な質問応答や雑談などの基本的な対話機能を実現できます。より高度な対話システムを構築する場合は、意図認識、エンティティ抽出、対話状態管理などの機能を追加する必要があります。

第13章:テキストからの情報抽出

テキストから特定の情報を抽出する機能は、多くのアプリケーションで有用です。ここでは、DeepSeek APIを使用して、構造化されていないテキストから特定の情報を抽出する方法を実装します。

以下のコードは、テキストから人物名、場所、日付などの情報を抽出する機能を実装しています:

def extract_information(text):
    prompt = f"""以下のテキストから重要な情報を抽出し、JSON形式で出力してください。
抽出する情報:人物名、場所、日付、主要なイベントや行動

テキスト:
{text}

抽出情報(JSON形式):"""
    
    payload = {
        "prompt": prompt,
        "max_tokens": 250,
        "temperature": 0.3
    }
    response = make_api_request("completions", payload)
    return response['choices']['text'].strip()

# 使用例
sample_text = """
2023年5月15日、東京の国立競技場で開催された国際サッカー大会で、
日本代表の佐藤太郎選手が決勝ゴールを決め、チームを優勝に導きました。
試合後、佐藤選手は「チームメイトの支えがあってこその勝利です」と
コメントしました。大会MVPには、5試合で7ゴールを挙げた
ブラジル代表のカルロス・シルバ選手が選ばれました。
"""

extracted_info = extract_information(sample_text)
print("抽出された情報:")
print(extracted_info)

このextract_information関数は、与えられたテキストから人物名、場所、日付、主要なイベントや行動などの重要な情報を抽出し、JSON形式で出力します。この機能を使用することで、大量のテキストデータから必要な情報を効率的に取り出すことができます。

第14章:テキスト生成のファインチューニング

DeepSeek APIの高度な機能を活用して、特定のタスクや文体に特化したテキスト生成モデルを作成する方法を学びましょう。これは「ファインチューニング」と呼ばれるプロセスで、既存の言語モデルを特定のタスクに適応させることができます。

以下のコードは、ファインチューニングのためのデータ準備と、ファインチューニングされたモデルの使用方法を示しています:

import json

def prepare_fine_tuning_data(examples):
    data = []
    for prompt, completion in examples:
        data.append({"prompt": prompt, "completion": completion})
    
    with open("fine_tuning_data.jsonl", "w", encoding="utf-8") as f:
        for item in data:
            f.write(json.dumps(item, ensure_ascii=False) + "\n")

def use_fine_tuned_model(prompt, model_id):
    payload = {
        "prompt": prompt,
        "max_tokens": 100,
        "temperature": 0.7,
        "model": model_id
    }
    response = make_api_request("completions", payload)
    return response['choices']['text'].strip()

# ファインチューニングデータの準備例
examples = [
    ("製品名: スマートウォッチX1\n特徴:", "防水機能付き、心拍数モニタリング、睡眠トラッキング、1週間のバッテリー寿命"),
    ("製品名: ワイヤレスイヤホンY2\n特徴:", "ノイズキャンセリング機能、30時間のバッテリー寿命、快適な装着感、高音質"),
    # さらに多くの例を追加...
]

prepare_fine_tuning_data(examples)
print("ファインチューニングデータが準備されました。")

# ファインチューニングされたモデルの使用例(実際のmodel_idは異なります)
model_id = "ft-your-fine-tuned-model-id"
new_prompt = "製品名: スマートスピーカーZ3\n特徴:"
generated_features = use_fine_tuned_model(new_prompt, model_id)
print(f"生成された特徴:\n{generated_features}")

このコードでは、prepare_fine_tuning_data関数がファインチューニングのためのデータを準備し、JSONL形式のファイルに保存します。実際のファインチューニングプロセスはDeepSeek APIのバックエンドで実行されますが、ここではファインチューニング後のモデルを使用する方法を示しています。

use_fine_tuned_model関数は、ファインチューニングされたモデルを利用して特定のプロンプトに基づいたテキストを生成します。このプロセスにより、特定のタスクや文脈に最適化された出力を得ることができます。例えば、製品説明やカスタマーサポートメッセージなど、特定の用途に特化した生成タスクに活用できます。

第15章:DeepSeek APIのベストプラクティスと応用例

最後に、DeepSeek APIを効果的に活用するためのベストプラクティスと、実際の応用例について解説します。

ベストプラクティス

  1. プロンプトエンジニアリング

    • プロンプトを工夫して明確かつ具体的な指示を与えることで、より正確な結果を得ることができます。
    • 例:「以下の文章を要約してください」といった明確な指示を含める。
  2. パラメータ調整

    • temperaturetop_pなどのパラメータを調整して、生成されるテキストの多様性や一貫性を制御します。
    • 例:クリエイティブな文章には高いtemperature(0.8〜1.0)、正確性が求められる場合は低い値(0.2〜0.5)を設定。
  3. エラーハンドリング

    • APIリクエストが失敗した場合に備えて、エラー処理を実装します。
    • 例:HTTPステータスコードやタイムアウトエラーのチェック。
  4. データセキュリティ

    • APIキーや機密データは環境変数や安全な方法で管理し、漏洩を防ぎます。
import os

# 環境変数からAPIキーを取得
API_KEY = os.getenv("DEEPSEEK_API_KEY")
if not API_KEY:
    raise ValueError("APIキーが設定されていません。環境変数DEEPSEEK_API_KEYを設定してください。")

応用例

  1. カスタマーサポート

    • 自然言語によるFAQ応答システムや問い合わせ分類システムの構築。
  2. コンテンツ生成

    • ブログ記事、自動化された製品説明、ソーシャルメディア投稿など、多様なコンテンツ作成。
  3. 教育・学習支援

    • 学習教材の自動作成、質問応答システム、学生向けチュータリングアプリケーション。
  4. データ分析とレポート作成

    • 大量のテキストデータから重要な情報を抽出し、自動的にレポート形式でまとめる。
  5. クリエイティブアプリケーション

    • 小説や詩の生成、ゲーム内キャラクターとの対話システムなど。

以下はカスタマーサポート応答システムの簡単な例です:

def customer_support(question):
    prompt = f"""以下はカスタマーサポートシステムです。ユーザーからの質問に対して丁寧かつ正確に回答してください。

ユーザー: {question}
サポート: """
    
    payload = {
        "prompt": prompt,
        "max_tokens": 150,
        "temperature": 0.5
    }
    response = make_api_request("completions", payload)
    return response['choices'][0]['text'].strip()

# 使用例
user_question = "返品手続きについて教えてください。"
support_response = customer_support(user_question)
print(f"ユーザー: {user_question}")
print(f"サポート: {support_response}")

このようにDeepSeek APIは、多岐にわたる用途に対応できる強力なツールです。本記事で紹介した機能とコード例を参考に、自分自身のプロジェクトに適応させてみてください。これからもDeepSeek APIを活用して、新しい価値あるアプリケーションやサービスを生み出していきましょう!

おわりに

本記事では、DeepSeek APIの基本から応用まで15章にわたって解説しました。PythonでAPIを活用する方法や各種NLPタスクへの適用方法について学ぶことで、実践的なスキルが身についたと思います。DeepSeek APIは非常に柔軟で強力なツールなので、自分のアイデアやプロジェクトに合わせてさらに深く探求してみてください!

6
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?