top of page
執筆者の写真NISHIO KEI

特許情報を参照してソース付きで回答させる

更新日:2023年6月17日

1.はじめに

  • LangChainの RetrievalQAWithSourcesChainを使うと、特許文章の読み込みが楽に!


2.利用場面

  • 先日、ある処理に関するUS特許を読み込んで、「どんな種類の物質を処理できるか」というのを調べたい、という場面に出会いました。

  • 2-3件なら何とかなるけれど、要約だけでなくて全文を読んでいかないといけないので、10件を超えてくると・・・辛い。

  • こんな感じの「全文中のどこかに書いてあるかもしれない記載を抽出するのは、すみずみまで読まないといけないので辛いです。

  • そういえば特定の文章を参照して、ソースつきで回答させる、という機能が‘LangChainにあったな、と思い出し、使ってみることにしました。


3.ソースコードなど

  • まずはデータをとってベクトルに変換するところまで。

  • google patentsから直接情報をとれないかな、と思っていてつらつらと調べると、urlを直接指定してloaderにかける機能を発見。これを使うことにしました。下記のようにすればOKで簡単です。

from langchain.document_loaders import UnstructuredURLLoader
urls = [
    "https://patents.google.com/patent/***",
    "https://patents.google.com/patent/***",
    "https://patents.google.com/patent/***",
    "https://patents.google.com/patent/***",
    "https://patents.google.com/patent/***",
]
loader = UnstructuredURLLoader(urls=urls)
documents = loader.load()

  • 次にtext splitterをかませてembeddingを得るところまで。

  • 私はGPT-4利用なのでchunk_sizeは2000に設定しました。下記のソース中のembeddingsやmodelはopenAI、Azureなどに応じて適宜設定してください。

from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter

text_splitter = CharacterTextSplitter(chunk_size=2000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

docsearch = Chroma.from_documents(texts, embeddings)

  • 最後に質問する部分。chainを作って、そこに問い合わせ。

  • chain_typeによってだいぶ回答が変わります。ここも参照ください。今回の特性上map_reduce(各フラグメントごとに問い合わせ&回答抽出)がよかったです。

chain = RetrievalQAWithSourcesChain.from_chain_type(model, chain_type="map_reduce", retriever=docsearch.as_retriever())

q1="処理できる物質を教えてください。"
chain({"question": q1}, return_only_outputs=True)




  • 回答

{'answer': 'Types of waste that can be processed include normal garbage, toilet solid waste, organic waste, and small amounts of PVC plastic containing chlorine. Glass and metal are not melted but are recovered as completely sterilized at the end of the process cycle for recycling.\n',  'sources': 'https://patents.google.com/patent/WO2020118236A1/en?oq=*****, https://patents.google.com/patent/US7998226B2/en?oq=*****'}

  • 狙ったとおり「sources」でどの文献から文章を抽出して要約したか示してくれました。ちなみに英語で質問した方が回答の精度が高かったです。

  • inputとしてはurlを指定すればいいだけなので、UIも少し作って活用しようと思います。なお利用を希望の方は問い合わせください。

閲覧数:766回0件のコメント

最新記事

すべて表示

Comments


bottom of page