Show HN: Knowledge graph of restaurants and chefs, built using LLMs
33 comments
·March 3, 2025tantalor
The embedding is kind of weird. Like, there's no reason a "degree: 1" node should be so far away from its sibling.
Example: https://imgur.com/a/7Cktyzp
This makes the graph look more random/noisy/disorganized than it actually is.
peppery
Since you did the hard work of parsing rich metadata already, it would be even cooler if your network visualization oriented nodes by some of this information. Here the 'hiveplot' idea (https://hiveplot.com/ ) is often even more useful than e.g. springloaded or UMAP based layouts; clustering into semantically-meaningful categories into axes (say, city or arrondissement? years open? cuisine? an explicit phylogeny from oldest culinary grandparents to youngest?) then choosing a coordinate to localize nodes on the axes (total node degree? prix? "les plus" tags?...) automatically compels us think about salient features of the data.
theophilec
I agree the spatialization could be better. I used one of the algorithms in Gephi-lite directly. Do you have a favorite spatialization algorithm to recommend?
visarga
Yeah, they should have used UMAP or tSNE to cluster the data a bit
bevan
This was inspiring, what a cool idea. Just curious—-for 4o mini isn’t there a json mode that reliably produces structured output? Was that what you were referring to / ended up using?
arnath
This is a super cool idea! I've sort of mused about an idea for general web search that's very similar to this concept, where you start with a set of trusted entities and then branch out from there, but choosing how you establish trust is really important. But this is a really clever application, well done!
moandcompany
Very cool work.
It's worth mentionion that the Graph browser using "Retina" is a project from Ouestware (https://www.ouestware.com/en/) which is also contributor to the GraphCommons and GephiLite projects.
dylan604
I was clicking around with the embed, and eventually hit the "home/house" icon. That takes me to a Retnia credit/loading screen with no way to back out of it that I could see. Was forced to hard refresh the page. If there is a close button, it could be made more obvious
theophilec
Thank you for the kind words!
Yes, Retina and Gephi are great. In fact I noticed a bug which they fixed immediatly while making the project.
nluken
Given the structured nature of the data, how does this compare to running a specialized classification model that looks for specific words in a review and uses those to assign Chefs to Restaurants? With some fine tuning, you might get more consistent results than feeding the reviews into a generative model.
theophilec
The data is initially not at all structured, and the critics talk about a chef's CV in passing. For instance, take this example:
> At Grenat, Antoine Joannier and Neil Mahatsry are bathed in an ardent red glow, much like the pomegranate-toned walls of their space. After working together at La Brasserie Communale, where they first met, the duo is now firing on all cylinders in the heart of Marseille, where Antoine tends to guests seated around blonde wood tables, delivering dishes ignited by Neil behind the bar. From oysters to prime cuts of red meat, […]
I tried using NER models and the results were not great. Furthermore, these models do not extract relationships between entities (other models exist for that though). Haven't tried fine-tuning at all!
There is also a lot of variation in the ways of presenting a chef's prior restaurants, which makes this a good use-case for LLMs.
nluken
Nice breakdown. Cheers!
holtwork
Great project. I propose an improvement over this conventional kind of object-style graph. Instead, every single item should be a node or an edge. The objects are needless complexities that obscure pure graph relations. Like this: https://memelang.net/03/
nswanberg
Nice! How'd the local models do vs gpt4o-mini? Did you spend much time playing with datasette?
theophilec
Local models hallucinated a lot more that gpt4o-mini, so I stayed with OpenAI. On top of that, I paid around 14€ for inference on ~200 examples on OVH and inference was much slower. I am planning on getting everything running on Mistral or Llama though.
I used sqlite everywhere so datasette was good for visualizing scraped and extracted data. Simon released structured generation for llm a few days after I did the project though, so I haven't tried yet.
jonnycoder
This looks great! I was just looking for a good web knowledge graph visualizer.
nickthegreek
Graph embed does not appear to work in FF 135. Loaded in Chrome though.
Edit: Seems to be a me issue.
theophilec
It works on FF135.0.1 (aarch64) for me. Ad blocker?
nickthegreek
Tried without adblocker and turned off pihole. I did get it work on Zen Browser (FF engine). So my FF might have gotten borked. Console is giving me:
Failed to create WebGL context: WebGL creation failed: * tryANGLE (FEATURE_FAILURE_EGL_NO_CONFIG) * Exhausted GL driver options. (FEATURE_FAILURE_WEBGL_EXHAUSTED_DRIVERS)
Glad its workin for others!
speerer
Worked for me (FF 135.0.1 on Ubuntu)
repsiace
Looks interesting, have you tried utilizing a multimodal model?
martinky24
What's the use case for maintaining a list of restaurants that use LLMs?
moandcompany
The phrasing, possibly due to French->English translation, may cause a misleading reading.
It appears the author/poster is using LLMs (OpenAI and Claude, specifically) to extract entity and relationship data to create a knowledge graph of French Restaurants and Chefs.
https://github.com/theophilec/foudinge-scrub/blob/0a2701756f...
theophilec
Thanks for the clarification. I updated the title!
neuroelectron
Yeah i read it that way to. :D
null
schnable
[flagged]
Rooster61
Me too. Title might need a bit of adjusting. Neat concept though!
I do wish it expanded out past French cuisine. It has its place, but I am very much tired of French cooking being held above other locales/styles
theophilec
The graph contains restaurants in France and Belgium but all cuisines are represented.
It's completely possible to expand the graph to other parts of the world. What source of reviews/info do you have in mind?
Rooster61
My apologies, only gave it a cursory glance. Should have dug a bit deeper
null
Hi HN!
My latest side project is knowledge graph that maps the French culinary network using data extracted from restaurant reviews from LeFooding.com. The project uses LLMs to extract structured information from unstructured text.
Some technical aspects you may be interested in:
- Used structured generation to reliably parse unstructured text into a consistent schema
- Tested multiple models (Mistral-7B-v0.3, Llama3.2-3B, gpt4o-mini) for information extraction
- Created an interactive visualization using gephi-lite and Retina (WebGL)
- Built (with Claude) a simple Flask web app to clean and deduplicate the data
- Total cost for inferencing 2000 reviews with gpt4o-mini: less than 1€!
You can explore the visualization here: [Interactive Culinary Network](https://ouestware.gitlab.io/retina/1.0.0-beta.4/#/graph/?url...)
The code for the project is available on GitHub: - Main project: https://github.com/theophilec/foudinge - Data cleaning tool: https://github.com/theophilec/foudinge-scrub
Happy to get feedback!