OpenAIを利用して、文字起こし、テキストの要約、画像生成を試してみた
こんにちは。データアナリティクス事業本部 サービスソリューション部の北川です。
普段の開発では、フロントエンドを担当することが多いのですが、最近はバックエンド側を触る機会も増えてきたので、今回はキャッチアップも兼ねてPythonでOpenAIの機能をいくつか試してみました。
OpenAIの機能を色々触りたいので、今回は以下のことを試していきます。
- OpenAIを利用して、音声ファイルから文字起こしを行う
- OpenAIを利用して、文字起こしした内容を要約してもらう
- OpenAIを利用して、その内容をイメージした画像を生成してもらう
事前準備
APIキーの設定
openAIにログインし、右上の自分のアカウントから[View API keys]に移動します。移動先のAPI KEYから[+create new secret key]に任意のkey名を指定して、作成することができます。
こちらのエントリにも、APIキーの取得方法が記述されています。
openaiをインストールし、ファイル内でAPIキーを読み込みます。
pip install openai
import openai openai.api_key = "取得したキー"
文字起こし Audio
Audioを利用することで、音声をテキストに変換することができます。
openai.Audio.transcribe("whisper-1", file)
以下のような関数を作成します。今回は、文字起こししたテキストを、"sample-file"に書き込んでいます。
def audio_to_text(filename): audio_file = open(os.path.join(".", filename), "rb") print("audio_file", audio_file) transcript = openai.Audio.transcribe("whisper-1", audio_file) res = transcript["text"] res = res.replace(" ", "\n") with open(f'./sample-file.txt', 'w+') as file: file.write(res) return res
transcribeの第一引数には、使用するモデルを渡します。Audioでは、現在"whisper-1"のみ使用できます。第二引数では、文字起こしを実行する対象のファイルを指定します。必須の引数はこの二つになります。
実際にサンプルのデータを渡して、実行してみました。
無事に文字起こしされています。
テキストの要約 Completion
Completion()を使用することで、プロンプトを作成して、openaiに投げることができます。
response = openai.Completion().create( model="text-davinci-003", prompt=prompt, )
利用するモデル、プロンプト、返答数、トークン上限などを指定できます。モデルの指定は必須になります。
以下のように関数を作成してみました。responseは、choicesプロパティに配列で返ってきます。
def summarize_Text(): with open('./sample-file.txt', encoding='UTF-8') as f: data = f.read() prompt = f"以下のテキストを要約して、タイトルを提案してください。返答形式は、'タイトル:タイトル名'にしてください: {data[:400]}" response = openai.Completion().create( model="text-davinci-003", prompt=prompt, n=1, max_tokens=128 ) print("@@@@@",response['choices'][0]['text'], "@@@@@") return response['choices'][0]['text']
文字起こしをしたテキストを要約し、タイトルを提案してもらうようプロンプトを作成しています。また、文字起こししたテキストが長すぎる場合を考慮して、冒頭400文字までを渡すようにしています。
先ほど作成されたテキストを使用して、試してみます。
@@@@@ 何なのか 話しをして で タイトル:アルファ説明会の資料作成及びタイムテーブル確認 @@@@@
余分な返答も返ってきていますが、無事にタイトルを生成することができました。文字起こしの内容とも、ある程度マッチしています。
@@@@@ こんな内容があるっていうのを 説明する資料を 準備していたので レビューをしていただきたいって こういう感じで話がなってあるという タイトル:アルファ説明会に関する目標設定 @@@@@
複数回試しましたが、同じような内容が返ってきます。
画像生成 Image
最後に、タイトルに合うような画像を生成してもらいます。
画像の作成には、Imageを使用します。
どのような画像を生成するか、決定するためのpromptが必須です。
response = openai.Image.create( prompt = text, )
以下のような関数を作成します。生成された画像は"sample-image.jpg"に保存されます。
def create_image(text): response = openai.Image.create( prompt = text, n = 1, size = '512x512', response_format = "url" ) image_url = response['data'][0]['url'] image_data = requests.get(image_url).content with open("sample-image.jpg", "wb") as f: f.write(image_data) return image_url
今回は検証ですので、引数にそのままタイトル以降の文字列を渡してみました。
うーん、なんとも言えないですね笑。ただ、openaiを利用して、画像を生成することができました。
まとめ
今回は、OpenAIのキャッチアップとして、文字起こししたテキストを要約して画像生成を試してみました。実際のコードに関しても、OpenAIを利用しながら記述しており、今回のブログを通してかなり活用できたと思います。今後も、さまざまな場面で利用していこうと思います。
ではまた。