「LangChainとOpenAIを使用して文書の理解を向上させる方法」

『LangChainとOpenAIを活用した文書の理解力向上法』

DAAL-Eを使用して生成されたイメージ

ジェネレーティブAIと言語モデルの急成長により、文書から情報を理解し抽出する能力が向上し、GPTのようなマシンが知識抽出、解釈、抽出の向上に人間を支援する新たな時代を目撃しています。

このブログ投稿では、OpenAI APIを使用し、LangChainと組み合わせて、文書から情報を抽出し、質問に答えることができるシステムを構築する類似のユースケースを解説します。では、始めましょう。

ステップ0:環境のセットアップ

この記事では、Jupyter NotebookとOpenAI APIを使用します。

このチュートリアルには、次のモジュールが必要です。

pip install openai tiktoken chromadb langchain BeautifulSoup4

また、OpenAI APIの認証情報を設定する必要もあります

import osos.environ["OPENAI_API_KEY"] = "sk-xxxx"

これで準備が整いましたので、始めましょう。

ステップ1:ドキュメントの内容を取得する

Berkeley Artificial Intelligence Researchブログの記事を使用します。https://bair.berkeley.edu/blog/2023/07/14/ddpo/

LangChainはWebのURLからデータを読み取り、Document形式に変換する簡単な方法を提供します。ドキュ

ステップ2:ドキュメントを固定長のチャンクに変換する

ドキュメントのコンテンツを取得したら、次のステップはテキストがモデルのコンテキストウィンドウに収まるように固定サイズのチャンクに変換することです。500のチャンクサイズでRecursiveCharacterTextSplitterを使用します。

from langchain.text_splitter import RecursiveCharacterTextSplittertext_splitter = RecursiveCharacterTextSplitter(chunk_size = 500, chunk_overlap = 0)all_splits = text_splitter.split_documents(data)print(all_splits[0])print(all_splits[1])> page_content='Training Diffusion Models with  Reinforcement Learning – The Berkeley Artificial Intelligence Research Blog\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSubscribe\nAbout\nArchive\nBAIR\n\n\n\n\n\n\n\n\nTraining Diffusion Models with  Reinforcement Learning\n\nKevin Black \xa0\xa0\n  \n  \n  Jul 14, 2023\n  \n  \n\n\n\n\n\n\n\n\n\n\nTraining Diffusion Models with Reinforcement Learning\n\n\n\n\n\n\nreplay' metadata={'source': 'https://bair.berkeley.edu/blog/2023/07/14/ddpo/', 'title': 'Training Diffusion Models with  Reinforcement Learning – The Berkeley Artificial Intelligence Research Blog', 'description': 'The BAIR Blog', 'language': 'No language found.'}page_content='Diffusion models have recently emerged as the de facto standard for generating complex, high-dimensional outputs. You may know them for their ability to produce stunning AI art and hyper-realistic synthetic images, but they have also found success in other applications such as drug design\xa0and continuous control. The key idea behind diffusion models is to iteratively transform random noise into a sample, such as an image or protein structure. This is typically motivated as a maximum likelihood' metadata={'source': 'https://bair.berkeley.edu/blog/2023/07/14/ddpo/', 'title': 'Training Diffusion Models with  Reinforcement Learning – The Berkeley Artificial Intelligence Research Blog', 'description': 'The BAIR Blog', 'language': 'No language found.'}

ステップ3:ベクトルストアを使用してドキュメントのチャンクを保存する

ドキュメントをチャンクに分割した後、次のステップはテキストの埋め込みを作成して、ベクトルストアに保存することです。以下に示すように実行できます。

from langchain.embeddings import OpenAIEmbeddingsfrom langchain.vectorstores import Chromavectorstore=Chroma.from_documents(documents=all_splits, embedding=OpenAIEmbeddings())retriever=vectorstore.as_retriever()

ステップ4:クエリに基づいて類似ドキュメントを取得する

テキストの埋め込みを生成した後、ベクトル類似検索を使用してクエリに関連するドキュメントのチャンクを取得できます。

question = "DDPOアルゴリズムのステップは何ですか?"docs = vectorstore.similarity_search(question)print(f"取得されたドキュメント数:{len(docs)}")print(docs[0].page_content)> 取得されたドキュメント数:4私たちのアルゴリズムであるdenoising diffusion policy optimization(DDPO)の主な洞察は、最終的なサンプルの報酬を最大化するために、私たちはそこにたどり着くためのすべてのdenoisingステップのシーケンスに注意を払うことであり、これを実現するために、私たちは拡散プロセスを多段階マルコフ決定過程(MDP)として再構成することです。 MDPの用語では、各denoisingステップはアクションであり、エージェントは最終サンプルが生成される各denoisingトラジェクトリの最終ステップでのみ報酬を得ます。

ステップ5:蒸留ドキュメントを使用して応答を生成する

クエリに対して蒸留ドキュメントを取得したので、contextvectorstoreリトリーバーによって提供される基づいてクエリに回答するLLM連鎖を作成できます。疑問の場合には、不確実性時に確定されたメッセージを指定します。

from langchain.prompts import PromptTemplatetemplate = """以下のコンテキストを使って、最後の質問に答えてください。答えがわからない場合は、わからないと答えるだけで、答えをでっちあげないでください。回答は最大3文で簡潔にしてください。回答の最後には必ず「完了」と言ってください。{context}質問:{question}回答:"""prompt = PromptTemplate.from_template(template)

このプロンプトを使用して、以下のようなLLMチェーンを作成します。

from langchain.schema.runnable import RunnablePassthroughfrom langchain.chat_models import ChatOpenAIllm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)qa_chain = (    {"context": retriever, "question": RunnablePassthrough()}     | prompt     | llm )

上記のコードでは、RunnablePassThroughという新しい用語がいくつかあります。それは、カスタムLLMチェーンを簡単に作成するためのプロトコルであり、上記のようにコンポーネントをパイプでつなぐことができます。

さて、LLMチェーンを使用してクエリに答えることができます。

qa_chain.invoke("DDPOアルゴリズムに使用されるステップは何ですか?").content> 'DDPOアルゴリズムでは、最終サンプルの報酬を最大化するために、ノイズ除去ステップのシーケンスが使用されます。各ノイズ除去ステップは、多段階マルコフ決定プロセス(MDP)のアクションと見なされます。エージェントは、最終的なサンプルが生成されたときにのみ報酬を受け取ります。完了!'qa_chain.invoke("記事で議論されている主なアイデアは何ですか?").content> '記事で議論されている主なアイデアは、過剰最適化の問題とそれを防ぐための汎用的な手法の必要性です。完了!'

Pythonノートブックの完全なコードはこちらで確認できます。

これにより、文書の解釈と理解を支援するために簡単に利用できる機能的なシステムを手に入れました。

Generative AIとLangChainの素晴らしい機能を使用して何ができるかに興味がある場合は、今後の記事にご期待ください。そこでは、さまざまな他のユースケースについて詳しく掘り下げていきます。

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

データサイエンス

何が合成データとは?その種類、機械学習とプライバシーにおける利用例及び応用について

データサイエンスと機械学習の分野は、毎日成長しています。新しいモデルやアルゴリズムが提案されるにつれて、これらの新し...

AI研究

このQualcomm AI ResearchのAIペーパーは、EDGIを公開しました:先進的なモデルベースの強化学習と効率的な計画のための画期的な不変拡散器

あらゆるところに対称性があります。物理学の普遍的な原則は、空間と時間の両方において成り立ちます。空間座標が変換、回転...

機械学習

「Amazon SageMaker JumpStartを使用して、2行のコードでファウンデーションモデルを展開して微調整する」

「Amazon SageMaker JumpStart SDKのシンプル化されたバージョンの発表をお知らせすることを楽しみにしていますこのSDKを使用...

データサイエンス

CleanLabを使用してデータセットのラベルエラーを自動的に検出する

数週間前、私は個人のプロジェクトを開発するためのデータセットを通常の検索している最中に、ブラジル下院オープンデータポ...

機械学習

「Underrepresented Groupsの存在下での学習について」

「ICML 2023で受け入れられた最新の成果をご紹介いたします『Change is Hard A Closer Look at Subpopulation Shift』という...

データサイエンス

チャットボットの台頭

ボットがますます巧妙な嘘つきになっているときに、真実を追跡するにはどうすればよいですか?