Skip to content

ReviewPulse v3.0.0 - Aspect-Based Sentiment Analysis

Latest

Choose a tag to compare

@lfariabr lfariabr released this 14 Aug 18:25
· 2 commits to main since this release

ReviewPulse v3.0.0 adds an aspect-based sentiment analysis workflow on SemEval-2014 Task 4
Restaurants, predicting negative, neutral or positive for each aspect supplied with a review.
The ISY503 v2.3.0 binary workflow is preserved and untouched: v3 reuses none of its artifacts or
APIs, and lives under src/absa/ with its own data contracts, models, evaluation and app pages.

What it does

A six-model ladder over one shared official-test prediction set. TF-IDF and a target-agnostic LSTM
are review-only controls; ATAE-LSTM and DistilBERT sentence-pair receive the review and the aspect;
a target-agnostic GRU and a review-only TextCNN are exploratory and reported separately.

The headline result is the mixed-polarity subset: 228 instances across 80 sentences where one
sentence carries aspects with opposing labels. Aspect-conditioned models lead both review-only
controls there, which is the point of the whole comparison.

ATAE-LSTM exposes learned attention and DistilBERT gradient x input attribution, both aligned to
exact visible review offsets. Everything else explicitly reports token evidence as unsupported.
Displayed scores are indicative token-level evidence and never a causal explanation.

Submission archives

Both are built from c2ee52a by scripts/build_a3_package.py, which works from an explicit
allowlist, refuses a dirty working tree and rejects unresolved Git LFS pointers. Entry timestamps
are fixed to the source commit time and paths are sorted, so rebuilding the same mode reproduces
identical bytes.

Archive Bytes SHA-256
ReviewPulse-v3.0.0-lightweight.zip 54,048,531 935aabe3470082d0ecbb92596b60e65203e326caab91e46c3deb2609840ca9b9
ReviewPulse-v3.0.0-all-models.zip 301,254,100 0c773f444de2c1459d488ae4ab2c534c3025cbd5b445b530812421705ea7c17d

These digests are published here because every checklist and release document inside the repository
travels inside the archives, and no file can carry a checksum of the container holding it. Each
archive's PACKAGE_MANIFEST.json records the source commit and the size and digest of every entry.

The two archives differ only in the v3 DistilBERT directory, roughly 256 MB. Selecting that model
in the lightweight archive reports it unavailable and returns no prediction; a missing artifact is
always reported and never silently substituted.

Neither archive needs the SemEval corpus, an accelerator or a network connection. The trained
artifacts are shipped and inference runs on CPU.

Running it

unzip ReviewPulse-v3.0.0-all-models.zip && cd ReviewPulse-v3.0.0
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt -c constraints-a3.txt
python -m pytest -q
streamlit run app.py

Start at docs/dle602-a3/SUBMISSION_README.md.

Test outcomes depend on the environment, and every skip is an intentional absence of licensed data
or Git metadata: 363 passed / 3 skipped on the development machine, 357 / 9 in a clean clone, and
355 / 11 in the extracted lightweight archive.

Data

The SemEval-2014 Restaurants XML is licensed and is not redistributed. No archive contains it or
any row-level export derived from it. Acquisition instructions and checksums are in
docs/dle602-a3/semeval-restaurants.md.

Validation

Independent Streamlit QA by Juan Martinez across 12 deployed cases (#120, #121). Independent
reproduction by Victor Dorantes (#123): stored metrics recomputed from all six confusion matrices,
the four canonical models retrained and evaluated on CUDA, and the shipped artifacts verified
without retraining.

Known limitations. Restaurants only; aspects are supplied by the user and never extracted
automatically; results come from a single frozen seed on a small benchmark; timing is observational
because models were not all evaluated on identical hardware; attention and attribution do not
establish a faithful causal explanation.