잡다한 이야기/특허 분석

특허 분석 : 소스 코드에서 작동하는 소프트웨어 도구를 위한 기계 학습 모델 자동 생성

잡학다식을꿈꾼다 2023. 1. 13. 23:34
반응형

  해당 출원은 2020년 11월 6일에 구글 엘엘씨에 의해 출원되었다.  발명의 명칭은 "소스 코드에서 작동하는 소프트웨어 도구를 위한 기계 학습 모델 자동 생성" 이다. 해당 출원은 2019년 11월 6일자 미국에서 선출원된 발명에 대한 우선권 주장을 수반하고 있다. 청구항의 수는 총 22 개로 방법 발명과 물건 발명이 혼합되어 있는 형태이다. 발명의 형태를 세부적으로 따지자면, BM 발명에 해당된다. BM 발명의 경우 특허법 상의 발명의 정의 중 "자연 법칙을 사용해야 한다"는 요건이 일부 충족하지 않을 수 있으나 심사에서는 기술의 발전으로 발명의 형태가 매우 다양해지고 있다는 점과 이러한 발명도 산업 발전을 위해 보호할 필요가 있다는 점 때문에 최대한 포괄적으로 발명에 대해 판단하는 경향을 보이고 있다. 다만 판례에 따르면 발명에 대해 발명의 일부가 자연 법칙 외의 수학적 원리, 혹은 규칙 등을 사용하고 있다 하더라도 전체로 보았을 때 자연 법칙을 사용하고 있는 경우 특허법 상의 발명으로 판단할 수 있다고 여러 차례 언급된 바, 특허법 상 발명의 정의에 해당되어야 특허 발명으로써 보호될 수 있다는 것은 여전히 변함없는 사실이다. 

 

1. 배경 기술

 

 소프트웨어 개발 도구(Software Development Kit, 이하 SDK)는 소프트웨어 개발자들의 개발을 돕는 유틸을 제공하는 프로그램을 일컫는 말이다. 가장 기본적인 SDK의 예로는 소스 코드 편집기와 컴파일러를 들 수 있다. SDK는 개별적으로 사용될 수도 있고, 통합 개발 환경(Individual Development Environment, IDE)의 일부로써 사용될 수 있다. 

 코드 베이스는 특정 소프트웨어 시스템, 어플리케이션 혹은 어플리케이션의 구성요소를 구축하는 코드 조각(스니펫)의 모음을 의미한다. 코드 베이스의 크기는 거대한 경우가 대부분이다. 거대한 크기의 코드 베이스를 아무런 툴(Tool) 없이 소프트웨어 엔지니어가 일일이 검증하는 것은 사실상 불가능한 일에 가깝다. SDK에 머신 러닝 모델(Machine Learning Model)을 이용하여, 해당 모델이 자동으로 코드 스니펫을 인식하게 함으로써, 개발 프로세스 전반을 가속시키는 데 도움이 될 수 있다. SDK 개발자 입장에서 머신 러닝 모델을 SDK의 부분으로써 채택하지 않을 이유가 없다. 

 기계 학습 모델은 "적당히" 코드 코드를 평가할 수 있다. 코드를 평가하는 데 기준이 되는 규칙이 있다. 이 규칙은 기본적인 프로그래밍 원리를 기반으로 프로그래밍 언어, OS 등 환경에 따라서 달라질 수 있다. 코드 코드를 평가함에 있어서 너무 느슨한 규칙을 적용하게 되면, 오류가 있는 코드도 제대로 된 코드라고 판단하는 "거짓 긍정"(False Negative) 판단이 많아지게 될 것이다. 이는 결과적으로 오류 검증이라는 SDK의 기능을 제대로 수행하지 못하여, 코드의 질을 떨어뜨리고 개발에 있어서 시간과 비용을 추가적으로 소요하게 되는 결과를 불러올 것이다. 반대로 너무 타이트하게 규칙을 적용하게 되는 경우, 오류 검증을 하는 데 과도한 시간이 소모될 것이고, SDK를 적용할 수 있는 경우들이 과도하게 제한될 것이다. 규칙의 적당한 엄격함을 유지해야 한다는 점에서 기계 학습 모델을 기반으로 하는 SDK는 단순히 프로그래밍 오류를 검출하는 것을 넘어서, 기존의 정적 분석 기반 SDK에서 제공하지 못하였던 인사이트(Insight)를 제공할 수 있다. 

 머신 러닝 모델을 SDK에 적용하기 위해서 넘어야할 과제가 있다. 첫 번째, 머신 러닝 모델을 구축하기 위해서는 해당 분야의 전문가가 필요하다. SDK를 비롯한 어플리케이션을 개발을 주로 하는 엔지니어와 머신 러닝 모델을 구축하는 AI 전문가는 상이한 기술 스택을 가지고 있다. 사실상 필요한 기계 학습 모델을 구축하기 위해서는 전문가를 고용해야 한다. 문제는 이들을 고용함으로써 소모되는 추가 비용과 리소스가 SDK 머신 러닝 모델을 적용하였을 때 나타나는 효용을 넘어서는 경우가  많다는 것이다. 따라서 SDK 개발자들은 경제적인 이유로 SDK 개발에 기계 학습 모델을 적용하기보다는 기존의 정적 분석 기반 SDK를 개발하는 것으로 방향을 잡게 된다. 두 번째로 목표로 하는 SDK에 필요한 머신 러닝 모델을 생성하는 것 역시 힘든 일이다. 앞서 설명한 것처럼 코드 베이스를 구성하고 있는 프로그래밍 언어, 파일의 종류, 해당 프로그램이 운영되는 OS, SDK의 목적 등 여러가지 요인에 따라서 필요한 머신 러닝 모델은 달라질 수 있다. 하나의 SDK를 위해서 매번 별도의 머신 러닝 모델을 구축하는 것은 경제적으로도, 시간적으로도 크게 메리트가 없다.

 이러한 문제를 해결하기 위해, 자동적으로 SDK 개발에 필요한 머신 러닝 모델을 생성하고, 이를 기반으로 자동적으로 인사이트를 얻는 방법의 발명은 머신 러닝 모델을 적용한 SDK 개발의 경제적 장애를 해소하여 개발 프로세스의 속도를 높이고, 양질의 SDK 개발을 할 수 있을 것이라 기대된다.  

 

2. 발명 내용

 

 발명의 내용을 파악함에 있어서 가장 좋은 방법은 첫 번째 청구항을 중심으로 공고 전문의 설명 부분을 분석하는 것이다. 간단하게 이유를 설명하자면 출원서의 청구항 부분의 형식이 대부분 몇 개의 독립항과 그 독립항을 이용한 인용한 청구항들로 이루어져 있기 때문이다. 첫 번째 청구항은 독립항 중에서도 출원서에 기재된 발명 중 가장 근본이 되는 경우들이 많다. 거두절미하고 다음은 이 출원의 첫 번째 청구항이다.

 

방법으로서, 데이터 처리 하드웨어에서,

소프트웨어 개발 도구를 구축하기 위해 타겟 소스 코드를 사용하는 개발자와 관련된 개발자 디바이스로부터
타겟 소스 코드에 대한 코드 인사이트를 요청하는 코드 인사이트 요청을 수신하는 단계와,

상기 코드 인사이트 요청은, 타겟 소스 코드와, 상기 타겟 소스 코드는 타겟 코드베이스로부터의 타겟 소스 코드 스니펫의 쌍을 포함하고; 그리고 소프트웨어 개발 도구가 소프트웨어 개발 도구의 코드 라벨링 유형 또는 소프트웨어 개발 도구의 코드 변환 유형 중 하나를 포함함을 지정하는 도구 유형 표시자를 포함하고;

데이터 처리 하드웨어에 의해, 도구 유형 표시자에 기초하여 기계 학습 모델을 획득하는 단계와,

상기 기계 학 습 모델은 소프트웨어 개발 도구의 코드 라벨링 유형 또는 소프트웨어 개발 도구의 코드 변환 유형 중 지정된 하나와 관련된 트레이닝 소스 코드에 대해 트레이닝되고;

데이터 처리 하드웨어에 의해, 기계 학습 모델을 사용하여 타겟 소스 코드에 대한 코드 인사이트를 생성하는 단계와,

상기 타겟 소스 코드에 대한 코드 인사이트는, 도구 유형 표시자가 소프트웨어 개발 도구가 소프트웨어 개발 도구의 코드 라벨링 유형을 포함한다고 지정할 때 타겟 소스 코드에 대한 예측 라벨, 또는 도구 유형 표시자가 소프트웨어 개발 도구가 소프트웨어 구축 도구의 코드 변환 유형을 포함한다고 지 정할 때 타겟 소스 코드에 대한 예측 코드 변환 중 하나를 포함하고;

그리고 데이터 처리 하드웨어에 의해, 코드 인사이트를 개발자 디바이스로 전송하는 단계를 포함하고,
상기 코드 인사이트는 개발자 디바이스에 의해 수신될 때 개발자 디바이스에서 실행되는 그래픽 사용자 인터페이스로 하여금 개발자 디바이스의 디스플레이 스크린에 코드 인사이트를 디스플레이하게 하고,

상기 기계 학습 모델을 사용하여 타겟 소스 코드에 대한 코드 인사이트를 생성하는 단계는, 타겟 소스 코드 스니펫 쌍의 각 타겟 소스 코드 스니펫에 대해, 특징 입력으로서 대응하는 타겟 소스 코드 스니펫으로부터 추출된 타겟 특징 세트를 수신하도록 구성된 기계 학습 모델을 사용하여 대응하는 타겟 소스 코드 스니펫에 대한 벡터 표현을 생성하는 단계; 벡터 표현에 기초하여 타겟 소스 코드 스니펫 쌍 사이의 벡터 공간 거리를 결정하는 단계; 및 벡터 공간 거리가 거리 임계값을 만족할 때 타겟 소스 코드 스니펫 쌍이 서로 중복되는것으로 결정하 는 단계를 포함하는 것을 특징으로 하는 방법.

 

 청구항은 SDK를 개발 중인 개발자가 특정 소스코드 베이스에 대한 인사이트를 요청하면 데이터 처리 하드웨어에 의해 기계 학습 모델을 생성 및 인사이트를 획득하고, 이를 다시 사용자에게 반환하는 방법을 발명에 대한 것이다. 다음은 발명의 내용을 도식화한 것이다.

 

출원서의 가장 기본적인 발명의 도식화

 

 가장 첫 번째로 상기의 발명은 SDK 사용자(개발자)로 부터 타겟 소스 코드를 포함한 인사이트 리퀘스트(Request)를 받는 과정을 포함한다. 이때 타겟 소스 코드를 제외하고 리퀘스트에는 도구 유형 표시자가 포함되어 있다. 표시자의 종류로는 개발 도구의 코드 라벨링 유형과 코드 변환 유형 소프트웨어 개발 도구가 있으며, 사용자는 둘 중 하나를 입력하게 된다. 개발 도구의 라벨링 유형 예로는 코드의 복잡도, 코드의 품질, 시험 요구 사항 등을 들 수 있으며, 변환 유형의 예시로는 빌드 에러 표시자, 컴파일러(Compiler), 인터프리터(Interpreter), 대체 코드의 제안 등을 들 수 있다. 표시자에 따라서 반환되는 인사이트의 결과 종류가 달라지게 된다. 두 표시자가 가장 기본이 되며 그 외에도 첫 번째 청구항에서 언급되지는 않았지만 타겟 소스 코드를 실행하는 데 경과된 시간, 타겟 소스 코드에 대한 메타 데이터 또는 타겟 소스 코드에 대해 사람이 생성한 주석과 같은 출력 특성 유형을 선택적으로 포함할 수 있다고 한다. 출력 특성 유형은 SDK 개발자가 자신이 현재 개발하고 있는 SDK의 종류에 대한 힌트를 제공함으로써 유효한 인사이트를 도출할 수 있도록 도움을 주는 역할을 한다.

 수신 단계에서 얻은 출력 특성 유형에 기초하여, 머신 러닝 시스템은 관련 트레이닝 소스 코드를 자동 수집 및 결합(Join)하여 코드 인사이트 생성 방법을 학습하기 위한 머신 러닝 모델을 구축한다. 해당 모델이 구축되면 개발자가 제공한 리퀘스트가 머신 러닝 모델의 입력이 되고, 타겟 소스 코드에 대한 인사이트를 결과값으로 출력하게 된다. 인사이트 유형은 리퀘스트에 포함된 표시자의 종류에 따라 조금씩 달라 질 수 있다. 개발 도구의 라벨링 유형을 표시자로 하는 경우에 대해서 타겟 소스 코드에 대해서 예측한 라벨을 반환할 수 있다. 예를 들어 예측 라벨은 타겟 소스 코드의 예상 복잡도, 예상 푸밎르 예상 테슽 요구 사항을 포함할 수 있다. 반면 코드 변환 유형을 표시자로 하는 경우 예측된 코드 변환을 반환하게 된다. 예를 들어 하나 이상의 오류를 식별하고, 그 오류를 수정하는 예측 코드로의 변환, 혹은 타겟 소스 코드의 컴파일링, 혹은 해석을 에뮬레이트하는 실행 가능한 코드 출력을 포함할 수 있다. 다음은 표시자의 종류에 따라서 반환되는 인사이트 유형의 예시이다.

 

 

개발 도구 라벨링 유형을 표시자로 한 리퀘스트의 반환값

 

코드 반환 유형을 표시자로 한 리퀘스트 반환값

 

또한 리퀘스트 시 개발자의 요청에 따라서 인사이트에 포함되는 결과 특성 유형을 포함할 수 있다. 예를 들어 설정에 따라서 타겟 소스 코드에 대해서 에뮬레이트된 결과가 성공할 것인가 실패할 것인가의 여부, 추가로 혹은 대안적으로 타겟 소스 코드를 실행하기 위한 에뮬레이트된 경과시간, 메타 데이터 등을 들 수 있다. 다음은 도출될 수 있는 인사이트 유형의 예시이다.

 

도구 유형 라벨링을 하였을 때 인사이트 예시

 

변환 표시자를 사용하였을 때 인사이트 예시

 

 코드 인사이트 서비스는 특징 추출기, 기계 학습 시스템, 인사이트 생성기를 포함한다. 특징 추출기는 개발자 디바이스로부터 수신된 코드 인사이트 요청에 포함된 타겟 소스 코드로부터 특징 세트를 추출하는 역할을 한다. 추출된 특징 세트는 기계 학습 입력에 적합한 타겟 소스 코드의 구문적 표현에 대응된다. 해당 세트를 본래의 타겟 소스 코드를 대체하는 입력으로 사용함으로써 불필요한 데이터를 제거하고, 기계 학습 모델의 메모리 요구 사항을 줄이고, 양질의 결과를 얻을 수 있다는 이점이 있다. 타겟 소스 코드의 구문 표현의 예로 추상 구문 트리(Abstract Syntax Tree, AST)를 들 수 있다. 특징 추출기는 하나일수도 여러 개일 수도 있으며, 경우에 따라서는 사용자(개발자)의 디바이스에서 추출 과정이 실행될 수도 있다. 다음은 타겟 소스 코드로 부터 AST 방식으로 특징을 추출한 예시이다.

 

타겟 소스 코드로부터 AST 방식을 이용한 특징 추출

 

 모델을 트레이닝하여 트레이닝 소스 코드 스니펫의 풀에서 각각의 트레이닝 소스 코드 스니펫에 대한 대응 벡터를 생성한다. 이 벡터는 타겟 소스 코드의 "이웃"에 있는 트레이닝 소스 코드인지를 판단하기 위하여 엑세스 할 수 있는 모든 벡터 표현의 벡터 공간 맵을 데이터 처리 하드웨어에 저장할 수 있다. 사용 예는 다음과 같다. 특징을 추출한 타겟 소스 코드에 대해 머신 러닝 모델은 벡터를 추출할 수 있고, 메모리 하드웨어에 저장된 트레이닝 소스 코드 스니펫의 풀에 대해서 유사성 스코어를 결정한다. 해당 타겟 소스 코드에 대해 "이웃"인 것으로 유사성 임계값을 충족하는 것 가운데 하나 이상을 식별할 수 있다. 충족된 코드들은 타겟 소스 코드의 대체 코드로 식별될 수 있거나, 혹은 변형된 형태로 식별될 수 있다.  

 도출된 인사이트는 개발자 디바이스의 GUI를 통해서 표현될 수 있으며, 개발에 이용될 수 있다. 다음은 마지막으로 전체적인 절차를 정리한 순서도이다.

 

발명 순서도

 출원서 전체의 발명을 다루기에는 너무 내용이 방대하다는 생각이 든다. 이 글에서 언급한 컨셉에서 약간의 변형을 가미한 것이 타 청구항에 기재된 발명임을 언급하겠다. 관심이 있다면 아래에 첨부한 공고 전문을 참고하기를 바란다.

 

3. 마무리

 위 발명은 SDK 개발 중 필요한 머신 러닝 모델을 자동으로 생성하고, 그에 따라 필요한 인사이트를 제공함으로써, 경제적인 이유로 기존의 방식인 정적 분석 방식에서 머물고 있던 개발자들이 머신 러닝 기술을 개발에 적극적으로 활용할 수 있도로 하고 있다. 이는 개발 속도를 전체적으로 향상시킬 수 있으며, 더 나은 질을 가진 SDK 개발과 비용 절감으로 이어질 수 있다. IT 기술 발전 속도가 매우 빠르고, 경쟁 업체들보다 효율적이고 개발을 통해 경쟁력을 갖춤으로써 시장적 우위를 점할 수 있을 것이라 생각된다.  

 

공고 전문.pdf
0.77MB

반응형