소개
소셜 미디어, 금융 거래 및 전자 상거래 플랫폼과 같은 소스에서 전례없는 속도로 데이터가 생성되고 있습니다. 이 지속적인 정보 스트림을 처리하는 것은 어려운 일이지만 적시에 정확한 결정을 내릴 수있는 기회를 제공합니다. 금융 거래, 음성 보조원 및 건강 모니터링 시스템과 같은 실시간 시스템은 관련 및 최신 응답을 제공하기 위해 지속적인 데이터 처리에 의존합니다.
KNN, SVM 및 의사 결정 트리와 같은 배치 학습 알고리즘은 훈련 중에 전체 데이터 세트를 메모리에로드해야합니다. 거대한 데이터 세트로 작업 할 때는 점점 비현실적이어서 상당한 저장 및 메모리 문제가 발생합니다. 실시간 데이터로 작업 할 때도 비효율적입니다.
이 문제로 인해 엄청난 양의 데이터를 처리 할 때 효율적이고 정확한 알고리즘이 필요합니다. 수동적 공격 알고리즘은 이와 관련하여 스스로를 구분합니다. 배치 학습 알고리즘과 달리 예측을 위해 전체 데이터 세트에서 교육을받을 필요는 없습니다. 수동 공격 알고리즘은 즉시 데이터에서 학습하여 전체 데이터 세트를 메모리에 저장하거나 처리 할 필요가 없습니다.
학습 목표
- 많은 양의 데이터로 작업 할 때 온라인 학습과 그 중요성.
- 온라인 학습과 배치 학습 알고리즘의 차이.
- 수동 공격 알고리즘의 수학적 직관.
- 수동적 공격 알고리즘에서 다른 과다 투파 미터와 그 중요성.
- 수동 공격 알고리즘의 응용 및 사용 사례.
- 수동 공격 알고리즘의 한계와 과제.
- Python에서 수동적 공격적인 분류기를 구현하여 실시간 Reddit 데이터에서 증오심 표현을 감지합니다.
이 기사는 Data Science Blogathon 의 일부로 출판되었습니다 .
목차
- 온라인 학습이란 무엇입니까?
- 실시간 응용 프로그램에서 온라인 학습의 장점
- 수동 공격 알고리즘 소개
- 수동 공격 학습에서 힌지 상실의 역할
- 수동 공격 알고리즘의 수학적 공식
- 공격성 매개 변수 이해 (c)
- 수동 공격 알고리즘에서 정규화의 영향
- 수동 공격 알고리즘의 실시간 응용
- 한계와 도전
- 증오 음성 탐지 모델 구축
- 실시간 데이터 처리를위한 환경 설정
- 라벨링을 위해 사전 처리 된 버트 모델을 설정하십시오
- 자주 묻는 질문
온라인 학습이란 무엇입니까?
증분 학습이라고도하는 온라인 학습은 기계 학습 패러다임으로, 모델이 고정 데이터 세트에서 한 번에 교육을받지 않고 각각의 새로운 데이터 포인트로 점진적으로 업데이트되는 기계 학습 패러다임입니다. 이 접근법을 통해 모델은 새로운 데이터에 지속적으로 적응할 수 있으므로 시간이 지남에 따라 데이터가 진화하는 동적 환경에서 특히 유용합니다. 전통적인 배치 학습 방법과 달리 온라인 학습을 통해 새로운 정보가 도달 할 때 새로운 정보를 처리하여 실시간 업데이트 및 의사 결정을 가능하게합니다.
배치 대 온라인 학습 : 비교 개요
아래에서 배치 대 온라인 학습 비교를 살펴 보겠습니다.
배치 학습 :
- 교육 방법 : 배치 학습 알고리즘은 고정 데이터 세트에서 한 번에 훈련합니다. 일단 훈련되면이 모델은 새로운 데이터로 재교육 될 때까지 예측에 사용됩니다.
- 예 : 신경망,지지 벡터 머신 (SVM), K-Nearest Neighbors (KNN).
- 도전 과제 : 재교육은 전체 데이터 세트를 처음부터 처리해야하며, 이는 시간이 많이 걸리고 계산적으로 비쌀 수 있습니다. 재교육은 강력한 GPU에서도 몇 시간이 걸릴 수 있으므로 크고 증가하는 데이터 세트에서는 특히 어려운 일입니다.
온라인 학습 :
- 교육 방법 : 온라인 학습 알고리즘 각각의 새로운 데이터 포인트마다 모델을 점진적으로 업데이트합니다. 이 모델은 지속적으로 배우고 새로운 데이터에 실시간으로 적응합니다.
- 장점 : 이 접근법은 대규모 데이터 세트와 동적 데이터 스트림을 처리하는 데 더 효율적입니다. 이 모델은 최소한의 계산 리소스로 업데이트되며 처음부터 재교육 할 필요없이 새로운 데이터 포인트를 빠르게 처리 할 수 있습니다.
- 응용 프로그램 : 온라인 학습은 주식 시장 분석, 소셜 미디어 스트림 및 권장 시스템과 같은 실시간 의사 결정이 필요한 응용 프로그램에 유리합니다.
실시간 응용 프로그램에서 온라인 학습의 장점
- 지속적인 적응 : 온라인 학습 모델은 새로운 데이터에 적응하여 사기 탐지 시스템과 같이 시간이 지남에 따라 데이터 패턴이 진화하는 환경에 이상적입니다. 이를 통해 모델은 처음부터 재교육을받지 않고도 관련성 있고 효과적입니다.
- 효율성 : 온라인 학습 알고리즘은 전체 데이터 세트로 완전히 재교육을 필요로하지 않으므로 상당한 계산 시간과 리소스를 절약 할 수 있습니다. 이는 모바일 장치와 같은 계산 능력이 제한된 응용 프로그램에 특히 유용합니다.
- 자원 관리 : 데이터를 점진적으로 처리함으로써 온라인 학습 모델은 광범위한 저장 공간의 필요성을 줄입니다. 처리 된 후에는 오래된 데이터를 폐기 할 수 있으며, 이는 스토리지를 효율적으로 관리하고 시스템을 가볍게 유지하는 데 도움이됩니다.
- 실시간 의사 결정 : 온라인 학습을 통해 실시간 업데이트가 가능하며, 이는 권장 시스템 또는 실시간 주식 거래와 같은 최신 정보에 의존하는 응용 프로그램에 중요합니다.
수동 공격 알고리즘 소개
수동 공격 알고리즘은 Crammer et.al에 의해 처음 소개되었습니다. 2006 년“온라인 수동 공격 알고리즘”이라는 제목의 논문을 통해. 이 알고리즘은 온라인 학습 범주에 속하며 주로 분류 작업에 사용됩니다. 각 데이터 포인트에서 점차적으로 학습하고 매개 변수를 조정 한 다음 메모리에서 데이터를 폐기 할 수 있기 때문에 메모리 효율적입니다. 이로 인해 수동적 공격 알고리즘은 대규모 데이터 세트를 처리 할 때 특히 실시간 응용 프로그램에 유용합니다. 또한, 데이터 배포가 시간이 지남에 따라 변할 수있는 동적 환경에서 신속하게 적응할 수있는 능력은 시간이 지남에 따라 잘 수행 될 수 있습니다.
특이한 이름에 대해 궁금 할 것입니다. 그 이유가 있습니다. 알고리즘의 수동 부분은 현재 데이터 포인트가 올바르게 분류되면 모델이 변경되지 않은 상태로 유지되며 이전 데이터 포인트에서 얻은 지식을 보존한다는 것을 의미합니다. 반면에 공격적인 부분은 오 분류가 발생하면 오류를 수정하기 위해 모델이 가중치를 크게 조정할 것임을 나타냅니다.
PA 알고리즘의 작동 방식을 더 잘 이해하려면 이진 분류의 맥락에서 동작을 시각화합시다. 각각 두 개의 클래스 중 하나에 속하는 데이터 포인트 세트가 있다고 상상해보십시오. PA 알고리즘은 데이터 포인트를 해당 클래스로 나누는 분리 하이퍼 플레인을 찾는 것을 목표로합니다. 알고리즘은 하이퍼 플레인에 대한 초기 추측으로 시작합니다. 새로운 데이터 포인트가 잘못 분류되면 알고리즘은 새로운 데이터 포인트가 올바르게 분류되도록 현재 하이퍼 플레인을 적극적으로 업데이트합니다. 반면에 데이터 포인트가 올바르게 분류되면 하이퍼 플레인에 대한 업데이트가 필요하지 않습니다.
수동 공격 학습에서 힌지 상실의 역할
수동 공격 알고리즘은 힌지 손실을 손실 함수로 사용하며 알고리즘의 주요 빌딩 블록 중 하나입니다. 그렇기 때문에 알고리즘 뒤의 수학적 직관을 탐구하기 전에 힌지 손실의 작동을 이해하는 것이 중요합니다.
힌지 손실은 기계 학습, 특히 SVMS (Support Vector Machines)와 같은 교육 분류기에 널리 사용됩니다.
힌지 손실의 정의
그것은 다음과 같이 정의됩니다.
- W 는 모델의 중량 벡터입니다
- XI는 I-TH 데이터 포인트의 기능 벡터입니다.
- Yi 는 I -TH 데이터 포인트의 실제 레이블이며 이진 분류의 경우 1 또는 -1 일 수 있습니다.
목표가 두 데이터 클래스를 구별하는 이진 분류 문제의 경우를 봅시다. PA 알고리즘은 결정 경계와 데이터 포인트 사이의 마진을 최대화하는 것을 암시합니다. 마진은 데이터 포인트와 분리 라인/하이퍼 플레인 사이의 거리입니다. 이는 SVM 분류기의 작업과 매우 유사하며 힌지 손실을 손실 함수로 사용합니다. 더 큰 마진은 분류기가 예측에 더 자신감 있고 두 클래스를 정확하게 구별 할 수 있음을 나타냅니다. 따라서 목표는 가능한 한 적어도 1 이상의 마진을 달성하는 것입니다.
방정식 이해
이것을 더 세분화하고 방정식이 최대 마진을 얻는 데 어떻게 도움이되는지 살펴 보겠습니다.
- w · xi : 이것은 가중치 벡터 w 와 데이터 포인트 XI의 도트 곱입니다. 분류기의 예측에 대한 신뢰도를 나타냅니다.
- yi * (w · xi) : 이것은 서명 된 점수 또는 분류기의 마진이며, 여기서 부호는 True 레이블 Yi 에 의해 결정됩니다. 양수 값은 분류기가 올바른 레이블을 예측했지만 음수 값은 잘못된 레이블을 예측했음을 의미합니다.
- 1 - yi * (w · xi) : 원하는 여백 (1)과 실제 마진의 차이를 측정합니다.
- max (0, 1 - yi * (w · xi)) : 마진이 1 이상인 경우 손실은 0입니다. 그렇지 않으면 손실이 마진 부족으로 선형으로 증가합니다.
간단히 말해서, 힌지 손실은 잘못된 분류와 충분히 확신하지 못하는 올바른 분류를 처벌합니다. 데이터 포인트가 최소한 단위 마진으로 올바르게 분류되면 손실은 0입니다. 그렇지 않으면, 데이터 포인트가 마진 내에 있거나 잘못 분류되면, 손실은 마진과의 거리에 따라 선형으로 증가합니다.
수동 공격 알고리즘의 수학적 공식
수동 공격적 분류기의 수학적 기초는 들어오는 데이터 포인트의 분류 오류에 따라 업데이트되는 가중치 벡터 W를 유지하는 것을 중심으로합니다. 다음은 알고리즘에 대한 자세한 개요입니다.
주어진 데이터 세트 :
1 단계 : 가중치 벡터 w를 초기화하십시오
2 단계 : 각각의 새로운 데이터 포인트 (xi, yi)에 대해 xiis 기능 벡터와 Yi는 진정한 레이블, 예측 된 레이블 ŷ_iis는 다음과 같이 계산됩니다.
3 단계 : 힌지 손실을 계산합니다
- 예측 된 레이블 label_i가 정확하고 여백이 1 이상인 경우 손실은 0입니다.
- 그렇지 않으면 손실은 1과 마진의 차이입니다.
4 단계 : 다음 업데이트 규칙을 사용하여 가중치 벡터 W 조정
각 데이터 포인트 X_I에 대해 l (w;
업데이트 된 중량 벡터 w_t 1은 다음과 같이 제공됩니다.
L (w; (x_i, y_i)) = 0 인 경우 (충분한 마진으로 올바르게 분류 됨) :
그런 다음 중량 벡터는 변경되지 않았습니다.
이러한 방정식은 클래스간에 최대 마진 과면을 얻는 목적으로 제한된 최적화 문제를 해결 한 후에 나타납니다. 이것들은 원래의 연구 논문에서 가져 왔으며 이들의 파생은이 기사의 범위를 벗어납니다.
이 두 업데이트 방정식은 수동 공격 알고리즘의 핵심입니다. 이것들의 중요성은 더 간단한 용어로 이해 될 수 있습니다. 한편으로, 업데이트는 새로운 가중치 값 (W_T 1)이 현재 예제를 충분히 큰 마진으로 올바르게 분류하므로 진행됩니다. 반면에, 이전 라운드에서 배운 정보를 유지하려면 가능한 한 오래된 체중 (W_T)에 최대한 가깝게 유지해야합니다.
공격성 매개 변수 이해 (c)
공격성 매개 변수 C는 수동 공격 알고리즘에서 가장 중요한 하이퍼 파라미터입니다. 오 분류가 발생할 때 알고리즘이 가중치를 얼마나 적극적으로 업데이트하는지 관리합니다.
C 값이 높으면보다 공격적인 업데이트가 발생하여 학습이 빨라지고 과적으로 과적 할 위험이 높아집니다. 알고리즘은 데이터의 노이즈 및 변동에 너무 민감해질 수 있습니다. 반면에 C의 값이 낮 으면 공격적인 업데이트가 덜 발생하여 알고리즘이 노이즈 및 특이 치에 더 강력 해집니다. 그러나이 경우 새로운 정보에 적응하면 학습 과정을 늦추는 데 속도가 느립니다.
우리는 알고리즘이 각각의 새로운 인스턴스에서 점차적으로 학습하면서 노이즈 샘플에 과적 된 것을 피하기를 원합니다. 결과적으로, 우리는이 둘 사이의 균형을 맞추기 위해 노력해야하며, 모델 안정성을 유지하고 과결을 방지하면서 상당한 업데이트를 할 수 있습니다. 대부분의 경우 C의 최적 값은 특정 데이터 세트와 학습 속도와 견고성 사이의 원하는 트레이드 오프에 따라 다릅니다. 실제 시나리오에서, 교차 검증과 같은 기술은 최적의 C의 값에 도달하는 데 사용됩니다.
수동 공격 알고리즘에서 정규화의 영향
실제 데이터 세트에는 거의 항상 어느 정도의 노이즈 또는 불규칙성이 포함되어 있습니다. 잘못 표지 된 데이터 포인트로 인해 PA 알고리즘이 무게 벡터가 잘못된 방향으로 크게 변경 될 수 있습니다. 이 단일 오해 된 예제는 후속 라운드에서 몇 가지 예측 실수로 이어질 수 있으며 모델의 신뢰성에 영향을 미칩니다.
이를 해결하기 위해 데이터의 노이즈 및 특이 치에 대한 알고리즘을보다 강력하게 만드는 데 도움이되는 더 중요한 하이퍼 파라미터가 있습니다. 오 분류의 경우 더 부드러운 무게 업데이트를 사용하는 경향이 있습니다. 이것은 정규화와 유사합니다. 알고리즘은 PA-I 및 PA-II로 알려진 정규화 매개 변수를 기반으로 두 가지 변형으로 나뉩니다.
이는 주로 스텝 크기 변수 τ (정규화 된 손실이라고도 함)의 정의에서 다릅니다 . PA-I의 경우 손실은 공격성 매개 변수 C의 값으로 제한됩니다.
이것에 대한 공식은 다음과 같이 제공됩니다.
PA-II의 경우 단계 크기 또는 정규화 된 손실이 다음과 같이 작성 될 수 있습니다.
수동 공격적 분류기의 Sklearn 구현 에서이 정규화 매개 변수는 손실로 간주됩니다. 이것은 우리가 사용하려는 2 개의 PA-I 및 PA-II 중 어느 것을 기반으로 두 값 중 하나로 설정할 수 있습니다. PA-I 변형을 사용하려면 PA-II의 경우 손실이 "힌지"로 설정되어야합니다. 손실은 "제곱 힌지"로 설정됩니다.
차이는 다음과 같이 간단한 용어로 언급 할 수 있습니다.
- PA-I는 마진 제약을 완화하는보다 공격적인 변형입니다 (마진은 1보다 작음)이지만 예측이 잘못된 경우 손실을 선형 적으로 불평합니다. 이로 인해 학습이 빠르지 만 해당 지역보다 이상치가 더 큽니다.
- PA-II는 손실을 무차별 적으로 불이익시키는 더 강력한 변형으로, 시끄러운 데이터 및 특이 치에 더 탄력적입니다. 동시에, 이것은 데이터의 차이에 적응하는 데 더 보수적이어서 학습 속도가 느려집니다.
이 둘 사이의 선택은 데이터 세트의 특정 특성에 따라 다릅니다. 실제로 C를 선택하기 전에 C의 다양한 값을 가진 두 변형을 실험하는 것이 종종 권장됩니다.
수동 공격 알고리즘의 실시간 응용
온라인 학습 및 수동 공격적 알고리즘에는 실시간 데이터 처리에서 적응 시스템에 이르기까지 광범위한 응용 프로그램이 있습니다. 아래에서는 온라인 학습의 가장 영향력있는 응용 프로그램을 살펴 봅니다.
스팸 필터링
스팸 필터링은 스팸과 합법적 인 이메일을 구별하는 것이 목표 인 텍스트 분류의 필수 응용 프로그램입니다. PA 알고리즘의 점차 학습 능력은 새로운 스팸 트렌드를 기반으로 모델을 지속적으로 업데이트 할 수 있으므로 여기에서 특히 유리합니다.
감정 분석
감정 분석은 트윗 또는 제품 검토와 같은 텍스트로 표현 된 감정을 결정하는 것을 포함합니다. PA 알고리즘은 실시간으로 감정을 분석하고 새로운 속어, 표현 및 감정 추세에 적응하는 모델을 구축하는 데 사용될 수 있습니다. 이는 소셜 미디어 모니터링 및 고객 피드백 분석에 특히 유용하며, 적시 통찰력이 중요합니다.
언어 탐지를 싫어합니다
증오 음성 탐지는 PA 알고리즘이 매우 유용 할 수있는 또 다른 중요한 응용 프로그램입니다. 새로운 증오심 표현 사례에서 점차 학습 함으로써이 모델은 진화하는 언어 패턴과 맥락에 적응할 수 있습니다. 이는 Twitter, Facebook 및 Reddit과 같은 플랫폼에서 자동 중재 도구의 효과를 유지하기 위해서는 더 안전하고 포괄적 인 온라인 환경을 보장하는 데 필수적입니다.
사기 탐지
금융 기관 및 온라인 서비스는 사기 활동을 감지하기 위해 거래 및 사용자 행동을 지속적으로 모니터링합니다. PA 알고리즘의 각 새로운 거래마다 모델을 업데이트하는 능력은 사기 패턴이 등장 할 때 발전하는 사기 전술에 대한 강력한 방어를 제공하는 데 도움이됩니다.
주식 시장 분석
금융 시장의 주가는 매우 역동적이므로 모델이 새로운 정보에 신속하게 대응해야합니다. 온라인 학습 알고리즘은 새로운 시장 데이터에서 점차 학습하여 주식 가격을 예측하고 분석하는 데 사용될 수 있으며, 이로 인해 거래자와 투자자에게 도움이되는시기 적절하고 정확한 예측이 발생합니다.
추천 시스템
온라인 학습 알고리즘은 대규모 추천 시스템에서 사용하여 사용자 상호 작용을 기반으로 권장 사항을 동적으로 업데이트 할 수 있습니다. 이 실시간 적응성은 사용자 기본 설정이 변경됨에 따라 권장 사항이 관련성 있고 개인화되도록합니다.
이들은 온라인 학습 알고리즘이 진정으로 빛나는 영역 중 일부입니다. 그러나 그들의 기능은 이러한 영역에만 국한되지 않습니다. 이들은 또한 이상 탐지, 의료 진단 및 로봇 공학을 포함한 다양한 다른 분야에도 적용됩니다.
한계와 도전
온라인 학습 및 수동 공격적 알고리즘은 스트리밍 데이터를 다루고 빠르게 변경하도록 적응하는 데있어 장점을 제공하지만 단점도 있습니다. 주요 제한 사항 중 일부는 다음과 같습니다.
- 수동 공격 알고리즘은 데이터를 순차적으로 처리하여 시끄럽거나 잘못된 데이터 포인트에 더 취약합니다. 단일 특이 치는 모델의 학습에 불균형적인 영향을 미칠 수있어 부정확 한 예측 또는 편견이있는 모델이 생길 수 있습니다.
- 이 알고리즘은 한 번에 하나의 데이터 인스턴스 만 볼 수 있으며, 이는 전체 데이터 배포에 대한 이해와 다른 데이터 포인트 간의 관계를 제한합니다. 이로 인해 복잡한 패턴을 식별하고 정확한 예측을하기가 어렵습니다.
- PA 알고리즘은 데이터 스트림에서 실시간으로 학습하기 때문에 가장 최근의 데이터에 과잉으로 만들 수 있으며, 이전 데이터에서 관찰 된 패턴을 무시하거나 잊어 버릴 수 있습니다. 데이터 배포가 시간이 지남에 따라 변경 될 때 일반화 성능이 저하 될 수 있습니다.
- 공격성 매개 변수 C의 최적 가치를 선택하는 것은 어려울 수 있으며 종종 실험이 필요합니다. 높은 가치는 공격성을 증가시키는 반면, 가치가 낮 으면 학습이 느려질 수 있습니다.
- 이러한 알고리즘의 성능을 평가하는 것은 매우 복잡합니다. 데이터 분포가 시간이 지남에 따라 변경 될 수 있으므로 고정 테스트 세트에서 모델의 성능을 평가하는 것은 일치하지 않을 수 있습니다.
증오 음성 탐지 모델 구축
Twitter 및 Reddit과 같은 소셜 미디어 플랫폼은 매일 많은 양의 데이터를 생성하여 온라인 학습 알고리즘에 대한 이론적 이해를 테스트하는 데 이상적입니다.
이 섹션에서는 Reddit의 실시간 데이터를 사용하여 미워 음성 탐지 응용 프로그램을 처음부터 처음부터 구축하여 실용적인 사용 사례를 시연 할 것입니다. Reddit은 다양한 커뮤니티로 유명한 플랫폼입니다. 그러나 그것은 또한 아프고 모욕적 일 수있는 독성 의견의 도전에 직면합니다. Reddit API를 사용하여 이러한 독성 의견을 실시간으로 식별 할 수있는 시스템을 구축 할 것입니다.
이 경우, 모든 데이터가 한 번에 모델을 훈련시키는 것은 엄청난 양의 데이터로 인해 불가능합니다. 또한 데이터 배포와 패턴은 시간이 지남에 따라 계속 변경됩니다. 따라서, 우리는 메모리에 저장하지 않고 즉시 데이터를 배울 수있는 수동 공격 알고리즘의 도움이 필요합니다.
실시간 데이터 처리를위한 환경 설정
코드 구현을 시작하기 전에 먼저 시스템을 설정해야합니다. Reddit API를 사용하려면 먼저 계정이없는 경우 Reddit에서 먼저 계정을 작성해야합니다. 그런 다음 Reddit 응용 프로그램을 작성하고 인증을 위해 API 키 및 기타 자격 증명을 얻으십시오. 이러한 전제 조건 단계가 완료되면 증오심 표현 탐지 모델을 만들 준비가되었습니다.
코드의 워크 플로우는 다음과 같습니다.
- `praw '라이브러리를 사용하여 Reddit API에 연결하십시오.
- 실시간 데이터를 스트리밍하여 모델에 공급하십시오.
- 증오 음성 탐지 작업을 위해 미세 조정 된 버트 모델을 사용하여 데이터에 레이블을 지정하십시오.
- 수동적 공격적인 분류기를 사용하여 모델을 점차적으로 훈련하십시오.
- 보이지 않는 테스트 데이터 세트에서 모델을 테스트하고 성능을 측정하십시오.
필요한 라이브러리를 설치하십시오
첫 번째 단계는 필요한 라이브러리를 설치하는 것입니다.
PIP PROW SCIKIT-LEARN NLTK 변압기 토치 MATPLOTLIB SEABORN OPENDATASETS
Reddit과 함께 작업하려면 Reddit API 래퍼 인 'Praw'라이브러리가 필요합니다. 또한 텍스트 처리에는 'nltk', 기계 학습을위한 'scikit-learn',`matplotlib '및'seaborn ', 시각화를위한'seaborn ','transformers '및'torch '가 단어 임베드를 생성하고 미세 조정 된 Bert 모델 및'Opendatasets '를로드하여 Kaggle에서 데이터를로드해야합니다.
라이브러리를 가져 와서 Reddit API를 설정합니다
다음 단계에서는 필요한 모든 라이브러리를 가져오고`praw`를 사용하여 Reddit API에 연결을 설정합니다. 하위 레딧의 의견을 스트리밍하는 데 도움이 될 것입니다.
가져 오기 re PRAW 가져 오기 토치 수입 NLTK 가져 오기 Numpy를 NP로 가져옵니다 팬더를 PD로 가져옵니다 matplotlib.pyplot을 plt로 가져옵니다 SABORN을 SNS로 수입하십시오 OpenDatasets를 OD로 가져옵니다 nltk.corpus import stopwords에서 sklearn.feature_extraction.text import tfidfvectorizer에서 sklearn.linear_model import PassiveAggressiveClassifier skearn.metrics import accuracy_score, confusion_matrix, classification_report sklearn.model_selection import train_test_split Transformers에서 Automodel, AutomodelforecedEncececolassification, Autotokenizer에서 Transformers에서 BertforeceenceColassification, Berttokenizer, TextClassificationPipeline을 가져옵니다 # Reddit API 자격 증명 reddit_client_id = {your_client_id} reddit_client_secret = {your_client_secret} reddit_user_agent = {your_user_agent} # Reddit API 연결을 설정합니다 reddit = praw.reddit (client_id = reddit_client_id, client_secret = reddit_client_secret, user_agent = reddit_user_agent)
Reddit 인스턴스를 성공적으로 설정하려면 위의 자리 표시자를 자격 증명으로 바꾸면 좋습니다.
텍스트를 청소하고 전처리합니다
원시 텍스트 데이터를 다룰 때 기호, 해시 태그, 속어 단어 등이 포함 된 예제가있는 것이 일반적입니다. 이것들은 우리의 모델에 실질적으로 사용되지 않기 때문에 먼저 텍스트를 제거하기 위해 텍스트를 청소해야합니다.
# 스톱워드 다운로드 nltk.download ( 'stopwords') stop_words = set (stopwords.words ( 'English')) # 텍스트를 청소하고 스톱워드를 제거하십시오 def clean_text (텍스트) : text = re.sub (r'http \ s | www \ s | https \ s ',' ', text, flags = re.multiline) text = re.sub (r '\@\ w | \#', '', text) text = re.sub (r '\ w', '', text) text = re.sub (r '\ d', '', text) text = re.sub (r '\ s', '', text) text = text.strip () text = ''.join ([text.split ()의 단어 word.lower ()가 stop_words에 있지 않음])) 리턴 텍스트
위의 코드는 원치 않는 단어, 특수 문자 및 URL을 제거하여 주석을 전처리하는 도우미 기능을 정의합니다.
라벨링을 위해 사전 처리 된 버트 모델을 설정하십시오
우리가 Reddit의 원시 의견을 스트리밍 할 때, 우리는 의견이 유독한지 여부가 표지되지 않았기 때문에 아무런 알 수 없습니다. 감독 된 분류를 사용하려면 먼저 데이터가 표시되어야합니다. 우리는 들어오는 원시 주석에 라벨을 붙일 수있는 신뢰할 수 있고 정확한 시스템을 구현해야합니다. 이를 위해 증오심 표현 탐지를 위해 미세 조정 된 버트 모델을 사용합니다. 이 모델은 주석을 두 범주로 정확하게 분류합니다.
Model_Path = "Junglelee/Bert-Toxic-Comment-Comment-Comment-Comperification" Tokenizer = berttokenizer.from_pretrained (model_path) Model = BertforEdecenCeclassification.from_pretrained (Model_Path, Num_Labels = 2) 파이프 라인 = TextClassificationPipeline (Model = Model, Tokenizer = Tokenizer) # 헬퍼 함수는 텍스트에 레이블을 지정합니다 def predict_hate_speech (텍스트) : 예측 = 파이프 라인 (텍스트) [0] [ '레이블'] 예측 == '독성'Else 0 # 1 독성의 경우 1, 비 독성의 경우 0 # 1을 반환합니다.
여기서는 변압기 라이브러리를 사용하여 모델 파이프 라인을 설정합니다. 그런 다음 주어진 텍스트가 BERT 모델을 사용하여 독성 또는 무독성인지 여부를 예측하기 위해 도우미 기능을 정의합니다. 이제 모델에 공급할 예제를 표시했습니다.
Bert 임베딩을 사용하여 텍스트를 벡터로 변환합니다
분류기가 텍스트 입력으로 작동하지 않으므로 먼저 적절한 벡터 표현으로 변환해야합니다. 이를 위해, 우리는 사전 상환 된 Bert 임베딩을 사용하여 텍스트를 벡터로 변환 한 다음 훈련 모델로 공급할 수 있습니다.
# 준비를 위해 사전에 사전 취급 된 버트 모델 및 토큰 화기를로드하십시오. model_name = "bert-base-uncased" Tokenizer = Autotokenizer.from_pretrained (model_name) Bert_Model = Automodel.from_pretraind (model_name) bert_model.eval () # 헬퍼 기능은 BERT 임베딩을 얻습니다 def get_bert_embedding (텍스트) : inputs = tokenizer (text, return_tensors = 'pt', truncation = true, padding = true) Torch.no_grad ()로 : 출력 = bert_model (** 입력) return outputs.last_hidden_state [:, 0, :]. squeeze (). numpy ()
위의 코드는 텍스트 조각을 사용하여 Bert Tokenizer를 사용하여 토큰 화을 낸 다음 Bert 모델을 통해 전달하여 문장 임베딩을 추출합니다. 텍스트는 이제 벡터로 변환되었습니다.
실시간 레딧 데이터를 스트리밍하고 수동 공격적 분류기를 훈련시킵니다
이제 우리는 실시간으로 의견을 스트리밍하고 증오심 표현을 감지하기 위해 분류기를 훈련시킬 준비가되었습니다.
# 헬퍼 기능은 하위 구역에서 댓글을 스트리밍 할 수 있습니다 def stream_comments (subreddit_name, batch_size = 100) : Subreddit = Reddit.subreddit (subreddit_name) comment_stream = subreddit.stream.comments () 배치 = [] comment_stream의 댓글 : 노력하다: # 들어오는 텍스트를 청소하십시오 comment_text = clean_text (comment.body) # 사례가 발생한 버트 모델을 사용하여 주석에 레이블을 지정하십시오 label = predict_hate_speech (comment_text) # 현재 배치에 텍스트와 레이블을 추가합니다. batch.append ((comment_text, label)) len (batch)> = batch_size 인 경우 : 배치 수율 배치 = [] E로 예외를 제외하고 : print (f'error : {e} ') # 교육 라운드 수를 지정합니다 라운드 = 10 # 서브레드 디트를 지정하십시오 Subreddit_name = '피트니스' # 수동 공격적 분류기를 초기화합니다 clf = passiveAggressiveClassifier (c = 0.1, 손실 = '힌지', max_iter = 1, random_state = 37) # 댓글을 스트리밍하고 증분 교육을 수행합니다 num_rounds의 경우, Enumerate의 배치 (subreddit_name, batch_size = 100)) : # 원하는 수의 라운드에 대한 분류기 훈련 num_rounds == 라운드 인 경우 : 부서지다 # 텍스트와 레이블을 분리하십시오 Batch_texts = [배치 항목의 경우 [0]] batch_labels = [배치 항목의 경우 [1] [1]] # 텍스트 배치를 BERT 임베딩으로 변환합니다 x_train_batch = np.array ([get_bert_embedding (텍스트) batch_texts])) y_train_batch = np.array (batch_labels) # 현재 배치에서 모델을 훈련시킵니다 clf.partial_fit (x_train_batch, y_train_batch, 클래스 = [0, 1]) 인쇄 ({len (batch_texts)} 샘플의 배치에서 f'trained. ') 인쇄 ( '훈련 완료')
위의 코드에서는 먼저 주석을 스트리밍하고 10 개의 교육 라운드로 PA 분류기를 초기화하려는 하위 레드를 지정합니다. 그런 다음 실시간으로 주석을 스트리밍합니다. 각각의 새로운 주석에 대해 먼저 원치 않는 단어를 제거하는 각각의 주석이 정리됩니다. 그런 다음 사전 배치 된 버트 모델을 사용하여 레이블을 지정하고 현재 배치에 추가됩니다.
PA-I 버전의 알고리즘에 해당하는 C = 0.1 및 Loss = 'Hinge'를 취하는 수동 공격 분류기를 초기화합니다. 각 배치마다`partial_fit ()`메소드를 사용하여 분류기를 훈련시킵니다. 이를 통해 모델은 처리 전에 전체 배치를 메모리에 저장하지 않고 각 훈련 샘플에서 점차 학습 할 수 있습니다. 따라서 모델이 새로운 정보에 지속적으로 적응할 수 있도록하여 실시간 응용 프로그램에 이상적입니다.
모델 성능을 평가하십시오
Kaggle 독성 트윗 데이터 세트를 사용하여 모델을 평가합니다. 이 데이터 세트에는 독성 또는 무독성으로 분류 된 여러 트윗이 포함되어 있습니다.
# Kaggle에서 데이터를 다운로드하십시오 OD.Download ( "https://www.kaggle.com/datasets/ashwiniyer176/toxic-tweets-dataset"))). # 데이터를로드하십시오 data = pd.read_csv ( "독성-tweets-dataset/finalbanceddataset.csv", usecols = [1,2]) [[ "트윗", "독성"]]]] # 텍스트와 레이블을 분리하십시오 test_data = data.sample (n = 100) texts = test_data [ 'tweet']. 적용 (clean_text) labels = test_data [ '독성'] # 텍스트를 벡터로 변환합니다 x_test = np.array ([텍스트의 텍스트에 대한 get_bert_embedding (텍스트))))) y_test = np.array (레이블) # 예측을합니다 y_pred = clf.predict (x_test) # 모델의 성능을 평가합니다 정확도 = accuracy_score (y_test, y_pred) conf_matrix = confusion_matrix (y_test, y_pred) 인쇄 ( "분류 보고서 :") print (classification_report (y_test, y_pred)) # 혼란 매트릭스를 플로팅하십시오 plt.figure (figsize = (7, 5)) sns.heatmap (conf_matrix, annot = true, fmt = 'd', cmap = '블루스', cbar = false, xticklabels = [ "비 독성", "독성"], yticklabels = [ "무독성", "독성"]))) plt.xlabel ( '예측 된 라벨') plt.ylabel ( '진정한 레이블') plt.title ( 'confusion matrix') plt.show ()
먼저, 테스트 세트를로드하고 이전에 정의 된 'clean_text` 방법으로 정리 한 다음 텍스트는 Bert Embedding을 사용하여 벡터로 변환됩니다. 마지막으로, 우리는 테스트 세트를 예측하고 분류 보고서 및 혼동 매트릭스를 사용하여 다양한 메트릭에서 모델의 성능을 평가합니다.
결론
우리는 온라인 학습 알고리즘의 힘을 탐색하여 수동적 공격 알고리즘의 대규모 데이터 세트를 효율적으로 처리하고 완전한 재교육을 필요로하지 않고 실시간 데이터에 적응하는 능력에 중점을 두었습니다. 또한 힌지 손실의 역할, 공격성 초반 미터 (C) 및 정규화가 소음과 특이 치를 관리하는 데 어떻게 도움이되는지에 대해 논의했습니다. 또한 수동 공격적 분류기를 사용하여 Reddit에 대한 증오 음성 감지 모델을 구현하기 전에 실제 응용 프로그램 및 제한 사항을 검토했습니다. 읽어 주셔서 감사합니다. 다음 AI 튜토리얼을 기대합니다!
자주 묻는 질문
Q1. 수동적 공격 알고리즘의 기본 원리는 무엇입니까?A. 수동적 공격적 알고리즘의 기본 원칙은 잘못된 예측이 이루어질 때 가중치를 적극적으로 업데이트하고 올바른 예측이 이루어질 때 학습 가중치를 수동적으로 유지하는 것입니다.
Q2. PA 알고리즘에서 공격성 매개 변수 C는 어떤 역할을합니까?A. C가 높으면 알고리즘이 더욱 공격적이되어 새로운 데이터에 빠르게 적응하여 학습이 빠릅니다. C가 낮 으면 알고리즘이 덜 공격적이며 더 작은 업데이트를 만듭니다. 이로 인해 노이즈 샘플에 오버 피팅 가능성이 줄어들지 만 새로운 인스턴스에 적응하는 것이 느립니다.
Q3. 수동 공격적 분류기는 SVM (Support Vector Machine)과 어떻게 비슷합니까?A. 둘 다 결정 경계와 데이터 포인트 사이의 마진을 최대화하는 것을 목표로합니다. 둘 다 힌지 손실을 손실 기능으로 사용합니다.
Q4. 배치 학습 알고리즘보다 온라인 학습 알고리즘의 장점은 무엇입니까?A. 온라인 학습 알고리즘은 대규모 데이터 세트에서 작동하고 저장소 제한이 없으며 처음부터 재교육 할 필요없이 빠르게 변화하는 데이터에 쉽게 적응할 수 있습니다.
Q5. 수동적 공격적인 알고리즘이 유용 할 수있는 실제 시나리오는 무엇입니까?A. 수동 공격 알고리즘은 스팸 필터링, 감정 분석, 증오 음성 탐지, 실시간 주식 시장 분석 및 추천 시스템을 포함한 다양한 응용 분야에서 사용할 수 있습니다.
이 기사에 표시된 미디어는 분석 Vidhya가 소유하지 않으며 저자의 재량에 따라 사용됩니다.
위 내용은 온라인 학습 및 수동 공격 알고리즘 안내의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

대형 언어 모델 (LLM)은 인기가 높아졌으며, 도구 전달 기능은 단순한 텍스트 생성을 넘어 기능을 극적으로 확장했습니다. 이제 LLM은 동적 UI 생성 및 자율적 인 A와 같은 복잡한 자동화 작업을 처리 할 수 있습니다.

비디오 게임이 불안을 완화하거나 집중하거나 ADHD를 가진 어린이를 지원할 수 있습니까? 건강 관리 도전이 전 세계적으로 급증함에 따라, 특히 청소년들 사이에서 혁신가들은 비디오 게임 인 가능성이없는 도구로 전환하고 있습니다. 이제 세계 최대의 엔터테인먼트 인더스 중 하나입니다

UNCTAD의 사무 총장 인 Rebeca Grynspan은“역사는 기술 진보가 경제 성장을 유발하거나 공평한 소득 분배를 보장하거나 포용적인 인간 발전을 촉진하지는 않습니다.

쉽게 생성 AI를 협상 교사 및 스파링 파트너로 사용하십시오. 그것에 대해 이야기합시다. 혁신적인 AI 혁신에 대한이 분석은 AI의 최신 Forbes 열 범위의 일부입니다.

밴쿠버에서 개최 된 TED2025 컨퍼런스는 어제 4 월 11 일 36 번째 판을 마무리했습니다. Sam Altman, Eric Schmidt 및 Palmer Luckey를 포함한 60 개 이상의 국가에서 80 명의 스피커를 선보였습니다. 테드의 주제 인“인류를 다시 상상했다”는 재단사가 만들어졌다

Joseph Stiglitz는 2001 년에 유명한 경제학자이자 노벨 경제학상을 수상했습니다. Stiglitz는 AI가 기존의 불평등과 통합 된 권력을 몇몇 지배적 인 기업의 손에 악화시킬 수 있으며 궁극적으로 경제를 훼손 할 수 있다고 주장합니다.

그래프 데이터베이스 : 관계를 통한 데이터 관리 혁명 데이터가 확장되고 그 특성이 다양한 필드에서 발전함에 따라 그래프 데이터베이스는 상호 연결된 데이터를 관리하기위한 변환 솔루션으로 떠오르고 있습니다. 전통적인 것과는 달리

대형 언어 모델 (LLM) 라우팅 : 지능형 작업 분포를 통한 성능 최적화 LLM의 빠르게 진화하는 환경은 각각 독특한 강점과 약점을 가진 다양한 모델을 제시합니다. 일부는 Creative Content Gen에서 탁월합니다


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

드림위버 CS6
시각적 웹 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.
