Skip to Content

Welcome!

This community is for professionals and enthusiasts of our products and services.
Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

شما نیاز به ثبت‌نام دارید تا بتوانید با جامعه تعامل داشته باشید.
این سوال علامت‌گذاری شده است
1 پاسخ
94 نماها

یه سری متن دارم میخوام  طبقه بندی کنم. داده آموزشی ندارم. میشه این کار را کرد؟

آواتار
رها کردن
مولف پاسخ برتر

بله، اگر داده‌ای برای یادگیری (training) ندارید، چند روش برای **دسته‌بندی (classification) بدون یادگیری** وجود دارد: 


### 1. **استفاده از مدل‌های از پیش آموزش‌دیده‌شده (Pre-trained Models)** 

می‌توانید از مدل‌های زبان بزرگ (LLM) مثل **GPT** یا **BERT** که از قبل روی مقادیر زیادی داده آموزش دیده‌اند، استفاده کنید. این مدل‌ها بدون نیاز به یادگیری جدید، می‌توانند متن را دسته‌بندی کنند. 


📌 **مثال:** استفاده از OpenAI GPT برای تشخیص نوع متن: 

```python

import openai


response = openai.ChatCompletion.create(

    model="gpt-4",

    messages=[

        {"role": "system", "content": "You are a text classifier."},

        {"role": "user", "content": "این یک متن سیاسی است یا ورزشی؟ 'تیم ملی ایران در جام جهانی بازی می‌کند'"}

    ]

)

print(response["choices"][0]["message"]["content"])

```


---


### 2. **دسته‌بندی مبتنی بر کلمات کلیدی (Rule-Based Classification)** 

اگر دسته‌های مشخصی دارید، می‌توانید از **کلمات کلیدی** برای دسته‌بندی استفاده کنید. 


📌 **مثال:** دسته‌بندی یک متن به دو گروه "ورزشی" و "سیاسی" 

```python

def classify_text(text):

    sports_keywords = ["فوتبال", "ورزش", "تیم", "مسابقه", "لیگ"]

    politics_keywords = ["دولت", "انتخابات", "مجلس", "سیاست", "رییس‌جمهور"]


    if any(word in text for word in sports_keywords):

        return "ورزشی"

    elif any(word in text for word in politics_keywords):

        return "سیاسی"

    else:

        return "نامشخص"


text = "تیم ملی ایران در جام جهانی بازی می‌کند"

print(classify_text(text))  # خروجی: ورزشی

```


---


### 3. **استفاده از الگوریتم‌های بدون نیاز به یادگیری (Unsupervised Learning)** 

اگر چندین متن دارید اما **برچسب ندارید**، می‌توانید از **روش‌های خوشه‌بندی (Clustering)** مانند **K-Means یا DBSCAN** استفاده کنید. 


📌 **مثال:** خوشه‌بندی متون با TF-IDF و K-Means 

```python

from sklearn.feature_extraction.text import TfidfVectorizer

from sklearn.cluster import KMeans


texts = [

    "تیم پرسپولیس قهرمان لیگ شد",

    "انتخابات ریاست‌جمهوری برگزار شد",

    "بازیکنان تیم ملی به اردو رفتند",

    "سیاست‌های جدید اقتصادی اعلام شد"

]


vectorizer = TfidfVectorizer()

X = vectorizer.fit_transform(texts)


kmeans = KMeans(n_clusters=2, random_state=42)

clusters = kmeans.fit_predict(X)


for text, cluster in zip(texts, clusters):

    print(f"{text} → دسته {cluster}")

```

💡 در اینجا مدل به‌طور خودکار متون را به ۲ دسته گروه‌بندی می‌کند، بدون نیاز به داده‌ی یادگیری.


---


### **جمع‌بندی** 

✔ **اگر مدل آماده مثل GPT در دسترس دارید:** از آن برای دسته‌بندی متن استفاده کنید. 

✔ **اگر دسته‌های ساده‌ای دارید:** روش کلمات کلیدی مناسب است. 

✔ **اگر چندین متن دارید ولی برچسب ندارید:** خوشه‌بندی (Clustering) گزینه‌ی خوبی است. 



استفاده از word embedding 

می‌توان از **Word Embedding** برای دسته‌بندی متن بدون یادگیری (بدون داده برچسب‌دار) استفاده کرد. در این روش، ابتدا کلمات یا جملات را به **بردارهای عددی** تبدیل کرده و سپس از **تحلیل فاصله‌ی برداری (Vector Similarity)** یا **خوشه‌بندی (Clustering)** برای دسته‌بندی استفاده می‌کنیم. 


---


## **روش‌های دسته‌بندی با Word Embedding بدون یادگیری:**


### **1. استفاده از مدل‌های آماده‌ی Word Embedding (مثل Word2Vec, FastText, GloVe)**

اگر داده‌ی یادگیری ندارید، می‌توانید از مدل‌های از پیش آموزش‌دیده‌شده مانند **Word2Vec** یا **FastText** که روی داده‌های بزرگ (مثل Wikipedia) آموزش دیده‌اند، استفاده کنید.


📌 **مثال: استفاده از Word2Vec (مدل Google)** 

```python

import gensim.downloader as api


model = api.load("word2vec-google-news-300")  # دانلود مدل آماده


word = "football"

similar_words = model.most_similar(word, topn=5)


for word, similarity in similar_words:

    print(word, similarity)

```

🔹 در اینجا، کلمات مشابه با "football" (مثل soccer, match, player) نمایش داده می‌شوند. این می‌تواند برای دسته‌بندی کلمات به کار رود.


---


### **2. تبدیل جملات به بردار و محاسبه شباهت (Cosine Similarity)**

برای دسته‌بندی، می‌توان بردار یک متن را محاسبه کرده و با بردار دسته‌های مشخص مقایسه کرد.


📌 **مثال: دسته‌بندی یک متن بر اساس شباهت به بردارهای از پیش تعیین‌شده** 

```python

import numpy as np

from sklearn.metrics.pairwise import cosine_similarity

import gensim.downloader as api


model = api.load("glove-wiki-gigaword-50")  # مدل آماده GloVe


def get_sentence_vector(sentence):

    words = sentence.split()

    vectors = [model[word] for word in words if word in model]

    return np.mean(vectors, axis=0) if vectors else np.zeros(50)


categories = {

    "ورزشی": get_sentence_vector("تیم فوتبال ورزش مسابقه"),

    "سیاسی": get_sentence_vector("دولت انتخابات سیاست مجلس")

}


text = "تیم ملی ایران قهرمان شد"

text_vector = get_sentence_vector(text)


# محاسبه شباهت متنی

similarities = {category: cosine_similarity([text_vector], [vec])[0][0] for category, vec in categories.items()}

predicted_category = max(similarities, key=similarities.get)


print(f"دسته‌بندی متن: {predicted_category}")

```

✅ در اینجا، متن بر اساس **فاصله‌ی کسینوسی** با بردار دسته‌های مختلف مقایسه و دسته‌بندی می‌شود.


---


### **3. استفاده از Sentence Embedding برای متن‌های طولانی (مثل SBERT)**

اگر متن‌ها بلندتر هستند، **Word2Vec یا GloVe کافی نیستند**. در این صورت می‌توان از **Sentence Transformers (SBERT)** استفاده کرد که جمله‌ها را به بردار تبدیل می‌کند.


📌 **مثال: دسته‌بندی متن با SBERT** 

```python

from sentence_transformers import SentenceTransformer

from sklearn.metrics.pairwise import cosine_similarity


model = SentenceTransformer("all-MiniLM-L6-v2")  # مدل آماده SBERT


categories = {

    "ورزشی": model.encode("اخبار ورزشی، مسابقات، تیم‌ها"),

    "سیاسی": model.encode("سیاست، دولت، انتخابات، احزاب")

}


text = "جام جهانی فوتبال امسال برگزار می‌شود"

text_vector = model.encode(text)


# محاسبه شباهت

similarities = {category: cosine_similarity([text_vector], [vec])[0][0] for category, vec in categories.items()}

predicted_category = max(similarities, key=similarities.get)


print(f"دسته‌بندی متن: {predicted_category}")

```

💡 این روش برای متون طولانی دقت بالاتری دارد.


---


### **جمع‌بندی**

✔ **اگر دسته‌بندی کلمات ساده است:** از **Word2Vec یا FastText** استفاده کنید. 

✔ **اگر جملات کوتاه دارید:** از **Cosine Similarity + Word2Vec/GloVe** استفاده کنید. 

✔ **اگر متون طولانی هستند:** **SBERT** بهترین گزینه است. 







آواتار
رها کردن
logo-samandehi