1. はじめに
- LangChainのcreate_pandas_dataframe_agentというのを使ってみたが、結構いける感じだった!
2. 試してみたもの
インストールなどはお決まりで。
!pip install langchain
!pip install openai
import os
os.environ["OPENAI_API_KEY"] = "********"
from langchain.agents import create_pandas_dataframe_agent
import pandas as pd
df = pd.read_csv(~~~)
- create_pandas_dataframe_agentでllmとdfを指定。
from langchain.llms import OpenAI
agent = create_pandas_dataframe_agent(OpenAI(temperature=0), df, verbose=True)
行数を聞いてみるとあってる!
agent.run("how many rows are there?")
"人手で集計:{}".format(df.shape[0])
出願人や発明者の数を聞いてもあってる!
- 特にセル内に複数人いた場合(|区切りで入ってる)でも、文章で説明すれば理解してくれた。
- 良く見ると機械がやった集計方法も乗ってて勉強になった。
agent.run("出願人は何人いますか?セル内の区切りの「|」で分割して集計してください。")
df["出願人(最新)"].str.split("|",expand=True).stack().value_counts()
agent.run("発明者は何人いますか?セル内の区切りの「|」で分割して集計してください。")
df["発明者(最新)"].str.split("|",expand=True).stack().value_counts()
出願年で集計してもあってる。ちゃんとソートもお願いすれば聞いてくれる。
agent.run("出願日から出願年を抽出して、出願年毎に出願件数を集計してください。出願年で昇順にソートしてください。")
df["出願日(現)"].str[0:4].value_counts().sort_index()
テキスト処理
- エラーが出て最終的に実行できず。これは他のライブラリ(Python Agent)の助けを借りればできるかも。
agent.run("要約から名詞を抽出して集計してください")
agent.run("要約から名詞を抽出して集計してください")
agent.run("発明の名称を使ってワードクラウドを作ってください")
- 実際出力されなかったけれど指示が出ているので順に実行してみる。
- おお。日本語対応してないので豆腐化。
from wordcloud import WordCloud
names = df['発明の名称'].str.cat(sep=' ')
wordcloud = WordCloud().generate(names)
wordcloud.to_image()
- 日本語フォントで何とかしようとしている。そのうち日本語対応させたい。
agent.run("発明の名称を使ってワードクラウドを作ってください。日本語で表示する必要があります。")
内容要約
- 1行分で切って要約してくれた模様。これはGPTSimpleVectorIndexなどで処理してあげた方がよさそう。
agent.run("出願の内容を要約から抽出してまとめてください。")
クロス集計
- 一生懸命集計スクリプトを出力しようとしてるけど失敗。
- なんとかうまく指示して作成する方法を見つけたい。
agent.run("Fタームを横軸、出願人を縦軸にしてそれぞれセル内の区切りの「|」で分割した上で、クロス集計をしてください。")
#人手でやるとこんな感じ?
#df[['Fターム(最新)', '出願人(最新)']].apply(lambda x: x.str.split('|')).explode('Fターム(最新)').explode('出願人(最新)').reset_index().pivot_table(index='Fターム(最新)', columns='出願人(最新)', aggfunc='size', fill_value=0)
定義抽出
agent.run("筆頭FIの分類定義を検索して、新たな列「定義」に追加してください。")