chatgpt Python

【Python】ChatGPT+LangChainで、PDFドキュメントの内容をモデルに追加学習させる

この記事は約7分で読めます。

 

今回はChatGPT+LangChainで、PDFドキュメントの内容をモデルに学習させてファインチューニングる方法について紹介したいと思います。使用する言語はPythonになります

 

前準備

 

OPEN AIのAPI鍵を取得する必要があります。

OPENAIのAPI鍵の取得方法などについて以下を参考にしてください

関連記事:Pythonを使ってChatGPTと会話するサンプルコード

 

今回使用するのはワンピースの論文のPDFです。

以下のURLからPDFをダウンロードしてください。

https://core.ac.uk/download/pdf/230140175.pdf

 

まずワンピースについては3.5ベースだとデフォルトのモデルの場合は

以下のような回答が返ってきます

 

!pip install openai -q
import openai

# APIキーの設定
openai.api_key =  'sk-xxxxxxxxxxx'

# AIに送るメッセージ
msg = '''
 One Pieceのの連載が始まったのはいつですか

'''
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "user", "content": msg},
    ],
)

# 出力結果をプリント
print(response.choices[0]["message"]["content"].strip())

 

<回答>

One Pieceの連載が始まったのは、1997年7月22日です。

 

LangChainで、chatgptにPDFをモデルに読み込ませる

 

ここではChatGPT と LangChain の API を使用して、PDF ドキュメントの内容を覚えさせてプロンプトから問い合わせる方法を紹介します。

具体的には、PDF ドキュメントの内容を問い合わせをすると、ドキュメントの内容部分から該当部分の結果を返してくれます。これにより、大量の PDF ファイルを自動的に解析し、必要な情報を素早く抽出できるようになります。

この機能を実装するにはChatGPT と LangChain を使用することで、下記のような作業を行う必要があります。

  1. PDF ドキュメントからテキストを抽出して複数に分割する
  2. 分割したテキストからテキスト間の関連を表すベクターデータを作成する
  3. 作成したベクターデータをベクターストアに格納しておく
  4. ChatGPT に外部から与えたベクターストアを使って問い合わせに答えるようにさせる

実行環境はGoogleColabを想定しています

 

まずセルに以下を記述します。これでrequirements.txt が作成されます

 

%%writefile requirements.txt
openai
chromadb
langchain == 0.0.167
pypdf
tiktoken

 

次にrequirements.txtに記載されているライブラリをインストールします

%pip install -r requirements.txt

 

インストールできたらライブラリを読み込みます

 

import os
import platform

import openai
import chromadb
import langchain

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.document_loaders import PyPDFLoader

 

一応ライブラリをバージョンは以下なっています

print(openai.__version__,chromadb.__version__,langchain.__version__) 
# 0.27.6 0.3.23 0.0.167

 

ただlangchain周りはライブラリが日々更新されているのでエラーなどが出た場合はバージョンをアップグレードしてください

 

次にPDFを読み込みます(例:content直下の場合)

loader = PyPDFLoader('/content/xxxx.pdf')

 

次にOPEN AIの情報を読み込みます

# OPEN AIのAPI鍵の読み込み モデル設定
os.environ["OPENAI_API_KEY"] = 'sk-xxxxxxxxxx'
openai.api_key = os.getenv("OPENAI_API_KEY")
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")

 

OPEN AIのAPI鍵の取得方法について以下を参照してください

参照記事:Pythonを使ってChatGPTと会話するサンプルコード

 

次にPDFの内容を確認します

 

# PDFの内容の確認
pages = loader.load_and_split()
pages[1].page_content

 

ちゃんとPDFが読み込めていることを確認出来たら次はPDFの内容をベクトルに変換します

# 単語や文章等をベクトル表現に変換する(embeddings)
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(pages, embedding=embeddings, persist_directory=".")
vectorstore.persist()

 

そしてベクトル化したPDFの内容をChatgptのモデルの学習させます

# ベクトル化したPDFの内容をモデルの学習させる
pdf_qa = ConversationalRetrievalChain.from_llm(llm, vectorstore.as_retriever(),chain_type='refine' ,return_source_documents=True)

 

 

# PDFの内容を踏まえた回答になる
query = " One Pieceのの連載が始まったのはいつですか"
chat_history = []

result = pdf_qa({"question": query, "chat_history": chat_history})

result["answer"]

 

<実行結果>

One Pieceの連載が始まったのは1997年で、作者の尾田栄一郎が自身初めての連載作として『週刊少年ジャンプ』内で連載を開始しました。現在、2011年時点で14年目に突入しています。『週刊少年ジャンプ』は、アンケート至上主義を貫いており、アンケートによって掲載作品の順位を決め、その結果で誌上での掲載順や打ち切り作品が決まる商業誌です。尾田栄一郎は、1992年に『WANTED!』で手塚賞で準入選し、1993年には『一鬼夜行』でホップ☆ステップ賞入選している。九州東海大学中退後、甲斐谷忍、徳弘正也、和月伸宏のアシスタントを務め、1997年に『ONE PIECE』の連載を開始しました。

 

上記のようにPDFの内容を踏まえた回答に代わっていることがわかります

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

  1. […] 関連記事:【Python】ChatGPT+LangChainで、PDFドキュメントの内容をモデルに追加学習させる […]

タイトルとURLをコピーしました