Semantic opinion search engine for Amazon reviews — 48% MAP improvement using SBERT over Boolean baseline. 210K+ reviews
amazon_search_engine/
├── Codes/
│ ├── baseline_boolean.py # Boolean search implementation (Tests 1-3)
│ ├── advanced_language_model.py # First advanced method
│ ├── advanced_SBERT.py # Second advanced method
│ ├── inverted_index.py # Inverted index builder/handler
│ └── queries.json # Query definitions for testing
├── Data/
│ ├── data.pkl # Processed dataset
│ ├── reviews_segment.pkl # Original Amazon reviews dataset
│ ├── inverted_index.pkl # Pre-built inverted index
│ ├── lm.pkl # Logistic regression model (trained sentiment classifier)
│ ├── positive_words.txt # Positive opinion lexicon
│ ├── negative_words.txt # Negative opinion lexicon
│ ├── negation_words.txt # Negation words list
│ └── intensifier_words.txt # Intensifier words list
├── Outputs/
│ ├── Baseline/ {aspect_words}_test{number}.txt
│ ├── AdvancedMethod1/ {aspect}_test4.txt
│ └── AdvancedMethod2/ {aspect}_test4.txt
├
├── requirements.txt # Python dependencies
└── Readme.md # This file
The large reviews_segment.pkl and data.pkl files are not included in this repository due to their size.
To run the full pipeline, place these files inside the Data/ directory before executing the scripts.
Data/
├── data.pkl
├── reviews_segment.pkl
See requirements.txt for complete list. Key dependencies include:
cd amazon_search_engine
python -m venv venv
venv\Scripts\activate
source venv/bin/activate
pip install -r requirements.txt
nltk.download('wordnet') nltk.download('omw-1.4') nltk.download('punkt') nltk.download('stopwords') nltk.download('punkt_tab') nltk.download('averaged_perceptron_tagger')
Place the dataset files in the Data/ directory:
reviews_segment.pkl: Main review dataset (210,761 reviews)data.pkl: Precomputed embeddings (for Advanced Method 2)- Opinion lexicons: Positive/negative word lists
- Cached indices: Pre-built inverted index for faster retrieval (optional)
python Codes/baseline_boolean.py
This script:
- Loads queries from
queries.json - Implements Boolean search for Tests 1-3
- Generates output files in
Outputs/...
- Test 1: Aspect
- Test 2: Aspect AND Opinion
- Test 3: Aspect OR Opinion
- Test 4: Connotation
python Codes/advanced_language_model.py
python Codes/advanced_SBERT.py
Queries are defined in queries.json:
All output files are saved in Outputs/ directory.
{aspect_words}_test{number}.txt
Examples:
audio_quality_test1.txt(Baseline Test 1)audio_quality_test2.txt(Baseline Test 2)audio_quality_test3.txt(Baseline Test 3)audio_quality_test4.txt(Advanced method)
Each line contains a single review ID:
The project is evaluated on these 5 queries:
- audio quality: poor
- wifi signal: strong
- mouse button: click problem
- gps map: useful
- image quality: sharp
All queries are defined in queries.json.
- Dataset: Amazon Review Dataset (Course provided)
- Opinion Lexicon: Hu and Liu (KDD 2004)
| Method | Avg Precision | Avg Retrieved | Precision Improvement |
|---|---|---|---|
| Baseline (Boolean) | 0.3914 | 1,278 | — |
| Advanced Method 1 (LM) | 0.5503 | 582 | +40.6% |
| Advanced Method 2 (SBERT) | 0.578 | 216 | +47.7% |
83% reduction in retrieved documents while improving precision — evaluated across 5 real-world opinion queries on 210,000+ Amazon reviews.
Key outcomes:
- 48% relative improvement in Average Precision (0.39 → 0.58)
- 83% reduction in retrieved documents while maintaining relevance
- Evaluated across 5 real-world opinion queries on 210,000+ Amazon reviews
Elias Arellano Campos