「LLMsでテキストデータの力を解き放つ」

『テキストデータの力を解き放つためのLLMs』

データサイエンスラボ

LLMsを使用してテキストデータを処理する方法を学びましょう:初心者のためのステップバイステップガイド

Midjourneyを使用して生成された画像

顧客レビュー、従業員アンケート、ソーシャルメディアの投稿は、特定の製品やサービスに対する人々の態度を明らかにするために非常に強力です。しかし、このタイプのデータをほとんど活用していないデータアナリストがほとんどです。なぜかというと、テキストデータから洞察を生成することは簡単な作業ではなく、最も経験豊富なデータアナリストさえも何日も頭をかくかくさせることがあるからです。

ここで大言語モデル(LLMs)が救助に駆けつけます。彼らは翻訳、要約、感情分析などのタスクを遂行するのに役立ちます。でも、LLMとは一体何でしょうか? 簡単に言うと、LLMはオウムのようなものです。家で聞いたことをオウムが繰り返すように、LLMは人間の言語を模倣します。違いは、LLMが膨大な量のデータで訓練されていることです — オウムがケージで学ぶよりも遥かに多いデータです! これが、LLMがときにはナンセンスを生むことなく、関連性のあるテキストを生成する能力を持つ理由です。🦜

この記事では、LLMの仕組みとテキストデータから洞察を抽出するためにそれらがどのように助けを提供するかを探求します。さまざまなLLMがAPI経由で利用可能になっており、それぞれに異なる機能と価格があります。このチュートリアルでは、OpenAI APIを介してGPT-3を使用します。執筆時点では、OpenAIはAPIの利用に基づいてリクエスト数と生成されたトークン数に応じて料金を請求しています。このチュートリアルの総額は0.2ドルです。

それでは、深堀りしてみましょう!

目次

ステップ1:データのダウンロードステップ2:データの読み込みステップ3:データの前処理ステップ3a:NaNの値の処理ステップ3b:GPT-3用のテキスト変換ステップ3c:トークンのカウントステップ4:OpenAIアカウントの設定ステップ5:GPT-3の使用ステップ6:結果の要約

事前準備

このチュートリアルに参加するには、以下が必要です:

  • Pythonの作業知識
  • Python 3の環境
  • OpenAI APIキー(ステップ4を参照)

ステップ1:データのダウンロード

使用するデータセットは、2017年にKaggleが実施した業界全体の調査で、機械学習やデータサイエンスの新しいトレンドを明らかにすることを目的としています。このチュートリアルでは、Kaggleの質問に対するオープンエンドの回答が含まれているfreeformResponses csvファイルのみを使用します。

無料フォーム応答 csv ファイルのスニペット

ステップ 2: データの読み込み

次に、csv ファイルをデータフレームに読み込み、列「PersonalProjectsChallengeFreeForm」に注目します。この列には、個人プロジェクトに公開データセットを使用する際の課題が含まれています。データサイエンスと機械学習のプラットフォームである Kaggle は、これらの洞察を活用して(たとえば関連するコンテンツやチュートリアル、リソースの開発など)、サービスを向上させることができます。

# ライブラリの読み込みimport pandas as pd# ファイルを読み込み、データフレームを作成df = pd.read_csv('freeformResponses.csv', usecols = ['PersonalProjectsChallengeFreeForm'])# 出力をチェックdf.head()
出力

ステップ 3: データの前処理

データの前処理は、データを分析のためにクリーニングし準備する一連の手順です。GPT-3 は比較的クリーンで構造化されたテキストデータを処理することができますが、複雑なデータや標準でないデータの場合は、GPT-3 を最大限活用するために追加の前処理が必要となる場合があります。テキストに複数の言語、スペルミス、ドメイン固有の用語が含まれている場合は、これらを考慮する必要があります。

ステップ 3a: NaN 値の処理

まず、NaN(非数)値の処理を行います。NaN 値は、欠損値または未定義値を表すものであり、非常に特定の特性を持っていますので、isna() 関数を使用して早期に検出することが重要です。検出されたら、適切な処理を行います。

# NaN 値の数をカウントdf.isna().sum()
出力

13,214 個の NaN 値(回答の 80%!)があります。これは、これらの人々が質問に回答を提供しなかったことを意味します。最も簡単なアプローチは、dropna() 関数を使用して NaN 値を含むエントリをすべて削除することです。ただし、具体的な使用用途に応じて、NaN 値を特定の値で置換するなど、異なる処理方法を選択することもあります。

# NaN 値を削除df = df.dropna()# 出力をチェックdf.head()
出力

デモ目的で、アンケートの最初の 500 件(非 null)の回答だけを使用します。

# 最初の 500 行を選択df = df.head(500)

ステップ 3b: GPT-3 へのテキストの変換

次に、テキストデータを GPT-3 に適した形式に変換します。 「PersonalProjectsChallengeFreeForm」列からすべての値を抽出し、「challenges」リストに保存します。この変換は、データフレームを pandas シリーズに変換する squeeze() 関数を使用して始まり、その後、このシリーズをリストに変換する tolist() 関数を使用します。

# df をシリーズに変換し、次にリストに変換challenges = df.squeeze().tolist()# 出力をチェックchallenges[:5]
出力

この例では、「challenges」はリストであり、各要素は元の調査からの応答を表しています。このテキストをGPT-3の入力として提供します。

ステップ3c:トークンのカウント

私たちのテキストはほぼGPT-3の準備ができています。続行する前に、GPT-3がテキストを理解し、処理する方法を理解することが重要です。最初に行われるのはトークン化です。これは、テキストをトークンと呼ばれるより小さい単位に分割する作業です。トークンは、文、単語、数字、そして句読点など、テキストの単位です。例えば、「hello friend!」というフレーズは、「hello」、「friend」、「!」の3つのトークンに分割することができます。

トークン化の例

トークン化後、GPT-3はエンコーディングに進み、これらのトークンをトークン番号に変換します。例えば、3つのトークン「hello」、「friend」、そして「!」は、それぞれ「15339」、「4333」、そして「0」に変換することができます。

エンコーディングの例

テキスト内のトークン数を決定することで、テキストがモデルの処理に長すぎるかどうかや、OpenAI APIの呼び出しにかかるコスト(APIの呼び出しは、入力で送信されたトークンの数とGPTが出力で返すトークンの数に基づいて請求されます)を知ることができます。

これを行うために、tiktokenというライブラリをインストールし、必要なモジュールencoding_for_modelをインポートします。異なるLLMがテキストをエンコードするために異なるメソッドを使用するため、使用するモデルを指定する必要があります。ここでは、「gpt-3.5-turbo-16k」です。各文に対して、テキストをトークン化してエンコードします。

# ライブラリをインストールpip install tiktoken# ライブラリをインポートfrom tiktoken import encoding_for_model# エンコードするためのモデルを定義します(この場合は「gpt-3.5-turbo-16k」)enc = encoding_for_model("gpt-3.5-turbo-16k")# トークンを保存するための空のリストtokens = []# 'challenges'リスト内の各文に対してループを実行しますfor sentence in challenges:    # 指定されたモデルを使用して文をエンコードし、'tokens'リストに追加します    tokens.append(enc.encode(sentence))# 出力をチェックpd.DataFrame(data={'challenges':challenges, 'tokens':tokens}).head(3)
出力

最後のステップは、トークンの数を数えることです。これは、「num_tokens」リストの長さを決定することで達成できます。

# トークンの数を保存するための空のリストnum_tokens = []# 'tokens'リスト(リストのリスト)を反復処理しますfor item in tokens:    # "tokens"内のサブリストを反復処理するネストされたループ    for subitem in item:        # サブアイテム(トークン)を 'num_tokens'リストに追加します        num_tokens.append(subitem)# 出力をチェックlen(num_tokens)
出力

入力に基づいて総コストを推定するためには、価格に関するドキュメントを参照することができます。この場合、4629のトークンは$0.01のコストに相当します。

ステップ4:OpenAIアカウントの設定

テキストはついにGPT-3に対応する準備が整いました(いよいよ本題に近づいています!)。GPT-3を使用するためには、OpenAI APIを使用します。OpenAI APIにアクセスするためには、OpenAIアカウントが設定されていることを確認してください。アカウントをまだお持ちでない場合は、以下の手順に従って作成してください。

まずはじめに、OpenAIのウェブサイトにアクセスし、ページの右上隅にある「サインアップ」ボタンをクリックします。メールアドレスを入力し、パスワードを作成し、必要な情報を提供してフォームを送信します。そして、「アカウントを作成」ボタンをクリックします。確認メールが届くので、受信トレイを確認してください。メール内のリンクをクリックしてアカウントを確認します。これでログインの準備が整いました。

アカウントが作成されたら、次のステップはアカウントに資金を投入することです。APIを使用するたびに利用料金が請求されることを覚えておいてください。単に「アカウントの管理」に移動し、「請求」タブを見つけます。そこで、支払いカードの詳細を追加し、アカウントに入金する初期金額を指定できます。

最後の重要なステップは、APIキーを生成することです。このAPIキーはAPIへの非公開アクセスキーとして機能します。これは「APIキー」タブで作成できます。このキーは紛失した場合には回復できないので、安全な場所に保管してください。ただし、万が一にキーが紛失した場合は、新しいキーを作成するオプションもあります。

ステップ5:GPT-3の使用

OpenAI APIを介してGPT-3にアクセスできるようになったので、入力とAPIキーを含むリクエストを送信します。すると、GPT-3の出力が含まれたレスポンスが返ってきます。

Using GPT-3 via the OpenAI API

まず、openaiというライブラリをインストールします。次に、リクエストを認証するためにAPIキーを設定します。

# ライブラリのインストール
pip install openai

# ライブラリのインポート
import openai as ai

# 'your_api_key'を実際のAPIキーに置き換える
ai.api_key = 'your_api_key'

テキストをGPT-3に送信し、主要なトピックを要約するように要求します。これらのトピックは「response」変数に格納されます。

💡 :このコードは簡略化された例ですが、特定のタスクに応じてユーザーメッセージとシステムメッセージを調整して、さまざまなタスクに適用することができます。

# GPT-3のレスポンスを取得
response = ai.ChatCompletion.create(
    model = 'gpt-3.5-turbo-16k',
    messages = [
        {"role": "system", "content": "あなたは助けになるアシスタントです。タスクはレビューのセットを分析することです。"},
        {"role": "user", "content": f'''以下はいくつかのレビューです。これらのコメントで言及されている主要なトピックを特定してください。説明付きのトピックのリストを返してください。レビュー:{challenges}'''}
    ],
    temperature = 0,
    max_tokens = 6000
)

コードをステップごとに見ていきましょう:

  • response = ai.ChatCompletion.create(:この行はGPT-3に対するリクエストを開始し、そのレスポンスを変数「response」に割り当てます。
  • model = 'gpt-3.5-turbo-16k':このパラメータは使用するGPT-3モデルを指定します。
  • messages = [ ... ]:このセクションでは、GPT-3がレスポンスを作成するためのメッセージのリストを定義します。各メッセージには役割(システムまたはユーザーなど)と内容があります。システムメッセージはGPT-3の動作を設定するのに役立ちます。たとえば、「あなたは助けになるアシスタントです。タスクはレビューのセットを分析することです」と言えます。一方、ユーザーメッセージはタスクの指示を提供します。たとえば、「以下はいくつかのレビューです。これらのコメントで言及されている主要なトピックを特定してください」と言えます。
  • temperature = 0:このパラメータは応答のランダム性に影響を与えます。この値を設定することで、応答の創造性や予測不能性を制御できます。0に設定すると、毎回同じ出力が得られ、まるで壊れたレコードのようです。一方、より大きな値(たとえば0.8)に設定すると、新鮮な出力が得られます。
  • max_tokens = 6000:このパラメータは応答に含まれるトークンの最大数を指定します。この値を6000に設定することで、応答がこの長さを超えないようにします。応答がこの制限を超える場合、トリケーションされます。

OpenAIのGPT-3からの応答を受け取った後、コンテンツ(追加のメタ情報を除く)を返します。

# show responseresponse['choices'][0]['message']['content']

GPT-3は以下の5つのトピックを返しました:

1. データのクリーニングと準備:多くのレビューで、データのクリーニングと準備の難しさについて言及されています。これには、欠損値の処理、フォーマットの問題、非構造化データ、およびデータの整形が含まれます。

2. データ品質とドキュメンテーション:いくつかのレビューでは、データの品質の悪さが強調されています。これには、ドキュメンテーションの不足、誤ったドキュメンテーション、信頼性のないデータが含まれます。データの完全性、正確性、信頼性に関する問題も言及されています。

3. 適切なデータセットの検索とアクセス:多くのレビュアーは、自分のプロジェクトに適したデータセットの見つけ方についての困難さを表現しています。これは、特定の要件に合うデータセットを見つけることの難しさ、公開データセットのサイズや関連性の制約、個人データの収集の必要性を含みます。

4. 接続性とデータの統合:一部のレビューでは、データの接続性と統合に関連する課題が言及されています。これには、異なるソースからのデータの統合、一貫性のないフォーマットの扱い、データセットの統合が含まれます。

5. コンピューティングパワーとスケーラビリティ:数件のレビューで、データの処理に関連するコンピューティングパワーとスケーラビリティに関する課題が言及されています。特に大規模なデータセットや単一のマシン上でのデータ処理時に問題が生じると述べられています。これらのトピックは、データを扱う際に個人が直面する一般的な課題を反映しています。データ品質、データの準備、データセットの利用可能性、および技術的な制限に関連する問題が含まれます」

💡 注意:GPT-3は強力ですが、トレーニングデータを使用してモデルを微調整することで、より良い結果を得ることができることがあります。

ステップ6:結果のまとめ

これらのトピックは、個人がデータを扱う際に直面する一般的な課題を反映しており、データの準備、データの品質、信頼性、スケーラビリティに関連する問題が含まれています。Kaggleのような企業は、これらの洞察を活用して、これらの課題に特化した教育資料を開発することで、コミュニティに有益なサポートを提供することができます。

結論

この記事では、テキストデータから洞察を抽出するLLMsの重要なポテンシャルについて探求しました。LLMsの仕組みと、テキストデータを扱うデータアナリストにとってのゲームチェンジャーとなる方法について説明しました。これらの概念を自分自身のテキスト分析タスクに応用する知識を得ました。

この記事がお役に立てたことを願っています。ご質問やご意見がありましたら、コメントでお待ちしています!

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more