skip to content
all projects
Marriott International · ML Engineer · 2022–2024

GPT-4 Hospitality Platform

A RAG-grounded GenAI platform across 30+ UK hotels that analyses 200K+ guest reviews a year — surfacing themes and drafting personalised, on-brand responses at scale.

status delivered
domain GenAI · RAG · NLP
scale 30+ hotels · 200K+ reviews/yr
stack Python · GPT-4 · LangChain · Pinecone · FastAPI · Azure OpenAI
OVERVIEW

What the platform does

Guest reviews scattered across booking platforms are ingested, embedded, and made queryable. For each review, the system retrieves relevant context (property details, prior responses, policy), grounds a GPT-4 call on it, and drafts a personalised response — while a parallel path extracts sentiment and themes into a live manager dashboard.

ENGINEERING GOAL
Replace hours-per-day of manual review triage and quarterly static PDF reporting with grounded, personalised drafts and a live daily dashboard — without generic or off-brand AI responses.
PROBLEM

Why naive GPT-4 wasn't enough

Ungrounded generation produces plausible but generic responses that miss property specifics and risk off-brand or inaccurate replies. The platform needed retrieval-grounded generation so every draft is anchored in real context, plus structured theme extraction over 200K+ reviews annually.

ARCHITECTURE

System architecture

A retrieval-augmented pipeline: reviews are embedded into a vector index, relevant context is retrieved per review, and GPT-4 generates grounded output. A separate NLP path handles sentiment, NER, and topic modelling for the dashboard.

Reviews Ingest 200K+/yr sources Embed vector index RAG Retrieval top-k context GPT-4 grounded reasoning Response Draft personalised Theme Extraction NER + topics Hotel Dashboard daily live view
Figure 1 · Marriott GenAI pipeline — RAG-grounded response generation with a parallel theme-extraction path.
RAG

Retrieval & grounding

Grounding is the reliability control: the model responds from retrieved context, not free memory, keeping drafts accurate and on-brand.

grounded response draft (representative) representative pattern
def draft_response(review: Review) -> str:
    ctx = retriever.similarity_search(review.text, k=5)      # property + prior context
    prompt = build_prompt(
        review=review,
        context=ctx,                                          # grounding
        brand_voice=BRAND_GUIDE,                              # on-brand constraint
    )
    return llm.generate(prompt, response_format=ResponseDraft) # structured output
DESIGN DECISIONS

Architecture decision records

ADR-01

RAG over fine-tuning

accepted

Decision: ground GPT-4 on retrieved context rather than fine-tuning a bespoke model.

Consequence: property context stays fresh without retraining; responses are traceable to source context; lower cost and faster iteration.

ADR-02

Separate extraction path from generation

accepted

Decision: theme/sentiment extraction runs independently of response drafting.

Consequence: the dashboard updates even when drafting is paused; each path scales and fails independently.

OUTCOMES

Outcomes

HOTELS
30+
REVIEWS
200K+
CSAT LIFT
+0.4
TIME SAVED
60%
ON THE FIGURES
Metrics reflect the delivered platform; code shown is a representative pattern, not proprietary implementation.