*はい、これはAIに生成された名前です。
これは、GPT / ChatGPTを使用して、構造化されたデータに非構造化されたテキストを解析するなど、タスクを自動化するのが難しいのに役立つ実験的なライブラリです。
ChatGptは新しく、幻覚を起こす傾向があるため、間違っている、または存在しないデータを返します。
また、CHATGPTは、まったく同じプロンプトを2回送信した場合でも、異なる出力または異なるフォーマットで応答する場合があることに注意してください。たとえば、欠損値を空間、またはハイフンとして、またはNAとして表示することをランダムに選択できます。
これは、それをより大きなワークフローに確実に組み込むことができず、同じ結果が一貫して生成されることを期待することができないことを意味します。
現時点では、ライブラリは探索的スクリプトのコレクションであり、警告なしに頻繁に失敗するでしょう。物事は変化し、ライブラリが成熟するにつれて保護手段が導入されます。
Openaiの新しいGPT-4は、より高いトークン制限(より長いプロンプトを意味)を持ち、解析データでGPT-3.5よりも優れていると想定されています。ただし、GPT-4にはまだアクセスできないため、これらの例はすべてGPT-3.5を念頭に置いて書かれています。
あなた自身の責任で使用してください。
Githubからライブラリをインストールできます。
remotes :: install_github( " nicucalcea/RAISE " )
library( RAISE )Openai APIキーが必要です。キーにアクセスするための最も簡単な方法は、それをR環境に保存することです。
usethis::edit_r_environ()を実行してR環境ファイルを開き、APIキーを含む新しい行を追加します。このように見えるはずです。
OPENAI_API_KEY = "API_KEY_HERE"
保存して再起動します。
chatgpt、gptstudio、またはgpttoolsを使用する場合は、既にセットアップする必要があります。
Raiseは、ChatGPTにプロンプトを送信し、テーブルとして応答を取得するのに役立ちます。
世界最大の建物とその高さのテーブルが欲しいとしましょう。
buildings <- create_ai( " Top 10 tallest buildings in the world " ,
cols = c( " Building " , " Country " , " Developer " , " Year built " , " Height in metres " ))上記のように、GPTは言語モデルであり、事実上の検索エンジンではありません。データは正しい場合がありますが、そうではない可能性があり、手動でチェックする必要があります。
メールアドレスのリストがあり、最初の名前と姓を抽出したいとします。または、名前のリストとあなたは彼らの最も可能性の高い性別を推定しようとしていますか?
GPTを使用して既存のデータを拡張できます。これが例です。
top_banks <- tribble( ~ bank , " HSBC Holdings " , " Lloyds Banking Group " , " Royal Bank of Scotland Group " , " Barclays " , " Standard Chartered " , " Santander UK " , " Nationwide Building Society " , " Schroders " ) | >
mutate( website = answer_ai(paste0( " Official website of " , bank , " : " )),
phone_nr = answer_ai(paste0( " Customer service number of " , bank , " : " )))この場合、関数は行のそれぞれのAPIを呼び出し、新しい列への応答を保存します。
GPTは、非構造化されたテキストからのデータの解析に非常に優れているようです。
メンバーの経済的利益の登録、悪名高い不格好なデータベースを解析しましょう。
library( tidyverse )
mps <- read_csv( " https://raw.githubusercontent.com/sparkd/mp-financial-interests/master/data/financial-interests-2010-18.csv " ) | >
filter( type_code == 1 ) | >
head( 100 )
mps_structured <- extract_ai( mps $ description ,
cols = c( " date " , " sum " , " donor " , " donor_address " , " purpose " , " hours " , " date_registered " ))別の例:
addresses <- c( " Majestic Distribution, Halesfield 2, Telford TF7 4QH " , " 1 Reeves Drive, Petersfield GU31 4FN " , " 9 Hawthorn Cottages, Hook Lane, Welling DA16 2LD " , " 4 Silvester Road, Castor PE5 7BA " , " 11 St Georges Close, London SE28 8QE " , " 510 Castle Wharf, East Tucker Street, Bristol BS1 6JU " , " 19 Brookside Close, Wombourne WV5 8JU " , " 384 Hough Fold Way, Bolton BL2 3QA " , " 3 Hadley Croft, Smethwick B66 1DP " , " 5 Field Drive, Crawley Down RH10 4AE " , " Flat 21, Beadnall House, 5 Lingwood Court, Thornaby TS17 0BF " , " 29 St Leonards Close, Bridgnorth WV16 4EJ " , " 3 Colville Road, Bournemouth BH5 2AG " , " Fferm Ganol, Llaithddu LD1 6YS " , " 129 Scott Road, Sheffield S4 7BH " , " R A O B Club, The Exchange Building, Chapel Street, Goole DN14 5RJ " , " Flat 1, Lawrence Court, 15 Highfield South, Birkenhead CH42 4NA " , " 37 Lower Noon Sun, Birch Vale SK22 1AQ " , " 1 Church Mews, Exmouth EX8 2SJ " , " 17 Windsor Drive, Kidderminster DY10 2NA " )
addressses_parsed <- extract_ai( addresses ,
cols = c( " city " , " postcode " , " street name " , " street number " , " flat or unit number " ))どちらの場合も、GPT-3.5が抽出され、私たちが要求した列に記入しました。
前と同様に、プロセスに障害がないわけではなく、結果を検証する必要がありますが、データが最終的でなくても、数時間の肉体労働を節約し、迅速な洞察を与えることができます。
APIには、プロンプトと回答がどれほど大きくなるかという点でいくつかの制限があるため、クエリをチャンクに分割し、その後パーツに再び参加しています。
これにより、将来的にいくつかのエラーが発生する可能性があるため、進行中の作業です。
非構造化データの解析は、Webページにも適用されます。例を見てみましょう。
oscar_winners <- scrape_ai( " https://edition.cnn.com/2023/03/12/entertainment/oscar-winners-2023/index.html " ,
cols = c( " category " , " winner " , " nominees " ),
clean = " text " ,
css = " div[itemprop='articleBody'] " )ここでは、2023年のオスカーの受賞者全員をリストし、GPTにページをこすり落とすことを伝えるCNNの記事を取得しています。指定した列のあるテーブルを返します。
関数に供給している2つの追加のパラメーターがあります。
clean = "text" 、HTMLタグのすべてのコンテンツをストリップします。これは、フォーマットを気にしないため、この場合に役立ちます。不要なhtmlをこすり落とすだけで、 clean = "html" clean = FALSEに設定できます。
CSSセレクターは、ページの特定の部分をターゲットにします。つまり、ページ全体をナビゲーションメニュー、サイドバーなどで送信しません。あるいは、XPathセレクターを使用できます。
これらは両方ともオプションであり、送信しているプロンプトのサイズを削減し、その後クエリのコストを削減するように設計されています。
今のところ、Webスクレーパーは、トークンの制限よりも大きなプロンプトを扱うことができません。