OpenAIのChat APIにブログのタグを自動で付けてもらう

OpenAIのChat APIにブログのタグを自動で付けてもらう

GPT4の力でブログのタグ付けを自動化

このブログは1つの記事に1つのカテゴリーと1~4個のタグを付けている。
この記事の場合は、

カテゴリー:

  • software

タグ:

  • ChatGPT
  • Open AI
  • Python
  • GPT4

タグ付けは雑であり自分でも把握できていない。
大体過去の似た記事からタグをコピーして使いまわしている。

カテゴリーに関しては過去の100以上のブログ記事のすべてが「software」。
漫画の記事も羊毛フェルトの記事も全て「software」。

ここで、言語処理に強いOpenAIのAPIを使うことでブログのタグ付けカテゴリー付けを自動化できるのではないかと考えた。

1. 結果

中身を貼ったところで誰も興味ないのでスクショで済ませる。



思った以上に良い感じだ。
これは記事を書いた本人にしか分からないがちゃんとそれらしいタグを付けてくれている。

実際のタグ付けまで自動でやらせるのは心配なので、
今後はこの表を見ながら手動でタグを追加していくと良さそう。

2. コード

Pythonで書いた。
OpenAIのAPIを持ってて、かつGPT4が使える前提。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import openai
import os
import glob
import csv
import time

# OpenAI APIキーの設定
openai.api_key = os.getenv("OPENAI_API_KEY")

# タグ予測関数
def suggest_tag_categories(blog_article):
# チャットモデルの初期化(タグ予測)
chat_models_suggest = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{
"role": "system",
"content": (
"You are a helpful assistant. "
"Your task is to analyze a blog article and "
"suggest an appropriate category (only one) and multiple tags. "
"***The output should be in the format 'category:〇\ntags:〇,〇,...\n'***"
)
},
{
"role": "user",
"content": blog_article
}
]
)
# レスポンスからタグとカテゴリーを取得
response = chat_models_suggest["choices"][0]["message"]["content"]
return response

# ブログ記事の読み込み
# 指定されたフォルダ内のすべてのマークダウンファイルのリストを取得
md_dir_path = "フォルダ名\\*.md"
md_files = glob.glob(md_dir_path)


# 結果を保持するリスト
results = []

md_file_path = md_files[0]
for md_file_path in md_files:
with open(md_file_path, "r", encoding="utf-8") as file:
blog_article = file.read()

# レスポンスを取得
response = suggest_tag_categories(blog_article[:5000] )
time.sleep(30) # APIのレート制限を避けるためのスリープ
# ファイル名のみ表示
filename = md_file_path.split("\\")[-1]
print(f"filename: {filename}")

# レスポンスをパースする
suggest_category, suggest_tags = response.split("\n")

# 結果をリストに追加
results.append({
"ファイル名": filename,
"推薦カテゴリ": suggest_category.split(":")[1].strip(),
"推薦タグ": suggest_tags.split(":")[1].strip()
})

# CSVファイルを開く
with open("output.csv", "w", newline="", encoding="utf-8") as csvfile:
fieldnames = ["ファイル名", "推薦カテゴリ", "推薦タグ"]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

# CSVのヘッダーを書き込む
writer.writeheader()

# リストの内容をCSVに書き込む
for result in results:
writer.writerow(result)

プロンプトは英語の方が性能が良くなりがちなのでChatGPTに英語で書いてもらった。

  • 注意点

OpenAIのChatAPIの制限によって1分間に10000トークンまでしか扱えないので以下の処理で乗り切った

  1. 各記事のはじめの5000文字までを切り取る

  2. 1処理につき30秒のスリープ

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×