LLM

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

طبقه بندی متن بدون داده آموزشی

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

آواتار
رها کردن
1 پاسخ
1
بهترین پاسخ

بله، اگر داده‌ای برای یادگیری (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** بهترین گزینه است. 







آواتار
رها کردن