27
12

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

ChatGPTによるタイトル改善!バズるようQiitaのタイトルを添削してもらった

Posted at

概要

「せっかく書くならバズりたい」とQiita投稿者なら思うこともあるかもしれません.

なので過去のバズった記事を参考に, ChatGPTにタイトル文を添削してもらうコードを書きました・
(ChatGPTで遊びたいと思っていたことですし......)

全体の流れ

全体としては

  1. QiitaAPIを用いてバズった記事の収集
  2. 類似文章抽出(入力したタイトルに関係の有りそうな記事の抽出)
  3. ChatGPTによるタイトルの添削

といった流れで進めていきます.

QiitaAPIを用いてバズった記事の収集

まず初めにQiitaAPIを通じてバズった(「あとで読む」が100以上の)記事を最新10,000件ほど取得しました.

token = "himitsu"

def getTitles(page):
    url = 'https://qiita.com/api/v2/items'
    headers = {'Authorization': 'Bearer {}'.format(token)}
    query_params = {# クエリパラメータの設定
        'page': page,         # ページ番号
        'per_page': 100,    # 1ページあたりの件数(最大100まで指定可能)
        'query' : 'stocks:>100' #あとで読むの件数が100件以上
    }

    response = requests.get(url, params=query_params, headers=headers)
    data = response.json()
    
    return [item['title'] for item in data]
    
titles = []
for i in tqdm(range(1,100)):
    titles += getTitles(i)

これを実行することで, Qiitaのバズったタイトル一覧が取得できます.

類似文章抽出(入力したタイトルに関係の有りそうな記事の抽出)

本来なら, この10000件全てをChatGPTのプロンプトに突っ込みたいところですが, ChatGPTには文字数(トークン)制限があります.
そのため, 入力した(添削してほしい)タイトルと関連性の深いものtop50を抽出しました.

詳細としては, 学習済みモデルで「添削してほしいタイトル」「バズったタイトル一覧」それぞれをベクトル化します.
次にこのベクトル間のcos類似度が高いものtop50を抽出します.

ChatGPTによるタイトルの添削

プロンプトは↓のようにしました。もっと良い手法とかあったら教えてください

prompt = PromptTemplate(
    input_variables=["titles_buzz", "title"],
    template="""{titles_buzz}

上記の内容はバズった技術記事のタイトル一覧です。
この内容を踏まえ、よりバズりやすいようタイトルを直すことをしてください

あなた:符号化を楽にするツールについて→文字列のエンコード・デコードを瞬殺するencodeMaxを作りました
お気に入りのfont-family→個人的なかわいいCSSのfont-familyランキングを発表
{title}→""",
)

下2行は, 事前にいくつか具体例を事前に示すfew-shot learningという手法です.

title = "ここをよしなにする"
titles_buzz = "ここに関連度の高い記事タイトル50をかく"

llm = OpenAI(temperature=0)
chain = LLMChain(llm=llm, prompt=prompt)
print(chain.run(title=title, titles_buzz=titles_buzz))

実際に添削してもらった

自分の過去の記事をChatGPTに添削してもらいました.

オリジナル 添削後
二択を繰り返すことで新しい本と出逢えるwebアプリを作った 「選ぶのが面倒なら二択で決めちゃおう!新しい本と出逢えるwebアプリを作りました」
【水曜日のダウンタウン】所持金5連続UP企画で適当に声をかけるとどうなるか、手計算で検証してみた 【水曜日のダウンタウン】所持金5連続UP企画で適当に声をかけるとどうなるか、実践検証してみた
文章がどの作家に似ているか判別するモデルを作った話 作家の筆致を分析するAIモデルを開発しました!自分の文章がどの作家に似ているかチェックしてみよう
変分オートエンコーダでそっくりな漢字ランキングを作った 新しいオートエンコーダで漢字のそっくり度をランキング化してみた!
OpenCVで写真をドット絵調にする OpenCVで写真をドット絵風に変換する方法を解説!手軽にオシャレなアート作品を作ろう
Wordleで最適解での平均手数を概算してみた Wordle攻略!最短手数で解くための平均手数を概算してみました【数式解説付き】
トンパ文字をスタンプ感覚で送れるプログラムを作った LINEでトンパ文字を簡単に送信!スタンプ感覚のトンパ文字プログラムを作りました
あみだくじの横線は何本引くべきか あみだくじの横線の本数を決める方法を解説します
物理学で理解するグラフフーリエ変換 グラフ理論と物理学を融合した、離散フーリエ変換の理解を深める方法を紹介します
譜面からDance Dance Revolutionの難易度を推し量るモデルをDNNで作った Dance Dance Revolutionの難易度を簡単に推測するモデルをDNNで実装しました!

全体的に, 軽い文章でキャッチーになっていますね.
恥ずかしくて自分ではかけない文章です.
たまに文意を取り違えているものもありますが, タイトル決めの参考になりそうです.

最後に

本来は, こういったことはもうちょっとちゃんとした自然言語処理(スタイル変換?)でやったほうがいいんだろうなと考えています.
機会と時間があればそちらも挑戦してみたいです.

27
12
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
27
12