หากคุณไม่มีปัญหาในการใช้ห้องสมุดภายนอกฉันขอแนะนำให้ใช้scikit-learnเนื่องจากอาจทำได้ดีกว่าและเร็วกว่าทุกสิ่งที่คุณสามารถเขียนโค้ดด้วยตัวเอง ฉันจะทำสิ่งนี้:
สร้างคลังข้อมูลของคุณ ฉันได้ทำความเข้าใจรายการเพื่อความชัดเจน แต่ขึ้นอยู่กับวิธีการจัดเก็บข้อมูลของคุณคุณอาจต้องทำสิ่งต่างๆ:
def corpus_builder(apple_inc_tweets, apple_fruit_tweets):
corpus = [tweet for tweet in apple_inc_tweets] + [tweet for tweet in apple_fruit_tweets]
labels = [1 for x in xrange(len(apple_inc_tweets))] + [0 for x in xrange(len(apple_fruit_tweets))]
return (corpus, labels)
สิ่งสำคัญคือคุณมีสองรายการที่มีลักษณะดังนี้:
([['apple inc tweet i love ios and iphones'], ['apple iphones are great'], ['apple fruit tweet i love pie'], ['apple pie is great']], [1, 1, 0, 0])
[1, 1, 0, 0] แสดงถึงป้ายกำกับที่เป็นบวกและลบ
จากนั้นคุณสร้างไปป์ไลน์! Pipeline เป็นคลาสเรียนวิทย์ที่ทำให้ง่ายต่อการเชื่อมโยงขั้นตอนการประมวลผลข้อความเข้าด้วยกันดังนั้นคุณจะต้องเรียกวัตถุเพียงชิ้นเดียวเมื่อฝึกอบรม / ทำนาย:
def train(corpus, labels)
pipe = Pipeline([('vect', CountVectorizer(ngram_range=(1, 3), stop_words='english')),
('tfidf', TfidfTransformer(norm='l2')),
('clf', LinearSVC()),])
pipe.fit_transform(corpus, labels)
return pipe
ภายในไปป์ไลน์มีขั้นตอนการประมวลผลสามขั้นตอน CountVectorizer เป็นโทเค็นของคำแยกพวกเขานับและแปลงข้อมูลเป็นเมทริกซ์กระจัดกระจาย TfidfTransformer เป็นทางเลือกและคุณอาจต้องการลบออกโดยขึ้นอยู่กับคะแนนความแม่นยำ (การทดสอบการตรวจสอบความถูกต้องข้ามและการค้นหาตารางสำหรับพารามิเตอร์ที่ดีที่สุดมีส่วนเกี่ยวข้องเล็กน้อยดังนั้นฉันจะไม่เข้าไปที่นี่) LinearSVC เป็นอัลกอริทึมการจำแนกข้อความมาตรฐาน
สุดท้ายคุณทำนายหมวดหมู่ของทวีต:
def predict(pipe, tweet):
prediction = pipe.predict([tweet])
return prediction
อีกครั้งทวีตต้องอยู่ในรายการดังนั้นฉันคิดว่ามันกำลังเข้าสู่ฟังก์ชันเป็นสตริง
ใส่ข้อมูลทั้งหมดลงในชั้นเรียนหรืออะไรก็ได้เท่านี้ก็เสร็จเรียบร้อย อย่างน้อยด้วยตัวอย่างพื้นฐานนี้
ฉันไม่ได้ทดสอบโค้ดนี้ดังนั้นจึงอาจใช้ไม่ได้หากคุณแค่คัดลอก - วาง แต่ถ้าคุณต้องการใช้ scikit-learn ควรให้แนวคิดว่าจะเริ่มจากตรงไหน
แก้ไข: พยายามอธิบายขั้นตอนโดยละเอียดเพิ่มเติม