top of page

課題解決手段の抽出をgeminiとGPT4で切り替える

1.はじめに

  • Langchainをかませれば、複数のLLMを使った課題解決手段の抽出が便利です。

  • 比較して良さそうな方をとるのもいいと思いました。


2.課題解決手段の抽出

・前にLangchain taggingで課題解決手段の抽出を試しましたが、LangChainはその後その後、LCEL記法Pydanic outputparsergemini対応も導入され、もっと拡張性を高めようということで、書き直してみました。


!pip install langchain openai -q
!pip install langchain-google-genai -q

  • importなどは適宜

  • modelはLangchainでchatmodelに対応していれば、自分の好きなもの(日本語LLMとか)に差し替えるだけで動くと思います。

import os

from typing import List,Dict
from google.colab import userdata

from langchain.output_parsers import ( RetryWithErrorOutputParser,     PydanticOutputParser,   OutputFixingParser, )  
from langchain.prompts import PromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field, validator
from langchain.chat_models import ChatOpenAI
from langchain_community.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain_community.document_loaders import AsyncHtmlLoader
from langchain_community.document_transformers import BeautifulSoupTransformer
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_google_genai import ChatGoogleGenerativeAI

#APIキー読み込み
os.environ['OPENAI_API_KEY'] = userdata.get('OPENAI_API_KEY')
os.environ["GOOGLE_API_KEY"] = userdata.get("GOOGLE_API_KEY")

#モデルの準備
model_gpt35 = ChatOpenAI(model="gpt-3.5-turbo",temperature=0.2)
model_gpt4 = ChatOpenAI(model="gpt-4-turbo",temperature=0.2)
model_gemini = ChatGoogleGenerativeAI(model="gemini-pro", temperature=0.2)

  • outputparserはこんな感じに。複数単語のリストにする場合はもっと作り込んだoutputparserのほうがいいかもしれません。

class TechnicalInfo(BaseModel):
    課題:str=Field(description="文章中に記載されている具体的な技術的課題を単語で抽出してください。技術的課題の記載がなければ「記載なし」と出力してください。複数ある場合はカンマ区切りで複数指定してください。")
    用途:str=Field(description="文章中に記載されている用途を単語で抽出してください。用途の記載がなければ「記載なし」と出力してください。複数ある場合はカンマ区切りで複数指定してください。")
    解決手段:str=Field(description="技術的課題の解決手段を、10文字程度の要約文で出力してください。解決手段の記載がなければ「記載なし」と出力してください。")

  • pd.dataframeで要約列を指定して,promptセットします。LLMの出力に応じた分岐とかこだわりがある場合はこのへんのLCEL記法を変更してください。

parser = PydanticOutputParser(pydantic_object=TechnicalInfo)

max_length = 1000
texts = [x[0:max_length] for x in bib_df["要約"].tolist()[0:10]]

prompt = PromptTemplate(
    template="Answer question:{query}\nBe sure to putput in Japanese.\n{context}\n",
    input_variables=["query"],
    partial_variables={"format_instructions": parser.get_format_instructions()},
)

output_fixing_parser = OutputFixingParser.from_llm(
    parser=parser,
    llm=model_gpt4
)

result_list= []
for i in range(0,len(texts)):
    q= "あなたは特許文章から技術的課題、用途、課題の解決手段を抽出する特許調査のプロです。Sumamrize information and ansewer in specified formation:"
    try:
        chain = prompt | model_gemini | output_fixing_parser
        result = chain.invoke({"query": q,"context":texts[i]})
    except:
	   #エラー発生時の最後の砦(GPT-4-turboになんとかしてもらう)
        chain = prompt | model_gpt4 | output_fixing_parser
        result = chain.invoke({"query": q,"context":texts[i]})

    result_list.append(result.dict())

  • 分析対象の文章はこちら:

文章

pd.options.display.max_colwidth=10000
bib_df.iloc[0:10]["要約"]

0 【要約】本技術の一形態に係る構造物は、筐体と、圧力発生装置と、音響メタマテリアルとを具備する。前記筐体は、少なくとも1つ以上の開口部を有する。前記圧力発生装置は、前記筐体内に配置され、前記開口部へと向けて空気圧を発生する。前記音響メタマテリアルは、前記開口部に嵌合され、前記空気圧が直線的に通過するように形成される第1の貫通孔、及び前記空気圧が螺旋形状に通過するように形成される第2の貫通孔を有し、前記圧力発生装置における断面積に対する、前記第1の貫通孔の断面積及び前記第2の貫通孔の断面積の合計の比が0.94よりも小さくなるように形成される。

1【要約】正面輝度を向上させることができる発光装置を提供する。 発光装置は、2次元配置された複数の発光素子と、メタマテリアルと、複数の発光素子とメタマテリアルの間に設けられた光学調整層とを備える。発光素子とメタマテリアルの間の距離Lと、画素のサイズDの比率(L/D)が、0.2以上1.8以下である。

2   【要約】本発明の回折素子の設計方法は、入射光を位相変調する回折素子(10)を、コンピュータを用いて設計する方法であって、入射光がガウシアンビームであって、入射光に対する、回折素子の出射面における出射光の電界分布を算出するステップと、出射面から所定の距離に位置する出射面に平行な平面における、出射面からの出射光の電界分布にガウシアン窓を乗じて得られる電界分布を、ベッセルガウスビームで近似されるビームの電界分布として算出するステップと、平面における出射光の電界分布に対して、回折素子の出射面上の電界分布として、第1の電界分布を、キルヒホッフの回折積分の原理に基づき算出するステップと、回折素子の出射面上の電界分布に基づいて、回折素子の表面における凹凸の深さを決定するステップとを備える。 これにより、本発明は、出射光の直径やパワーを所定の長さで保持できる回折素子の設計方法を提供できる。

3 要約】本発明の回折素子の設計方法は、入射光を位相変調する回折素子(10)を、コンピュータを用いて設計する方法であって、回折素子の出射面に垂直な直線上において、出射面から第1の距離と第2の距離との間の範囲に集光される球面波に対する出射面上の電界分布を決定するステップと、直線上の座標をzとし、出射面からの出射光の波数をkとし、出射光が直線となす収束角をφBとするときのExp[-jkzcosφB]を、球面波に対する出射面上の電界分布に乗じて、範囲で積分して、回折素子の出射面上の電界分布として、第1の電界分布を算出するステップと、回折素子の出射面上の電界分布に基づいて、回折素子の表面における凹凸の深さを決定するステップとを備える。 これにより、本発明は、出射光の直径やパワーを所定の長さで保持できる回折素子の設計方法を提供できる。

4 【要約】薄く、透過する電磁波の位相差が大きく、電磁波の透過率も高いメタサーフェス構造体の提供を課題とする。第1金属微細構造体が配列された第1構造体層、第2金属微細構造体が配列された第2構造体層、第3金属微細構造体が配列された第3構造体層、および、第4金属微細構造体が配列された第4構造体層が、離間して積層された、周波数10THz以下の電磁波に作用するメタサーフェス構造体により、課題を解決する。

5【要約】光学システム(101)は、コア(1A)と、光スポットサイズがコア(1A)とは異なるSi導波路(2A)と、コア(1A)とSi導波路(2A)との間を光学的に接続するメタレンズ(3)とを備える。メタレンズは、第1導波路と対向する第1面(31A)と、第1面とは反対側を向いている第2面(31B)とを有する。メタレンズには、第1面と前記第2面との間を貫通する貫通孔(31C)が形成されている。貫通孔の孔径は、対象波長よりも小さい。メタレンズは、導電体により構成されている。メタレンズの第1面には、第1面と、第1面に対して凹んでいる複数の環状溝(31D)とにより構成されている複数の凹凸構造が形成されている。複数の凹凸構造は、平面視において貫通孔を囲むように環状に形成されている。

6【要約】例えば、FOVの切替を可能とした照明装置を提供する。 第1の光を出射する第1の発光素子及び第2の光を出射する第2の発光素子を有する発光部と、第1の光及び第2の光の光路上に配置される光学部材が、第1の光及び第2の光のそれぞれに対して異なるように作用することで、第1の光による投射範囲と第2の光による投射範囲とを変化させる、照明装置である。

7【要約】本開示の発光装置は、光取り出し面側に設けられた第1の結晶層と、第2の結晶層と、第1の結晶層と第2の結晶層との間に配置された発光層とを有し、第1の結晶層の光取り出し面の少なくとも一部が集光作用を有する光学機能面とされた第1の発光部位と、集光作用を有する少なくとも1つの光学部材を含み、第1の発光部位の光取り出し面側に対向配置された光学部位とを備える。

8【要約】本開示の一実施の形態に係る光演算装置は、光演算装置は、光ニューラルネットワーク部と、光検出部と、出力部とを備える。光ニューラルネットワーク部は、入射光をエンコードすることにより特徴量マップを光強度分布として出力するハードウェアで構成される。光検出部は、特徴量マップを光検出することにより画像データを生成する。出力部は、画像データを外部の通信ネットワークに出力する。

9【要約】所定の送信装置から送信された所定の電波を受信する複数のアンテナ素子と、前記複数のアンテナ素子を直列に接続し、且つ、前記各アンテナ素子で受信した電波を伝送する伝送線路と、を含むアンテナ部品と、前記伝送線路を介して前記電波を取得し、前記各アンテナ素子で受信した前記電波と前記所定の電波との相関関係を算出する相関器と、算出した前記相関関係に基づいて、前記電波の到来方向を算出する到来方向算出部とを備える、受信装置を提供する。

3.出力結果:

  • vertexAIすきなのでgemini-pro:ずれた回答がありますね。gemini-1.5対応が待たれます。

pd.DataFrame(result_list)

  • gpt-3.5-turboは・・・課題と用途がまざってないですかね?

result_list= []
for i in range(0,len(texts)):
    q= "あなたは特許文章から技術的課題、用途、課題の解決手段を抽出する特許調査のプロです。Sumamrize information and ansewer in specified formation:"

    try:
        chain = prompt | model_gpt35 | output_fixing_parser
        result = chain.invoke({"query": q,"context":texts[i]})
    except:
        chain = prompt | model_gpt4 | output_fixing_parser
        result = chain.invoke({"query": q,"context":texts[i]})

    result_list.append(result.dict())

pd.DataFrame(result_list)



  • 最後のたのみのGPT-4-turbo。いい感じに。

result_list= []
for i in range(0,len(texts)):
    q= "あなたは特許文章から技術的課題、用途、課題の解決手段を抽出する特許調査のプロです。Sumamrize information and ansewer in specified formation:"

    try:
        chain = prompt | model_gpt4 | output_fixing_parser
        result = chain.invoke({"query": q,"context":texts[i]})
    except:
        chain = prompt | model_gpt4 | output_fixing_parser
        result = chain.invoke({"query": q,"context":texts[i]})

    result_list.append(result.dict())

pd.DataFrame(result_list)


  • Claude3も対応してたので、ついでに。

#!pip install langchain-anthropic -q
from langchain_anthropic import ChatAnthropic
os.environ["ANTHOROPIC_API_KEY"] = userdata.get("anthropic")
model_claude3 = ChatAnthropic(model='claude-3-opus-20240229')

result_list= []
for i in range(0,len(texts)):
    q= "あなたは特許文章から技術的課題、用途、課題の解決手段を抽出する特許調査のプロです。Sumamrize information and ansewer in specified formation:"

    try:
        chain = prompt | model_claude3 | output_fixing_parser
        result = chain.invoke({"query": q,"context":texts[i]})
    except:
        chain = prompt | model_gpt4 | output_fixing_parser
        result = chain.invoke({"query": q,"context":texts[i]})

    result_list.append(result.dict())



4.その他

・次はmultimodal(geminiかGPT-4)ですが、特許図面の読み取り、情報抽出を試してみたいです。

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

最新記事

すべて表示
bottom of page