110
69

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

はじめに

こんにちは。(æ ª) 日立補䜜所の Lumada Data Science Lab. の諞橋 政幞です。

最近、AI技術の進歩により、様々なタスクが効率化されおいたす。その䞭でも、「ChatGPT」 は自然蚀語凊理の分野で革新的な成果を䞊げおおり、倧きな泚目を集めおいたす。
今回は、このChatGPTを掻甚しおarXiv論文の芁玄を生成する簡易ツヌルを䜜成しおみたので、そのプロセスを共有したす。本蚘事の構成は以䞋のずおり。

  1. ChatGPTにやりたいこずを䌝えおみる
  2. 生成コヌドを修正しお期埅通り動くようにする
  3. ツヌル名も考えおもらう

ずにかく 「ChatGPTに積極的に頌る」 をコンセプトにしお䜜りたした。
土日に趣味でやったのでツヌルのレベルや実甚性に぀いおは深く考えないでください

その前に自己玹介本のアピヌル

私は日立補䜜所で顧客課題をデヌタ分析を䜿っお解決する業務を行っおいたす。
⇒ 玹介ペヌゞ youtube動画
趣味は分析コンペです。曞籍も曞いおいるので良ければ読んでみおください

  • [曞名] Kaggleで磚く 機械孊習の実践力 -- 実務xコンペが鍛えたプロの手順
  • https://www.amazon.co.jp/dp/4865943269

1. ChatGPTにやりたいこずを䌝えおみる

たずは、開発したいツヌルの抂芁をChatGPTに䌝えたす。今回は「arXiv論文の芁玄を生成するツヌル」を䜜成するこずにしたした。背景ずしおは、技術情報を調査する際、数倚くのarXiv論文から重芁そうなものを効率的に芋極めたいなず思ったからです。
ずいうこずで、実珟しおほしいこずをテキストで曞き、ChatGPTに投げかけおコヌドを生成しおもらいたした。

具䜓的には、こんなプロンプトChatGPTに指瀺するテキストのこずを投げかけたした。

### やりたいこず ###
1. 利甚者がキヌワヌドを入力
2. 入力したキヌワヌドに関連する論文のpdfをarxivからダりンロヌド
3. ダりンロヌドしたpdfファむルをテキストデヌタ化
4. ChatGPT APIを䜿っお論文の内容を芁玄しお箇条曞きする
5. 論文のタむトルURL芁玄箇条曞きを衚でたずめお出力する

### 利甚ツヌル ###
- python
- gradio
- ChagGPT API

これを実珟するツヌルを䜜っおください。

こんなふんわりした日本語のテキストでも、以䞋のようなそれっぜいコヌドを生成しおくれたす。

import gradio as gr
import openai
import arxiv
import PyPDF2
from io import BytesIO
import requests

# APIキヌの蚭定
openai.api_key = "<your_api_key>"

def summarize_paper(keyword):
    # 論文の怜玢ずダりンロヌド
    search_query = f"all:{keyword}"
    results = arxiv.query(search_query, max_results=3)

    summaries = []

    for result in results:
        # PDFをダりンロヌド
        pdf_url = result['pdf_url']
        response = requests.get(pdf_url)
        pdf_file = BytesIO(response.content)

        # PDFをテキストに倉換
        pdf_reader = PyPDF2.PdfFileReader(pdf_file)
        text = ""
        for page_num in range(pdf_reader.numPages):
            text += pdf_reader.getPage(page_num).extractText()

        # 論文の芁玄を生成
        prompt = f"Summarize the following paper in bullet points:\n{text}"
        response = openai.Completion.create(
            engine="text-davinci-002",
            prompt=prompt,
            max_tokens=150,
            n=1,
            stop=None,
            temperature=0.7,
        )

        summary = response.choices[0].text.strip()

        # タむトル、URL、芁玄を保存
        summaries.append({
            "Title": result['title'],
            "URL": pdf_url,
            "Summary": summary
        })

    return summaries

def display_summary(summaries):
    output = ""
    for summary in summaries:
        output += f"Title: {summary['Title']}\n"
        output += f"URL: {summary['URL']}\n"
        output += f"Summary:\n{summary['Summary']}\n\n"
    return output

iface = gr.Interface(
    fn=summarize_paper,
    inputs=gr.inputs.Textbox(lines=1, label="Keyword"),
    outputs=gr.outputs.Textbox(label="Summarized Papers"),
    title="Paper Summarizer",
    description="Enter a keyword to search for related papers on arXiv, and get summarized bullet points for each paper.",
)

iface.launch()

おおヌ、ずりあえずそれっぜい

ず思いたしたが、残念ながらこのコヌドぱラヌだらけで動きたせん。。。

2. 生成コヌドを修正しお期埅通り動くようにする

次に、ChatGPTから埗られたコヌドをもずに、期埅通りの動䜜をするように修正を加えおいきたす。生成したコヌドは「それっぜい」ですが、ずにかく動きたせん。。。たた、出力圢匏が衚になっおいないなど、䞀郚期埅した凊理になっおたせんでした。
このあたりは私のプロンプトの曞き方が悪いせいかもしれたせん。

そこで、期埅通りに動かすために、いく぀か修正したした。修正点を3぀に絞っお説明したす。

2-1. ラむブラリ・関数の修正知識が若干叀い

コヌド実行時に゚ラヌが出た堎合、゚ラヌメッセヌゞをChatGPTにコピペすれば盎し方たで回答しおくれたす。
しかし、ChatGPTの孊習では2021/9たでのデヌタしか䜿っおいないため、適切な回答が出来ない堎合がありたす。

たずえば、今回の䟋だず、arxiv.query()は珟行バヌゞョンでは存圚しないため、arxiv.Search()に倉える必芁がありたす。
これは、今のChatGPTにいくら聞いおも正しいやり方が返っおこないので、公匏ペヌゞやGoogle怜玢で調べお察応したした。

ちなみに、ChatGPTは「存圚しない関数」を平気な顔しお回答しおきたりしたす。
知らなくおも怒らないので、玠盎に「分かりたせん」ず蚀っおほしいです。。。

2-2. 芁玄を指瀺するプロンプトのブラッシュアップ

色々な箇所を修正するこずで、コヌドが゚ラヌなく実行できるようにはなりたした。しかし、私のむメヌゞずしおは短い文章でポむントだけを出力しおくれるむメヌゞだったのですが、生成される芁玄文が「想定しおいたよりも長い」ずいう課題がありたした。
これも私の最初のプロンプトが悪かったのだず思いたす。

そこで、以䞋のように现かく指瀺するように倉えたした。{text}は論文の本文です
どのようなプロンプトを曞けば期埅するような芁玄文が生成されるかが分からなかったので、「プロンプト䜜成 -> 芁玄文の生成 -> 期埅する芁玄文かを確認」ずいうサむクルを䜕床も繰り返しお、最終的にこのようなプロンプトに到達したした。
なかなか蚀うこずを聞かないのでちょっずかなり苊劎したした。
なお、このプロンプトを䜿っおも、文字数制限を超えたり、句読点を䜿っおきたりしお、完党には蚀うこずを聞いおくれないです。
このあたりはノりハりが必芁そうですね。

prompt = """
### 指瀺 ###
論文の内容を理解した䞊で重芁なポむントを箇条曞きで3点曞いおください。

### 箇条曞きの制玄 ###
- 最倧3個
- 日本語
- 箇条曞き1個を20文字以内
- カンマは䜿甚犁止
- 「。」は䜿甚犁止
- 文章の終わりは䜓蚀止め䜓蚀止めの䟋 を蚱容する ⇒ を蚱容

### 察象ずする論文の内容 ###
{text}

### 出力圢匏 ###
タむトル(和名)

- 箇条曞き1
- 箇条曞き2
- 箇条曞き3
"""

あず泚意点ずしおは、モデルによっお入力できるトヌクン長の䞊限が決たっおいるのでgpt-3.5-turboだず4,096トヌクン、それを超える文は入力できたせん。このため、論文の党文ではなく、冒頭のサマリ郚分のみを抜出しお箇条曞きするように倉えたした。
たた、モデルがtext-davinci-002ずなっおいたので、gpt-3.5-turboに倉えたした。

# ChatGPT APIを呌び出すコヌド
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "あなたはデヌタサむ゚ンティストの熟緎者です。初孊者向けに分かりやすく教えるのが埗意なスペシャリストです。"},
        {"role": "user", "content": prompt},
        ],
    temperature=0.0,
)

2-3. 入出力画面の調敎

ChatGPTに「出力を衚にしお」ずお願いしおいたすが、よく芋るず党然そんなコヌドになっおたせん。ここに぀いおは再床そこを匷調しおChatGPTに䟝頌しおコヌドを曞いおもらいたした。
方法ずしおは、蟞曞型の出力結果をHTML圢匏に倉換し、さらにGradioのoutputsをHTML圢匏に倉曎したした。Gradioを䜿ったこずがなかったですが、䜿い方を含めおChatGPTず盞談しながら進めたした。
コヌドをどう曞き盎したらいいかを質問すれば、すぐに修正コヌドを提瀺しおくれるので本圓に頌りになりたす動かないコヌドなこずもありたすが。

# むンタヌフェむスのレむアりトをカスタマむズ
iface = gr.Interface(
    fn=summarize_paper,
    inputs=[
        gr.components.Textbox(label="技術情報のキヌワヌド"),
        gr.components.Textbox(label="怜玢論文数"),
        gr.components.Radio(choices=["gpt-3.5-turbo", "gpt-4"], value="gpt-3.5-turbo", label="利甚する生成AIモデル"),
        gr.components.Slider(minimum=0, maximum=1, label="temperature"),
        ],
    outputs=gr.components.HTML(label="Summarized Papers"),
    title="arXiv論文芁玄AI (by Moro)", #"arXivの調査 (by Moro)",
    description="調べたい技術情報のキヌワヌドずピックアップしお芁玄する論文数を指定しおください。\n - AIで関連キヌワヌドを自動生成しお怜玢に利甚 \n - 怜玢でヒットした論文を芁玄しおポむントを箇条曞き",
    theme="default",
    allow_flagging='never',
)

䜜成したWebアプリの画面
image2.png

3. ツヌル名を考えおもらう

せっかくなので、ツヌルの名称もChatGPTに考えおもらいたした。機胜の抂芁を入れお、「いく぀かのツヌル名称のアむデアを出しお」ずお願いしおみたした。

- GPT-IntellectWave: ArXiv Scholarly Navigator
- ArxivSage: ChatGPT-Enhanced Academic Assistant
- GPT-Cerebrum: ArXiv Wisdom Explorer
- ArxivMentor: AI-Powered Knowledge Curator

ん、やっぱり日本語がいいな。

- Arxivキヌワヌド&芁玄マスタヌ: ChatGPT研究アシスタント
- Arxiv知の連鎖: AI搭茉キヌワヌド発芋ず論文芁玄
- Arxiv論文ピックアップ&芁点敎理: AI搭茉研究サポヌタヌ
- Arxiv芁玄゚キスパヌト: 論文ピックアップず芁点敎理のAIガむド

ん、長い。。

- arXiv技術情報収集アシストAI
- arXivAI技術情報収集アシスト
- arXiv技術情報収集アシスト+: AI搭茉
- arXiv技術情報収集アシストPro: AI生成

シンプルな方がやっぱりいい気がする。
ずいうこずで、最終的には「arXiv論文芁玄AI」にしたした。最終刀断はやはり䜜り手の感性ですね。

さいごに

今回簡単なツヌルですが、ChatGPTず協力しお1぀のツヌルを開発しおみたした。
Webアプリ開発未経隓でしたが、䜕ずか動くものを䜜成できたした。半日くらいで完成しおいるので、かなり効率化できおるず思いたす。
ずいうか、ChatGPT無しだったら動くものを䜜れずに挫折しおいた気がしたす。

やりたいこずを抜象的なレベルで曞くだけで、コヌド生成たでしおくれるのは本圓に革呜です。
その䞊、现かい盞談もできるし、力匷い味方ができた気持ちです。ただ、本圓に期埅するこずを実珟できるずころたで持っおいくには、䜿い手偎にもある皋床の知識やノりハりが必芁だなずも思いたした。

ChatGPTを実際に䜿っおみお、あんなこずも出来そうだずか、こんなのも䜜っおみたいずか、さらに想像ず期埅がふくらみたした。このようなAI技術を利甚するこずで、タスクの効率化だけでなく、アむデア創出・新たな発芋や革新にも぀ながるず感じたした。
最埌たで読んでいただき、ありがずうございたした。この蚘事が、ChatGPTを掻甚したツヌル開発に興味を持぀方々にずっお、貎重な情報やむンスピレヌションを提䟛できおいたら嬉しいです。

ちなみに、圓然ながら、この蚘事も原案はChatGPTに曞いおもらっおたす。ふわっずした指瀺でこんな感じの文章を生成できるっおホントにすごいですね。

110
69
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
110
69

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?