「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研究

MITとETH Zurichの研究者たちが、動的なセパレータの選択を通じて、拡張された混合整数線形計画法(MILP)の解決を目的とした機械学習技術を開発しました

複雑な最適化問題に効率的に取り組むことは、グローバルパッケージルーティングから電力グリッド管理まで、持続的な課題です...

データサイエンス

「RAGを紹介します データソースから自然言語を使用してRAGパイプラインを作成するStreamlitアプリ」

GPTはNLPタスクにおいて人工知能の分野で際立っています。ただし、GPTを使用して構築および展開されるパイプラインは長く複雑...

機械学習

50以上の最新の最先端AIツール(2023年7月)

AIツールは急速に開発が進んでおり、新しいものが定期的に導入されています。以下は、日常のルーティンを強化することができ...

AI研究

『広範な展望:NVIDIAの基調講演がAIの更なる進歩の道を指し示す』

ハードウェア性能の劇的な向上により、生成型AIが生まれ、将来の高速化のアイデアの豊富なパイプラインが構築され、機械学習...

AI研究

イタリアの新しいAI研究は、音楽合成と音源分離の両方が可能な拡散ベースの生成モデルを紹介しています

人間は、音楽の作曲や合成、分析、つまり音源の分離など、複数の音源を同時に処理することができます。つまり、人間の脳は、...

機械学習

機械学習エンジニアのためのLLMOps入門ガイド

イントロダクション OpenAIのChatGPTのリリースは、大規模言語モデル(LLM)への関心を高め、人工知能について誰もが話題にし...