見出し画像

論文の所属機関情報からの国名・組織名抽出 - GPT for Sheetsの活用

GPT for Sheetsを試した動機

先日、「論文の所属機関情報から国名を抽出」という記事を書いた。

論文分析をしていると、よく国で件数を集計したり、国ごとに研究動向を調査するときがある。その際、論文の書誌情報である所属機関情報から、国名を抽出する必要がある。

論文の所属機関情報は「ZymoGenetics Inc., Seattle, WA, United States」という風に書かれていることが多い。全ての記述がこのように綺麗に書いてあれば、「最後のコンマ以降の文字列を抽出する」というExcel関数を組めば簡単に国名を抽出できる。しかし実際は、様々な表現で書かれている。例えば、下記のようなパターンがある。

  • School of Information Science and Technology, Dalian Maritime University, 12421 Dalian, Liaoning, China, (e-mail: ***@dlmu.edu.cn) → 最後にメールアドレスが書かれてしまう・・・

  • ZIEL Institute for Food and Health, Technical University of Munich, Germany, Freising → 国名が途中で出てくる・・・

  • Zhuji Agricultural Technology Promotion Center, Zhejiang, 311800, China, → なぜ最後にコンマがあるのか・・・

そこでExcel関数だけではなく、Pythonを使った固有表現抽出(spacyとgeonamescacheの組み合わせ)の方法を、上記のnote記事で紹介した。どちらも得手・不得手があり、組み合わせて目検修正すると効率的だと述べた。しかし、すぐに下記のようなTweetが流れてきた。

このTweetのExtract dataの画像を見ると、住所から国名を抽出している。つまり、GPT-3を使えば完全自動で所属機関情報から国名を抽出できるかもしれない。むしろ、国名だけでなく、組織名なんかも抽出できるのではないか?そこで、このGPT for Sheetsを使って実験をしてみた。

実験結果 - 国名抽出

早速、実験結果の表を示す。B列のaffiliationは論文の所属機関情報であり、D~F列はExcel関数、固有表現抽出(spacyのデフォルト)、GPT3(GPT for Sheets)で、B列から国名を抽出した結果である。D列やE列はうまく抽出できていない例があるが、GPT3は全てのケースでうまく抽出できていることが分かる。

GPT関数の構造は下記の通りである。詳しい仕様は公式ドキュメントを参照されたい。

=GPT(prompt, value, temperature, model, maxTokens)

・prompt:GPT-3に指示する命令文
・(オプション) value:promptの対象となるセル
・(オプション) temperature:0(AIがpromptに厳密に従う)~1(AIがクリエイティブになる)の数値。デフォルトは0。
・(オプション) model:利用するGPT-3のモデル。デフォルトはtext-davinci-003。text-davinci-003:最も有能なモデル、text-curie-001: Davinciより早いが劣るモデル。
・(オプション) maxTokens:生成するトークンの最大数。整数値で設定。デフォルトは16。最大値はモデルによって、2048 or 4096。

上記の表では、例えば、F6セルに埋め込んだ関数は下記の通り。

=GPT($B$2,B6,0,"text-davinci-003")

B6の所属機関情報(ZymoGenetics Inc., Seattle, WA, United States)に対して、B2の命令文(Extract country name from address:)を適用し、United Statesという結果を得ている。

実験結果 - 組織名抽出 (命令文の工夫によってAIの挙動を変える)

また、組織名の抽出も試してみた。

C列はB2セル「Extract affiliation name from address:」と命令した結果である。どれもうまく組織名部分を抽出している。ただ、少し欲を言えば、組織名を集計する際は、学部名等の下位組織名は不要で、大学名等の上位組織名が欲しい。C7(Dalian Maritime University)はうまく取得できているが、C8(ZIEL Institute for Food and Health, Technical University of Munich)やC10(Zelinsky Institute of Organic Chemistry, Russian Academy of Sciences)は下部組織名も含まれている。

そこで、B3セル「Extract the highest affiliation name from address:」という命令文も試してみた。その結果がD列なのだが、D8(Technical University of Munich)やD10(Russian Academy of Sciences)も、うまく上位組織名を抽出できていることが分かる。

所属機関情報の実際の記述は、もっとバラエティに富んでいる。略称で書かれていたり(MIT, UC Berkley, CMU等)、複数の組織名が列挙されていたりする。今の命令文で全て上手く行ことはないだろうが、命令文の改善と他のロジックとの組み合わせによって、精度の高い情報抽出を期待できる結果であった。

AaaA: AI as a Aibou (相棒)

前述の例のように、命令文を工夫することで、GPT-3にして欲しい挙動を実現できる。これまで、Excel関数やプログラミングでは一筋縄でいかなかった処理も、GPT-3を使うことで解決できるかもしれない。また、このようなツールがSpreadsheetの関数として実装され、誰もが簡単に使えるようになったのは素晴らしい。

ブラッシュアップする過程が、命令文(自然文)を工夫するので、プログラミングの感覚とはまた違ってとても新鮮。GPT-3を相棒のように感じる。こういった相棒とうまく付き合うことで、自身のワークの効率化・高度化を図っていきたい。

Appendix. GPT for Sheetsを動かすまで

  1. GPT for Sheetsをインストール

2. OpenAI APIのアカウントを作成

3. ログイン後、View API keysからkeyを取得

4. Google Spreadsheetにて、Set API keyを設定

なお、APIは有償であるが、3か月間$18まで無料枠がある。また、利用するモデルによって、価格が違うようである。