「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

データサイエンス

「生物カメラは画像を保存します」

シンガポール国立大学の科学者たちは、生物学的な構成要素を使用して、生きた細胞上に画像をエンコードおよび保存しました

機械学習

「LLMはiPhone上でネイティブに動作できるのか? MLC-LLMとは、GPUアクセラレーションを備えた広範なプラットフォームに直接言語モデル(LLM)を導入するためのオープンフレームワークです」

大型言語モデル(LLM)は、人工知能の分野で現在の注目のトピックです。医療、金融、教育、エンターテイメントなど、さまざま...

AIニュース

「宇宙で初めて人間由来の体の一部が3Dプリントされました」

アメリカの航空宇宙会社Redwireは、宇宙で初めて人体の一部を3Dプリントしたと発表しました

AI研究

Googleの研究者たちは、AIによって生成された画像を透かしを入れたり識別するためのデジタルツールである「𝗦𝘆𝗻𝘁𝗵𝗜𝗗」を紹介しました

人工知能(AI)の急速に進化する風景の中で、生成モデルは伝統的な手段でキャプチャされたものとほとんど区別のつかない、写...

AIニュース

トップ40+の生成AIツール(2023年10月)

ChatGPT – GPT-4 GPT-4はOpenAIの最新のLLMであり、これまでの前任者よりも革新的かつ正確で安全です。 また、画像、PDF、CSV...

AI研究

チューリッヒ大学の研究者たちは、スイスの4つの公用語向けの多言語言語モデルであるSwissBERTを開発しました

有名なBERTモデルは、最近の自然言語処理の主要な言語モデルの1つです。この言語モデルは、入力シーケンスを出力シーケンスに...