本記事では人それぞれの書き方のクセを踏襲した文章作成をLLMに行わせる方法について見ていきます。

背景
LLMで「個性のある文章」をつくるのは、なぜ難しいのでしょうか。「なんだかよそよそしい」「人の文章っぽくない」と感じることはないでしょうか。
たとえば、レビューを書くというシーンだけを見ても人の文章は多種多様です。人であればカジュアルで絵文字をたくさん使う人もいれば、ていねいで論理的な文章を好む人もいます。そうした「書き方の個性」をLLMに反映させるのは、なかなか上手くいきません。しかし本来であれば、使う人の文体や好みに合わせて出力を調整したいはずです。
こうした願いを叶えるためにこれまで試されてきた方法には共通の弱点があります。それは「情報を集めて、いきなり一発で文章を出す」やり方になっていることです。つまりトピックは合っていても、文体がかたすぎたり、途中で話し方が変わってしまったりと、微妙なズレがよく起こります。人が文章を書くときは、一度書いてから「もう少しやわらかくしよう」「これは自分らしくないな」と直すものです。
そこで本記事では、こうした「読み返して直す」プロセスの実行方法を見ていきます。
忙しい人向けに、重要なポイント5選
- 「書く・直す」をくり返す仕組みで、検索・執筆・批評という三つの役割を使い、ユーザーの書き方に合った文章をつくる
- 追加の学習は不要で、プロンプトの工夫でどんなモデルにも応用できる
- 三つのデータセットで従来法より良い結果を出し、最大で約13%性能が向上した
- 修正は3〜5回ほどで十分な効果があり、それ以上くり返しても大きな改善はない
- 批評に使うモデルは大きいほど良いが、実用的には「比較しながら修正する方式」が最も効率的
参照文献情報
- タイトル:Iterative Critique-Refine Framework for Enhancing LLM Personalization
- URL:https://doi.org/10.48550/arXiv.2510.24469
- 著者:Durga Prasad Maram, Dhruvin Gandhi, Zonghai Yao, Gayathri Akkinapalli, Franck Dernoncourt, Yu Wang, Ryan A. Rossi, Nesreen K. Ahmed
- 所属:University of Massachusetts Amherst, Adobe Research, University of Oregon, Cisco AI Research
LLMに三つの役割を与える
では、「読み返して直す」という作業を、LLMでどう実現すればよいのでしょうか。研究チームはLLMに三つの役割を持たせることで、この問題に取り組んでいます。
まず、前提となる問題を整理します。
たとえば、ユーザーが「この商品のレビューを書いて」と入力したとします。このとき求められるのは、単にレビュー文をつくることではありません。その人の過去の書き方(口調や言葉の選び方、文の流れなど)に合った文章を出すことがゴールになります。
そのためには、ユーザーがこれまでに書いた文章(レビューなど)を活用する必要があります。ただし、すべての過去データをLLMに渡してしまうと、多すぎて扱いきれません。そこで、関係がある部分だけをうまく選び出して使う工夫が必要になります。
検索係が情報を集め、執筆係が書き、批評係が直す
文章を作る流れを「検索係(Retriever)」「執筆係(Generator)」「批評係(Critic)」と三つの役割に分けて考えます。
それぞれの主な処理、入力内容、出力内容、特徴と備考を表にまとめます。
| 役割 | 主な処理 | 入力 | 出力 | 特徴・備考 |
|---|---|---|---|---|
| 検索係(Retriever) | ユーザー過去データから関連文を抽出 | ユーザーの過去文章/依頼(プロンプト) | 関連文をk件抽出(研究では上限k=4) | グラフベース検索を採用。本人の過去だけでなく、似た嗜好の他ユーザーの文も参照できる。コールドスタート対策に有効。 |
| 執筆係(Generator) | 初稿の生成と改訂 | 検索係が抽出した情報+依頼内容 | 初稿→批評を受けた改訂稿 | 「書く→批評→直す」のサイクルで質を高める。批評のフィードバックを反映して再生成する。 |
| 批評係(Critic) | 文章の評価と改善点提示 | 執筆係の文章+検索係の参照情報 | 具体的フィードバック(改善指示) | 同じ参照情報を見て評価するため、「このユーザーの過去と比べて」具体的に指摘できる。評価観点は①口調の一貫性 ②語彙の一致 ③文の構造 ④話題の関連性。 |
追加学習なし、プロンプト設計だけで実現
この手法の魅力は追加の学習(いわゆるファインチューニング)がいらないことです。
LLMを特定のタスク向けに調整するには、大量のデータを使って再学習させる場合があります。しかし、その場合、時間も計算資源もたくさんかかります。
今回提案されている手法は、そうした事前の訓練をせずにすぐ動かせます。プロンプト(LLMへの指示文)の工夫だけで動くしくみなので、どんなLLMにも応用できる柔軟さがあります。
なお、修正をくり返す回数は、あらかじめ決めておきます(この研究では5回まで)。本当は「もう十分よくなったか」を自動で判断できると理想ですが、それは今後の課題とされています。
「レビューを書く」というタスクを例としてプロンプトを示していきます。
検索係に与えるプロンプト例
まずは、タスクの骨格を定義する雛形です。どんなアウトプットを期待するかを短く示し、変数(プレースホルダ)を置きます。
Generate a review text written by a user who has a given an overall rating of [TARGET_RATING] for a business with following details: [BUSINESS_DETAILS]
日本語訳
以下の詳細を持つ店舗について、ユーザーが与えた総合評価 [TARGET_RATING] に基づいて書いたレビュー本文を生成してください。 [BUSINESS_DETAILS]
執筆係に与えるプロンプト例
次に、実際にモデルに投げる「完全な指示文」です。コンテキスト(ユーザープロファイルなど)、細かい手順、出力フォーマットなどを含めます。
Given a target user’s past reviews, a business description, and reviews from other users for the same business, your task is to generate a review that the target user might write. Below is the list of reviews from the target user on different businesses: #User Profile: SAMPLE 1: [SAMPLE 1 Text] ... SAMPLE 2: [SAMPLE 2 Text] ... Consider a business with the following details: [BUSINESS_DETAILS] Others have reviewed this business before. Below is a list of their reviews: #Neighbor Profile: SAMPLE 1: [SAMPLE 1 Text] ... SAMPLE 2: [SAMPLE 2 Text] ... Now, generate a review from the target user who has a given an overall rating of [TARGET_RATING] for the business mentioned above, without any additional explanation, adhering to the following instructions. - Analyze the target user’s previous reviews to capture their writing style, tone, sentiment and content preferences. - Use the business details to understand its features, benefits, and intended use. - Consider the opinions expressed in other users’ reviews to identify common themes regarding various aspects of the business. - Generate a review that reflects how the target user would likely perceive the business, consistent with their past preferences and reviewing habits. Use the format: 'Review text:'.
日本語訳
対象ユーザーの過去のレビュー、店舗の説明、および同じ店舗に対する他ユーザーのレビューが与えられています。あなたのタスクは、対象ユーザーが書きそうなレビューを生成することです。 以下は対象ユーザーの過去レビューの一覧です。 #User Profile: SAMPLE 1: [SAMPLE 1 Text] ... SAMPLE 2: [SAMPLE 2 Text] ... 次に、以下の詳細を持つ店舗を考えてください。 [BUSINESS_DETAILS] この店舗には他のユーザーによるレビューもあります。以下はそれらの一覧です。 #Neighbor Profile: SAMPLE 1: [SAMPLE 1 Text] ... SAMPLE 2: [SAMPLE 2 Text] ... それでは、上記の店舗について対象ユーザーが与えた総合評価 [TARGET_RATING] に応じたレビューを、余分な説明なしで生成してください。指示は次の通りです。 - 対象ユーザーの過去レビューを分析し、文体、語調、感情、好みを把握すること。 - 店舗の詳細を用いて、特徴や利点、想定される利用シーンを理解すること。 - 他ユーザーのレビューに表れた意見を参照し、店舗の各側面についての共通テーマを把握すること。 - 対象ユーザーの過去の嗜好やレビューパターンに沿った形で、ユーザーがその店舗をどう評価するかを反映したレビューを作成すること。 出力形式は 'Review text:' を先頭にしてください。
批評係に与えるプロンプト例
You are a Personalization Critic Module. Specifically, you will analyze user review texts
written for businesses. Your task is to evaluate how well the *Generated Output* is
personalized for the Target User and to give feedback along the specified criteria.
# Your Inputs
Query - The user's request containing the business details.
Rating - the overall rating the target user has given for the business.
Generated Output - review text to be evaluated.
User Profile - past reviews written by the target user for other businesses.
Neighbor Profile - reviews from other users for this business.
# Feedback Criteria
- Tone Consistency: Does the tone and sentiment in the **Generated Output** align with the
user’s writing style and the target review rating?
- Vocabulary Match: Does the vocabulary level in the **Generated Output** align with that of
the user?
- Sentence Structure: Are the sentence lengths, complexity, and syntactic structures in the
**Generated Output** similar to those used by the user?
- Topic Relevance: Is the output content relevant to the query, free of off-topic information,
and inclusive of important aspects?
# Analysis Strategy
- Analyze the user's writing style from the **User Profile**. Your feedback for the first three
criteria (Tone Consistency, Vocabulary Match, Sentence Structure) should solely be on style
and should not include any content-related suggestions. To evaluate tone, use profile reviews
with sentiments that align closely with the target rating.
- Consider opinions expressed in other users’ reviews to identify themes and aspects of the
business from the **Neighbor Profile** relevant to the query. Use these insights to identify
any off-topic or missing aspects in the **Generated Output**. Your feedback for the last
criterion (Topic Relevance) should solely address the content and be grounded in **Neighbor
Profile**.
You can output 'No further improvement needed' along a criteria if the performance along the
criteria is exceptional.
# Output Format
Return your output in the following JSON format:
{
"Tone Consistency": **Feedback text**,
"Vocabulary Match": **Feedback text**,
"Sentence Structure": **Feedback text**,
"Topic Relevance": **Feedback text**
}
## Test Inputs
#Query:
Generate a review text written by a user who has a given an overall rating of [TARGET_RATING]
for a business with following details:
[BUSINESS_DETAILS]
#Generated Output:
[GENERATED_OUPUT]
#User Profile:
SAMPLE 1:
[SAMPLE 1 Text]
...
SAMPLE 2:
[SAMPLE 2 Text]
...
#Rating:
[TARGET_RATING]
#Neighbor Profile:
SAMPLE 1:
[SAMPLE 1 Text]
...
SAMPLE 2:
[SAMPLE 2 Text]
...
Your output should be a valid json object in ```json ``` block without any additional
explanation.
日本語訳
あなたはパーソナライゼーションクリティックモジュールです。具体的には、店舗に関するユーザーレビュー本文を分析します。あなたのタスクは、*生成された出力*が対象ユーザーにどれだけパーソナライズされているか評価し、指定された基準に沿ってフィードバックを与えることです。
# 入力
Query - 店舗の詳細を含むユーザーの要求
Rating - 対象ユーザーがその店舗に付けた総合評価
Generated Output - 評価対象の生成レビュー本文
User Profile - 対象ユーザーが他の店舗に書いた過去レビュー
Neighbor Profile - 当該店舗に対する他ユーザーのレビュー
# フィードバック基準
- Tone Consistency(語調の一貫性): **Generated Output** の語調や感情は、ユーザーの文体および目標評価と一致しているか?
- Vocabulary Match(語彙の一致): **Generated Output** の語彙レベルはユーザーのそれと一致しているか?
- Sentence Structure(文の構造): **Generated Output** の文長、複雑さ、構文はユーザーのものと類似しているか?
- Topic Relevance(話題の関連性): 出力内容はクエリに関連し、脱線がなく重要な観点を含んでいるか?
# 分析方針
- **User Profile** からユーザーの文体を分析してください。最初の3つの基準(語調、語彙、文構造)についてのフィードバックはスタイルに限定し、内容に関する提案は含めないでください。語調評価では、目標評価に近い感情を示すプロファイルレビューを参照してください。
- **Neighbor Profile** に表れた他ユーザーの意見を参照し、店舗に関するテーマや側面を把握してください。これを基に **Generated Output** の脱線や欠落を特定してください。最後の基準(Topic Relevance)は内容に限定し、Neighbor Profile に基づいて評価してください。
パフォーマンスが卓越している場合は、ある基準について 'No further improvement needed' と出力して構いません。
# 出力形式
次の JSON 形式で出力してください。
{
"Tone Consistency": **フィードバック文**,
"Vocabulary Match": **フィードバック文**,
"Sentence Structure": **フィードバック文**,
"Topic Relevance": **フィードバック文**
}
## テスト入力例(形式)
#Query:
Generate a review text written by a user who has a given an overall rating of [TARGET_RATING]
for a business with following details:
[BUSINESS_DETAILS]
#Generated Output:
[GENERATED_OUPUT]
#User Profile:
SAMPLE 1:
[SAMPLE 1 Text]
...
SAMPLE 2:
[SAMPLE 2 Text]
...
#Rating:
[TARGET_RATING]
#Neighbor Profile:
SAMPLE 1:
[SAMPLE 1 Text]
...
SAMPLE 2:
[SAMPLE 2 Text]
...
出力は追加説明なしで、```json``` ブロック内の有効な JSON オブジェクトにしてください。
改善プロンプト
※「生成 → 批評」のあとに使うプロンプトです。批評を受けて改善プロンプトを投げると、モデルはフィードバックに基づいた改良版を返すという流れです。
[GENERATION PROMPT] Your previously generated review is: [GENERATED_OUTPUT] Your review has room for improvement. The feedback on your review from an expert is: [FEEDBACK] Based on the improvements suggested in the feedback, please improve your review, without any additional explanation. Use the format: 'Review text:'.
日本語訳
[GENERATION PROMPT] あなたが以前に生成したレビュー: [GENERATED_OUTPUT] あなたのレビューには改善の余地があります。専門家からのフィードバックは以下です: [FEEDBACK] フィードバックで指摘された改善点に基づいて、追加の説明なしにレビューを改善してください。 出力形式は 'Review text:' としてください。
品質と効率を調整する三つのオプション
基本のしくみに加えて、研究チームはさらに三つの追加戦略も試しています。文章を実際に生成するその場で取り入れられる工夫です。
概要、処理の流れ、長所、短所、推奨される用途について表にまとめます。
| 戦略 | 概要 | 処理の流れ | 長所 | 短所 | 推奨用途 |
|---|---|---|---|---|---|
| ノックアウト方式(Knockout) | 毎回「前の版」と「今の版」を批評係に比較させる。 | 批評→比較→今の版が悪ければ前版を保持→次へ。 | 修正のやりすぎ(質の劣化)を防げる。研究のデフォルト設定。 | 小さな改善を取りこぼす可能性がある。 | バランス重視で安定した改善を狙う場面。 |
| ベストオブN方式(Best-of-N) | 一度の修正で複数案(例:3案)を作らせ、最良案を選ぶ。 | 執筆がN案生成→批評が最適案を選定→選択案を採用。 | 比較によって高品質な案が得られやすい。 | 計算コストが高い(LLMを何度も実行)。 | 最高品質を優先するとき。コストが許容できる場合。 |
| トピック抽出方式(Topic Extraction) | 参照データをそのまま渡すのではなく要約(抽出)して渡す。 | 検索係が要約(書き方の特徴/話題の要素)→批評係が要約を参照→評価・指摘。 | 批評係の参照情報が短くまとまり処理がスムーズに。 | 最初の要約作業にコストがかかり、総コストが必ず減るとは限らない。 | 参照情報を絞って処理を効率化したい場合。 |
もっと質を高めたいならベストオブN、バランスをとるならノックアウト、扱うデータ量を抑えたいならトピック抽出、というように使い分けます。
ノックアウトプロンプト
You are an impartial evaluator of style and content alignment. You will be evaluating a review
text about a particular business written by an author. Below are samples of the author's
writing containing past review texts of various businesses, review samples from other users for
the business being reviewed, the input query, and two reviews.
# Author's Writing:
SAMPLE 1:
[SAMPLE 1 Text]
...
SAMPLE 2:
[SAMPLE 2 Text]
...
# Reviews from other users:
SAMPLE 1:
[SAMPLE 1 Text]
...
SAMPLE 2:
[SAMPLE 2 Text]
...
# Query:
[QUERY]
# Review A:
[GENERATED_OUTPUT_A]
# Review B:
[GENERATED_OUTPUT_B]
# Task
Analyze the samples given under *Author's Writing* to identify the author's writing style.
Consider the opinions expressed in *Reviews from other users* above to understand common
themes and aspects of the business. Determine which of the two reviews is more likely to have
been written by the author. Consider each review's similarity with regards to (1) tone (2)
vocabulary level (3) sentence structure (4) tonal alignment with the target rating (5)
avoidance of off-topic information (6) inclusion of information relevant to the query based on
other user reviews.
# Output Format:
You must return the winning review option along with a brief explanation for your choice.
Your output should be a valid json object in ```json ``` block in following JSON format:
{
"answer": <either A or B>,
"explanation: "....",
}
日本語訳
あなたはスタイルと内容の整合性を公平に評価する評価者です。特定の店舗について書かれたレビュー本文を評価します。下には著者の過去レビュー(Author's Writing)、当該店舗に対する他ユーザーのレビュー、入力クエリ、そして2つのレビュー(A,B)が示されています。
# Author's Writing:
SAMPLE 1:
[SAMPLE 1 Text]
...
SAMPLE 2:
[SAMPLE 2 Text]
...
# Reviews from other users:
SAMPLE 1:
[SAMPLE 1 Text]
...
SAMPLE 2:
[SAMPLE 2 Text]
...
# Query:
[QUERY]
# Review A:
[GENERATED_OUTPUT_A]
# Review B:
[GENERATED_OUTPUT_B]
# タスク
*Author's Writing* のサンプルを分析して著者の文体を特定してください。
*Reviews from other users* に示された意見を参照して、店舗に関する共通テーマや重要な側面を把握してください。次に、2つのレビューのうちどちらがその著者によって書かれた可能性が高いか判定してください。各レビューについて、(1) 語調 (2) 語彙レベル (3) 文構造 (4) 目標評価に対する語調の整合性 (5) 脱線の回避 (6) 他ユーザーのレビューに基づくクエリ関連情報の包含 を考慮してください。
# 出力形式:
勝者のレビュー(A または B)と選択理由を簡潔に返してください。出力は ```json``` ブロック内の有効な JSON オブジェクトとしてください。
{
"answer": <either A or B>,
"explanation": "....",
}
ノックアウト+ベストオブN
You are an impartial evaluator of style and content alignment. You will be evaluating a review
text about a particular business written by an author. Below are samples of the author's
writing containing past review texts of various businesses, review samples from other users for
the business being reviewed, the input query, and three reviews.
# Author's Writing:
SAMPLE 1:
[SAMPLE 1 Text]
...
SAMPLE 2:
[SAMPLE 2 Text]
...
# Reviews from other users:
SAMPLE 1:
[SAMPLE 1 Text]
...
SAMPLE 2:
[SAMPLE 2 Text]
...
# Query:
[QUERY]
# Review A:
[GENERATED_OUTPUT_A]
# Review B:
[GENERATED_OUTPUT_B]
# Review C:
[GENERATED_OUTPUT_C]
# Task
Analyze the samples given under *Author's Writing* to identify the author's writing style.
Consider the opinions expressed in *Reviews from other users* above to understand common
themes and aspects of the business. Determine which of the three reviews is more likely to have
been written by the author. Consider each review's similarity with regards to (1) tone (2)
vocabulary level (3) sentence structure (4) tonal alignment with the target rating (5)
avoidance of off-topic information (6) inclusion of relevant information based on other user
reviews.
# Output Format:
You must return the winning review option along with a brief explanation for your choice.
Your output should be a valid json object in ```json ``` block in the following JSON format:
{
"answer": <either A or B or C>,
"explanation: "....",
}
日本語訳
あなたはスタイルと内容の整合性を公平に評価する評価者です。特定の店舗について書かれたレビュー本文を評価します。下には著者の過去レビュー(Author's Writing)、当該店舗に対する他ユーザーのレビュー、入力クエリ、そして3つのレビュー(A,B,C)が示されています。
# Author's Writing:
SAMPLE 1:
[SAMPLE 1 Text]
...
SAMPLE 2:
[SAMPLE 2 Text]
...
# Reviews from other users:
SAMPLE 1:
[SAMPLE 1 Text]
...
SAMPLE 2:
[SAMPLE 2 Text]
...
# Query:
[QUERY]
# Review A:
[GENERATED_OUTPUT_A]
# Review B:
[GENERATED_OUTPUT_B]
# Review C:
[GENERATED_OUTPUT_C]
# タスク
*Author's Writing* のサンプルを分析して著者の文体を特定してください。
*Reviews from other users* に示された意見を参照して、店舗に関する共通テーマや重要な側面を把握してください。次に、3つのレビューのうちどれがその著者によって書かれた可能性が高いか判定してください。各レビューについて、(1) 語調 (2) 語彙レベル (3) 文構造 (4) 目標評価に対する語調の整合性 (5) 脱線の回避 (6) 他ユーザーのレビューに基づく関連情報の包含 を考慮してください。
# 出力形式:
勝者のレビュー(A または B または C)と選択理由を簡潔に返してください。出力は ```json``` ブロック内の有効な JSON オブジェクトとしてください。
{
"answer": <either A or B or C>,
"explanation: "....",
}
トピック抽出プロンプト
執筆スタイルの抽出
Writing Style Extraction ϕts You are a helpful assistant capable of analyzing a user's writing style. Your task is to evaluate a list of texts written by the user and determine the writing style. Consider elements such as tone, vocabulary, sentence structure, and overall flow. # Your task Given a list of writing samples by a user, analyze the writing style in terms of three aspects: tone, vocabulary, and sentence structure. If the samples have mixed sentiments (e.g., positive, negative, neutral), analyze and describe the writing style separately for each sentiment type. However, present your findings for each style aspect (tone, vocabulary, sentence structure) in a single, consolidated paragraph that includes distinctions based on sentiment. Avoid including specific content from the samples in your descriptions. # Your inputs User's Writing : A list of sample texts written by the user. # Your outputs - should be a valid JSON object in ```json``` block that contains the following keys. Limit the description to two or three sentences for each aspect:. Tone : "..." Vocabulary style: "..." Sentence structure: "..."
日本語訳
ライティングスタイル抽出 ϕts あなたはユーザーの文体を分析できるアシスタントです。与えられたユーザーの複数のテキストを評価し、文体を判定してください。語調(トーン)、語彙、文の構造、文章全体の流れなどを考慮します。 # タスク ユーザーの書き言葉サンプルの一覧が与えられます。トーン、語彙、文構造の3観点で文体を分析してください。サンプルに混合した感情(例:肯定的、否定的、中立)が含まれる場合は、感情ごとに別々に分析・記述してください。 ただし、各スタイル項目(トーン、語彙、文構造)の所見は、感情ごとの差異を含めた**単一の統合された段落**で提示してください。サンプル内の具体的な内容をそのまま引用するのは避けてください。 # 入力 User's Writing : ユーザーが書いたサンプルテキストの一覧 # 出力 — 有効な JSON オブジェクト(```json``` ブロック)としてください。各観点は2〜3文程度に制限してください。 Tone : "..." Vocabulary style: "..." Sentence structure: "..."
コンテンツのトピック抽出
Content Topics Extraction ϕtc You are a helpful assistant capable of extracting different atomic aspects discussed in a list of input texts. Your task is to analyze the texts and generate a JSON list of aspects and descriptions for each of them. Each aspect should be supported by evidence from the input texts, in the form of one or more related sentences. # Your task Given a list of review texts, identify common themes related to various characteristics of the reviewed item or experience, and extract atomic aspects. Additionally, generate a description for each identified aspect. # Your inputs Review texts : A list of review texts provided for a particular product, service, or entity. # Your outputs - should be a valid JSON list in ```json``` block that contains the following keys. aspect: the extracted aspect title description: the description of the aspect.
日本語訳
コンテンツ(トピック)抽出 ϕtc あなたは入力テキスト群から扱われている原子的な側面(アスペクト)を抽出できるアシスタントです。テキストを分析し、各アスペクトとその説明を含む JSON のリストを生成してください。各アスペクトには、入力テキストからの一つ以上の関連文で裏付けを付けてください。 # タスク レビュー本文の一覧が与えられます。対象(商品・サービス・体験)のさまざまな特性に関する共通のテーマを特定し、原子的なアスペクトを抽出してください。加えて、特定した各アスペクトについて説明を生成してください。 # 入力 Review texts : 当該の製品・サービス・主体に関するレビュー本文の一覧 # 出力 — 有効な JSON リスト(```json``` ブロック)としてください。各要素は以下のキーを含みます。 aspect: 抽出されたアスペクト名 description: アスペクトの説明
Yelp、Amazon、Goodreadsで検証
提案されたしくみが本当にうまく機能するかどうかを確かめるため、研究チームは、内容の異なる三つの分野からデータセットを選び、PerFineの性能を検証しました。
ここでは、どんなデータを使ったのか、どう評価したのか、そしてどのような条件で実験を行ったのかを見ていきます。
レビュー生成タスクで評価
実験では「レビュー文を作る」タスクが使われました。冒頭にも述べた通り、レビューには好みや表現のクセが出やすいため、パーソナライズの効果を試すのに向いています。
データは三つの異なるサービスから集められました。
一つ目はYelp(イェルプ)で、レストランやお店のレビューが集まるサービスです。
二つ目はAmazonで、「産業・科学」「楽器」「ビデオゲーム」という三つのジャンルの商品レビューが選ばれました。
三つ目はGoodreadsで、本のレビューに関するデータです。こちらは「コミック」「詩」「児童書」という三つのジャンルが対象です。
実験に使うデータは、2,500人のユーザーがランダムに選ばれました。それぞれのユーザーについて、レビュー文のうち一つが評価用として取り分けられ、残りは「過去のデータ」として使われます。
商品やお店についての説明に使う情報にも工夫があります。Yelpでは都市名、州名、お店の特徴(たとえば設備やサービス)、カテゴリ情報が使われました。Amazonでは商品名、説明文、カテゴリが使われています。Goodreadsでは本のタイトルと説明文が使われました。
単語の一致度とLLMによる判定
生成された文章の質をどうやって評価するかは、実験の中でもとても重要なポイントです。研究チームは、以下の二つの異なる評価方法を使いました。
| 指標 | 概要 | 評価方法 | 長所 | 短所 | 備考 |
|---|---|---|---|---|---|
| METEOR(メテオ) | 伝統的な単語一致指標 | 生成文と正解文の単語を比較し、一致度を算出(同義語や語形変化を考慮) | 単語レベルでの一致を柔軟に評価できる | 表現が異なっていて意味は同じ場合や、文章全体の自然さは評価しにくい | 古くから使われている標準的指標 |
| G-Eval(ジーイーバル) | LLMを審査員にした評価法 | 生成文と正解文をLLMに比較させて0〜4で採点(0=無関係、4=完全一致)。同評価を20回繰り返して平均を取る | 単語一致では捉えきれない意味や自然さを評価しやすい。ばらつきを平均で抑えられる | LLMの判定に依存するため、評価モデルのバイアスや不安定さの影響を受ける可能性がある | 本実験では評価モデルに Qwen-3-32B を使用。20回平均で安定性を確保 |
実験で使用されたモデルとパラメータ
使われた執筆モデルは「Llama-3.1-8B-Instruct」です。パラメータ数は80億で、性能と計算コストのバランスが取れた選択です。
批評モデルには「Qwen-2.5-Instruct」シリーズ(140億/320億)を使用し、効果の比較も行われました。また、執筆と批評を同じモデルで行う「自己改善」設定(Llama-3.1-8Bを再利用)も試され、これはメモリ効率の良さが利点です。
さらに、商用モデル「gpt-5-mini」も批評係に使われ、オープンモデルとの比較が可能になっています。
生成時の設定は、トークン上限512、温度は0.6に設定。これは文章の自然さと多様性のバランスを取った値です。
修正サイクルは5回。初稿に対し、批評→修正を5回くり返します。
検索モデルは「Contriever」。ユーザー自身の過去レビュー4件+他ユーザーのレビュー4件を抽出(k=4)。比較対象の他手法(LaMPやPGraphRAG)と同じ設定で、公平な比較ができます。
ベストオブN方式では、1回の修正で3案を出して最良を選ぶ方法が採用されました。
ビジネス現場での実用性を意識し、現実的な構成を目指したそうです。
全データセットで既存手法を上回る結果に
本当に効果があったのでしょうか。研究チームは、他の手法と比べてどうだったか、設定を変えると性能がどう変わるか、修正をくり返すことで文章の質がどのように変化するか、といった点を詳しく調べました。
既存手法より最大13%の改善、3〜5回の修正で効果が頭打ち
はじめに、従来の代表的な方法と今回の手法を比べた検証が行われました。比較対象となったのは、①本人の過去の文章だけを使う方法と、②本人に加えて似たユーザーの情報も使う方法の2種類です。
今回の手法は、②の出力をたたき台として使い、そこに「批評と修正」の工程を加えるかたちで改善を重ねていきます。
評価の結果、新しい仕組み(中でもノックアウト方式)は、すべてのデータで従来手法より良いスコアを出しました。

LLMによる評価指標では、店舗レビューで約10%、書籍レビューで約8%、商品レビューで約13%のスコア改善が確認され、とくに商品の分野で大きな効果が見られました。
単語の一致度を測る指標でも、すべてのケースで数値が上昇しました。つまり、生成された文章が、実際にユーザーが書いたレビューにより近づいたということです。
こうした成果は、「一発で終わらせず、文章を振り返って直す」というプロセスを加えたことで実現しています。従来の方法は情報を集めて一度で文章を出すだけでしたが、今回の仕組みではそこからさらにユーザーらしさに近づけていきます。
修正のくり返しによる効果の変化も調べられました。結果としては、1〜2回目で大きく改善し、3〜5回で効果が頭打ちになる傾向が見られました。つまり、際限なく直す必要はなく、5回ほどで十分な品質に達するという実用的な指標が得られました。
批評係は大きいモデルほど高性能、商用モデルも有効
次に、どのモデルを批評係に使うかによって結果がどう変わるかが検証されました。ここでは、五つの異なるモデルが試されています。
まず試されたのは、執筆係と同じモデルを批評にも使う設定です。1つのモデルで両方をこなすため、メモリ効率が良いという利点があります。この設定でも既存手法を上回る性能が得られ、仕組み自体の有効性が示されました。
続いて、サイズの異なる三種類のモデルが比べられました。結果は明快で、モデルが大きくなるほど性能も良くなりました。たとえば、評価スコアは小さいモデルで0.43ほど、中くらいで0.44台、大きいモデルでは0.47〜0.48まで上がっています。これは、モデルが大きいほど表現の違いを細かく理解でき、より適切なフィードバックが出せるためです。
さらに、商用の強力なモデルも試されました。このモデルは特に高いスコアを記録し、書籍レビューの評価では0.50に達しました。しかも、効率の低い設定でこの結果だったため、条件を工夫すればさらに少ない修正回数でよい結果が出る可能性も示唆されています。
この一連の検証から分かるのは、今回の仕組みはどんなモデルとも組み合わせられる柔軟さがあり、批評係の性能を高めることで全体の質も大きく向上するということです。
ノックアウト方式が費用対効果で最良、ベストオブNは割高
三つの実行方法(基本、比較しながら修正、さらに複数案から選ぶ)を比較したところ、性能は複数案を使う方法がもっとも高くなりました。ただし、それに伴って計算コストも大幅に増加します。
たとえば、あるデータではスコアが0.40から0.45に向上した一方で、処理量は約1万から約2.8万に増えました。性能の伸びに比べて、コストの増え方が大きいのが特徴です。
このため、研究チームは性能と効率のバランスが良い中間の方式(比較しながら修正)を推奨しています。最高品質が必要な場面では複数案方式も有効ですが、日常的な用途では負担が大きすぎる可能性があります。
また、情報を要約してから評価に使う方法も試されました。処理量は減りますが、要約自体にコストがかかるため、全体の負担は変わりませんでした。ただし、性能は維持されており、処理速度を重視する場面では有用です。
これらの結果から、使う状況に応じて手法を選び分けるのが現実的だと考えられます。コストを抑えたいなら中間方式、質を最重視するなら複数案方式、といった使い方が可能です。
まとめ
今回は、LLMで「その人らしい文章」をつくる仕組み作りの方法を紹介しました。「直す→また直す」をくり返すことで、文体や言葉のクセに近づけます。
LLMに「検索」「執筆」「批評」の三つの役目を持たせ、プロンプトだけで動かす形です。
実験では、レビュー文のデータを使ってテストされ、すべてのケースで従来より良い結果が出ました。とくに、3〜5回ほど修正をくり返すと質が上がることが分かりました。
また、批評に使うモデルが大きいほど効果が出やすく、コスパの面では「直して比較する方式」がいちばんバランスが良いという結果になっています。
フィードバックを取り入れて文章を育てる方法は、「人に寄せた表現」を目指すうえで、これからもっと広がっていきそうです。