---
kind: concept
slug: review-based-recommendation
title: Review-based recommendation
summary: >-
  Predicts a user's rating of an item from the text of reviews, not only from past ratings. DeepCoNN, the one card so far, runs a CNN over all reviews by the user and all reviews of the item, then scores the pair with a factorization machine. It reports 7.6% to 8.7% lower MSE than the best baseline on Yelp, Amazon and Beer, with the largest gains where ratings are scarce.
tags: [recommender-systems, rating-prediction, text, cnn]
papers: ["1701.04783"]
related: [collaborative-filtering, factorization-machine]
status: draft
updated_at: 2026-10-18
---

## Overview

A review-based recommender predicts how a user would rate an item, using the
text of reviews as well as the ratings. The motivation is sparsity: many users
and items have only a few ratings, and rating-only models predict poorly for
them [arxiv:1701.04783 §1]. A review says why a rating was given, so the text
can supply signal where ratings are missing [arxiv:1701.04783 §1].

**Shared structure.** The model turns text about the user and text about the
item into vectors, then scores the pair. Quality is compared by test MSE
[arxiv:1701.04783 eq. 11] on an 80/10/10 split [arxiv:1701.04783 §3.3].

## Variants

Only one variant has a paper card in the wiki so far. Its ablations show which
design choices carry weight, so they are described under it.

### Two-tower CNN with a factorization machine (DeepCoNN)

Each side has its own network. The user tower reads all reviews written by the
user as one document, and the item tower reads all reviews of the item. Each
document becomes a sequence of pretrained word vectors, goes through 1-D
convolutions with max-over-time pooling and a fully connected layer, and the
two outputs are scored by a factorization machine [arxiv:1701.04783 §2.2]
[arxiv:1701.04783 §2.4] [arxiv:1701.04783 §2.5]. Reported settings: 100
kernels, window 3, 300-dimensional word vectors, 50-dimensional latent vectors
[arxiv:1701.04783 §3.3]. Card:
[Joint Deep Modeling of Users and Items Using Reviews for Recommendation](/papers/1701.04783).

Reported test MSE, against the best baseline (CDL) [arxiv:1701.04783 tab. 3]:

| Dataset | CDL | DeepCoNN |
|---|---|---|
| Yelp | 1.574 | 1.441 |
| Amazon (average of 21 categories) | 1.372 | 1.268 |
| Beer | 0.299 | 0.273 |

Ablations on Yelp, Amazon Music Instruments and Beer [arxiv:1701.04783 tab. 4].
Note that the Amazon column here is one category, not the 21-category average
above, so the two Amazon figures are not comparable.

| Variant | Change | Yelp | Amazon Music Instr. | Beer |
|---|---|---|---|---|
| Single text tower, user side | item side replaced by a learned item-ID embedding | 1.577 | 1.373 | 0.292 |
| Single text tower, item side | user side replaced by a learned user-ID embedding | 1.578 | 1.372 | 0.296 |
| TF-IDF input | no pretrained word vectors | 1.713 | 1.469 | 0.589 |
| Random word vectors | word vectors not pretrained | 1.799 | 1.517 | 0.627 |
| Dot product | FM replaced by a plain dot product | 1.491 | 1.253 | 0.278 |
| Full model | both towers, pretrained vectors, FM | **1.441** | **1.233** | **0.273** |

The paper reads these as: both towers together beat either tower alone,
pretrained embeddings matter most, and the FM beats a dot product
[arxiv:1701.04783 §3.5].

## When to use which

| Situation | Use | Why |
|---|---|---|
| Ratings are sparse and both users and items have written reviews | Two-tower review model (DeepCoNN) | Lowest MSE of the compared methods on three datasets [arxiv:1701.04783 tab. 3]. The gain is reported as largest for users and items with the fewest reviews [arxiv:1701.04783 §3.6]. |
| No review text available | Rating-only models ([collaborative-filtering](/concepts/collaborative-filtering)) | The paper only uses rating-only methods as baselines, e.g. MF at 1.792 on Yelp [arxiv:1701.04783 tab. 3]. Review text is the input it adds. |
| Text on one side only | Not established; the paper's single-tower variants are the closest evidence | On Yelp the single-tower variants (1.577, 1.578) are no better than CDL (1.574) [arxiv:1701.04783 tab. 3] [arxiv:1701.04783 tab. 4]. |
| Only sparse word-count features are feasible (no pretrained vectors) | Expect a clear loss in accuracy; the paper offers no fix for this | TF-IDF input scores 1.713 on Yelp, worse than CDL's 1.574 [arxiv:1701.04783 tab. 4] [arxiv:1701.04783 tab. 3]. |
| Must score new reviews without refitting the model | Possible in principle; not tested | The paper claims a new review can be pushed through the networks, but no experiment checks this [arxiv:1701.04783 §2.7.2]. |
| Users or items with zero reviews | Not addressed by this paper | The cold-start analysis covers only users and items with few training reviews [arxiv:1701.04783 §3.6]. |
| Small datasets | Not tested | All three datasets are large, from 1.6M to 34.7M reviews [arxiv:1701.04783 tab. 2]. |

Before training, decide whether the scored review is removed from the input
documents. The paper does not say, and including it could inflate the reported
gains; see the leakage note in [Pitfalls on the card](/papers/1701.04783).

## Implementation sketch

Our own pseudocode, following the paper's description. Items marked "not
stated" are choices the implementer must make.

```pseudocode
# One document per user and per item, from training reviews only [§2.3]
user_doc = concat(reviews written by u)      # exclude the scored review
item_doc = concat(reviews written for i)      # paper does not say; avoids leakage

# Pretrained 300-d word vectors, order kept [§2.3] [§3.3]
V = [word_vec(w) for w in user_doc]          # n x 300

# 100 kernels, window 3, ReLU, max over positions [§2.4]
o = [max_pos relu(conv(V, K_j, window=3) + b_j) for j in 1..100]

# Fully connected to a 50-d vector; dropout rate not stated [§2.4] [§2.6]
x_u = dropout(relu(W_u @ o + g_u))           # 50
y_i = dropout(relu(W_i @ o_i + g_i))         # 50, separate weights

# Factorization machine over the concatenated vectors [§2.5]
z = concat(x_u, y_i)                         # 100
pred = w0 + w @ z + sum_{a<b} <v_a, v_b> z_a z_b

# RMSprop, learning rate 0.002, batch 100; loss not stated, MSE is the
# metric [§2.6] [§3.3] [eq. 11]
```

Points the paper leaves open, which an implementation must decide:
the max document length and truncation; padding and out-of-vocabulary words;
whether the embedding table is fine-tuned; the FM factor size; and the
RMSprop epsilon and dropout rate. The card lists these under Pitfalls.

## Contradictions

Within the paper, not across papers:

- **Headline gains.** The conclusion gives 8.5% and 7.6% for Yelp and Beer,
  and 8.7% for Amazon [arxiv:1701.04783 §5]. The results table gives Yelp
  8.5%, Amazon 7.6% and Beer 8.7% [arxiv:1701.04783 tab. 3].
- **Average gain.** The table's average row shows 8.3%, the mean of the three
  per-dataset percentages. The relative drop on the averaged MSE (1.081 to
  0.994) is about 8.0% [arxiv:1701.04783 tab. 3].
- **Amazon corpus size.** The text describes the full corpus as over 143.7M
  reviews [arxiv:1701.04783 §3.1]. The dataset table lists 34.7M reviews
  [arxiv:1701.04783 tab. 2]. The subset selection rule is not stated.

No other paper card in the wiki covers this technique, so no cross-paper
disagreement is recorded.

## Papers

- [Joint Deep Modeling of Users and Items Using Reviews for Recommendation](/papers/1701.04783): introduces DeepCoNN, the two-tower CNN with a factorization machine, and the Yelp, Amazon and Beer results above.
