Commit 74c998bc authored by pracht's avatar pracht
Browse files

Add proposal with metadata for KB from OSM

parent 786af27f
Loading
Loading
Loading
Loading
+487 −0
Original line number Diff line number Diff line
# HeidelWOZ

# Proposal

Wir verlagern den Projekt-Fokus auf "Retrieval-Assisted-Generation of synthetic TOD data with LLMs". Da man für RAG eine kohärente Knowledge-Base braucht, wird die Konstruktion einer solchen, ein wichtiger Baustein für unser Projekt sein.

# Knowledge-Base

Hier ist ein Überblick über die von OpenStreetMap annotierten Daten, die wir als Basis für unsere Knowledge-Base nehmen. Für das Schema der Datenbank orientieren wir uns am [MultiWOZ Datensatz](https://github.com/budzianowski/multiwoz/tree/master/data/MultiWOZ_2.2). Welche Felder wir von den OSM-Daten übernehmen wird noch entschieden. Generell kann man Attribute die nur vereinzelt vorkommen aussortieren. Bei einigen wird auch "unknown" ausreichen, wenn nicht alle Objekte dieses Attribut besitzen.

Wir werden das Schema wo es geht mit Enums beschreiben und wenn Nötig, z.B. bei Adressen, freie Werte erlauben.

Beispiel:

```json
{
internet: "yes" | "no" | "unknown",
smoking: "yes" | "no" | "unknown",
price: "cheap" | "moderate" | "expensive",
stars: 0 | 1 | 2 | 3 | 4 | 5 | "unknown",
addr:city: "Heidelberg"
addr:street: str,
description: str,
}
```

## Offene Fragen

- Wollen wir Transport (Zug, Taxi) und Service (Polizei, Krankenhaus, Touristen-Information) Daten aufnehmen?
  - Ich bin gegen Transport Daten, weil diese das Schema deutlich komplexer machen und man Distanz-Metriken über die Daten implementieren müsste, um es richtig zu machen.
  - Service Daten kann man aufnehmen, sind aber nicht besonders relevant und kamen auch in den MultiWOZ Daten kaum vor
- Wie teilt man die Daten am effektivsten für die händische Überarbeitung auf? Es wäre praktisch, wenn wir die Web-Oberfläche von OSM nutzen können. Dafür müsste man die Daten in OSM importieren, das geht prinzipiell, aber Daten-Exporte zusammenfügen, aufteilen, und dann importieren, etc.. bedeutet auch unnötiger Mehraufwand.
- Wenn wir die Daten mit fehlenden Adressen, Preisranges und Beschreibungen ergänzt haben. Wollen wir diese Daten dann bei OSM hochladen?
  - Würde eigentlich zum guten Benehmen gehören, aber bedeutet Mehraufwand, wenn auch relativ gering.
  - Je nachdem wo wir die Beschreibungen, etc. herholen, kann es zu rechtlichen Problemen kommen. Eventuell müsste man unserem LM sagen, dass es die umformulieren soll.
- Einige Hotels haben ein Restaurant, und sind damit in beiden Datensätzen vertreten. Ist uns das egal?

## Hotels

Der Datensatz enthält 93 Hotels.

#### Overpass Turbo Query

```
[out:json][timeout:25];
{{geocodeArea:Heidelberg}}->.searchArea;
nwr["tourism"="hotel"](area.searchArea);
out geom;
```

#### Schema

```json
{
  "addr:city": 67,
  "addr:country": 47,
  "addr:housenumber": 72,
  "addr:place": 2,
  "addr:postcode": 67,
  "addr:street": 71,
  "addr:suburb": 2,
  "air_conditioning": 7,
  "alt_name": 1,
  "amenity": 3,
  "bar": 3,
  "brand:website": 1,
  "brand:wikidata": 2,
  "brand:wikipedia": 1,
  "brand": 6,
  "building:energy_standard": 1,
  "building:levels": 12,
  "building:obm": 1,
  "building:roof": 2,
  "building": 31,
  "business": 22,
  "check_date:internet_access": 3,
  "check_date": 1,
  "contact:email": 3,
  "contact:facebook": 1,
  "contact:fax": 2,
  "contact:instagram": 1,
  "contact:phone": 5,
  "contact:website": 4,
  "diet:vegan": 1,
  "diet:vegetarian": 1,
  "elevator": 1,
  "email": 18,
  "fax": 7,
  "height": 1,
  "historic": 1,
  "internet_access:fee": 10,
  "internet_access": 67,
  "lastcheck": 3,
  "leisure": 2,
  "microbrewery": 1,
  "name:en": 1,
  "name:zh": 1,
  "name": 92,
  "old_name": 1,
  "opening_hours": 1,
  "operator": 9,
  "outdoor_seating": 2,
  "parking": 44,
  "phone": 67,
  "reservation": 2,
  "restaurant": 44,
  "roof:height": 1,
  "roof:levels": 5,
  "roof:shape": 10,
  "rooms": 47,
  "smoking": 15,
  "source:addr": 1,
  "source:geometry": 6,
  "source:housenumber": 1,
  "source:outline": 1,
  "source": 5,
  "stars": 55,
  "swimming_pool": 1,
  "takeaway": 1,
  "toilets:wheelchair": 12,
  "tourism": 93,
  "website": 78,
  "wheelchair:description": 4,
  "wheelchair": 73,
  "wikidata": 13,
  "wikipedia": 1
}
```

## Restaurants

Der Datensatz enthält 260 Restaurants.

#### Overpass Turbo Query

```
[out:json][timeout:25];
{{geocodeArea:Heidelberg}}->.searchArea;
nwr["amenity"="restaurant"](area.searchArea);
out geom;
```

#### Schema

```json
{
  "addr:city": 140,
  "addr:country": 63,
  "addr:housenumber": 163,
  "addr:place": 1,
  "addr:postcode": 146,
  "addr:street": 163,
  "addr:suburb": 1,
  "air_conditioning": 4,
  "alt_name": 3,
  "amenity": 260,
  "bar": 6,
  "beer_garden": 2,
  "brand:wikidata": 4,
  "brand:wikipedia": 3,
  "brand": 4,
  "brewery": 1,
  "building:apartments": 1,
  "building:basement_opening": 2,
  "building:first_level_height": 2,
  "building:levels": 2,
  "building:roof": 1,
  "building:use": 1,
  "building:waterproof_bulk": 2,
  "building": 19,
  "business": 1,
  "capacity": 9,
  "check_date:opening_hours": 12,
  "check_date": 27,
  "closed:amenity": 1,
  "closed:name": 1,
  "construction:amenity": 1,
  "contact:email": 4,
  "contact:facebook": 7,
  "contact:fax": 2,
  "contact:phone": 8,
  "contact:website": 7,
  "cuisine": 167,
  "delivery": 7,
  "description": 9,
  "diet:gluten_free": 2,
  "diet:vegan": 30,
  "diet:vegetarian": 49,
  "dish": 1,
  "disused:amenity": 1,
  "drive_in": 1,
  "email": 34,
  "fax": 6,
  "fixme": 1,
  "historic": 2,
  "indoor_seating": 72,
  "int_name": 1,
  "internet_access:fee": 1,
  "internet_access:ssid": 1,
  "internet_access": 32,
  "last_check": 1,
  "lastcheck": 11,
  "layer": 1,
  "level": 21,
  "menu_languages": 20,
  "menu": 20,
  "microbrewery": 2,
  "min_age": 1,
  "name:en": 1,
  "name:etymology:wikidata": 1,
  "name:zh": 1,
  "name": 260,
  "note:toilets": 1,
  "note": 1,
  "number_of_menulanguages": 21,
  "old_name": 16,
  "old_website": 1,
  "opening_hours:kitchen": 2,
  "opening_hours:lastcheck": 1,
  "opening_hours:signed": 7,
  "opening_hours:source": 1,
  "opening_hours": 177,
  "operator": 19,
  "organic": 2,
  "outdoor_seating": 120,
  "outdoor": 23,
  "owner": 1,
  "parking": 2,
  "payment:american_express": 1,
  "payment:cash": 4,
  "payment:coins": 1,
  "payment:credit_cards": 5,
  "payment:debit_cards": 4,
  "payment:girocard": 1,
  "payment:maestro": 1,
  "payment:paypal": 1,
  "phone": 118,
  "ref:vatin": 1,
  "reservation": 3,
  "restaurant": 1,
  "rooms": 1,
  "smoking:outside": 8,
  "smoking": 66,
  "source:geometry": 5,
  "source": 6,
  "stars": 1,
  "start_date": 2,
  "surveillance": 1,
  "survey:date": 2,
  "takeaway:covid19": 1,
  "takeaway": 22,
  "toilets:wheelchair": 62,
  "tourism": 3,
  "website:menu": 7,
  "website": 166,
  "wheelchair:description": 14,
  "wheelchair": 190,
  "wikidata": 2,
  "wikipedia": 2
}
```

## Attraktionen

### Touristen Attraktionen

Es gibt 61 Einträge zu Touristen-Attraktionen in Heidelberg. Davon werden wir viele Aussortieren, da viele Datenpunkte redundant oder unvollständig sind.
Z.B. sind alle Tiergehege im Zoo als einzelne Datenpunkte aufgeführt. Wir werden diese zu "Zoo" zusammenführen. Desweiteren kann man diese mit 26 Museen und 8 Theatern erweitern.

#### Overpass Turbo Query

```
[out:json][timeout:25];
{{geocodeArea:Heidelberg}}->.searchArea;
nwr["tourism"="attraction"](area.searchArea);
out geom;
```

#### Schema

```json
{
  "access": 13,
  "addr:city": 2,
  "addr:country": 2,
  "addr:housenumber": 4,
  "addr:postcode": 3,
  "addr:street": 4,
  "alt_name": 2,
  "amenity": 2,
  "archaeological_site": 3,
  "architect:wikidata": 1,
  "architect": 2,
  "area": 20,
  "attraction": 24,
  "barrier": 15,
  "bicycle": 1,
  "bridge:structure": 1,
  "building:colour": 1,
  "building:levels:underground": 1,
  "building:levels": 2,
  "building:material": 1,
  "building:obm": 1,
  "building:part": 1,
  "building": 10,
  "castle_type": 1,
  "description:de": 1,
  "description": 1,
  "ele": 2,
  "fee": 7,
  "fortification_type": 3,
  "garden:type": 1,
  "height": 1,
  "heritage": 1,
  "historic": 16,
  "image": 1,
  "landuse": 1,
  "layer": 1,
  "leisure": 1,
  "level": 1,
  "long_name": 1,
  "love_locks": 1,
  "man_made": 2,
  "name:de": 1,
  "name:en": 10,
  "name:es": 10,
  "name:etymology:wikidata": 3,
  "name:fr": 1,
  "name:it": 1,
  "name:pl": 1,
  "name:pt": 10,
  "name:ro": 9,
  "name:zh": 1,
  "name": 55,
  "natural": 8,
  "note": 3,
  "opening_hours": 4,
  "phone": 2,
  "religion": 1,
  "roof:colour": 1,
  "roof:levels": 1,
  "roof:material": 1,
  "ruins": 2,
  "shelter_type": 1,
  "source:3d": 1,
  "source:geometry": 8,
  "source:position": 1,
  "source": 2,
  "species:wikidata": 14,
  "species:wikipedia": 14,
  "start_date": 4,
  "toilets:wheelchair": 2,
  "tourism": 61,
  "tower:type": 1,
  "url:official": 2,
  "website": 3,
  "wheelchair:description": 2,
  "wheelchair": 24,
  "wikidata": 13,
  "wikimedia_commons": 4,
  "wikipedia": 12
}
```

### Museen

Datensatz mit 26 Museen.

#### Overpass Turbo Query

```
[out:json][timeout:25];
{{geocodeArea:Heidelberg}}->.searchArea;
nwr["tourism"="museum"](area.searchArea);
out geom;
```

#### Schema

```json
{
  "addr:city": 17,
  "addr:country": 5,
  "addr:housenumber": 21,
  "addr:postcode": 17,
  "addr:street": 22,
  "addr:suburb": 2,
  "air_conditioning": 1,
  "alt_name": 1,
  "amenity": 1,
  "building": 7,
  "check_date:opening_hours": 3,
  "check_date": 9,
  "contact:email": 1,
  "contact:fax": 1,
  "contact:phone": 3,
  "contact:website": 5,
  "description": 5,
  "email": 2,
  "fax": 1,
  "fee": 18,
  "FIXME": 1,
  "height": 1,
  "lastcheck": 2,
  "layer": 2,
  "level": 4,
  "location": 1,
  "museum": 3,
  "name:etymology:wikidata": 1,
  "name:zh": 3,
  "name": 25,
  "opening_hours:covid19": 1,
  "opening_hours:signed": 1,
  "opening_hours": 17,
  "operator:type": 1,
  "operator": 9,
  "phone": 8,
  "ref": 1,
  "roof:colour": 1,
  "roof:shape": 1,
  "source:geometry": 3,
  "source": 1,
  "start_date": 1,
  "subject:wikidata": 1,
  "subject": 1,
  "toilets:wheelchair": 5,
  "tourism": 26,
  "type": 1,
  "url:official": 1,
  "website": 14,
  "wheelchair:description": 2,
  "wheelchair": 17,
  "wikidata": 8,
  "wikipedia": 6
}
```

### Theater

Datensatz mit 8 Theatern.

#### Overpass Turbo Query

```
[out:json][timeout:25];
{{geocodeArea:Heidelberg}}->.searchArea;
nwr["amenity"="theatre"](area.searchArea);
out geom;
```

#### Schema

```json
{
  "addr:city": 6,
  "addr:country": 1,
  "addr:housenumber": 6,
  "addr:postcode": 6,
  "addr:street": 6,
  "alt_name": 1,
  "amenity": 8,
  "building:levels:underground": 1,
  "building:levels": 1,
  "building": 2,
  "description": 3,
  "email": 2,
  "fee": 1,
  "historic:era": 1,
  "historic:period": 1,
  "historic": 1,
  "long_name": 1,
  "name:etymology:wikidata": 1,
  "name": 8,
  "note": 1,
  "operator": 4,
  "phone": 3,
  "roof:levels": 1,
  "theatre:type": 1,
  "toilets:wheelchair": 1,
  "url:official": 1,
  "website": 6,
  "wheelchair": 7,
  "wikidata": 2,
  "wikimedia_commons": 1,
  "wikipedia": 2
}
```