ChatGPTのAPIを使ってHackerNewsを日本語要約する
英語圏のIT関連ニュースが集まる場として名高い『HackerNews』。
とても興味深いサイトがたくさん紹介されているのだけど、英語なのでなかなか読む気が起きない。
なのでChatGPTのAPIを使ってHackerNewsを日本語要約したい。
実行環境
言語:Python
実行環境:Google Colab
今回は「検索禁止&わからないことはGPT4に質問」という縛りで実装した。
ソースコード
Google Colabなので分割してソースコードを解説&掲載してゆく。
APIキーの取得
なにはともあれOpenAIのAPIキーをプログラムに読み込む。
以下を実行するとテキストボックスが出てくるので、そこにOpenAIに会員登録して手に入れたAPIキーを入力する。
from getpass import getpass
secret = getpass('Enter the secret value: ')
必要なライブラリのインストール
Google Colabでは先頭に!
を付加することでシェルコマンドが叩ける。
!pip install feedparser
!pip install tiktoken
!pip install newspaper3k
!pip install openai
RSSの取得
RSSを取得するメソッドを用意する。
ライブラリにはfeedparser
を利用する。
import feedparser
def get_entries(url):
feed = feedparser.parse(url)
entries = []
for entry in feed['entries']:
entries.append({
"title":entry['title'],
"link":entry['link'],
"comments":entry['comments'],
})
return entries
記事の本文を取得する
newspaper
というライブラリを利用すると記事の本文だけを良い感じに取得できるらしい。ChatGPTに教えてもらった。
from newspaper import Article
def get_news(url):
article = Article(url)
article.download()
article.parse()
return article.text
長過ぎる記事を切る
ChatGPTに要約してもらうわけだが、APIに投げられる文字数は「トークン」という単位で上限がある。
なので記事本文をトークン数で切る。中途半端なところで区切られても嫌なので、ちょうどいい区切りで切るようにする。
import tiktoken
encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
def get_head_by_token(text,head_size,sep):
lines = text.split(sep)
blocks = []
token = 0
block = ''
for line in lines:
t = len(encoding.encode(line))
if token > 0 and head_size < (token + t):
return block
token += t
block += line
return block
ChatGPTに要約してもらう
HackerNewsのRSSを取得して、本文を取得し、トークン数で切り、その上でChatGPTに要約&翻訳をしてもらう。
import openai
url = "https://hnrss.org/newest?points=100"
entries = get_entries(url)
openai.api_key = secret
output = ""
for entry in entries[:5]:
text = get_news(entry["link"])
head = get_head_by_token(text,1000,"\n")
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": f"""
以下の文章を日本語に翻訳して3行に要約してください。
---
{head}
"""},
]
)
sumally = ""
for cho in completion.choices:
sumally += cho.message.content
output += f"""
### [{entry["title"]}]({entry["comments"]})
{sumally}
"""
Markdownで表示する。
from IPython.display import display, Markdown
display(Markdown(output))
出力結果
試しに5件表示したところ、こんな感じで出力された。
一部翻訳がうまく行ってなかったり、本文の取得に失敗してるところもある。
Google discontinues Google Glass for enterprise
「10年以上にわたる革新とパートナーシップに感謝します。2023年3月15日をもって、Glass Enterprise Editionの販売を終了します。2023年9月15日までは引き続きサポートを提供します。詳細はヘルプセンターをご覧ください。」
- Glass Enterprise Editionの販売終了(2023年3月15日)
- サポートは2023年9月15日まで提供
- 詳細はヘルプセンターを確認
GPT-4 Designed a Programming Language
GPT-4がリリースされ、AI競争が加速している中、多くの人々は興奮と恐怖を感じている。GPT-4は専門家の中でも優秀な人々が驚くほど素晴らしいものを生み出しており、その進化はとどまるところを知らない。この進化を楽しむものと恐れるものがある中、筆者はGPT-4のチャットのベータ版に選ばれ、4時までプレイしていた。
GPT-4のリリースにより、AI競争は加速する一方であり、それは喜びと恐怖を共有する人々に影響を与えている。筆者自身もGPT-4のチャットのベータ版に選ばれ、様々なプログラム言語について学んだが、GPT-4はプログラム言語を設計するという高度な課題にも取り組んでいる。
Will AIs take all our jobs and end human history? It’s complicated
文章ではAIのChatGPTについて説明し、人間によって書かれたテキストから学び、人間に似たエッセイを自動生成できることを示しています。ChatGPTは「共有コンテキスト」を基に、文字のプロンプトに基づいてエッセイを生成することができます。この技術により、人間が行っていた翻訳やエッセイ作成などの作業が自動化されることが期待されます。
Fireball Spotted over Northeastern USA
The company has been working on a new product for the past year, and they are finally ready to launch it into the market. The product is expected to be a game-changer in its industry and the company is confident in its success. The launch date is set for next month and the company is already receiving pre-orders from interested customers.
1.新製品の開発が完了し、来月の発売日を迎える予定。 2.業界に革命をもたらすと期待され、注文も既に受け付け中。 3.会社は成功を確信している。
Emulating Pokemon Emerald on GPT-4
JavaScriptが利用できません。このブラウザではJavaScriptが無効になっていることが検出されました。続けるにはJavaScriptを有効にするか、サポートされているブラウザに切り替えてください。サポートされているブラウザのリストは、ヘルプセンターで確認できます。
JavaScriptが無効なため、Twitter.comの利用ができない。ブラウザを切り替えてあるいはJavaScriptを有効にしてください。
感想
ChatGPTの力を借りながらChatGPTでHackerNewsを日本語で読めるようになった。
とりあえずどの記事が面白そうかさえ分かれば、あとはブラウザの翻訳機能を使ってしまえば良い。
今回のプログラムはこちら。