見出し画像

ChatGPTに飲食店レビュー記事の文章から評価点数を推測させてみた


はじめに

みなさん初めまして。
トヨタコネクティッド株式会社 先行企画部 新技術開発室のとっきーと申します。

最近ChatGPTなどの生成AIを業務で使う機会が多く、私がやりたい色々なことが実現できそうだなあと日々ワクワクしています。

そんな私がやりたかったことの一つに、文章のスコアリング化があります。

文章のスコアリングについて

従来、文章などの非構造化データを数値で評価するためには何かしらの形で構造化データにする前処理をする必要がありました。(形態素解析、意味の紐付けなど)
大学の研究で実際にやったことあるのですが、まあめんどくさい。。。
が、生成AIを使えばそんな面倒な作業は不要、文章を加工しないでそのまま使うことができます。

それに文章のスコアリングを生成AIにやってもらうメリットは他にもあります。

  • 大量データを高速に分析できる

  • 評価基準に一貫性を持たせることができる

  • 人間が持つ偏見がなく、公平に評価できる

  • 人間が気付かないパターンやトレンドを見つけられる

などなど

今回やったこと

さて前置きはこの辺にして、今回私は飲食店レビューサイトの口コミ記事の文章から評価点数を推測させて、実際の点数とどれくらい差があるかを比較してみました。
行ったことがない居酒屋やレストランなどを探すとき、口コミや評価をよく見るのですが、記事内容に対して評価点数が合っていないんじゃないかということがちょいちょいあり、これを生成AIにやらせてみたら面白いんじゃないかと思っていたので、この機会にやってみようと思って今回やってみた次第です。

評価に使用したもの

  • 生成AI

    • ChatGPT-4o

  • 口コミ記事情報元

    • 食べログ

  • 記事提供者

    • 筆者の大学時代の友人Sさん(本人に承諾済み)
      ※ご提供本当にありがとうございます

実際にやってみた

それではChatGPTに投げてみましょう。

実験①: 評価点数のレンジのみ指定

プロンプトは下記を使用しました

下記の飲食店の口コミ記事の評価点数をルールに従い推測してください

## ルール
・点数は1.0-5.0の範囲内で0.1刻みで付けてください

## 口コミ記事
(口コミ記事の文章をそのままコピペ)

レビュー記事は下記を使います。ちなみにこちらの評価点数は3.6です。

ゆっくりできるところでおいしい料理も食べたいし甘いものも食べたい。そんなわがままな願いを叶えるのがこちらのレストランです。忘年会シーズンに行きましたが、ある意味世間ではサラリーマンの人たちが大勢で団体予約する時期だったのか、女子会などが多い様子の本店は、穴場時期だったのかギリギリで予約が取れました!

パフェはもちろん絶品でしたが、その他のお料理も最高でした。

ゆっくり滞在もできるので、おいしいワインを飲みながら語り合い、最高に美味しいパフェを楽しむことができて、みんな大満足の様子でした!
また行きます!!
結果はこちらです。

ではChatGPTに投げてみます。結果はこちら。

この口コミ記事から推測される評価点数は 4.8 と考えられます。

理由として、口コミ内容が非常に肯定的で、「絶品」「最高」「大満足」といった高評価の表現が多く、特に不満点が記載されていないためです。また、「また行きます」と締めくくっている点からも、顧客満足度が非常に高いことが伺えます。

うーん、実際の点数とかなり乖離してしまっていますね。

実験②: 評価要素を指定する

採点の観点を明確にすると良いかもしれません。
ということで、食べログでの詳細評価の項目(料理・味、サービス、雰囲、CP、酒・ドリンク)から総合的に評価するルールを追加してみます。

下記の飲食店の口コミ記事の評価点数をルールに従い推測してください

## ルール
・点数は1.0-5.0の範囲内で0.1刻みで付けてください
・料理・味、サービス、雰囲、CP、酒・ドリンクの観点から総合的に評価してください

## 口コミ記事
(口コミ記事の文章をそのままコピペ)

結果はこちらです。

この口コミ記事から推測される評価点数は 4.7 と考えられます。

各観点からの評価:料理・味: 口コミから「絶品」「最高」との表現があり、料理の質が非常に高いことが強調されています。したがって、料理の評価は非常に高いと思われます。
サービス: 「ギリギリで予約が取れました」という記述から、予約の難易度やタイミングによる満足度がやや異なる可能性があるものの、特にサービスに関する不満は記載されていないため、サービスも高評価と推測されます。
雰囲気: 「ゆっくり滞在もできる」「語り合い、最高に美味しいパフェを楽しむことができて」とあるので、雰囲気も良好であると考えられます。
コストパフォーマンス(CP): コストに関する直接的な記述はありませんが、満足度が高いため、価格に見合った価値があると感じていると推測されます。
酒・ドリンク: 「おいしいワインを飲みながら」という記述から、ドリンクの質にも満足していることがわかります。


以上の観点を総合して、わずかに満点には達しないものの、非常に高い評価であると推測されます。

先ほどと大きな変化は見られませんでした。

実験③: 過去のレビュー記事を事前に読み込ませる

①②がうまくいかなかった要因としては下記が考えられます。

  • ①記事の文章では書ききれない要素がある

    • 視覚や聴覚で感じる印象など

  • ②レビュワーの評価点数のレンジが狭い

    • かなり満足した内容だからといって満点近い点数をつけるとは限らない

①についてはプロンプトに反映するのは難しいですが、②は今までのレビュー記事と点数を事前に学習していれば解決できるかもしれません。

レビュー記事提供者の方は幸い他のお店のレビューも数十件されているため、それを事前に読み込んだ上で推測してもらうアプローチを取ってみます。
方法としてはいくつかありますが、今までのレビュー記事と評価点数をまとめたファイルを事前に読み込ませるのが一番簡単なやり方なのでやってみます。

やり方は簡単で、過去のレビュー記事を数十件まとめたテキストファイルをプロンプト入力時に添付ファイルとして読み込ませるだけです。

ChatGPTのプロンプト入力画面

↓プロンプト内容

下記のSさんの飲食店の口コミ記事の評価点数をルールに従い推測してください

## ルール
・点数は1.0-5.0の範囲内で0.1刻みで付けてください
・ファイルにSさんの他のレビュー記事を添付したので、それらのレビュー内容と評価点数の傾向を踏まえて点数をつけてください。

## 口コミ記事
(口コミ記事の文章をそのままコピペ)


review.txtファイルの中身はこんな感じです。本当に雑にまとめたテキストファイルです。

評価: 3.1
自分で好きな具材をえらべて、好きな麺も選べて、味付けも選べるヘルシー志向の女性にはとってもオススメですし、旦那といっても楽しめます。
味付けも超本格的!
ただ、辛さ2が蒙古タンメンと大体同じくらいな気がするので、最初から調子乗って3とか頼むと痛い目見る可能性あります笑
旦那は坦々麺の辛さ1にしてましたが、これがちょうどよい感じでとても美味しかったです。
私は極太春雨みたいなやつを注文しましたが、噛みきれなくて一苦労…ここは何度か来店してますが普通の春雨が一番な気がします!
また必ず来ます!今度はトムヤムクンスープ試したい!!
下記は今後の自分メモ用に………………
<薬膳スープに合うもの>春菊、豚肉、トマト
 
評価: 3.2
まさかの1番おいしかったのはこだわりのポテトでした!笑笑
どれも美味しくて、博多をイメージしたいろんな小皿も楽しめます。
びっくりしたのは、肉巻きおにぎりのボリューム感で、まさかの1つ頼むとお味噌汁とともに、めちゃくちゃ大きなおにぎりが2つ付いてきます。
...

それではプロンプトを投げてみましょう。
結果はこちらです。

Sさんの過去のレビュー記事と評価点数の傾向を踏まえると、以下の点が考慮されます。料理の質が評価に直結する:
この口コミ記事では「パフェはもちろん絶品でしたが、その他のお料理も最高でした」と書かれており、料理に非常に満足していることがわかります。Sさんの傾向から、料理に満足している場合は3.5以上の評価が付けられることが多いです。
サービスの質が評価を左右する:
特にサービスに対する不満の記述は見られません。「ゆっくり滞在もできるので」とあることから、サービスや居心地にも満足していると考えられます。これは評価を高くする要因です。
一貫性のある評価基準:
Sさんは一貫して、料理、サービス、雰囲気のバランスを重視しており、今回の口コミもすべての要素で満足しているように見えます。


これらの要因を総合的に考慮すると、この口コミ記事に対する評価点数は 3.9 になると推測されます。

実際の点数(3.6)と一致することはできませんでしたが、実験①②と比べるとかなり近い点数となりました。
やはり評価点数の傾向はスコアリング指標の良い材料ということがわかりました。
それにしてもあんなに雑なテキストファイルでもちゃんと理解してくれるとは、すごい時代になりましたね…!

実験④: 過去のレビュー記事から点数傾向をルール化 → ルールに従って推測

実験③が比較的うまくいったので、もう一つ方法を試したいと思います。

  1. 過去のレビュー記事と評価点数の関連性・傾向をルール化

  2. 1.のルールをプロンプトに含めて点数を推測する

というものです。

これによって膨大な過去の記事データをいちいち読み込ませる必要がなくなり、比較的短いプロンプトで推測することができます。

それではやってみましょう。
まず過去のレビュー記事内容と評価点数との因果関係を分析するプロンプトを投げ、分析結果を出してもらいましょう。

[プロンプト]
----------
ファイルはSさんが行った飲食店のレビュー記事と評価点数をまとめたものです。
このファイルの内容からSさんのレビュー記事内容の傾向と評価点数との因果関係を分析し、ルールに従って記述してください。

# ルール
・評価点数の範囲は1.0-5.0の間で付いています。
・Sさんが付ける点数範囲の分析は厳密に行なってください。
・レビュー記事中の表現での点数分布の傾向を、評価点数範囲と併せて記述してください。
----------[出力結果]
----------
Sさんのレビュー記事と評価点数を分析した結果、以下の傾向が見られます。

### 評価点数の範囲と分布
- **評価点数の範囲:** Sさんのレビューにおける評価点数は主に**3.0から3.9**の範囲内で付けられています。これらの点数は、一般的に「良いが完璧ではない」という評価を反映していると考えられます。

### レビュー内容と評価点数の因果関係
- **高評価(3.7-3.9)の傾向:**
  - **料理の質:** 料理の味や質が非常に高い場合、Sさんは3.7以上の高評価を付ける傾向があります。例えば、「本当に美味しい」と表現する料理や、特に感激した料理についてはこの範囲に属する点数が付けられています。
  - **接客の質:** さらに、スタッフの接客が非常に良いと感じた場合も、評価が高くなる傾向があります。「接客が良い」「スタッフが親切」といった表現が多く見られます。
  
- **中程度の評価(3.0-3.6)の傾向:**
  - **部分的な不満:** 料理は美味しいが、店内の雰囲気やサービスに不満がある場合、Sさんは3.0-3.6の評価を付けることが多いです。例えば、「味は良かったが、接客がいまいちだった」や「サービスが遅かった」などのコメントがこれに該当します。
  - **一部の問題:** 他にも、「料理が一部美味しかったが、全体的にもう少し改善が必要」といった場合も、この点数範囲で評価される傾向があります。

### 記述ルールに基づいた結論
- **点数分布の正確な把握:** Sさんが付ける評価点数の範囲は3.0から3.9の間に集中しており、特に3.5前後の点数が多く見られます。この範囲は、料理やサービスに対して好意的であるが、何らかの不満や改善点を感じた場合に多く見られます。
- **レビュー内容との因果関係:** Sさんのレビュー内容は、料理やサービスに対する具体的な感想が点数に反映されており、特に料理の質や接客の質が高評価の主な要因であることが明らかです。逆に、接客や雰囲気に対する不満があれば、その分評価が下がる傾向があります。

これらの分析を基に、Sさんの評価点数の傾向を理解することができます。
----------

↑のプロンプト作成で意識したのは下記です。

  • 点数範囲をできるだけ厳密に出すよう指示する

  • 各点数範囲内でどのような文言・表現を使っている頻度が高いか明確にする

記事内容と評価点数との分析結果が得られたので、これを使って評価点数を推測してもらいます。
下記が入力するプロンプトです。

下記のSさんの飲食店の口コミ記事の評価点数をルールに従い推測してください

## ルール
・点数は1.0-5.0の範囲内で0.1刻みで付けてください
・「Sさんの評価点数と記事内容の関連性」の内容を深く理解し、記述されている傾向を考慮した上で点数を推測しください。

## Sさんの評価点数と記事内容の関連性
----------
Sさんのレビュー記事と評価点数を分析した結果、以下の傾向が見られます。

### 評価点数の範囲と分布
- **評価点数の範囲:** Sさんのレビューにおける評価点数は主に**3.0から3.9**の範囲内で付けられています。これらの点数は、一般的に「良いが完璧ではない」という評価を反映していると考えられます。

### レビュー内容と評価点数の因果関係
- **高評価(3.7-3.9)の傾向:**
  - **料理の質:** 料理の味や質が非常に高い場合、Sさんは3.7以上の高評価を付ける傾向があります。例えば、「本当に美味しい」と表現する料理や、特に感激した料理についてはこの範囲に属する点数が付けられています。
  - **接客の質:** さらに、スタッフの接客が非常に良いと感じた場合も、評価が高くなる傾向があります。「接客が良い」「スタッフが親切」といった表現が多く見られます。
  
- **中程度の評価(3.0-3.6)の傾向:**
  - **部分的な不満:** 料理は美味しいが、店内の雰囲気やサービスに不満がある場合、Sさんは3.0-3.6の評価を付けることが多いです。例えば、「味は良かったが、接客がいまいちだった」や「サービスが遅かった」などのコメントがこれに該当します。
  - **一部の問題:** 他にも、「料理が一部美味しかったが、全体的にもう少し改善が必要」といった場合も、この点数範囲で評価される傾向があります。

### 記述ルールに基づいた結論
- **点数分布の正確な把握:** Sさんが付ける評価点数の範囲は3.0から3.9の間に集中しており、特に3.5前後の点数が多く見られます。この範囲は、料理やサービスに対して好意的であるが、何らかの不満や改善点を感じた場合に多く見られます。
- **レビュー内容との因果関係:** Sさんのレビュー内容は、料理やサービスに対する具体的な感想が点数に反映されており、特に料理の質や接客の質が高評価の主な要因であることが明らかです。逆に、接客や雰囲気に対する不満があれば、その分評価が下がる傾向があります。

これらの分析を基に、Sさんの評価点数の傾向を理解することができます。
----------

## 口コミ記事
----------
ゆっくりできるところでおいしい料理も食べたいし甘いものも食べたい。そんなわがままな願いを叶えるのがこちらのレストランです。忘年会シーズンに行きましたが、ある意味世間ではサラリーマンの人たちが大勢で団体予約する時期だったのか、女子会などが多い様子の本店は、穴場時期だったのかギリギリで予約が取れました!

パフェはもちろん絶品でしたが、その他のお料理も最高でした。

ゆっくり滞在もできるので、おいしいワインを飲みながら語り合い、最高に美味しいパフェを楽しむことができて、みんな大満足の様子でした!
また行きます!!
----------

出力結果は下記になりました

Sさんの口コミ記事内容に基づいて、評価点数を推測します。

記事内容からは、料理やデザートが「絶品」や「最高」という非常に高い評価を受けており、滞在の満足度も高いことが伺えます。また、「みんな大満足の様子でした!」という表現から、全体的に非常にポジティブな印象を受けたことがわかります。

この口コミは、料理の質が非常に高く評価されており、Sさんの「高評価(3.7-3.9)」の傾向に該当します。また、接客や雰囲気に関しても特に不満が記載されていないため、評価が下がる要因は見受けられません。

したがって、この口コミ記事に対するSさんの評価点数は**3.9**と推測されます。

結果、実験③と値が近い点数を推測することができましたが、実際の点数と一致させることはできませんでした。

実際の点数にならなかった原因を考える

今回実験③④では実際の評価点数に近い結果を得られることができましたが、同じ点数にすることはできませんでした。
原因を考えてみます。

  • レビュワーが感想を全て文章に盛り込むのが難しかった

  • 読み込ませる過去のレビュー記事の量が足りない

  • 文章では表現できない要素があった

    • 視覚や聴覚などの感覚的なもの

  • お店のジャンルによって重要視する要素が異なっていた

    • レストランだったらゆったりできる方がいいが、ラーメン屋は回転率が高い方がいいなど

評価推測に必要な情報が文章以外の要素を含めまだまだあるように感じました。

まとめ

今回やってみて、下記の知見を得られました。

  • レビュー記事内容の情報だけでスコアリングするのは現状難しい

  • レビュー記事のサンプルを事前に読み込ませることで点数の精度をあげることができる

  • レビュー記事内容から傾向をルール化してプロンプトに含めても一定の精度が得られる

    • あまり構造化していないテキストでも使える

  • より精度を高めるためには、文章以外の情報が必要

生成AIを使ったスコアリングのアイディアがありましたら教えていただけると幸いです。

それではまたお会いしましょう!

この記事が気に入ったらサポートをしてみませんか?