{"componentChunkName":"component---src-templates-thesis-page-js","path":"/theses/LEMMINGGraphExpressions/","result":{"data":{"mdx":{"frontmatter":{"title":"Towards Meaningful Characteristic Graph Expressions","supervisor":"dice:AnaAlexandraSilva","contact":"dice:AnaAlexandraSilva","type":"Master"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"date\": \"2026-09-03\",\n  \"title\": \"Towards Meaningful Characteristic Graph Expressions\",\n  \"type\": \"Master\",\n  \"supervisor\": \"dice:AnaAlexandraSilva\",\n  \"contact\": \"dice:AnaAlexandraSilva\"\n};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Image = makeShortcode(\"Image\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Synthetic knowledge graphs (KGs) that mimic the structure of real-world KGs are essential for benchmarking the scalability of KG-based approaches: they allow us to generate graphs of arbitrary size while preserving the structural characteristics of a given set of input graphs. LEMMING \", \"[1]\", \" is an example-based KG generator that follows this idea. Given a set of input graphs, LEMMING analyzes them, learns graph-specific invariants \\u2014 arithmetic expressions over graph features (e.g., number of vertices, number of edges, in-/out-degrees) whose values remain nearly constant across the input graphs \\u2014 and uses these invariants to guide the generation and refinement of a mimic graph.\\nThe quality of the mimic graph therefore depends directly on the quality and diversity of the invariant expressions LEMMING is able to discover. In its current form, LEMMING builds candidate expressions iteratively: an existing expression is extended by concatenating a new feature f via an arithmetic operator, i.e., as a binary tree. The image below defines an expression as (f1+f3) - f2.\"), mdx(Image, {\n    filename: \"graph_expressions.png\",\n    mdxType: \"Image\"\n  }), mdx(\"p\", null, \"This construction has a major shortcoming: the fitness function used to select promising expressions prefers expressions that share the same parent expressions. As a consequence, the search converges towards structurally similar expressions and the resulting set of invariants lacks diversity.\\nThe goal of this thesis is to design and implement an algorithm to generate a more diverse and more expressive set of arithmetic expressions. A promising direction is to represent expressions as binary trees, and assign penalties to expressions that are structurally too similar to already selected ones (e.g., based on tree edit distance or shared subtrees), thereby counteracting the bias of the fitness function.\"), mdx(\"h3\", {\n    \"id\": \"prerequisites-for-this-thesis\"\n  }, \"Prerequisites for this thesis\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Java programming skills \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Prior knowledge of RDF and knowledge graphs is helpful but not necessary \")), mdx(\"h3\", {\n    \"id\": \"references\"\n  }, \"References\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"LEMMING \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://papers.dice-research.org/2021/ICSC2021_Lemming/presentation/lemming-public.pdf\"\n  }, \"publication\"), \" and \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/dice-group/Lemming\"\n  }, \"code\"))));\n}\n;\nMDXContent.isMDXComponent = true;"}},"pageContext":{}},"staticQueryHashes":["2497506207","63159454","932199770"]}