문제

지난 몇 년 동안 수신 된 이메일 (~ 10k 전자 메일)이 2 그룹으로 분류 된 이메일 계정에 액세스 할 수 있다고 가정 해 봅시다.

  • 진정한 이메일
  • 스팸

스팸 탐지에 사용할 수있는 신경망 솔루션을 만드는 작업에 어떻게 접근 하시겠습니까?

이메일 페치가 이미 제자리에 있다고 가정하고 분류 부분에만 집중해야한다고 가정 해 봅시다.

내가 대답하고자하는 주요 요점은 다음과 같습니다.

  1. NN의 입력으로 선택할 매개 변수는 무엇이며 그 이유는 무엇입니까?
  2. NN의 어떤 구조가 그러한 작업에 가장 적합 할 것입니까?

또한 모든 리소스 권장 사항 또는 기존 구현 (바람직하게는 C#)이 환영하는 것 이상입니다.

고맙습니다

편집하다

  • 프로젝트의 주요 측면은 신경망을 사용하여 NN 접근 방식이 스팸 탐지를 위해 어떻게 작동하는지 테스트하는 것입니다.
  • 또한 신경망과 스팸에서 주제를 탐색하기 위해 단순히 "장난감 문제"입니다.
도움이 되었습니까?

해결책

NNS를 고집한다면 ... 모든 이메일에 대한 몇 가지 기능을 계산합니다.

캐릭터 기반, 단어 기반 및 어휘 기능 모두 (내가 계산할 때 약 97) :

  1. 총 캐릭터 없음 (c)
  2. 알파 chars / c 비율의 총 금지
  3. 총 숫자 char / c
  4. 공백 숯/c
  5. 각 문자의 빈도 / c (키보드의 36 글자-AZ, 0-9)
  6. 특수 숯의 주파수 (10 숯 : *, _,+, =,%, $,@, ـ, ,/)
  7. 총 단어 없음 (m)
  8. 총 짧은 단어 없음/m 두 글자 이하
  9. 단어의 총 숯이 없습니다
  10. 평균 단어 길이
  11. avg. 문장 길이
  12. avg. 문장 길이
  13. 단어 길이 프리 Q. 분포/m 길이 n, n, n 사이의 단어의 비율 1과 15
  14. 유형 토큰 비율 고유 단어/ m
  15. Hapax Legomena freq. 한 번 발생하는 단어의
  16. Hapax Dislegomena freq. 두 번 발생하는 단어의
  17. Yule의 K 측정
  18. 심슨의 D 측정
  19. Sichel의 측정
  20. Brunet의 W 측정
  21. 수상자의 r 측정
  22. 구두점의 빈도 18 구두점 숯 :. ،; ? ! : () -“«»<> [] {}

색상, 글꼴, 크기, ... 사용과 같은 서식을 기반으로 더 많은 기능을 추가 할 수도 있습니다.

이러한 조치의 대부분은 온라인, 논문 또는 위키 백과에서 찾을 수 있습니다 (아마도 다른 기능을 기반으로 한 간단한 계산).

따라서 약 100 개의 기능을 사용하려면 100 개의 입력, 숨겨진 레이어의 일부 노드 및 하나의 출력 노드가 필요합니다.

현재 사전 분류 된 코퍼스에 따라 입력을 정규화해야합니다.

나는 그것을 두 그룹으로 나누고 하나를 훈련 그룹으로 사용하고 다른 하나는 테스트 그룹으로 사용하여 절대 혼합하지 않았습니다. 스팸/비 스팸 비율이 비슷한 열차/테스트 그룹의 50/50 비율 일 수 있습니다.

다른 팁

신경망으로 수행 할 예정입니까? 사용하기에는 꽤 잘 설정된 것 같습니다. 베이지안 분류, Paul Graham의 몇 가지 에세이로 잘 설명되어 있습니다.

당신이 접근 할 수있는 분류 된 역사는 베이지안 알고리즘에 공급하기 위해 매우 강력한 Corpora를 만들 것입니다. 아마도 효과적인 결과가 될 것입니다.

  1. 당신은 기본적으로 기능 추출의 신경망을 설계하고 훈련하는 것과 비슷한 범위의 전체 문제를 가질 것입니다. 내가 시작하는 곳, 내가 당신이라면, 입력 텍스트를 여러 가지 방법으로 슬라이스하고 다이밍하고 있으며, 각각은 "가격 '과'비아그라 '가 발생하면"이 뉴런 신호 1.0 1.0 라인을 따라 잠재적 인 기능 입력입니다. 서로 3 단어 내에서 ", 그리고 스팸 식별과 가장 좋은 절대 상관에 따라 그것들을 cull니다.
  2. 최선의 50 ~ 200 입력 기능 뉴런을 취하고 단일 출력 뉴런 (1.0 = 스팸으로 훈련 된 값, -1.0 = 스팸이 아님), 즉 단일 층 퍼셉트론에 연결하는 것으로 시작합니다. 제대로 작동하지 않으면 멀티 레이어 역전자를 시도 할 수 있지만 큰 결과를 얻기 위해 숨을 참지 않을 것입니다.

일반적으로, 제 경험으로 인해 신경망은이 작업에서 최상의 성능을 보여줄 것이라고 믿게 만들었으며, Chad Birch가 제안한 것처럼 Bayesian을 추천 할 것입니다. 이것이 신경망을 탐험하기위한 장난감 문제 이외의 다른 것이라면 확실히 추천합니다.

차드, 지금까지 얻은 답변은 합리적이지만 업데이트에 응답하겠습니다.

프로젝트의 주요 측면은 NN 접근 방식이 스팸 탐지에 어떻게 작동하는지 테스트하는 것입니다.

글쎄, 당신은 문제가 있습니다 : 이와 같은 경험적 테스트는 부적합성을 입증 할 수 없습니다.

당신은 아마도 NN이 실제로하는 일과하지 않는 것에 대해 조금 배우는 것이 가장 좋습니다. 왜 이런 종류의 분류 문제에 대해 특히 좋은 아이디어가 아닌지 알 수 있습니다. 아마도 그들에 대해 생각하는 유용한 방법은 보편적 인 기능 근사기입니다. 그러나 이것이 분류 영역 (스팸 필터링 문제가 무엇인지)에 어떻게 맞는 지에 대한 몇 가지 아이디어를 얻으려면 다음과 같은 인트로 텍스트를 탐색합니다. 패턴 분류 도움이 될 수 있습니다.

당신이 그것을 실행하는 것을 보는 것이 죽었을 때, 네트워크 자체에 일반 NN 라이브러리를 사용하십시오. 대부분의 문제는 어쨌든 입력 데이터를 나타내는 방법이 될 것입니다. '최고의'구조는 불쾌하지 않으며 아마도 그다지 중요하지 않을 것입니다. 입력은 코퍼스 자체에 여러 가지 (정규화 된) 측정 (특징)이어야합니다. 일부는 분명합니다 ( '스팸'단어 등의 수는 훨씬 적습니다. 이것은 당신이 실제로 놀 수있는 부분이지만, 문제의 특성으로 인해 베이지안 필터 (여기서는 고유 한 문제가 있음)와 비교할 때 제대로 작동하지 않아야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top