Neptune ML의 특성 인코딩 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Neptune ML의 특성 인코딩

속성값은 다양한 형식과 데이터 유형으로 제공됩니다. 기계 학습에서 우수한 성능을 달성하려면 이러한 값을 특성이라고 하는 수치 인코딩으로 변환해야 합니다.

Neptune ML은 여기에 설명된 특성 인코딩 기법을 활용하여 데이터 내보내기 및 데이터 처리 단계의 일부로 특성 추출 및 인코딩을 수행합니다.

참고

사용자 지정 모델 구현에서 자체 특성 인코딩을 구현하려는 경우 none을 특성 인코딩 유형으로 선택하여 데이터 전처리 단계에서 자동 특성 인코딩을 비활성화할 수 있습니다. 그러면 해당 노드 또는 엣지 속성에서 특성 인코딩이 수행되지 않는 대신 원시 속성값이 구문 분석되어 사전에 저장됩니다. 데이터 전처리를 수행해도 여전히 내보낸 데이터 세트에서 DGL 그래프가 생성되지만, 구성된 DGL 그래프에는 훈련용으로 사전 처리된 특성이 없습니다.

사용자 지정 모델 훈련의 일환으로 사용자 지정 특성 인코딩을 수행하려는 경우에만 이 옵션을 사용해야 합니다. 세부 정보는 Neptune ML의 사용자 지정 모델을 참조하십시오.

Neptune ML의 범주별 특성

고정된 가능한 값 목록에서 하나 이상의 고유 값을 취할 수 있는 속성은 범주형 특성입니다. Neptune ML에서는 범주형 특성이 원-핫 인코딩을 사용하여 인코딩됩니다. 다음 예제는 다양한 식품의 속성 이름이 범주에 따라 원-핫 인코딩되는 방식을 보여줍니다.

Food Veg. Meat Fruit Encoding --------- ---- ---- ----- -------- Apple 0 0 1 001 Chicken 0 1 0 010 Broccoli 1 0 0 100
참고

모든 범주형 특성의 최대 범주 수는 100개입니다. 속성의 범주 값이 100개를 초과하는 경우 가장 자주 사용되는 99개만 고유 범주에 배치되고 나머지는 OTHER로 이름이 지정된 특수 범주에 배치됩니다.

Neptune ML의 수치적 특성

값이 실수인 모든 속성은 Neptune ML에서 수치적 특성으로 인코딩할 수 있습니다. 수치적 특성은 부동 소수점 숫자를 사용하여 인코딩됩니다.

수치적 특성을 인코딩할 때 사용할 데이터 정규화 메서드를 "norm": "normalization technique"과 같이 지정할 수 있습니다. 다음과 같은 정규화 기법이 지원됩니다.

  • “none”   –   인코딩 중에 숫자 값을 정규화하지 마세요.

  • "min-max"   –   각 값에서 최소값을 뺀 다음 최대값과 최소값 간의 차이로 나누어 각 값을 정규화합니다.

  • “standard”   –   각 값을 모든 값의 합계로 나누어 정규화합니다.

Neptune ML의 버킷 수치 특성

원시 숫자를 사용하여 수치적 속성을 나타내는 대신 숫자 값을 범주로 간략하게 만들 수 있습니다. 예를 들어, 사람의 나이를 어린이(0~20세), 청년(20~40세), 중년(40~60세), 노년(60세 이상)과 같은 범주로 나눌 수 있습니다. 이러한 숫자형 버킷을 사용하면 수치적 속성을 일종의 범주형 특성으로 변환할 수 있습니다.

Neptune ML에서는 수치적 속성을 버킷 수치 특성으로 인코딩할 수 있습니다. 다음 2가지를 제공해야 합니다.

  • "range": [a, b] 형식의 숫자 범위로, 여기서 ab는 정수입니다.

  • "bucket_cnt": c 형식의 버킷 수로, 여기서 c는 버킷 수이며 정수입니다.

그런 다음 Neptune ML은 각 버킷의 크기를  ( b - a ) / c 로 계산하고 각 숫자 값을 해당 버킷의 수로 인코딩합니다. a보다 작은 값은 첫 번째 버킷에 속하는 것으로 간주되고, b보다 큰 값은 마지막 버킷에 속하는 것으로 간주됩니다.

또한 필요에 따라 "slide_window_size": s 와 같이 슬라이드 창 크기를 지정하여 숫자 값을 둘 이상의 버킷에 포함할 수도 있습니다. 여기서 s는 숫자입니다. 그런 다음 Neptune ML은 속성의 각 숫자 값 v v - s/2 ~ v + s/2 의 범위로 변환하고, 범위에 해당하는 모든 버킷에 v 값을 할당합니다.

마지막으로, 수치적 특성 및 버킷 수치 특성의 누락된 값을 채우는 방법을 필요에 따라 제공할 수도 있습니다. "imputer": "imputation technique "을 사용하여 이 작업을 수행할 수 있는데, 여기서 대체 기법은 "mean", "median", "most-frequent" 중 하나입니다. Imputer를 지정하지 않으면 값이 누락되어 처리가 중단될 수 있습니다.

Neptune ML의 텍스트 특성 인코딩

자유 형식 텍스트의 경우 Neptune ML은 여러 가지 모델을 사용하여 속성값 문자열의 토큰 시퀀스를 고정 크기의 실수 값 벡터로 변환할 수 있습니다.

  • text_fasttext   –   fastText 인코딩을 사용합니다. fastText에서 지원하는 5가지 언어 중 하나만 사용하는 특성에 권장되는 인코딩입니다.

  • text_sbert   –   Sentence BERT(SBERT) 인코딩 모델을 사용합니다. text_fasttext에서 지원하지 않는 텍스트의 경우 이 인코딩을 사용하는 것이 좋습니다.

  • text_word2vec   –   Google에서 처음 게시한 Word2Vec 알고리즘을 사용하여 텍스트를 인코딩합니다. Word2Vec는 영어만 지원합니다.

  • text_tfidf   –   Term Frequency-Inverse Document Frequency(TF-IDF) 벡터라이저를 사용하여 텍스트를 인코딩합니다. TF-IDF 인코딩은 다른 인코딩에서는 지원하지 않는 통계적 특성을 지원합니다.

Neptune ML의 텍스트 속성값에 대한 fastText 인코딩

Neptune ML은 fastText 모델을 사용하여 텍스트 속성값을 고정 크기의 실수 값 벡터로 변환할 수 있습니다. 다음은 fastText가 지원하는 5가지 언어 중 하나의 텍스트 속성값에 권장되는 인코딩 메서드입니다.

  • en(영어)

  • zh(중국어)

  • hi(힌디어)

  • es(스페인어)

  • fr(프랑스어)

참고로 fastText는 2개 이상의 언어로 된 단어가 포함된 문장을 처리할 수 없습니다.

text_fasttext 메서드는 인코딩될 텍스트 속성값의 최대 토큰 수를 지정하는 max_length 필드를 필요에 따라 사용할 수 있으며, 이 필드를 넘으면 문자열이 잘립니다. 이렇게 하면 텍스트 속성값에 긴 문자열이 포함된 경우 성능이 향상될 수 있습니다. max_length를 지정하지 않으면 fastText는 문자열 길이에 관계없이 모든 토큰을 인코딩하기 때문입니다.

이 예제에서는 프랑스 영화 제목이 fastText로 인코딩되도록 지정합니다.

{ "file_name" : "nodes/movie.csv", "separator" : ",", "node" : ["~id", "movie"], "features" : [ { "feature": ["title", "title", "text_fasttext"], "language": "fr", "max_length": 1024 } ] }

Neptune ML의 텍스트 특성에 대한 Sentence BERT(SBERT) 인코딩

Neptune ML은 Sentence BERT(SBERT) 모델을 사용하여 문자열 속성값의 토큰 시퀀스를 고정 크기의 실수 값 벡터로 변환할 수 있습니다. Neptune은 2개의 SBERT 메서드를 지원합니다. text_sbert를 지정한 경우 기본값은 text_sbert128이며, 다른 메서드 하나는 text_sbert512입니다. 둘 사이의 차이는 인코딩된 텍스트 속성값 문자열의 최대 길이입니다. text_sbert128 인코딩을 사용하면 128개 토큰을 인코딩한 후 텍스트 문자열이 잘리고, text_sbert512의 경우 512개 토큰을 인코딩한 후에 텍스트 문자열이 잘립니다. 따라서 text_sbert512를 사용하려면 text_sbert128보다 많은 처리 시간이 소요될 수 있습니다. 두 메서드 모두 text_fasttext보다 느립니다.

SBERT 인코딩은 다국어이므로, 인코딩하는 속성값 텍스트에 언어를 지정할 필요가 없습니다. SBERT는 여러 언어를 지원하며 2개 이상의 언어를 포함하는 문장을 인코딩할 수 있습니다. fastText가 지원하지 않는 하나 이상의 언어로 된 텍스트를 포함하는 속성값을 인코딩하는 경우 SBERT를 인코딩 메서드로 사용하는 것이 좋습니다.

다음 예제에서는 영화 제목이 최대 128개 토큰까지 SBERT로 인코딩되도록 지정합니다.

{ "file_name" : "nodes/movie.csv", "separator" : ",", "node" : ["~id", "movie"], "features" : [ { "feature": ["title", "title", "text_sbert128"] } ] }

Neptune ML의 텍스트 특성에 대한 Word2Vec 인코딩

Neptune ML은 문자열 속성값을 Word2Vec 특성으로 인코딩할 수 있습니다. Word2Vec 알고리즘Google에서 최초로 게시했습니다. text_word2vec 메서드는 spaCy 훈련 모델 중 하나를 사용하여 문자열의 토큰을 고밀도 벡터로 인코딩합니다. 이는 en_core_web_lg 모델을 사용하여 영어만 지원합니다.

다음 예제에서는 영화 제목이 Word2Vec을 사용하여 인코딩되도록 지정합니다.

{ "file_name" : "nodes/movie.csv", "separator" : ",", "node" : ["~id", "movie"], "features" : [ { "feature": ["title", "title", "text_word2vec"], "language": "en_core_web_lg" } ] }

영어 en_core_web_lg 모델은 Neptune이 지원하는 유일한 모델이므로, 언어 필드는 선택 사항입니다.

Neptune ML의 텍스트 특성에 대한 TF-IDF 인코딩

Neptune ML은 텍스트 속성값을 text_tfidf 특성으로 인코딩할 수 있습니다. 이 인코딩은 Term Frequency-Inverse Document Frequency(TF-IDF) 벡터라이저와 차원 축소 연산을 사용하여 텍스트의 단어 시퀀스를 숫자형 벡터로 변환합니다.

Term Frequency-Inverse Document Frequency(TF-IDF)는 문서 세트에서 단어의 중요성을 측정하기 위한 수치입니다. 해당 속성값에서 단어가 표시되는 횟수를 해당 단어가 나타나는 속성값의 총 수로 나누어 계산합니다.

예를 들어, 특정 영화 제목에서 '키스'라는 단어가 2번 나오고(예: '키스 키스 뱅 뱅') 총 4개 영화 제목에 '키스'가 나오는 경우, '키스 키스 뱅 뱅' 제목의 TF-IDF 값 '키스'는 2 / 4 가 됩니다.

처음에 생성되는 벡터의 차원은 d이며, 여기서 d는 해당 유형의 모든 속성값에서 고유한 용어의 개수입니다. 차원 축소 연산은 임의 희소 투영법을 사용하여 이 수를 최대 100까지 줄입니다. 그런 다음 그래프에 있는 모든 text_tfidf 특성을 병합하여 그래프의 어휘를 생성합니다.

여러 가지 방법으로 TF-IDF 벡터라이저를 제어할 수 있습니다.

  • max_features   –   max_features 파라미터를 사용하여 text_tfidf 특성의 용어 수를 가장 일반적인 항목 수로 제한할 수 있습니다. 예를 들어, max_features를 100으로 설정하면 가장 일반적으로 사용되는 상위 100개 용어만 포함됩니다. 명시적으로 설정하지 않은 경우 max_features의 기본값은 5,000입니다.

  • min_df   –   min_df 파라미터를 사용하여 text_tfidf 특성의 용어 수를 최소한 지정된 문서 빈도를 갖는 용어로 제한할 수 있습니다. 예를 들어, min_df를 5로 설정하면 5개 이상의 서로 다른 속성값에 나타나는 용어만 사용됩니다. 명시적으로 설정하지 않은 경우 min_df의 기본값은 2입니다.

  • ngram_range   –   ngram_range 파라미터는 용어로 취급되는 단어 조합을 결정합니다. 예를 들어, ngram_range[2, 4]로 설정하면 '키스 키스 뱅 뱅' 제목에서 다음 6개 용어를 찾을 수 있습니다.

    • 2단어 용어: '키스 키스', '키스 뱅', '뱅 뱅'

    • 3단어 용어: '키스 키스 뱅', '키스 뱅 뱅'

    • 4단어 용어: '키스 키스 뱅 뱅'

    ngram_range의 기본 설정은 [1, 1]입니다.

Neptune ML의 날짜/시간 특성

Neptune ML은 datetime 속성값의 일부를 원-핫 배열로 인코딩하여 범주형 특성으로 변환할 수 있습니다. datetime_parts 파라미터를 사용하여 인코딩할 부분을 ["year", "month", "weekday", "hour"] 중 하나 이상 지정하세요. datetime_parts를 설정하지 않으면 기본적으로 네 부분이 모두 인코딩됩니다.

예를 들어, 날짜/시간 값 범위가 2010년부터 2012년까지인 경우 날짜/시간 항목 2011-04-22 01:16:34의 네 부분은 다음과 같습니다.

  •   –   [0, 1, 0].

    범위가 3년(2010년, 2011년, 2012년)뿐이므로, 원-핫 배열에는 매년 하나씩 총 3개의 항목이 있습니다.

  •   –   [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0].

    여기서 원-핫 배열에는 해당 연도의 각 월에 대한 항목이 있습니다.

  •   –   [0, 0, 0, 0, 1, 0, 0].

    ISO 8601 표준에 따르면 월요일은 한 주의 첫 번째 요일이고, 2011년 4월 22일은 금요일이었기 때문에 이에 상응하는 원-핫 일 배열은 다섯 번째 위치에 속합니다.

  •   –   [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0].

    오전 1시는 24개의 구성 요소로 이루어진 원-핫 배열로 설정됩니다.

요일, 분, 초는 범주별로 인코딩되지 않습니다.

전체 datetime 범위에 단일 연도 내의 날짜만 포함된 경우 year 배열은 인코딩되지 않습니다.

imputer 파라미터와 수치적 특성에 사용할 수 있는 전략 중 하나를 활용하여 누락된 datetime 값을 채우는 대체 전략을 지정할 수 있습니다.

Neptune ML의 자동 특성 인코딩

그래프의 속성에 사용할 특성 인코딩 메서드를 수동으로 지정하지 않고, 특성 인코딩 메서드로 auto를 설정할 수 있습니다. 그런 다음 Neptune ML은 기본 데이터 유형을 기반으로 각 속성에 가장 적합한 특성 인코딩을 추론합니다.

다음은 Neptune ML이 적절한 특성 인코딩을 선택할 때 사용하는 몇 가지 휴리스틱입니다.

  • 속성이 숫자형 값만 있고 숫자형 데이터 유형으로 변환할 수 있는 경우 Neptune ML은 일반적으로 속성을 숫자 값으로 인코딩합니다. 그러나 속성의 고유 값 수가 총 값 수의 10% 미만이고 해당 고유 값의 카디널리티가 100개 미만인 경우 Neptune ML은 범주형 인코딩을 사용합니다.

  • 속성값을 datetime 유형으로 변환할 수 있는 경우 Neptune ML은 속성값을 datetime 특성으로 인코딩합니다.

  • 속성값을 부울(1/0 또는 True/False)로 강제 변환할 수 있는 경우 Neptune ML은 범주 인코딩을 사용합니다.

  • 속성이 고유 값의 10%를 초과하는 문자열이고 값당 평균 토큰 수가 3보다 크거나 같은 경우 Neptune ML은 속성 유형을 텍스트로 유추하여 사용 중인 언어를 자동으로 감지합니다. 감지된 언어가 fastText에서 지원하는 언어인 영어, 중국어, 힌디어, 스페인어, 프랑스어 중 하나인 경우 Neptune ML은 텍스트를 인코딩하는 데 text_fasttext를 사용합니다. 이외의 경우 Neptune ML은 text_sbert를 사용합니다.

  • 속성이 텍스트 특성으로 분류되지 않은 문자열인 경우 Neptune ML은 속성을 범주형 특성으로 간주하고 범주 인코딩을 사용합니다.

  • 각 노드에 범주 특성으로 유추되는 고유한 속성값이 있는 경우 Neptune ML은 학습에 도움이 되지 않는 ID일 가능성이 있으므로 훈련 그래프에서 속성을 삭제합니다.

  • 속성에 세미콜론(';')과 같은 유효한 Neptune 구분자가 포함된 것으로 알려진 경우 Neptune ML은 해당 속성을 MultiNumerical 또는 MultiCategorical로만 처리할 수 있습니다.

    • Neptune ML은 먼저 값을 숫자형 특성으로 인코딩하려고 시도합니다. 이에 성공하면 Neptune ML은 수치 인코딩을 사용하여 숫자형 벡터 특성을 생성합니다.

    • 그렇지 않으면 Neptune ML은 값을 다중 범주형으로 인코딩합니다.

  • Neptune ML이 속성값의 데이터 유형을 유추할 수 없는 경우 Neptune ML은 훈련 그래프에서 속성을 삭제합니다.