• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 자유 게시판 (Python, SQL 등) 악플 검사 AI 만들기 2 마지막 모델 구현 답안 없을까요 ㅜㅜ

악플 검사 AI 만들기 2 마지막 모델 구현 답안 없을까요 ㅜㅜ

5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 글쓴이
  • #53706

    코앱
    참가자
    계속 오류나서 좀 보면서 하고 싶습니당... ㅜㅜ
    #53752

    codingapple
    키 마스터
    만들어놓은건 없습니다
    #53863

    코앱
    참가자
    넹 ㅠㅠ 열심히해볼게요..!
    #139313

    오형선
    참가자
    부족하지만 제가한거 올립니다
    
    
    import tensorflow as tf
    import numpy as np
    from sklearn.model_selection import train_test_split
    from tensorflow.keras.preprocessing.text import Tokenizer
    from tensorflow.keras.preprocessing.sequence import pad_sequences
    raw['review'] = raw['review'].str.replace('[^ㄱ-ㅎㅏ-ㅣ가-힣0-9 ]', '', regex=True)
    raw.drop_duplicates(subset=['review'], inplace=True)
    unique_review = raw['review'].tolist()
    unique_review = ''.join(unique_review)
    tokenizer = Tokenizer(char_level=True, oov_token='<OOV>')
    unique_review = raw['review'].tolist()
    tokenizer.fit_on_texts(unique_review)
    train_seq = tokenizer.texts_to_sequences(unique_review)
    Y = raw['label'].tolist()
    raw['length'] = raw['review'].str.len()
    X = pad_sequences(train_seq, maxlen=100, padding='pre')
    trainX, valX, trainY, valY = train_test_split(X, Y, test_size=0.2, random_state=42)
    trainY = np.array(trainY, dtype=np.float32)
    valY = np.array(valY, dtype=np.float32)
    model = tf.keras.models.Sequential([
        tf.keras.layers.Input(shape=(100,)),
        tf.keras.layers.Embedding(len(tokenizer.word_index) + 1, 16),
        tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(128)),
        tf.keras.layers.Dropout(0.2),
        tf.keras.layers.Dense(1, activation='sigmoid')
    ])
    model.compile(
        loss='binary_crossentropy',
        optimizer='adam',
        metrics=['accuracy']
    )
    model.fit(
        trainX, trainY,
        epochs=5,
        batch_size=64,
        validation_data=(valX, valY)
    )
    model.summary()
    
    #142998

    박상빈
    참가자
    오형선님 답변에 조금 추가해서 prediction까지 만들었습니다.
    
    ------- model.py -------
    import pandas as pd
    import numpy as np
    import tensorflow as tf
    raw = pd.read_table('censor/reviews.txt', names=['rating', 'review'])
    raw['label'] = np.where(raw['rating'] > 3, 1, 0)
    raw['review'] = raw['review'].str.replace('[^ㄱ-ㅎㅏ-ㅣ가-힣0-9 ]', '', regex=True)
    raw.drop_duplicates(subset=['review'], inplace=True)
    reviews = raw['review'].tolist()
    # unique_letters = ''.join(unique_letters)
    # unique_letters = sorted(list(set(unique_letters)))
    from tensorflow.keras.preprocessing.text import Tokenizer
    tokenizer = Tokenizer(char_level=True, oov_token='<OOV>')
    tokenizer.fit_on_texts(reviews)
    import json
    print("Tokenizer has been fit. Saving it now...")
    tokenizer_json = tokenizer.to_json()
    with open('censor/tokenizer.json', 'w', encoding='utf-8') as f:
    f.write(json.dumps(tokenizer_json, ensure_ascii=False))
    print("SUCCESS: 'censor/tokenizer.json' saved.")
    print("You can stop this script now. You DO NOT need to re-run model.fit().")
    exit()
    train_seq = tokenizer.texts_to_sequences(reviews)
    Y = raw['label'].tolist()
    raw['length'] = raw['review'].str.len()
    # print(raw.describe())
    # print(raw['length'][raw['length']<140].count())
    from tensorflow.keras.preprocessing.sequence import pad_sequences
    X = pad_sequences(train_seq, maxlen=100)
    from sklearn.model_selection import train_test_split
    trainX, valX, trainY, valY = train_test_split(X, Y, test_size=0.2, random_state=42)
    trainY = np.array(trainY, dtype=np.float32)
    valY = np.array(valY, dtype=np.float32)
    model = tf.keras.models.Sequential([
    tf.keras.layers.Input(shape=(100,)),
    tf.keras.layers.Embedding(len(tokenizer.word_index) + 1, 16),
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(128)),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(1, activation='sigmoid')
    ])
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    model.fit(trainX, trainY, batch_size=64, validation_data=(valX, valY), epochs=100, verbose=2)
    model.save('censor/model.keras')
    model.summary()
    
    ------- predict.py -------
    
    from tensorflow.keras.preprocessing.sequence import pad_sequences
    from tensorflow.keras.preprocessing.text import tokenizer_from_json
    from tensorflow.keras.preprocessing.text import Tokenizer
    import json
    import re
    import tensorflow as tf
    with open('censor/tokenizer.json', 'r', encoding='utf-8') as f:
    data = json.load(f)
    tokenizer = tokenizer_from_json(data)
    model = tf.keras.models.load_model('censor/model.keras')
    new_reviews = [
    "이 영화 정말 최고였어요! 배우들 연기 대박!",
    "시간 아깝네요. 비추합니다.",
    "그냥 그저 그랬음",
    "LSTM도 외국 아저씨들이 만든 기술입니다.",
    "서양애들이 만든 LSTM을 가져다 써서 뭔가 만들어내는 정도에 그치지 말고",
    "여러분도 LSTM 같은거 만들어낼 수 있습니다.",
    "여러분들은 심심하시면 나중에 LSTM 보다 나은 레이어같은걸 직접 만드는 인재가 되어보십시오.",
    "하지만 한국은 전통적으로 기초과학 그런거 연구하는 나라가 아닙니다.",
    "외국 기술 그대로 써서 빨리 성과내고 논문 찍어내서 어디 기업 들어가는게 언제나 랩실의 목표입니다.",
    ]
    cleaned_reviews = [re.sub(r'[^ㄱ-ㅎㅏ-ㅣ가-힣0-9 ]', '', review) for review in new_reviews]
    print(f"Cleaned: {cleaned_reviews}")
    new_seq = tokenizer.texts_to_sequences(cleaned_reviews)
    print(f"Tokenized: {new_seq}")
    new_X = pad_sequences(new_seq, maxlen=100)
    print(f"Padded shape: {new_X.shape}")
    predictions = model.predict(new_X)
    print(f"Raw predictions (probabilities): {predictions}")
    predicted_labels = (predictions > 0.5).astype(int)
    print(f"Predicted labels (1=Positive, 0=Negative): {predicted_labels.flatten()}")
    for review, label in zip(new_reviews, predicted_labels.flatten()):
    sentiment = "선플" if label == 1 else "악플"
    print(f"{review} -> {sentiment}")
    
    돌리면 이렇게 나옵니다
    
    Cleaned: ['이 영화 정말 최고였어요 배우들 연기 대박', '시간 아깝네요 비추합니다', '그냥 그저 그랬음', '도 외국 아저씨들이 만든 기술입니다', '서양애들이 만든 을 가져다 써서 뭔가 만들어내는 정도에 그치지 말고', '여러분도  같은거 만들어낼 수 있습니다', '여러분들은 심심하시면 나중에  보다 나은 레이어같은걸 직접 만드는 인재가 되어보십시오', '하지만 한국은 전통적으로 기초과학 그런거 연구하는 나라가 아닙니다', '외국 기술 그대로 써서 빨리 성과내고 논문 찍어내서 어디 기업 들어가는게 언제나 랩실의 목표입니다']
    Tokenized: [[4, 2, 419, 184, 2, 62, 133, 2, 261, 5, 289, 9, 3, 2, 40, 163, 56, 2, 225, 22, 2, 67, 224], [45, 140, 2, 7, 588, 16, 3, 2, 64, 162, 65, 11, 6], [34, 106, 2, 34, 84, 2, 34, 482, 72], [14, 2, 425, 284, 2, 7, 84, 548, 56, 4, 2, 26, 402, 2, 22, 587, 53, 11, 6], [13, 196, 285, 56, 4, 2, 26, 402, 2, 52, 2, 12, 127, 6, 2, 175, 13, 2, 509, 12, 2, 26, 56, 9, 115, 8, 2, 62, 14, 17, 2, 34, 135, 15, 2, 133, 5], [69, 109, 91, 14, 2, 2, 51, 24, 41, 2, 26, 56, 9, 823, 2, 86, 2, 30, 44, 11, 6], [69, 109, 91, 56, 24, 2, 193, 193, 10, 45, 59, 2, 27, 164, 17, 2, 2, 29, 6, 2, 27, 24, 2, 236, 4, 9, 51, 24, 147, 2, 178, 278, 2, 26, 100, 8, 2, 57, 60, 12, 2, 74, 9, 29, 687, 45, 95], [10, 15, 26, 2, 37, 284, 24, 2, 75, 230, 169, 49, 25, 2, 22, 416, 153, 630, 2, 34, 188, 41, 2, 225, 20, 10, 8, 2, 27, 39, 12, 2, 7, 693, 11, 6], [425, 284, 2, 22, 587, 2, 34, 67, 25, 2, 175, 13, 2, 181, 33, 2, 158, 153, 115, 5, 2, 992, 79, 2, 429, 9, 115, 13, 2, 9, 202, 2, 22, 400, 2, 56, 9, 12, 8, 32, 2, 550, 50, 27, 2, 941, 123, 148, 2, 381, 532, 53, 11, 6]]
    Padded shape: (9, 100)
    1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step
    Raw predictions (probabilities): [[9.9977332e-01]
     [5.6013891e-07]
     [1.5455307e-04]
     [8.9372462e-01]
     [2.0476698e-04]
     [9.9206418e-01]
     [1.7318060e-05]
     [3.3871007e-07]
     [9.9975896e-01]]
    Predicted labels (1=Positive, 0=Negative): [1 0 0 1 0 1 0 0 1]
    이 영화 정말 최고였어요! 배우들 연기 대박! -> 선플
    시간 아깝네요. 비추합니다. -> 악플
    그냥 그저 그랬음 -> 악플
    LSTM도 외국 아저씨들이 만든 기술입니다. -> 선플
    서양애들이 만든 LSTM을 가져다 써서 뭔가 만들어내는 정도에 그치지 말고 -> 악플
    여러분도 LSTM 같은거 만들어낼 수 있습니다. -> 선플
    여러분들은 심심하시면 나중에 LSTM 보다 나은 레이어같은걸 직접 만드는 인재가 되어보십시오. -> 악플
    하지만 한국은 전통적으로 기초과학 그런거 연구하는 나라가 아닙니다. -> 악플
    외국 기술 그대로 써서 빨리 성과내고 논문 찍어내서 어디 기업 들어가는게 언제나 랩실의 목표입니다. -> 선플
    
    
    
    		
    	
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠