最近、購入したこちらの本の、サンプルコードをいろいろといじってみたので、忘備録として残します。
素直にコードも動いて、どういうことができるのか分かりやすかったので、非常におススメです!
第9章:LLM を使用したレビュー分析プログラムの開発
まず、japanize-matplotlibをインストールしてもエラーがでてきます。(インストールできるが、走らせるとエラーが出る)
こちらの記事を参考に、matplotlib-fontjaにしたら、うまくいきました。
japanize-matplotlibはpython 3.12ではエラーが出る→matplotlib-fontjaが代替
それから、この章では結果をまとめてグラフに表示しているが、実際に、どのように各レビュー分が評価されているのか、詳細が分かりません。
それで、このようにデータフレームで表示させてみました。
pd.DataFrame(reviews_json)
さらに、本来であれば、Amazonや価格.comには★で5段評価がついているが、このレビュー分にはない。 代わりにプロンプトで、100点満点でそのレビュー分の満足度を推測してもらいました。
以下の関数で「そして、全体の満足度を0-100で推測してください。100が最高です。」というところと、「 "推測満足度": 80」というのを3カ所、追加しました。
#---------------------------------------------------
# #9.レビューテキストから要素を抽出する関数
#---------------------------------------------------
def extract_review_elements(model, review_text):
prompt = f"""
以下のテキストから高評価要素と低評価要素を分析してください。
そして、全体の満足度を0-100で推測してください。100が最高です。
テキスト: 音質は素晴らしかった。長時間使用しても疲れず、耳にもフィットして快適でした。
{{
"高評価要素": ["音質", "装着感"],
"低評価要素": [],
"推測満足度": 80
}}
テキスト: 迫力がなく音がスカスカ。音漏れが酷く電車などの公共の場で使えないレベル。
{{
"高評価要素": [],
"低評価要素": ["音質", "音漏れ"],
"推測満足度": 20
}}
テキスト: 値段を考えると音質はまあまあ良い。でも耳が痛くなるのが難点。長時間は使えない。あと届いた箱がつぶれていたのが残念。
{{
"高評価要素": ["音質"],
"低評価要素": ["装着感", "梱包"],
"推測満足度": 60
}}
テキスト: {review_text}
"""
response = generate_content(model, prompt)
try:
json_result = json.dumps(json.loads(response), ensure_ascii=False, indent=4)
except json.JSONDecodeError as e:
return f"Error: Invalid JSON format. {str(e)}"
return json_result
この点数付けは、人間がやってもばらつくが、それでもこのGeminiが出した点数はそこそこ納得感があると私は思いました。(以下、一番右の列参照)
そのうち、アマゾンや価格.comの実際のレビューを使って、試してみたいと思いました。