언어
스팸은 모든 언어로 도착하며, 평범한 메일도 마찬가지입니다. Spam Scanner는 둘 다 읽으며, 잘 모르는 언어는 신중하게 다룹니다. 아랍어나 중국어 메시지를 모두 스팸으로 표시하는 스팸 필터는 필터가 없는 것보다 나쁩니다.
모든 문자 체계 읽기#
- 단어. 텍스트는
Intl.Segmenter로 분리합니다. 이 기능은 유니코드 단어 경계 규칙을 따르며, 띄어쓰기 없이 쓰는 중국어, 일본어, 태국어, 라오어, 크메르어, 버마어에는 사전을 사용합니다. 긴 텍스트는 먼저 여러 조각으로 나눕니다. Node.js 18의 분리기는 아주 긴 문자열에서 느려지기 때문입니다. - 정규화. 유니코드 NFKC는 전각 글자와 대부분의 꾸민 글자(𝐅𝐑𝐄𝐄, Ⓕⓡⓔⓔ)를 일반 글자로 바꿉니다. 텍스트는 유니코드 규칙에 따라 소문자로 변환합니다.
- 위장. 단어 안의 보이지 않는 문자(두 글자 사이에 폭 없는 공백이 들어간
free, 소프트 하이픈)는 제거하면서 개수를 셉니다. 키릴 문자 а가 들어간pаypal처럼 여러 알파벳이 섞인 단어는 하나의 알파벳으로 되돌리면서 개수를 셉니다. 글자 대신 쓴 숫자(v1agra)도 변환합니다. 각 위장 방식은 그 자체로 하나의 특징이 되며, 보이지 않는 문자가 세 개 이상이거나 섞인 단어가 두 개 이상이면 점수도 더해집니다.
언어 감지#
각 메시지의 언어는 문자 체계로 감지하고, 여러 언어가 함께 쓰는 문자 체계라면 글자로 감지합니다.
- 한글은 한국어입니다. 히라가나와 가타카나는 일본어를 뜻합니다. 태국 문자, 그리스 문자, 히브리 문자, 아르메니아 문자, 조지아 문자, 벵골 문자, 타밀 문자처럼 한 언어만 쓰는 문자 체계는 곧바로 그 언어를 나타냅니다.
- 한 언어에만 있는 키릴 문자로 우크라이나어(і, ї, є, ґ), 벨라루스어(ў), 세르비아어(ђ, ћ, џ), 마케도니아어(ѓ, ќ, ѕ), 러시아어(ы, э, ё)를 구분합니다.
- 여러 언어가 함께 쓰는 문자 체계(라틴 문자, 키릴 문자, 아랍 문자, 데바나가리 문자 등)로 된 텍스트는 판단할 만큼 길면 franc으로 보냅니다. 짧은 메시지에 드문 언어가 붙지 않도록 이메일에서 흔한 언어로 범위를 제한합니다.
언어는 result.language로 보고됩니다. allowedLanguages: ['en', 'de'](--allow-language en,de)를 설정하면 그 밖의 언어로 확실히 감지된 메일에 3점이 더해집니다.
모델이 잘 모르는 언어#
분류기는 예시로 학습합니다. 공개 스팸 데이터 세트에는 외국어 ham보다 외국어 스팸이 훨씬 많으므로, 단순한 분류기는 중국어나 아랍어 텍스트 자체가 스팸을 뜻한다고 배웁니다. Spam Scanner는 세 가지 방법으로 이를 바로잡습니다.
- 언어는 결코 증거가 되지 않습니다. 감지된 언어와 문자 체계는 단서로 쓰지 않습니다.
- 단어는 그 언어 안에서 평가합니다. 단어의 스팸 확률은 모든 언어가 아니라 메시지가 쓰인 언어에서 분류기가 본 스팸 메시지와 ham받기를 원하는 메일: 스팸의 반대입니다. 메시지의 수를 기준으로 계산합니다. 주로 포르투갈어 스팸을 본 모델에서도 일상적인 포르투갈어 단어는 중립으로 남습니다.
- 확신도는 학습 범위를 따릅니다. 분류기가 그 언어에서 각 종류의 메시지를 몇 개 보았는지에 비례해 결과를 "unsure" 쪽으로 끌어당깁니다. 완전한 확신에는 각 종류마다 1,000개(소규모 개인 모델이라면 더 작은 분류의 2%)가 필요합니다. 학습 데이터에 ham이 없는 언어는 항상 "unsure"가 됩니다.
번들 모델은 SMS 메시지를 21개 언어로 기계 번역한 SMS Spam Multilingual Collection을 본 적이 없습니다. 이 규칙을 적용하기 전에는 그 ham의 5.7%를 스팸으로 표시했고, 포르투갈어는 55%, 프랑스어는 41%에 달했습니다. 규칙을 적용한 뒤에는 0.18%입니다. 중국어, 아랍어, 한국어, 일본어, 힌디어, 포르투갈어, 프랑스어를 비롯한 다른 20개 언어에서는 하나도 없었고, 영어는 0.27%였습니다.
그 언어들로 된 스팸 잡기#
unsure는 안전하지만 스팸을 잡지는 못합니다. 스팸을 잡는 것은 다음 세 가지입니다.
- 나머지 검사는 언어와 무관합니다. 유사 도메인, 기만적인 링크, 실행 파일, 매크로, 인증, 차단 목록, 규칙이 그렇습니다.
- 언어 모델. 최신 공개 모델은 100~200개 언어를 읽으며, Spam Scanner는 분류기가 확신하지 못할 때마다 모델에 묻습니다. 엔드투엔드 테스트에서
qwen3.5:4b가 중국어, 아랍어, 한국어, 힌디어, 태국어의 스팸을 잡고 ham을 통과시키는지 확인합니다. 언어 모델 - 직접 받은 메일로 학습. 직접 받은 메일로 학습한 모델에서는 한 언어당 각 종류의 메시지 수백 개면 그 언어에서 분류기가 완전한 확신을 갖게 됩니다. 학습, 그리고 21개 언어를 추가하는 선택적 데이터 세트를 참고하십시오.