یه سری متن دارم میخوام طبقه بندی کنم. داده آموزشی ندارم. میشه این کار را کرد؟
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.
طبقه بندی متن بدون داده آموزشی
این سوال علامتگذاری شده است
بله، اگر دادهای برای یادگیری (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** بهترین گزینه است.
از بحث لذت می برید؟ فقط مطالعه نکنید، بپیوندید!
همین امروز یک حساب کاربری ایجاد کنید تا از ویژگی های انحصاری لذت ببرید و با جامعه عالی ما تعامل داشته باشید!
ثبت نام