今回は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 を使用することで、下記のような作業を行う必要があります。
- PDF ドキュメントからテキストを抽出して複数に分割する
- 分割したテキストからテキスト間の関連を表すベクターデータを作成する
- 作成したベクターデータをベクターストアに格納しておく
- 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の内容を踏まえた回答に代わっていることがわかります
コメント
[…] 関連記事:【Python】ChatGPT+LangChainで、PDFドキュメントの内容をモデルに追加学習させる […]