[논문리뷰] FoodKG: A Semantics-Driven Knowledge Graph for Food Recommendation

    Abstract

      건강하게 먹길 원하는 사람들이 일상에서 마주하는 음식과 레시피 그리고 그것들의 출처를 포함하는 통합된 음식 제안 서비스가 필요한 소비자들을 위한 통합된 지식 그래프 소프트웨어 툴킷 개발. (1) 지식 그래프 생성 절차 (정보 출처를 지키면서 음식과 관련한 다양한 사일로를 연결) (2) 지식그래프 유지 계획 (3) 지식 그래프가 여러 응용에서 사용될 수 있는지를 설명함. 이 응용들은 알러지와 같은 제약을 고려하고, 자연어 질문을 수행할 수 있는 인지적인 agent가 지식 그래프에 대해 답변하면서 사용자가 즉시 사용할 수 있는 재료들을 기반으로 한 레시피를 결정할 수 있도록 하는 SPARQL-based 서비스를 포함함.

     

    1. Introduction

      심혈관 질병, 고혈압, type 2 당뇨, 암과 같은 만성 질병은 좋지 않은 식습관과 연결되어 있음. 대부분의 절차는 지난 몇 십년간 영양소에 기초한 추천이었지만, 추천의 개인화가 대개 개인에게 남겨진다는 점에서 일상 생활의 식습관으로 바뀌기 힘듦. 칼로리, 지방, 소금, 당 섭취를 지켜보는 것 이상으로 그 가이드라인은 개인이 영양소가 충분한 다양한 음식을 먹도록 조언해줌. 따라서, 고려해야되는 영양소 파라미터의 수가 엄청 많을 수 있음.

      이 문제점에 대한 솔루션은 음식을 추천하는 것에 대한 지능적이고 자동적인 방식을 제공하는 것이다. Trattener et al.는 음식 추천 시스템에서 최신의 종합적인 리뷰를 제공함. 그들은 선호 음식을 추천할 뿐만 아니라 그 음식들이 건강한 음식인지 확인하는 최근에 성장하고 있는 포커스를 강조함. 저자들은 음식 추천의 중요성에도 불구하고 다른 도메인에 비하여 상대적으로 연구가 덜 되었다고 언급한다. 그들이 리뷰한 여러 논문들 사이에서, 오직 [11]만 시맨틱스의 사용을 포함했고, 음식 지식 그래프를 형성하는 방법론에 대한 필요를 동기부여했다.

    * [11]: El-Dousky, ...: Food recommendation using ontology and heuristics. In: International conference on advanced machine learning technologies and applications (2012)

      지식그래프는 (1) 우리가 일상 생활에서 마주하는 정보를 조직하고 사람과 기계에 널리 사용가능하도록 하는 중요한 역할을 한다. 지식 그래프는 관계를 예측하거나, 유사한 아이템을 찾거나, 질문을 대답하는 일을 포함해 다양한 일에서 사용되어 왔다. 머신러닝 알고리즘은 효과적으로 질문에 대답할 수 있지만, 그것들은 설명하기 어려운 대답을 자동적으로 만드는데 악명이 높다. 지식 그래프는 대답이 어떻게 도출되었는지 자동적인 설명을 만드는 것이 가능하다. 정보처리상호운용은 그것들이 이해와 재사용을 가능하게 하기 때문에 지식 그래프의 다른 측면이다. 하지만, 이 영역에서의 표준과 가장 좋은 관행에 대해 이해하기 어려움은 FAIR(Findable, Accessible, Interoperable, Reusable) 원리에 의해 지식그래프를 발견하는 것을 최대화하고 재사용을 원하는 지식 엔지니어에 대한 상당한 문제를 제기한다.

      이 논문에서, 우리는 음식에 대해 (1) 대중적으로 이용 가능한 데이터를 유지하고 추출하고 (2) 사람과 기계에 사용될 수 있는 지식 그래프를 구성하는 우리의 방법론을 논의해, 건강한 라이프 스타일을 촉진할 수 있는 유용한 음식 추천을 제공한다. 우리가 만든 것은 백만 개의 레시피와, 6700만 개의 트리플 재료를 커버한 영양소를 확장한 첫 extensive FoodKG 리소스이다. 우리 리소스의 주요 기여와 새로움은 그것의 영역과 포괄성이다. 다양한 데이터 베이스를 통합한 것을 고려하는 것 뿐만 아니라, 건강 개념과의 연결과 응용에 대한 질문-대답 서비스를 제공한다.

    1.1 Use Case

      음식 섭취와 일반적인 영양소 추천 사이의 정렬을 향상시키기 위한 정보를 개인에게 제공함으로써 식단 목표를 개인화함. 예시로, American Diabetes Association(ADA)의 추천을 고려해보자. 더 많은 섬유질과 더 낮은 혈당부하지수를 가지는 음식에 대해 강조하면서 곡물, 야채, 과일, 콩과 식물, 유제품으로부터의 탄수화물 섭취는 다른 소스, 특히 당을 포함한 소스보다 권장되어야 한다. 불운하게도, 이것을 건강하지만 맛있는 음식 선택으로 바꾸는 것은 많은 이들에게 벅찬 일이다. 부분적으로 여러 소스에 걸쳐 흩어져 있는 정보 때문이다. 따라서, 우리의 목표는 음식 지식 그래프를 구성하는데 사용될 수 있는 튼튼한 시스템을 제공함으로써 사람들이 그들의 식사에 얼마나 다른 수정이 가이드라인에 대한 정렬에 영향을 미칠 수 있는 것을 탐색하는 것을 돕는 것이다.

      "US Department of Agriculture(USDA)의 영양소 데이터에 따른 초콜릿 케이크 한 조각의 칼로리와 재료는 무엇인가?"에 대한 대답은 버터, 계란, 설탕, 밀가루, 우유, 코코아 파우더, 424 칼로리일 수 있다. 하지만, ADA 가이드라인을 따른 당뇨 환자를 위한 레시피에 대한 질문은 "이 케이크에서 섬유질 부분을 어떻게 높일 수 있을까?"가 덧붙여질수 있다. 이와 같은 질문에 대답하는 것은 DBpedia와 같은 소스를 하나만 사용하면 불가능하다. 소스로부터의 정보가 완전하지 않기 때문이다. FoodKG는 USDA의 영양소 정보를 덧붙여 온라인 레시피 사이트의 추가적인 정보를 포함하고 있다. 이것은 DBpedia에서 사용 가능한 것보다 더 관련성 있는 정보가 많다. 그러므로, 이 질문에 대답하기 위해 우리는 통밀가루가 하얀 밀가루를 대신해 사용될 수 있고, 우유 대신 두유 또는 아몬드유가 대신 사용될 수 있고 버터 대신 마가린이 사용될 수 있다고 제안하는 우리의 지식 그래프 구조에 대한 시맨틱 구조를 사용할 수 있다.

     

    3. Data Acquisition

      이 논문의 목표는 데이터 사일로들 사이의 갭을 연결하기 위함임. 하지만 많은 소스들로부터 데이터를 모으고 통합하는 것은 일관성, 정확성, 완결성 측면에서 여러 문제를 이끌 수 있다.

    • Invalid data: 문자 데이터에서 RDF에서 허락하지 않은 문자를 포함한 경우 (e.g. escaping)
    • Incomplete data: 재료의 양이 부족한 recipe / 표준화되지 않은 개량 / 완전하지 않은 영양소 데이터
    • Ambiguous entities: 재료에 대한 표기 오류 (local name, 동의어, 다른 언어로 작성 등)
    • Extraneous information: 복잡한 단위로 표기된 재료, 불필요한 정보

         FoodKG는 세 가지 데이터 소스를 사용하고 있음.

    • 레시피: Recipe1M dataset
    • 재료에 대한 영양소 정보: USDA's National Nutrient Database for Standard Reference
    • 재료를 조직하는 food ontology: FoodOn ontology에서 관련이 있는 부분을 통합함. FoodOn은 음식에 대한 넓은 분류체계를 제공하고, source organism, 원산지 등에 의해 조직화함. 이것은 연관된 개념들 사이에 많은 필요한 연결을 제공함. 예시로, gala apple은 red apple의 형제이지만, apple pie로부터는 제거되어 있다. 영양적인 참조로 설계된 것이 아니었다. FoodOn은 아이템에 대한 영양 정보에 관한 세부 정보가 부족하다. 또한 실세계 레시피와 직접적으로 연관되지 않는다.  
      • 지식 그래프: node간 edge와 node 간의 관계가 매핑된 것
      • 온톨로지: entity간의 유형, 속성 및 상호관계를 설명. 특정 영역의 지식을 정의하는 공리 집합
        • 온톨로지는 지식 그래프보다 클래스/개인 간의 매우 복잡한 관계를 캡처 할 수 있다.
      • FoondOn은 매우 큰 분류체계이기 때문에, 우리는 작은 부분 집합만 채택하여 사용했다. Ontofox라는 tool을 사용하면 ontology로부터 용어와 axiom을 추출할 수 있다. 이 tool을 사용해서 'food product by organism node'를 가져왔고, 위계형태 안의 다양한 음식 아이템을 캡쳐하였다.

     

    4. Knowledge Graph Construction

      지식 그래프는 attributes와  entities, 리소스 사이의 관계, 리소스에 대한 metadata를 표현하는 annotation 등의 리소스를 포함하고 있다. 우리의 완전한 food knowledge graph는 여러 주요 구성요소를 포함한다.

    • 1) 레시피와 재료
    • 2) 개별 음식 아이템에 대한 영양 정보
    • 3) 음식에 대한 추가적인 지식
    • 4) 위의 개념들 사이의 링크

    레시피

    • 각각의 레시피는 음식을 만드는데 필요한 재료들을 설명한다.
    • 각각의 레시피는 고유한 identifier를 가지고 있고 레시피의 이름, 주어진 태그, 재료 세트에 동반된다
    • 각각의 재료는 그것의 이름, unit, 양을 가리킨다.
    • 예시: 두 개의 재료를 보여주도록 만들어진 레시피. 재료들은 USDA 레코드에 연결되어 있음

    • 각각의 재료 레코드는 보통 (quantity, unit, name) 형태로 나타난다. 
    • 레코드를 효과적으로 파싱하기 위해서 우리는 다음의 스텝을 이용한다.
      • 1) 구문에 괄호를 씌워서 나눈다. (e.g. (freshly picked), (or chicken)) 이것들은 독자들에게 추가적인 정보로 제공되지만 레시피를 구성하는 요소로 반드시 포함되는 것은 아니다. 유사하게 첫 번째 comma 뒤의 text는 drop시키는데, 일반적으로 재료에 대한 추가적인 질을 나타내는 것이기 때문이다. 
      • 2) 숫자 정보(e.g. 1/2, 2.5)는 string의 시작에서 제거하고 quantity로 저장한다. 재료의 숫자 정보는 거의 모든 케이스에서 unit과 재료의 이름 전에 발견된다.
      • 3) unit 목록과 string의 첫 번째 단어를 비교한다. 만약 매치하면, 그 단어를 지우고 unit으로 저장한다.
      • 4) 남은 텍스트는 Natural Language Toolkit(NLTK)으로 token화한다.
        • 색을 묘사하지 않는 형용사는 삭제한다.
        • 동사와 부사 또한 삭제한다.
        • 접속사 뒤에 오는 텍스트도 삭제한다.
        • NLTK의 WordNetLemmatizer로 복수형을 삭제한다.
        • 남은 결과는 name으로 저장된다.
    • 재료 파싱 결과 예시

     

    영양소

    • USDA 데이터는 테이블 형태로 존재하고, 여러 영양 통계들(칼로리, 단백질, 탄수화물, 지방, 비타민, 미네랄 등)을 설명한다.
    • 영양소는 100g을 기존으로 제공되고 있다.
    • 두 개의 비질량 측정값(물, 에너지)과 각 측정값에서 발견된 그램 수가 제공된다.
    • Semantic Data Dictionary 접근을 사용했고, non-triple data 소스로부터 RDF 트리플을 만들었다.
      • 이것은 우리의 테이블 데이터를 우리의 지식 그래프로 통합될 수 있는 무언가로 바꾼다.
    • 예시

    • 이 데이터가 주어졌을 때, semantic 관계를 통해 결과로 나오는 knowledge graph의 모양을 정의할 수 있다.

    • Column: raw data의 column
    • Attribute/Entity: 이 음식이 어떤 rdf:type인지
    • Unit: DBpedia와 Units Ontology와 같이 용어들을 승인한 커뮤니티로부터의 영양소 측정 단위
    • Label: 텍스트 마이닝과 FoodKG를 사용하는 응용의 자동 완성 작업에 사용될 수 있는 아이템에 대한 설명
    • Attribute/Entity, Unit column의 annotation prefix에서 다른 ontologies로의 interlinking 존재
      • chebi: Chemical Entities of Biological Interest Ontology
      • dbr: DBpedia Resource Ontology
      • sio: Semanticscience Integrated Ontology
      • ...
    • annotation이 완전하면, semantic data dictionary 변환 스크트는 테이블 형태의 USDA의 데이터를 named graph에서 그룹지어진 triples인 quad로 변환하기 위해 동작된다. 

     

    5. Knowledge Graph Augmentation

     모든 데이터가 import되면, 데이터들이 고립된 섬 형태로 남게 된다. 따라서 지식 그래프 구성의 두 번째 단계는 linkage이다. 자동적으로 다양한 개념들을 같이 연결하기 위해 다양한 entity resolution techniques을 활용한다. 데이터세트를 실용적으로 확장하고 업데이트하기 위해서, 파생된 관계의 출처를 확립하는 링크 데이터 테크닉을 사용한다.

    Entity Resolution

      이름은 레시피, 영양소, 음식의 다양한 영역 사이에서 가장 명확한 공유된 특성이다. 이러한 이유로 대개 코사인 유사도와 같은 strings를 다루는 entity resolution techinque에 집중해왔다. 그리고 그것은 이름에 매칭될 때, 특히 normalization 후에 꽤 잘 작동되었다. 이름을 resolve하기 위해 pretrained 모델과 함께 word2vec과 FastText와 같은 word embedding도 사용했다. 하지만 결과는 좋지 않았다. 문장의 일반적인 의미만을 포착하는 임베딩의 산물일 가능성이 높았다.

    * Entity Resoultion: 단일 데이터 소스 또는 여러 데이터 소스에서 동일한 실제 엔티티를 참조하는 데이터 레코드를 식별하고 레코드를 서로 연결하는 기술

    Entity Selection

    •   performance와 accuracy를 최대화하는 목적에서 match되는 개념의 도메인을 제한하는 것이 유익하다는 것을 알아냄. 이 작업을 수행하는 정확한 방법은 비교할 데이터 세트에 따라 다름.
      • matching은 entity의 수에 따라 선형적으로 cost가 세짐
      • 매치되는 더 많은 거짓 entity는 더 많은 false positive를 만들어냄
    •   재료가 없는데 음식 종류와 유사한 이름을 가지고 있는 경우
      • Babyfood 카테고리: (Babyfood, juice, apple), (Babyfood, meat, lamb, strained)
      • 첫번째 트리플은 레시피에서 apple juice의 재료로 매칭됨. 근데 apple juice가 babyfood로 설명될 가능성은 적음. 음. babyfood와 유사하게 fast food, sweets와 같은 카테고리를 삭제함 
    • 세 번째 쉼표 너머의 텍스트를 무시하는데, 엔티티 간의 구별이 그 시점에서 중요하지 않다는 것을 발견했기 때문임. 그렇게 하면 연결 프로세스도 빨라짐
    • 다른 데이터 소스는 엄청 넓을 수 있다. 예시로, 우리는 DBpedia의 지식 그래프와 링킹하는 것을 실험했다. 불운하게도, DBpedia 데이터세트 안의 많은 엔티티들은 불완전하거나 정확하지 않게 타입화 되어 있다. (음식이 아닌 것이 Food type을 가지고 먹을 수 있는 많은 아이템이 Food type이 아니었다.) 따라서 잠재적인 재료를 선택하기 위해 체험적인 방법론(heuristics)을 사용했다. 탄수화물 값이 있는 모든 DBpedia 리소스와 마찬가지로 'ingredientOf'로 표시된 모든 DBpedia 리소스가 포함되었다. 이것은 실제 음식 아이템의 부분집합을 만들어내었고, 몇 엔티티를 잃는 결과를 냈지만 error 또한 줄일 수 있었다.

    Provenance and Publication Information

      지식 그래프에서 만드는 모든 주장에 대한 분명한 출처를 제공하기 위해 광범위하고 지속 가능한 RDF Nanopublication specification을 사용했다. Nanopulications는 publish될 수 있는 정보의 atomic한 단위를 뜻하고, 그것의 출처와 누가 그것을 발행했는지에 대한 정보가 붙는다. Nanopulications은 4개의 named graph를 사용해 linked data를 통해 지식을 표현한다.

    * named graph: RDF statements의 세트 안에서 URI를 사용해 식별됨. context나 출처 정보, 다른 메타 데이터 등과 같은 statements 세트로 설명이 붙음. 

    * linked data: 

    • 1) assertions graph: 만들어진 주장
      • 레시피에서는, title과 tag, ingredients를 포함함
      • ingredients는 재료의 이름, 단위, 양으로 설명된다.
    • 2) provenance graph: assertion이 어디서부터 나왔는지에 대한 정보
      • 레시피에서는, 원본데이터를 찾을 수 있는 URL 또는 reference가 될 수 있음
    • 3) publication info graph: nanopublication을 누가 만들었는지
      • 우리가 만든 링크들은 하나의 nanopublication으로 모인다
      • pulication info는 linkages로 만들어지는 linker tool임
    • 4) head graph: 이전의 세 개의 그래프를 묶은 것

     

    6. Application of the Food Knowledge Graph

    6.1 Answering Competency Questions in SPARQL

      knowledge graph를 평가하기 위해 가능한 응용들에 할 수 있는 competency questions을 만듦

    • Q1. "What recipes contain beef?"
      • 소고기가 들어간 레시피를 다 반환
      • 어떤 재료가 어떤 레시피에서 발견되는지 확인 가능
    • Q2. "What recipes contain beef, carrots, and potatoes?"
      • 특정 재료가 들어간 레시피를 찾을 수 있음
    • Q3. "What recipes contain bananas that do not contain walnuts?"
      • 특정 재료가 들어가고/들어가지 않은 레시피를 반환하는 지식 그래프의 능력을 확인할 수 있음
    • Q4. "What recipes that have chicken are low in sugar?"
      • Q3에서 영양 정보로 확대한 것
    • Q5. "What recipes are vegan?"
      • 재료에 대한 정보가 위계적으로 구조화되어있기 때문에, 채식주의자 또는 특정 종교인을 위한 식단을 구성할 때 재료가 동물성 제품에 속하는지 여부를 확인할 수 있다.

    ㅇ  각각의 질문들은 SPARQL을 사용해 ontology에 질의해 답을 얻을 수 있다. 레시피와 재료와 같은 관계 정보는 ontology 안에 직접 인코딩되기 때문이다.  

    6.2 Answering Competency Questions in Natural Language

    • 자연어 질문에 답하기 위한 FoodKG에서 답을 찾는 법?
      • knowledge base question answering (KBQA)
    • 재료, 영양, 레시피와 관련한 Food Q&A 데이터세트가 존재하지 않기 때문에, FoodKG를 위한 통합적인 Q&A 데이터세트를 수동적으로 디자인된 question templates를 사용해서 만듦. 3가지의 competency questions type.
      • Simple
      • Comparison
      • Constraint
    • FoodKG로부터 여러 subgraph들을 샘플링하고, 각 subgraph에 대해 랜덤하게 미리 정의된 template tool로부터 question template을 샘플화했다. 그리고 KG entites와 관계로 slot을 채웠다.

    Experiments

    • Q&A 시스템의 3가지 구성요소
      • question type classifier
      • topic entity predicator
      • KBQA model
      • 예시) "How much sugar is in Cheese, Blue?"
        • question type classifier: 간단한 질문 타입을 결정함
        • topic entity predictor: topic entity(여기서는 Cheese, Blue)를 감지하고, FoodKG에 링크
        • KBQA model: 'Cheese, Blue'라는 topic entity로 둘러 싸인 KG subgraph로부터 답을 찾음
    • KBQA model: Q&A 시스템에서 가장 중요한 모델
      • Bag-of-Word vectors(BOW)와 BAMnet 비교
      • 질문과 후보 답안을 같은 임베딩 공간에 인코딩 한 후, 내적을 이용해 코사인 유사도를 계산함
      • 유사도 스코어가 특정 한계점보다 높은 경우 예측 답안으로 리턴됨
      • BOW에서는 질문과 후보답안이 pretrained word embedding의 평균으로써 독립적으로 인코딩됨
      • BAMnet에서는, 더 정교한 neural network 모듈을 사용해 질문과 후보답인이 그것들 사이의 interaction을 2-way flow로 고려해서 같이 인코딩 됨
      • 데이터세트를 training, development, test 각각 50%, 20%, 30%로 나눔

     

    7. Resource

    • https://foodkg.github.io
      • FoodKG knowledge graph
      • KG를 구성하는 자동 script
      • 'whattomake' application
      • 자연어 질의 application
      • 문서

    Description

    • FoodKG 구성방법: "https://foodkg.github.io/foodkg.html"
    • FoodKG 실행방법
      • github repository에 step-by-step으로 잘 나와있음
      • input data는 다양한 형태였지만 RDF으로 map함. 결과는 RDF NanoPulications format
        • USDA: csv
        • Recipe1M: json
        • other ontologies: RDF/OWL
      • script의 output은 직렬화된 RDF file임
        • 6700만개의 triples로 스패닝
        • usda-links.trig
        • foodon-links.trig
        • foodkg-core.trig
    • whattomake app
      • SPARQL 쿼리와 3개의 food resource를 샘플링
    • KBQA application
      • 자연어 질문을 사용해 FoodKG에 질의하는 방법을 문서화

    '지식그래프' 카테고리의 다른 글

    Entity Resolution 개념 (3)  (0) 2022.09.09
    Entity Resolution 개념 (2)  (0) 2022.09.01
    Entity Resolution 개념 (1)  (2) 2022.08.31

    댓글